Document Type Definition xsl va xslt

Preview:

Citation preview

XSL Transformation 1

XSL và XSLTCBGD: Nguyễn Trần Thi

Văn

NGÔN NGỮ ĐÁNH DẤU MỞ RỘNG

CHƯƠNG 06

Nội dung Mục tiêu của bài học Không gian tên (namespaces) XSLT là gì? Cơ chế so khớp Lựa chọn nút Lựa chọn nội dung dữ liệu Sao chép nội dung của nút Đếm số nút Khai báo hằng (constants) Lựa chọn (rẽ nhánh)

2XSL Transformation

3

Mục tiêu Trình bày được ý nghĩa và cách khai

báo, sử dụng không gian tên trong tài liệu XML.

Tạo được tập tin XSL và sử dụng tập tin này để định dạng cho tài liệu XML.

Biết cách so khớp để lựa chọn được những nội dung cần định dạng.

Sử dụng được một số hàm có sẵn của XSL để thực hiện lựa chọn phần tử theo điều kiện.

XSL Transformation

Nội dung Mục tiêu của bài học Không gian tên (namespaces) XSLT là gì? Cơ chế so khớp Lựa chọn nút Lựa chọn nội dung dữ liệu Sao chép nội dung của nút Đếm số nút Khai báo hằng (constants) Lựa chọn (rẽ nhánh)

4XSL Transformation

XML cho phép chúng ta tự do định nghĩa các thẻ.

Các thẻ cùng tên có thể chứa dữ liệu khác nhau và mang ý nghĩa khác nhau.

Ví dụ:

5

Không gian tên (namespaces)

<author> <title>Mr.</title> <name>John Smith</name></author><!-- … --><book> <title>Gone With The Wind</title></book>

XSL Transformation

Để giải quyết vấn đề này, ta sử dụng không gian tên (namespaces).

Trong mỗi không gian tên, các thẻ phải có tên duy nhất (không được trùng tên nhau).

Hai thẻ trong 2 không gian tên khác nhau có thể trùng tên, nhưng khi ấy sẽ mang 2 ý nghĩa khác nhau.

6

Không gian tên (namespaces)

XSL Transformation

Khai báo không gian tên:Ta sử dụng cú pháp xmlns:prefix Ví dụ:

<?xml version="1.0"?> <BookOrder

xmlns:hs="http://www.northwindtraders.com/customer">

<hs:Customer > <hs:Title>Mr.</Title> <hs:FirstName>Graeme</FirstName> <hs:LastName>Malcolm</LastName> </hs:Customer> </BookOrder>

7

Không gian tên (namespaces)

XSL Transformation

Không gian tên mặc định: khi tài liệu chỉ có 1 không gian tên duy nhất, ta sử dụng cú pháp xmlns, không có prefix

Ví dụ:<?xml version="1.0"?> <BookOrder

xmlns="http://www.northwindtraders.com/customer">

<Customer > <Title>Mr.</Title> <FirstName>Graeme</FirstName> <LastName>Malcolm</LastName> </Customer> </BookOrder>

8

Không gian tên (namespaces)

XSL Transformation

Khi có nhiều không gian tên mặc định?<?xml version="1.0"?> <BookOrder > <OrderDate>2001-01-01</OrderDate> <Customer

xmlns="http://www.northwindtraders.com/customer">

<Title>Mr.</Title> <FirstName>Graeme</FirstName> <LastName>Malcolm</LastName> </Customer> <Book

xmlns="http://www.northwindtraders.com/book"> <Title>Treasure Island</Title> <Author>Robert Louis Stevenson</Author> </Book> </BookOrder>

9

Không gian tên (namespaces)

XSL Transformation

<?xml version="1.0"?> <BookOrder

xmlns="http://www.northwindtraders.com/order"

xmlns:cus="http://www.northwindtraders.com/customer"

xmlns:bok ="http://www.northwindtraders.com/book"

> <OrderDate>2001-01-01</OrderDate> <cus:Customer > <cus:Title>Mr.</cus:Title> <cus:FirstName>Graeme</cus:FirstName> <cus:LastName>Malcolm</cus:LastName> </cus:Customer> <bok:Book > <bok:Title>Treasure Island</bok:Title> <bok:Author>Robert Louis Stevenson</bok:Author> </bok:Book> </BookOrder

10

Không gian tên (namespaces).

XSL Transformation

Nội dung Mục tiêu của bài học Không gian tên (namespaces) XSLT là gì? Cơ chế so khớp Lựa chọn nút Lựa chọn nội dung dữ liệu Sao chép nội dung của nút Đếm số nút Khai báo hằng (constants) Lựa chọn (rẽ nhánh)

11XSL Transformation

XSLT được viết tắt từ cụm từ: eXtensible Style Language Transformation.

Là một trong 2 nhánh của ngôn ngữ XSL: XSLT XSL-FO (Formatting Objects)

Là ngôn ngữ con của XML, dùng để rút trích dữ liệu, chuyển dạng, định dạng tài liệu XML.

12

XSLT là gì?

XSL Transformation

XSLprocessor

XMLdocumen

t

XSL stylesheet

texthtmlxml…

