Professional Documents
Culture Documents
Bai03 XML
Bai03 XML
1 3 4 2. So trùng element
- Xem ví dụ trên, luật trên nói rằng: “Với mỗi element
addressbook, hiển thị nó như một khối, thiết lập font là
element-name [att1 = "val1"] [att2 = "val2"]
article display-type: block;
font-family:sans-serif;
font-size: 14pt;
2 background-image: stripes.jpg;
sans-serif với kích thước font 12pt, thiết lập màu nền trắng color: blue;
và màu chữ xanh”. Như vậy element addressbook được
INHERITED
nhận ra bằng cách so trùng với selector tương ứng.
- Cú pháp cho một selector như sau: một tên element (1) section display-type: block;
theo sau bởi vài thuộc tính (2) trong dấu ngoặc vuông (tùy margin-top: 5mm;
margin-bottom: 5mm;
chọn), bên trong chứa một thuộc tính (3) và trị của nó (4). font-size: 12pt;
Ví dụ: Selector sau sẽ so trùng với element có tên planet
và có attribute atmosphere: INHERITED
planet[atmosphere]
para display-type: block;
II. Các thuộc tính (Property) margin-top: 2mm;
margin-bottom: 2mm;
1
Aptech FPT
2. Đơn vị đo
- Đơn vị đo tuyệt đối (absolute): là các đơn vị đo lường chuẩn: milimeter (mm), centimeter (cm), inche (in) hoặc các đơn
vị đo dùng trong ngành in: point (pt) (1/72 inches) và pica (pc) (12pt).
- Đơn vị đo quan hệ (relative): tính với kích thước của element chứa nó, tính theo %, hoặc tính bằng em (1 em bằng kích
thước nguyên thủy, ví dụ font xuất hiện với font 12pt thì 1 em = 12pt).
- Ví dụ:
b { font-size: 200% }
Margin-right
This is some text
Margin-left
sách trị cách nhau bằng space. 1 trị: cho tất cả 4 margin, 2 trị: trên-dưới và trái- inside a block. This
phải, 3 trị: trên, trái-phải, dưới. Trị có thể có dấu âm, để nội dung tràn ra ngoài is some text inside
khối. a block.
- Ví dụ:
para { margin-left: 10em; margin-right: 10em; Margin-bottom
margin-top: 5% }
para { margin: 5% 10em 0 } Padding
b) Border (viền)
- Có ba tham số để định nghĩa thuộc tính border.
• width: độ dày mỏng của viền, bằng đơn vị đo tuyệt đối hay tương đối, hoặc một trong ba trị: thin (mỏng),
medium (trung, mặc định), thick (dày).
• style: kiểu viền, có 8 trị: solid (liền), dashed (đứt), dotted (chấm liên tục), groove (khắc chìm), ridge
(răng cưa), double (đường đôi), inset (trong dày ngoài mỏng), outset (trong mỏng ngoài dày).
• color: màu viền.
- Ví dụ:
border: thin solid green;
border: red groove thick;
border: inset blue 12pt;
c) Padding (đệm)
- Padding là khoảng cách giữa viền và khối, còn gọi là lề trong. Có 4 thuộc tính: padding-top, padding-bottom,
padding-left và padding-right, hoặc dùng chung một thuộc tính padding. Cách thiết lập tương tự margin.
2
Aptech FPT
e) Color
- Màu sắc là một thuộc tính quan trọng của văn bản. Có hai thuộc tính về màu: color dùng cho màu chữ và
background-color cho màu nền.
- Trị có thể là một tên màu được định nghĩa trước, công thức rgb() với trị % hoặc 0-255, chuỗi # với các màu rgb có trị từ
00 đến FF. Ví dụ:
navy rgb(0%,0%,65%) rgb(0,0,160) #0000a0
3
Aptech FPT
B. XSL
1) Khái niệm
- XSL tạo bởi các phần sau:
• XSLT (XSL Transformation), ngôn ngữ dựa trên XML, cho phép biến đổi một tài liệu XML thành một tài liệu
khác: XML, WML, HTML, …
• XSL-FO (XSL Formatting Objects), ngôn ngữ dùng mô tả các tài liệu XML để hiển thị.
- XSLT không phải là ngôn ngữ lập trình mệnh lệnh mà thuộc dạng khai báo. Ta không chỉ định cho máy cách mà ta
muốn thực hiện, ta chỉ khai báo nội dung mà ta muốn máy thực hiện, với sự hỗ trợ của các template.
- XSLT dùng các biểu thức XPath. XPath (XML Path) là ngôn ngữ không dùng cú pháp XML, dùng để truy xuất các
phần khác nhau (element, attribute, …) của cây nguồn tạo từ tài liệu XML gốc. Ta dùng các biểu thức XPath để chỉ định
một đường dẫn vị trí chỉ chính xác đến nơi cần đến trong cây nguồn.
- XSLT cho ta hai cách gom nhiều stylesheet vào một:
• xsl:import : template trong stylesheet gốc luôn chồng lên template của stylesheet được “import” vào, không
quan tâm đến độ ưu tiên, tạo thành một cây import.
Ví dụ: import xsl1.xsl, xsl2.xsl, xsl3.xsl vào root.xsl; sau đó import first.xsl và second.xsl
vào xsl1.xsl. Ta có cây import:
root.xsl
first.xsl second.xsl
• xsl:include : “include” một stylesheet nghĩa là chèn nội dung của nó trực tiếp vào stylesheet đích, như là một
phần của stylesheet đích. Element <xsl:include> có attribute href, lưu giữ URI của stylesheet được “include”
vào.
- Khai báo dùng stylesheet XSL cho một tài liệu XML như sau:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>
<productdata>
<!-- Nội dung tài liệu XML -->
</productdata>
2) XPath
- XPath xem tài liệu XML gốc như một cây nguồn với mỗi node là một thành phần bất kỳ (element, attribute, PI, ...).
XSLT Processor sẽ dùng cơ chế so trùng node duyệt với biểu thức XPath để xác định đúng node cần đến.
4
Aptech FPT
5
Aptech FPT
<xsl:template match="/nodes/node[position()=2]">
hoặc tắt hơn:
<xsl:template match="/nodes/node[2]">
• last(): trả về node cuối trong tập hợp node. Ví dụ:
<xsl:template match="/nodes/node[position()=last()]">
• count(): trả về số lượng các node trong tập hợp node. Ví dụ: số lượng các node customer:
<xsl:value-of select="count(customer)" />
+ Các hàm số:
• number():
• sum():
+ Các hàm bool:
2) XSLT Processor
- XSLT Processor được đóng gói theo Microsoft XML parser (MSXML). MSXML dùng parse các tài liệu XSLT và tạo
nên một cấu trúc cây (XSLT Tree) trên cơ sở các element và các attribute trong tài liệu XSLT
- XSLT Processor của MSXML parser sẽ lấy thông tin biến đổi chứa trong XSLT stylesheet (từ cây XSLT), thông tin này
chính là sự kết hợp các template với dữ liệu tìm thấy trong tài liệu XML gốc (từ cây nguồn), để xây dựng một cây kết
quả. Cây kết quả này được xuất (render) đến vài đích như browser (HTML), cell phone (WML), …
MSXML parser
XSLT
Processor Result tree
XPath
b) Element <xsl:value-of>
- Element rỗng này lấy trị của element hay attribute, được chỉ định bởi attribute select, từ cây nguồn chèn vào template
trong cây kết quả.
6
Aptech FPT
c) Element <xsl:for-each>
- Element này dùng xử lý một số node (so trùng bởi biểu thức XPath của attribute select) giống nhau trong cây nguồn.
- Cú pháp như sau:
<xsl:for-each select="pattern">
[các action cần thực hiện]
</xsl:for-each>
- Attribute select của element for-each cho phép chỉ định (thông qua biểu thức XPath) các element hay attribute mà
action cần thực hiện trên chúng. Các action trong thân element for-each sẽ áp dụng cho từng node được chọn. Ví dụ:
Với mỗi element product, con của element productdata, hiển thị nội dung các element lồng productname và price
bằng <xsl:value-of>, element font dùng hiển thị tên sản phẩm màu xanh.
<xsl:for-each select="productdata/product">
<font color="blue"><xsl:value-of select="productname" /></font>
<xsl:value-of select="price">
</xsl:for-each>
- Element for-each có thể xuất hiện trong các element như: <xsl:template>, <xsl:for-each>, <xsl:if> và
<xsl:otherwise>.
d) Element <xsl:sort>
- Element sort dùng để sắp xếp dữ liệu trên cơ sở trị được gán cho các element và attribute. Element sort không có
element con, nó luôn dùng như element con của element <xsl:for-each> hoặc <xsl:apply-templates>. Cú pháp
như sau:
<xsl:sort select="expression" order="ascending|descending"
case-order="upper-first|lower-first"
data-type="text|number|qname" />
- Các attribute của element này được giải thích trong bảng sau:
Attribute Trị có thể Giải thích
select expression Biểu thức XPath dùng so trùng.
order ascending, descending Chiều sắp xếp, mặc định là ascending.
case-order upper-first, lower-first Sắp xếp với chữ hoa bắt đầu hay chữ thường bắt đầu.
text, number, qname
Kiểu dữ liệu sắp xếp, có thể là text, number hoặc một
datatype
kiểu do người dùng định nghĩa. Mặc định là text.
- Ví dụ: Sắp xếp giảm element product theo element con price khi xuất:
<xsl:for-each select="product">
<xsl:sort select="price" data-type="number" order="descending" />
<xsl:value-of select="productname">
<xsl:value-of select="cover_color">
</xsl:for-each>
e) Element <xsl:text>
- Cho phép sinh ra chuỗi text hằng khi xuất, có thể dùng để hiển thị nhãn. Ví dụ để hiển thị nhãn “Product Name”, dùng:
<xsl:text>Product Name: </xsl:text>
f) Ví dụ:
- Ví dụ sau minh họa cách dùng các element thảo luận ở trên để hiển thị thông tin lưu trong products.xml:
products.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>
<productdata>
<product proid="P001" category="Toy">
7
Aptech FPT
<productname>Mini Bus</productname>
<description>This is a toy for children aged 4 and above</description>
<price>75</price>
<quantity>54</quantity>
</product>
<product proid="P002" category="Toy">
<productname>Barbie Doll</productname>
<description>This is a toy for children in the age group of 5-10</description>
<price>20</price>
<quantity>200</quantity>
</product>
</productdata>
products.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Bắt đầu xử lý tài liệu từ root element -->
<xsl:template match="/">
<!-- Với mỗi element "productdata/product", thực hiện tác vụ -->
<xsl:for-each select="productdata/product">
<!-- Sắp xếp giảm theo element con "price", xem element "price" có kiểu number -->
<xsl:sort select="price" data-type="number" order="descending" />
<li>
<!-- Hiển thị nhãn, còn trị thì theo attribute "proID" -->
<font face="verdana" color="blue">
<b><xsl:text>Product ID: </xsl:text></b>
</font>
<font face="verdana" color="red"><xsl:value-of select="@proid" /></font>
<!-- Do well-formed nên tag br của HTML phải có tag đóng -->
<br />
<font face="verdana" color="blue">
<b><xsl:text>Product Name: </xsl:text></b>
</font>
<font face="verdana" color="red">
<xsl:apply-templates select="productname" />
</font>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Với file XSL khác products01.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="0" cellspacing="1">
<tr bgcolor="pink">
<td>Product ID</td>
<td>Product Name</td>
</tr>
<xsl:for-each select="productdata/product">
<tr bgcolor="cyan">
<td><xsl:value-of select="@proid" /></td>
<td><xsl:value-of select="productname" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
8
Aptech FPT
<xsl:template>
ProductID Product Name
<xsl:value-of>
source tree
4. Các luật của XSLT Template
- XSLT cho phép định nghĩa các luật template (template rule) cho việc kết xuất cây kết quả từ dữ liệu của cây nguồn.
Luật template có hai phần:
• Một template pattern (mẫu) chỉ định một node trong cây gốc nhờ sự hỗ trợ của XPath.
• Một template action hay code xử lý, mô tả việc kết hợp dữ liệu của node trong cây gốc với template, như vậy kết
quả xuất biến đổi theo định dạng của templates.
- XSLT dùng hai element chính để tạo luật template:
a) Element <xsl:template>
- Dùng định nghĩa các template tạo thành stylesheet định dạng kết xuất. Cú pháp như sau:
<xsl:template match="pattern"
name="template_name"
>
[một action]
</xsl:template>
- Attribute match chỉ rõ pattern XPath dùng để so trùng khi tìm trên cây nguồn. Pattern này là một kiểu node do biểu thức
XPath chỉ đến.
- Nếu không chỉ định một template, XSLT sẽ cung cấp một template ngầm định, đơn giản áp dụng mọi template khác tồn
tại. Định nghĩa như sau:
b) Element <xsl:apply-templates>
- Được dùng từ trong một template để gọi các template khác để chỉ dẫn cho XSLT processor tìm một template tương ứng
và thực hiện các tác vụ chỉ định trên từng element được chọn. Cú pháp như sau:
<xsl:apply-templates [select="pattern"]>
- Attribute select là tùy chọn và dùng để chỉ ngữ cảnh mà template sẽ được thực hiện. Trị mặc định cho attribute này là
hàm XPath node(), nghĩa là template sẽ được áp dụng cho con của node hiện tại.
c) Ví dụ:
- Ví dụ sau hiển thị products.xml bằng hai element trên:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Bắt đầu xử lý tài liệu từ root element -->
<xsl:template match="/">
<!-- Áp dụng template riêng của "productdata/product" -->
<xsl:apply-templates select="productdata/product" />
</xsl:template>
c) Xử lý template
9
Aptech FPT
Đọc template từ
tài liệu XSLT
Yes
Còn template
không?
No
End
10