Tải bản đầy đủ (.ppt) (29 trang)

Extension style language

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (142.1 KB, 29 trang )

Khoa Công ngh Thông Tin – ĐH Đà L tệ ạ
XSL
(Extension Style Language)

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Giới thiệu

XSL: là ngôn ngữ định kiểu mở rộng

Tương tự như CSS, XSL thực hiện nhiệm vụ biến
đổi dữ liệu của tài liệu XML để hiển thị phía người
dùng.

XSL phân ra làm hai nhánh:

Ngôn ngữ XML chuyển dịch gọi là XSLT.

Một nhánh khác của XSL đó là chuyên về định dạng hay
còn gọi là XSL FO (Formating Object). XSL FO cung cấp
các thuộc tính thiết lập font chữ, màu sắc, hình ảnh…

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Giới thiệu

Một tài liệu XSL phải được viết theo đúng cú pháp và hợp khuôn dạng với quy
tắc XML.

Ví dụ:


Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Tài liệu XSLT

Tài liệu XSLT, dữ liệu đầu vào là một tập các node.
Có 7 loại node mà XSL có thể nhận dạng chuyển
dịch:

Gốc tài liệu (Document Root)

Thuộc tính (Attribute).

Chú thích (Comment).

Phần tử (Element).

Không gian tên (Namespace).

Chỉ thị xử lý (Processing Instruction).

Văn bản (Text).

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Tạo tài liệu XSLT

Khi bộ chuyển dịch XSLT được gọi, nó sẽ thực hiện hai thao tác:

Đọc các chỉ thị so khớp trong tài liệu XSL


Truy tìm dữ liệu trong tài liệu XML đặt vào tương
ứng.

Quá trình truy tìm dữ liệu trong tài liệu XML sẽ được duyệt bắt đầu từ phần tử
gốc.

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Tạo tài liệu XSLT

Ví dụ:
<?xml version="1.0" encoding="UTF-8" ?>
<stylesheet version="1.0"
xmlns=" /><xsl:template match="/">
<HTML>
Thic is XML Root
</HTML>
</xsl:template>
</stylesheet>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Chỉ định mẫu so khớp

Thuộc tính so khớp Match: dùng để yêu cầu một thẻ lệnh thực hiện theo một
điều kiện dữ liệu thỏa mãn nào đó.

Các thuộc tính so khớp:

<xsl:apply-template>


<xsl:value-of>

<xsl:for-each>

<xsl:copy-of>

<xsl:sort>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp phần tử gốc (matching root)

Phần tử gốc của XML được so khớp bằng kí tự ‘/’.

Ví dụ:
<xsl:template match=“/”>
<HTML>
<xsl:apply-templates/>
</HTML>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp phần tử (matching element)

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

Ví dụ:

<xsl:template match=“CUTOMER”>
<HTML>
<xsl:apply-template/>
</HTML>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp các phần tử con

Ta dùng đường dẫn Xpath để biểu diễn đường dẫn
đến các node con trong tài liệu XML.

Ví dụ: Để so khớp và chọn phần tử FISRT_NAME và
LAST_NAME (trong vidu.xml):
<xsl:template
match=“DOCUMENT/CUSTOMER/NAME”>
<p> <xsl:value-of select=“FIRST_NAME”/></p>
<p> <xsl:value-of select=“LAST_NAME”/></p>
</xsl:template>
Dùng kí tự “.” trong select để yêu cầu thẻ <xsl:value-of>
chọn dữ liệu của node hiện hành.

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp thuộc tính

Ngoài việc lấy nội dung dữ liệu text của một phần tử, bạn có thể lấy thuộc tính
bằng kí hiệu so khớp @.


Ví dụ:
<xsl:template match=“DOCUMENT”>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=“CUSTOMER”>
<p> <xsl:apply-templates select=“NAME”> </p>
<p> <xsl:value-of select=“DATE”> </p>
<p> <xsl:value-of select=“@TYPE”/> </p>
</xsl:template>
<xsl:template match=“NAME”>
<xsl:value-of select=“FIRST_NAME”/>
<xsl:value-of select=“LAST_NAME”/>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp định danh ID của phần tử