13

Định dạng tài liệu bằng XSL

XSL Transformation

14

Các loại nút trong tài liệu

Nodes

Các loại nút mà XSLT có thể xử lý:

XSL Transformation

Tài liệu XSL phải được đặt trong cặp thẻ hay phần tử <xsl:stylesheet>

<xsl:stylesheet>...</xsl:stylesheet>

15

Tài liệu chuyển dạng XSL

XSL Transformation

Khai báo:

<xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”xmlns:fo="http://www.w3.org/1999/XSL/Format" >

16

Hiển thị tài liệu XML dùng XSL

<?xml-stylesheet type=”text/xsl” href=”vidu1.xsl”?>

XML file

XSL file

XSL Transformation

Thẻ <xsl:template> được sử dụng để định nghĩa 1 khuôn mẫu. Đây chính là cách để ta rút trích thông tin trong tài liệu XML gốc và trình bày nó trong tài liệu mới (XML hoặc HTML) <xsl:template

match=”/”>...</xsl:template>

17

Thẻ xsl:template (1)

XSL Transformation

Thuộc tính match dùng để chỉ định xem template này sẽ được so khớp với nút nào trong tài liệu XML ban đầu.

Ví dụ: template sau dùng để so khớp với nút gốc của tài liệu. <xsl:template

match=“/”>...</xsl:template>

18

Thẻ xsl:template (2.)

XSL Transformation

Thẻ <xsl:apply-templates> được dùng để thế chỗ cho nơi dữ liệu XML sẽ được đặt vào tài liệu mới.

<xsl:template match="/"><html><xsl:apply-templates/></html>

</xsl:template>

19

Thẻ xsl:apply-templates

XSL Transformation

Dùng để chỉ định template nào sẽ được thế vào vị trí của thẻ <xsl:apply-templates> tương ứng.

<xsl:template match="/"><html><xsl:apply-templates select="PLANETS"/></html>

</xsl:template><xsl:template match="PLANETS">

Planets found...</xsl:template>

20

Thuộc tính select

XSL Transformation

Thẻ <xsl:value-of> được sử dụng để lấy ra nội dung (giá trị) của một nút nào đó và đưa vào tài liệu đích

Ví dụ: để lấy ra nội dung của thẻ NAME (bên trong thẻ PLANET), ta tạo template như sau:<xsl:template match="PLANET">

<p><xsl:value-of select="NAME"/></p>

</xsl:template>

21

Thẻ xsl:value-of (1)

XSL Transformation

Nếu muốn lấy nội dung của nút đang xét, ta gán giá trị “.” cho thuộc tính select.

Ví dụ:<xsl:template match=“NAME">

<p><xsl:value-of select=“."/>

</p></xsl:template>

22

Thẻ xsl:value-of (2)

XSL Transformation

<xsl:template match="PLANET"><xsl:for-each select="NAME">

<p><xsl:value-of select="."/>

</p></xsl:for-each>

</xsl:template>

Thẻ xsl:for-each

<xsl:template match="PLANET"><xsl:for-each>

<p><xsl:value-of

select=“NAME"/></p>

</xsl:for-each></xsl:template>

23

Thẻ <xsl:for-each> dùng để duyệt qua nhiều nút trùng tên nhau.

Ví dụ:

XSL Transformation

Nội dung Mục tiêu của bài học XSLT là gì? Không gian tên (namespaces) Cơ chế so khớp Lựa chọn nút Lựa chọn nội dung dữ liệu Sao chép nội dung của nút Đếm số nút Khai báo hằng (constants) Lựa chọn (rẽ nhánh)

24XSL Transformation

So khớp nút gốc So khớp theo tên phần tử So khớp các nút con bằng / So khớp các nút con cháu // So khớp theo ID So khớp thuộc tính bằng @ So khớp nội dung ghi chú bằng

comment() So khớp chỉ thị xử lý bằng processing-

instruction() So khớp nội dung văn bản bằng text()

25

Cơ chế so khớp các nút

XSL Transformation

Khi ta dùng ký tự / cho thuộc tính match thì có nghĩa là trình duyệt bắt đầu phân tích từ nút gốc của cây tài liệu đầu vào

<xsl:template match="/"> <html> <xsl:apply-templates/> </html></xsl:template>

26

So khớp nút gốc

XSL Transformation

Ta có thể tìm hoặc so khớp 1 phần tử đơn giản bằng cách chỉ định tên của phần tử đó

Ví dụ: so khớp các thẻ có tên là PLANET

<xsl:template match="PLANET"><p><xsl:value-of select="NAME"/></p>

</xsl:template>

27

So khớp theo tên thẻ

XSL Transformation

Để so khớp và chọn thẻ NAME là con của thẻ PLANET, ta viết như sau:

<xsl:template match = “PLANET/NAME”><H3><xsl:value-of select = “.”/></H3>

</xsl:template>

28

So khớp các nút con

XSL Transformation

Biểu thức PLANETS//NAME sẽ chọn mọi thẻ NAME nằm bên trong thẻ PLANETS, không phân biệt mức độ lồng nhau

<xsl:template match=”PLANETS//NAME”><xsl:value-of select=”.”/>

