Upload
cong-thanh-nguyen
View
1.139
Download
1
Embed Size (px)
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
< <
<= <=
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