Mỗi phần tử trong tài liệu XML có thể mang một thuộc tính là định danh duy
nhất. Ta có thể dựa vào định danh này để xác định và chọn phần tử

Ví dụ:
<xsl:template match=“id(‘elementID’)”>
<h3> <xsl:value-of select=“.”/> </h3>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp dòng chú thích


Ta cũng có thể tìm và trích nội dung dòng chú thích trong tài liệu XML bằng biểu thức so
khớp comment() trong XSL.

Ví dụ:
<library>
<book>
<title>Tai lieu XML </title>
<author> aaa </author>
</book>
<! Day la sach XML >
</library>
Ta có thể rút trích chú thích như sau:
<xsl:template match=“library”>
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match=“comment()”>
<COMMENT> <xsl:value-of select=“.”/> </COMMENT>
</xsl:template>
Kết quả:
Tai lieu XML
aaa
<COMMENT> Day la sach XML</COMMENT>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
So khớp chỉ thị xử lý

Ta cũng có thể tìm và trích nội dung chỉ thị xử lý trong tài liệu XML bằng biểu thức so

khớp /processing-instruction() trong XSL.

Ví dụ:
<?xml-stylesheet type="text/xsl" href="LayChiThi.xsl"?>
<library>
<book>
<title>Tai lieu XML </title>
<author> aaa </author>
</book>
</library>
Ta có thể rút trích chú thích như sau:
<xsl:template match=“library”>
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match=“/processing-instruction()”>
<COMMENT> <xsl:value-of select=“.”/> </COMMENT>
</xsl:template>
Kết quả:
type="text/xsl" href="LayChuThich.xsl"
Tai lieu XML
aaa

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Sử dụng toán tử OR

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


Ví dụ: Để so khớp phần tử mang tên CUSTOMER hoặc BUYER ta dùng
toán tử OR như sau:
<xsl:template match=“DOCUMENT”>
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match=“CUSTOMER|BUYER”>
<p>
<xsl:apply-templates/>
</p>
<xsl:/template>


Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Kiểm tra so khớp bằng biểu thức []

Có thể dùng biểu thức [] để kiểm tra xem một điều kiện nào đó là
true hay false.

Giá trị thuộc tính trong một chuỗi.

Giá trị một phần tử.

Kiểm tra một phần tử có chứa thuộc tính hay phần tử con khác
hay không.

Vị trí của một nút dữ liệu.


Ví dụ:

So khớp phần tử book chứa phần tử con title ta dùng:
<xsl:template match=“book[title]”>

So khớp phần tử book chứa thuộc tính state mang giá trị “yes”
hay không ta dùng:
<xsl:template match=“book[@state=‘yes’]”

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thuộc tính Select

Phần tử <xsl:value-of > dùng để lấy ra nội dung một mục dữ liệu
trong tài liệu XML.

Ta có thể dùng thuộc tính select để chọn chính xác một mục dữ liệu.

Thuộc tính select yêu cầu một đường dẫn Xpath đến phần tử hay
thuộc tính được chọn.

Ví dụ:
<xsl:template match=“book”>
<p>
<xsl:value-of select=“position()”/>
<xsl:value-of select=“title”/>
</p>
</xsl:template>
In ra vị trí xuất hiện của node trong tài liệu


Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu

Tạo các mẫu thuộc tính: giả sử ta muốn lấy dữ liệu từ các node <title> và
<author> gán thành thuộc tính ta làm như sau:
<xsl:template match=“book”>
<book title=“{title}” author=“{author}”/>
</xsl:template>
Khi đó chuyển dịch sau cùng của tài liệu:
<book title=“Tài liệu XML” author=“aaa”/>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu

Tạo một phần tử mới: ta có thể dùng phần tử <xsl:element> để tạo một phần tử mới
cho dữ liệu đầu vào.