</xsl:template>

29

So khớp các nút con cháu

XSL Transformation

Ta có thể dựa vào ID (định danh duy nhất) để so khớp và chọn ra một thẻ nào đó.

Ví dụ:<xsl:template match=”id(‘P12’)”>

<xsl:value-of select=”.”/></xsl:template>

30

So khớp bằng ID

XSL Transformation

Ngoài việc lấy ra nội dung dữ liệu text của một thẻ, ta có thể lấy ra giá trị thuộc tính của thẻ bằng cách sử dụng ký hiệu @

Ví dụ:<xsl:template match="RADIUS">

<xsl:value-of select="."/><xsl:value-of

select="@UNITS"/></xsl:template>

31

So khớp thuộc tính bằng @

XSL Transformation

Ta cũng có thể tìm và rút trích nội dung của các dòng chú thích trong tài liệu bằng cách sử dụng biểu thức comment()

Ví dụ:<xsl:template match=”comment()”>

<p><xsl:value-of select=”.”/></p>

</xsl:template>

32

So khớp nội dung ghi chú

XSL Transformation

Chỉ thị xử lý đặt ở đầu tài liệu cũng có thể được XSL rút trích bằng biểu thức processing-instruction()

Ví dụ:<xsl:template match="/processing-instruction('xml-stylesheet')"><p><i><xsl:value-of select="."/></i></p>

</xsl:template>

33

So khớp chỉ thị xử lý

XSL Transformation

Ta cũng có thể tìm và rút trích phần nội dung của tất cả các thẻ bằng cách sử dụng biểu thức text()

Ví dụ:<xsl:template match=”text()”><xsl:value-of select=”.”/>

</xsl:template>

34

So khớp nội dung văn bản

XSL Transformation

Ta dùng toán tử OR để chỉ điều kiện hợp

Ví dụ: để so khớp những thẻ mang tên NAME hoặc MASS, ta viết như sau:<xsl:template match=”NAME | MASS”>

<p><xsl:apply-templates/>

</p></xsl:template>

35

Sử dụng toán tử OR |

XSL Transformation

Ta dùng toán tử [ ] để kiểm tra một điều kiện nào đó

Ví dụ:<xsl:template match="PLANET[AB='5']">

<p><h1><xsl:apply-templates/></h1></p>

</xsl:template>

36

Kiểm tra điều kiện bằng [ ]

XSL Transformation

Nội dung Mục tiêu của bài học XSLT là gì? Không gian tên (namespaces) Cơ chế so khớp Lựa chọn nút Lựa chọn nội dung dữ liệu Sao chép nội dung của nút Đếm số nút Khai báo hằng (constants) Lựa chọn (rẽ nhánh)

37XSL Transformation

Ta có thể sử dụng các hàm và biểu thức do XSL cung cấp để thực hiện việc so khớp và lựa chọn phức tạp hơn

Các hàm này được chia thành 2 nhóm chính như sau:– Các hàm khoanh vùng vị trí tìm kiếm

trong cây– Các hàm liên quan đến biểu thức điều kiện

38

Sử dụng biểu thức để lựa chọn

XSL Transformation

Ta có các hàm sau: from-ancestors() from-ancestors-or-self() from-attributes() from-children() from-descendants() from-descendants-or-self() from-following() from-following-siblings() from-parent() from-preceding() from-preceding-siblings() from-self()

39

Khoanh vùng tìm kiếm

XSL Transformation

Ví dụ: tìm kiếm nút SYMBOL trên các nút cha của nút PERIODIC_TABLE

<xsl:template match=”SYMBOL”><xsl:value-of select=“from-ancestors(PERIODIC_TABLE)”/></xsl:template>

40

Khoanh vùng tìm kiếm

XSL Transformation

Có 4 loại biểu thức như sau:

41

Các dạng biểu thức xử lý

XSL Transformation

42

Tập hợp nút

Vị trí của nút hiện tại

Nút cuối cùng

Đếm số lượng nút

XSL Transformation

Các hàm có thể sử dụng đối với kiểu Boolean:

43

Kiểu đúng/sai

< &lt;

<= &lt;=

XSL Transformation

Ví dụ: in ra nút ở vị trí đầu tiên và nút ở vị trí cuối cùng

<xsl:template match=”ATOMIC_NUMBER[position()=1 or position()=last()]”>

<xsl:value-of select=”.”/></xsl:template>

44

Kiểu đúng/sai

XSL Transformation

Các phép toán và hàm xử lý trên kiểu số:

45

Kiểu số

XSL Transformation

Ví dụ: chọn nút ATOM có giá trị thẻ con AUTOMIC_NUMBER > 92:<xsl:template match=”/PERIODIC_TABLE”>

<HTML><xsl:apply-templates

select=”ATOM[ATOMIC_NUMBER>92]”/></HTML>

</xsl:template>

46

Kiểu số

XSL Transformation

Một số hàm xử lý trên kiểu chuỗi:

47

Kiểu chuỗi

XSL Transformation

Tóm tắt bài học

48XSL Transformation

HẾT PHẦN 1

49XSL Transformation

Recommended