3.2.1 Xpaht Node
Node trong tài liệu XSL được xây dựng dựa trên thẻ XML và các chỉ thị dạng tempalte. Tài liệu này có cấu trúc được mô tả dạng dữ liệu tree. Mỗ node là một tài liệu. Khi được triệu gọi cùng với file XML thì các phầm mềm có hỗ trợ XML bà Xpaht thực thiện kết hợp giữa file XSL và file XML tại thành dữ liệu được xử lý và đưa kết quả theo đầu ra Cấu trúc của xsl theo Xpath
Hình 3.1 Cấu trúc tài liệu XSL dựa trên Xpath
Bảng sau đây mô tả các loại node được sử dụng và hỗ trợ trong xsl
Bảng: các loại node trong Xpath
Node type Giá trị Tên mở rộng Mô tả
Root Chứa mọi node Không có
Lưu trữ toàn bộ các node có trong tài liệu XML. Tồn tại đầu tiên và bao các thẻ
element
Diễn tả một thực thể, một thuộc tính. Lưu trữ giá trị hoặc chuỗi giá trị
Tên của thực thể, thuộc tính,
namespace
Diễn tả thẻ của tài liệu XML
attribute Giá trị của một thuộc tính thuộc một thực thẻ Tên của một thuộc tính trong Diễn tả thuộc tính của một thực thể Root Node Processing Instruction Comments Document Elements
Element Comment Processing
Instruction
một thực thể
Text Giá trị của thuộc tính Không có tên Tập ký tự dữ liệu trong node text
Comment <!- Cấu trúc chú thích
--> Kkông có tên
Processing - intruction
Báo cho trình phân tích
thao tác tài liệu XML Loại chỉ dẫn
Lựa chọn bộ xử lý tài liệu XML phù hợp
namespace Chỉ ra URI Prefix của
namespace Chỉ ra không gian tên Khi xây dựng tài liệu XSL có sử dụng Xpaht chúng ta sử dụng các node có trong bảng trên và kết hợp chúng với các toán tử và hàm được hỗ trợ.
3.2.2 Xpaht Operator
Xpaht hỗ trợ các toán tử để thao tác với tài liệu XML. Sau đây là danh dách các toán tử thao tác. Toán tử này cho phép thao tác trên các loại dữ liệu dạng số và dạng ký tự.
Bảng: toán tử thao tác với kiểu dữ liệu
Toán tử Mô tả Ví dụ Giá trị trả lại
| Hợp của hai giá trị //Book |//cd Mọi giá trị có chứa book và cd
+ Cộng 23+ 12 35
- Trừ 12-10 2
* Nhân 3*3 6
div Chia 5 div 3 1
= Bằng 5=5 True/false dựa trên biểu thức
logic/ true
!= Không bằng 5=6 False
< Nhỏ hơn 7<8 True
<= Nhỏ hơn hoặc bằng 7<=8 True
> Lớn hơn 7>8 False
>= Lớn hơn hoặc bằng 7>=8 False
or Hoặc 7 or 8 True khi một trong 2 true
and Và 7and8 = true khi cả hai true ngược lại
false
mod Chia lấy dư 12/10 2
3.2.3 Xpath Funtion
Xpath đưa ra một tập các hàm thao tác với nhiều dữ liệu khác nhau. Trong đó có thể phân chia theo kiểu hàm logic, hàm thao tác với dữ liệu dạng text và dữ liệu dạng số
- Các hàm thao tác với các node: Cho phép thao tác tới các node tong tài liệu XML hiện tại
Bảng: Hàm thao tác node
Hàm Trả về
Count(Node-set) Số node trong tập các node Generate-id(Node-set) ID của các node
Last() Phần tử cuối cùng
Local-name(Node-set) Tên của node đầu tiên Name(Node-set) Tên của node đầu tiên Namespace-uri(Node-set) URI
Position() Vị trí của node
Các hàm thao tác dữ liệu dạng logic: tính toán và đưa ra kết quả logic
Bảng: Hàm thao tác kết quả là kiểu logic
Hàm Giá trị trả về
Expr and expr True khi cả hai là true
Expr or expr True khi một trong 2 là true
True() True
False() False
- Hàm thao tác dạng số: tính toán trên các con số
Bảng: Hàm thao tác với dữ liệu số
Toán tử Kiểu trả về
div Chia lấy nguyên hai giá trị số Mod Chia lấy dư hai giá trị số round Làm tròn hai giá trị số Sum() Tổng giá trị của các node
- Hàm thao tác dạng chỗi (text): Thao tác với chỗi dữ liệu
Bảng: Hàm thao tác với dữ liệu text
Hàm Giá trị trả về
Concat(string, string, ….) Nối các string lại với nhau thành một chuỗi Format-number(number, patten,
decimal format) Định dạng số theo mẫu và phần thập phân Normailze-space(string) Chuẩn hóa xâu. Thay thế các space gần liền
nhau về môt space Substring(string, offset,range) Lấy ra xâu con Substring-after(string, to-match) xâu con sau Substring-befor(string, to-match) xâu con trước Translate(string, charater to-match
characters-replate-with) Thay thế các xâu theo mẫu
Contain(string, sub) Kiểm tra tồn tại trong string hay không. True có tồn tại, ngược lại bằng false
Starts-with(string, sub) True nếu bắt đầu chuỗi sub String-length(string) Độ dài chuỗi
Ví dụ sau đây mô tả cách sử dụng hàm trong XSL sử dụng Xpath File data.Xml <?xml version="1.0" encoding="utf-8"?> <data> <number>1</number> <number>3</number> <number>4</number> <number>17</number> <number>8</number> <number>11</number> </data>
File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:for-each select="//number"> <xsl:value-of select="."/> <xsl:choose>
<xsl:when test="position()=last()"> <xsl:text> = </xsl:text> </xsl:when>
<xsl:otherwise> <xsl:text> + </xsl:text> </xsl:otherwise> </xsl:choose>
</xsl:for-each>
<xsl:value-of select="sum(//number)"/> </xsl:template>