Ví dụ:
<book TYPE=“novel”>
<title> aaa </title>
<author> bbb </author>
</book>
Ta có thể chuyển đổi thuộc tính NAME thành phần tử tương ứng trong tài liệu đích:
<xsl:template match=“book”>
<xsl:element name=“{@TYPE}”>
<title> <xsl:value-of select=“title”/> </title>
</xsl:element>
</xsl:template>

Kết quả:
<TYPE>
<title> aaa </title>
</TYPE>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu

Tạo thuộc tính mới: tương tự như phần tử <xsl:element>, thuộc tính
<xsl:attribute> dùng tạo thuộc tính mới cho phần tử nào đó.

Ví dụ:
<book NAME=“aaa”>
<author> TacGia </author>
</book>
<book NAME=“ccc”>
<author> Writer </author>
</book>
Ta muốn tạo thuộc tính mới và giá trị của nó lấy giá trị của thuộc tính NAME:
<xsl:attribute name=“{author}”>
<xsl:value-of select=“@NAME”/>
</xsl:attribute>
Kết quả:
<book TacGia=“aaa”> </book>
<book Writer=“ccc”> </book>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu


Tạo nội dung dữ liệu văn bản: ta có thể dùng thuộc tính
<xsl:text> để kết xuất dữ liệu văn bản thô.

Trường hợp bạn muốn xuất tài liệu có các kí tự đặc biệt <, >.
Thông thường trình diễn dịch sẽ đổi các kí tự đặc biệt thành
tham chiếu thực thể (&lg;, &gt;…), khi đó muốn kết xuất kí tự
đúng đắn trong tài liệu ta dùng thuộc tính disable-output-
escaping=“yes”.

Ví dụ:
<xsl:template match=“book”>
<xsl:text disable-output-escaping=“yes”>
Chao cac banden voi &lt; XML &gt;
</xsl:text>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu

Sao chép các nút dữ liệu: phần tử xsl:copy cho
phép ta sao chép dữ liệu của một nút trong tài liệu
đầu vào.

Ví dụ: ta tạo một tài liệu XML mới ở đầu ra bằng
cách sao chép toàn bộ các nút của tài liệu XML đầu
vào.
<xsl:template match=“* | text()”>
<xsl:copy>

<xsl:apply-template select=“* | text()”/>
</xsl:copy>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu XML

Sắp xếp các phần tử dữ liệu: ta dùng <xsl:sort> cho phép chọn một mục dữ liệu để sắp
xếp thông qua thuộc tính select.

Ví dụ:
<table border="1" width="44%" id="table1">
<tr>
<td align="center"><b>Title</b></td>
<td align="center"><b>Author</b></td>
</tr>
<xsl:apply-template>
<xsl:sort select=“title”/>
</xsl:apply-template>
</table>
<xsl:template match=“book”>
<tr>
<td><xsl:value-of select=“title“/></td>
<td><xsl:value-of select=“author”/></td>
</tr>
</xsl:template>

Khoa Công nghệ Thông
Tin – ĐH Đà Lạt

Thay đổi cấu trúc tài liệu

Để phát biểu một điều kiện lựa chọn ta sử dụng xsl:if. Để sử dụng xsl:if, ta đặt thuộc tính test của nó bằng một
biểu thức kiểm tra có giá trị true hoặc false.

Ví dụ:
<book>
<title> aaa </title>
<author> bbb </author>
<price> 10 </price>
</book>
<book>
<title> ccc </title>
<author> ddd </author>
<price> 15 </price>
</book>
Ta muốn lấy những phần tử sách mà giá >10 (price>10)
<xsl:for-each select=“book">
<xsl:if test="price&gt;10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="author"/></td>
</tr>
</xsl:if>
</xsl:for-each>


Khoa Công nghệ Thông
Tin – ĐH Đà Lạt
Thay đổi cấu trúc tài liệu


XSL còn cung cấp cho ta phần tử điều khiển lựa chọn <xsl:choose> tương tự như lệnh switch Case trong
lập trình C.

Ví dụ:
<xsl:for-each select=“book">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select=“author"/>
</td>
</xsl:when>
<xsl:when test="price &gt; 9">
<td bgcolor="#cccccc">
<xsl:value-of select=“author"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select=“author"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×