Professional Documents
Culture Documents
BaiGiang XML 01 2023
BaiGiang XML 01 2023
1
TÀI LIỆU THAM KHẢO
.Learn more from http://www.w3schools.com/xml/
From
12
2
NỘI DUNG 1.1 GIỚI THIỆU VỀ XML ...
3
SỰ GIỐNG/KHÁC NHAU GIỮA XML VÀ HTML VÍ DỤ VỀ TÀI LIỆU XML
...from W3SCHOOL
<Customer>
<FirstName>Stephen</FirstName>
<MiddleInitial></MiddleInitial>
<LastName>King</LastName>
</Customer>
Trình soạn thảo XML (XML Editor) Notepad View/Edit nội dung
của file books.xml
Sử dụng editor của Dot.net để soạn thảo
Sử dụng Notepad++. Dowload tại địa chỉ (Recommend):
http://notepad.joydownload.com/?c=11&gclid=CJ39r5mOyL0C
FUchpQodXVkA9Q
Sử dụng XML Editor. Dowload tại: http://www.editix.com/
Sử dụng XMLBlueprint (powerful). Dowload tại:
http://www.xmlblueprint.com/download-xml-editor.htm
Sử dụng XML Writer. Dowload tại:
https://xmlwriter.net/download.shtml
4
XML Notepad 2007
IE10 view nội dung của file Tree View nội dung
file books.xml
books.xml
1.2. ĐỊNH CHUẨN XML ... 1.2. ĐỊNH CHUẨN XML ...
Chú ý: Ví dụ:
Thuộc tính dùng để cung cấp thông tin về một thẻ <?xml version="1.0" encoding="utf-8"?>
(phần tử). Tuy nhiên không nên lạm dụng thuộc tính.
<DUONG_TRON Ban_kinh="5">
Xét 2 ví dụ dưới đây:
Ở ví dụ trên sex là <DIEM x="4" y="2"/>
thuộc tính
Ở ví dụ dưới sex là </DUONG_TRON>
một thẻ (phần tử)
Nói chung, không có
một luật lệ nào nói khi Thẻ có nội dung là thẻ DUONG_TRON
nào thì dùng thuộc tính Thẻ rỗng là thẻ DIEM có 2 thuộc tính là x, y
khi nào thì dùng thẻ. Tuy
nhiên nên sử dụng thẻ
Thẻ DUONG_TRON có 1 thuộc tính là Ban_kinh
thay thuộc tính để dễ
mở rộng hơn.
5
1.2. ĐỊNH CHUẨN XML ... 1.2. ĐỊNH CHUẨN XML ...
Ví dụ: Có một cách khác để biểu diễn thẻ rỗng là bỏ thẻ
<Customer> đóng (closing Tag) và thêm một dấu "/" (slash) ở
cuối thẻ mở (openning Tag).
<FirstName>Stephen</FirstName>
Ví dụ: Có thể viết lại thí dụ customer như sau:
<MiddleInitial></MiddleInitial>
<LastName>King</LastName>
<Customer>
</Customer>
<FirstName>Stephen</FirstName>
<MiddleInitial></MiddleInitial>
<MiddleInitial/>
Thẻ có nội dung là các thẻ: <LastName>King</LastName>
Customer, FirstName, LastName </Customer>
Thẻ rỗng là thẻ MiddleInitial không có thuộc
tính
6
Một công thức nấu ăn viết bằng XML - Dạng lồng nhau
Một ví dụ đơn giản
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?> <Kỹ_thuật_nấu_nướng>
<greeting> <Món_ăn>
Chào các bạn. <Tên>BÚN BÒ HUẾ</Tên>
<Các_nguyên_liệu>
</greeting>
<Nguyên_liệu>
hay
<Chủng_loại>thịt giò heo</Chủng_loại>
<?xml version="1.0" standalone="yes"?> <Số_lượng đơn_vị=”g”>800</Số_lượng>
<chaohoi> </Nguyên_liệu>
Chào các bạn. <Nguyên_liệu>
</chaohoi> <Chủng_loại>thịt bò nạm</Chủng_loại>
hay <Số_lượng đơn_vị=”g”>400</Số_lượng>
<?xml version="1.0" standalone="yes"?> </Nguyên_liệu>
...
<tailieu>
</Các_nguyên_liệu>
Chào các bạn. </Món_ăn>
</tailieu> </Kỹ_thuật_nấu_nướng>
1.3. NỘI DUNG TÀI LIỆU XML 1.3. NỘI DUNG TÀI LIỆU XML
Nội dung của tài liệu XML bao gồm 2 phần: Nội dung
phụ
Nội dung chính:
Hệ thống các thẻ đánh dấu (có hoặc không có nội
dung) tương ứng với các thông tin cần biểu diễn.
Nội dung
Nội dung phụ: chính
7
1.3. NỘI DUNG TÀI LIỆU XML 1.3.1. Thẻ khai báo tham số
Các thẻ bên trong nội dung phụ bao gồm loại sau: Mục đích: cho phép mô tả thêm một số thông tin chung
(tham số) về tài liệu XML ngoài các thông tin đã biểu
1. Thẻ khai báo tham số diễn trong nội dung chính.
<?xml version=”1.0” encoding=”utf-8”?> Dạng khai báo
<?xml version=”1.0” ?>
<?xml standalone=”yes”?> <?xml Ten_1=”Gia_tri_1” Ten_2=”Gia_tri_2” … ?>
2. Thẻ chỉ thị xử lý
<?xml-stylesheet?> Trong đó,
Ten_1, Ten_2, … là các tên của các tham số và
3. Thẻ ghi chú
Gia_tri_1, Gia_tri_2, … là các giá trị tương ứng.
<!-- Nội dung ghi chú --> Cho đến nay chỉ có 3 tham số được dùng là:
4. Thẻ CDATA version, encoding, và standalone.
<sosanh><![cdata[6 is<7 & 7>6]]></sosanh>
1.3.1. Thẻ khai báo tham số ... 1.3.1. Thẻ khai báo tham số ...
8
1.3.3. Thẻ ghi chú 1.3.4. Thẻ CDATA
Mục đích Mục đích
Bổ sung các thông tin ghi chú có ý nghĩa đối với CDATA là một đoạn dữ liệu trong tài liệu XML nằm
người sử dụng và hoàn toàn không có ý nghĩa với giữa <![CDATA[ và ]]>.
các hệ thống xử lý tài liệu XML, HTML. Yêu cầu các bộ phân tích tài liệu XML bỏ qua và
Dạng khai báo: <!-- Nội dung ghi chú --> không phân tích vào nội dung bên trong của thẻ này.
Chú ý: Tác dụng của thẻ là cho phép sử dụng trực tiếp bên
Không dùng chuỗi "--" bên trong một ghi chú trong thẻ một số ký hiệu không đuợc phép nếu sử
Nghĩa là, các dòng sau là không hợp lệ: dụng bên ngoài (ví dụ các ký tự “<” , “>” , …)
<!--Nội dung -- ghi chú --> Dạng khai báo
<![CDATA [Nội dung]]>
Ví dụ:
<sosanh><![cdata[6 is<7 & 7>6]]></sosanh>
1.3.5. Thẻ khai báo thực thể 1.3.5. Thẻ khai báo thực thể - Ví dụ
Trường hợp muốn sử dụng các ký tự dành riêng như <?xml version="1.0"?>
“<“, “&”, ... của XML chúng ta có thể dùng CDATA. <document>
Một cách khác là dùng thẻ khai báo thực thể dạng <title>Thơ tình</title>
tham số với 5 khai báo thực thể chung được định <message>
nghĩa trước là: Bài thơ "Biển" của Xuân Diệu
lt; Thay bằng dấu < </message>
gt; Thay bằng dấu > </document>
amp; Thay bằng dấu
quot; Thay bằng dấu “ Sẽ hiển thị:
apos; Thay bằng dấu „ Bài thơ “Biển” của Xuân Diệu
Các ký tự: trắng, xuống dòng, trở về đầu dòng và tab Phần mở đầu xuất hiện ở phần đầu của tài liệu, nó
<?xml version="1.0"?> <document> <message>
chứa thông tin về phần thân của tài liệu
đều được xử lý như ký tự trắng trong XML
Bài thơ "Biển" của Xuân Diệu
Ví dụ: Hai tài liệu sau là tương đương nhau Phần mở đầu có thể là các khai báo XML, ghi chú,
</message></document>
chỉ thị xử lý, ký tự trắng và khai báo DTD (Document Type
Definition)
<?xml version="1.0"?>
<document> Phần mở đầu không bắt buộc, nhưng ít nhất phải có
<message> phần khai báo XML
Bài thơ "Biển" của Xuân Diệu
</message>
</document> Ví dụ: Phần mở đầu chứa khai báo XML, chỉ thị xử lý
DTD (Document Type Definition)
9
1.3.7 Tạo phần mở đầu-Ví dụ Phần khai báo XML 1.4. TÀI LIỆU XML HỢP KHUÔN DẠNG
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?> 1.4.1 XML Well_Formed
<!DOCTYPE emp:document [
<!ELEMENT emp:document (emp:employee)*> 1. Tài liệu XML phải bắt đầu bằng khai báo XML
<!ATTLIST emp:document (XML declaration)
xmlns:emp CDATA #FIXED "http://www.viduxml.com/dtds/">
2. Mỗi bộ phận, gọi là "element" phải nằm giữa một
<!ELEMENT emp:employee (emp:name, emp:hiredate, emp:projects)>
<!ELEMENT emp:name (emp:lastname, emp:firstname)> cặp thẻ
<!ELEMENT emp:lastname (#PCDATA)> 3. Nếu thẻ nào không chứa gì ở giữa thì phải chấm
<!ELEMENT emp:firstname (#PCDATA)> dứt bằng ký hiệu "/>“
<!ELEMENT emp:hiredate (#PCDATA)>
<!ELEMENT emp:projects (emp:project)*> 4. Phải có một thẻ độc nhất chứa tất cả các thẻ
<!ELEMENT emp:project (emp:product, emp:id, emp:price)> khác. Đó là thẻ gốc (root elemement)
<!ELEMENT emp:product (#PCDATA)>
<!ELEMENT emp:id (#PCDATA)> 5. Các cặp thẻ không được xen kẽ vào nhau
<!ELEMENT emp:price (#PCDATA)> Phần khai báo DTD
]> 6. Phải thoả mãn các các ràng buộc hợp khuôn
dạng trong đặc tả về XML
1.4. TÀI LIỆU XML HỢP KHUÔN DẠNG... Ví dụ: một tài liệu XML hợp khuôn dạng
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
Phải có một thẻ gốc (root Element) duy nhất, gọi <document>
<employee> Phần tử gốc là duy nhất Phần khai báo
là Document Element, nó chứa tất cả các thẻ khác <name>
<firstname>Nguyen</firstname>
trong tài liệu XML. <lastname>Mau Han</lastname> Phần tử gốc chứa
Mỗi opening Tag phải có một closing Tag giống như </name> các phần tử khác
<hiredate>July 15, 2005</hiredate>
nó. <projects>
<project>
Tags trong XML phải case sensitive, tức là opening <product>Printer</product>
Mỗi opening tag phải có một
Tag và closing Tag phải như nhau, có phân biệt chữ <id>HP2300</id>
<price>$111.00</price> closing tag giống như nó
hoa, chữ thường. </project>
<project>
Mỗi thẻ con phải nằm trọn bên trong thẻ cha của nó. <product>Laptop</product>
<id>DELL1100</id>
Giá trị thuộc tính trong XML phải được gói giữa một <price>$989.00</price>
cặp ngoặc kép hay một cặp ngoặc đơn </project>
</projects>
</employee>
</ document >
1.4. TÀI LIỆU XML HỢP KHUÔN DẠNG ... Ví dụ: một tài liệu XML không hợp khuôn dạng
10
1.5. BỘ PHÂN TÍCH XML (XML Parser) 1.5. BỘ PHÂN TÍCH XML (XML Parser)
Parser là gì? Mục tiêu của một Parser là để biến đổi XML thành một code có
Parser là công cụ (hàm, thư viện, API, phần mềm, …) cho thể đọc.
phép phân tích cấu trúc cũng như thực hiện các thao tác Một số Parser được sử dụng phổ biến là:
(đọc/ghi) với file XML. MSXML (Microsoft Core XML Services): Đây là một tập hợp các
Những kỹ thuật nào được các Parser sử dụng? XML Tool chuẩn từ Microsoft, bao gồm một Parser.
Có 2 kỹ thuật chính: DOM (Document Object Model) và SAX System.Xml.XmlDocument: Lớp này là một phần của thư viện
(Simple API for XML). .NET, chứa một số lớp có liên quan trong khi làm việc với XML.
DOM thì tải toàn bộ cấu trúc của XML vào bộ nhớ rồi parse Thƣ viện Java có Parser riêng: Thư viện này được thiết kế để
nó thành một Tree. Do tốn kém bộ nhớ nên DOM khó có thể bạn có thể thay thế một Parser đã có sẵn với một triển khai
sử dụng với các file XML quá lớn. Ưu điểm chính của DOM ngoại vi như Xerces từ Apache hoặc Saxon.
là có thể thực hiện được các thao tác đọc/ghi trên tài liệu
XML. Saxon: Saxon cung cấp các tool để phân tích, biến đổi, và truy
vấn XML.
SAX thì lại quét (scan) file XML từ trên xuống dưới, không
tạo Tree, nên không tốn nhiều bộ nhớ, có thể áp dụng với Xerces: Xerces được triển khai trong Java và được phát triển bởi
file XML cực lớn, nhưng chỉ có thể thực hiện thao tác đọc. mã nguồn mở nổi tiếng là Apache Software Foundation.
1.6. NGÔN NGỮ ĐẶC TẢ CẤU TRÚC CHO TÀI LIỆU XML 1.6. NGÔN NGỮ ĐẶC TẢ CẤU TRÚC CHO TÀI LIỆU XML...
Nhận xét: Đối tượng nào sử dụng đặc tả cấu trúc tài liệu XML?
Có rất nhiều ngôn ngữ đặc tả được đề xuất để mô tả cấu Có 2 trường hợp chính sử dụng đặc tả cấu trúc:
trúc tài liệu XML: Trường hợp 1: Sử dụng cho việc trao đổi thông tin
DTD người – người
XML Schema - Thông dụng
XMl-Data - Dễ sử dụng
Schematron Trường hợp 2: Sử dụng cho việc trao đổi thông tin
RELAX NG, người – hệ thống xử lý
... - Chỉ sử dụng khi có hệ thống xử lý “hiểu” và thực
Trong số đó có 2 ngôn ngữ thông dụng là: hiện các xử lý tương ứng nào đó với tài liệu đặc
DTD (chương 2) tả cấu trúc
XML Schema (chương 3) - Xử lý thông dụng nhất là kiểm tra một tài liệu XML
có theo đúng cấu trúc đuợc mô tả trong tài liệu
đặc tả cấu trúc hay không.
1.7. MỘT SỐ KỸ THUẬT ĐẶC TẢ NỘI DUNG THẺ 1.7.1 Kỹ thuật sử dụng tên tiền tố
Nhận xét: Gr4, Gr1, Gr2 Tên thẻ, tên thuộc tính trong một tài liệu XML thuộc về
1 trong 2 loại sau: tên không tiền tố và tên có tiền tố:
Ý nghĩa chung các thẻ khai báo thực thể là cho phép
Tên không tiền tố :
tài liệu XML tham chiếu đến một tập hợp các giá trị Là một chuỗi ký tự lấy từ: (a, ..., z, A, ..., Z, 0, ..., 9)
đã chuẩn bị trước dưới dạng một tên gợi nhớ (tên và một số ký tự khác như „–„ , “_” , “.”.
thực thể). Tên có tiền tố :
Mỗi cách thức tham chiếu và “loại” của tập hợp giá trị Có dạng <Chuoi_tien_to:Chuoi_ten>
Ví dụ:
được tham chiếu tương ứng với một ý nghĩa/mục tiêu
<A:MAT_HANG …./>
riêng và sẽ yêu cầu dạng thẻ khai báo thực thể thích <B:MAT_HANG …/>
hợp. Thẻ A:MAT_HANG tương ứng thông tin về mặt hàng trong cty A.
Thẻ B:MAT_HANG tương ứng thông tin về mặt hàng trong cty B.
2 thẻ này có thể có các thuộc tính khác nhau.
11
Khi nào sử dụng tên tiền tố? Ví dụ: Sử dụng tên tiền tố
Nếu chỉ sử dụng tài liệu XML đơn lẻ, riêng cho ứng
dụng cục bộ thì không cần thiết dùng tiền tố trong tên.
<table> <v:table>
Nếu cần tiếp nhận, kết xuất toàn bộ/một phần tài liệu <tr> <v:tr>
XML từ/đến một ứng dụng khác thì việc sử dụng tên
<td>Apples</td> <v:td>Apples</v:td>
với tiền tố là cần thiết.
<td> Bananas </td> <v:td> Bananas </v:td>
Tiền tố của tên được dùng để phân biệt đuợc nguồn </tr> </v:tr>
gốc của một thẻ trong tài liệu XML được tạo thành từ </table> </v:table>
nhiều tài liệu XML khác có các thẻ trùng phần tên
không tiền tố.
Ví dụ minh họa:
Tài liệu XML không dùng tiền tố Tài liệu XML có dùng tiền tố
1.7.1 Kỹ thuật sử dụng tên tiền tố 1.7.1 Kỹ thuật sử dụng tên tiền tố
Name Conflicts
Name conflicts in XML can easily be avoided using a name prefix
In XML, element names are defined by the developer. This
often results in a conflict when trying to mix XML documents This XML carries information about an HTML table, and a
from different XML applications. piece of furniture:
A user or an XML
application will not
know how to handle
these differences.
1.7.2. Không gian tên (namespace) Khai báo không gian tên ...
XML cho phép dùng cùng một tên nhưng lại nói đến 1. Khai báo không gian tên bằng tên tiền tố
nhiều loại dữ liệu khác nhau trong cùng một tài liệu Để khai báo một không gian tên ta chỉ cần đưa thêm thuộc
XML. Xem ví dụ sau: tính xmlns:prefix vào bên trong phần tử gốc, trong đó:
• prefix là tên của không gian tên, mỗi không gian tên cần
Khi quan sát kỹ, ta
thấy có thể có sự
mang một định danh duy nhất.
nhầm lẫn về cách • Một không gian tên có thể là một địa chỉ trên internet
dùng Element Title. hoặc một địa chỉ nào đó, miễn là địa chỉ này phải duy nhất.
Trong tài liệu có hai • Ví dụ sau đây sẽ tạo ra một không gian tên hs và áp dụng
loại Title, một cái cho tất cả các thẻ con:
dùng cho khách
hàng Customer nói
đến danh hiệu Mr.,
Mrs., Dr., còn cái kia
để nói đến đề tựa
của một quyển
sách Book.
12
Khai báo không gian tên ... 1.6.2.
<?xml Không gian tên ...
version="1.0"?>
<BookOrder OrderNo="1234">
2. Khai báo không gian tên mặc định <OrderDate>2001-01-01</OrderDate>
Nếu các thẻ trong tài liệu chỉ sử dụng duy nhất một <Customer xmlns="http://www.northwindtraders.com/customer">
<Title>Mr.</Title>
không gian tên thì chúng ta có thể khai báo không
<FirstName>Graeme</FirstName>
gian tên mặc định cho các thẻ con của một thẻ cha <LastName>Malcolm</LastName>
bằng cách chỉ ghi thuộc tính xmlns và bỏ đi prefix </Customer>
<Book xmlns="http://www.northwindtraders.com/book">
<Title>Treasure Island</Title>
<Author>Robert Louis Stevenson</Author>
</Book>
</BookOrder>
Nhận xét:
Chú ý: Trong tài liệu XML trên ta dùng 3 namespaces: Không gian tên là chuoi_tien_to có đặc điểm quan
default namespace tên: http://www.northwindtraders.com/order trọng như sau: Chuoi_tien_to phải là duy nhất trên
namespace: http://www.northwindtraders.com/customer (viết tắt phạm vi toàn cầu.
là cust)
Bản chất của không gian tên chính là Chuoi_tien_to
và namespace:
được sử dụng trong một số các tài liệu XML.
http://www.northwindtraders.com/book (viết tắt là book).
Đặc điểm trên nhằm bảo đảm rằng khi một ứng dụng
Các Elements và Attributes không có prefix (tức là không có
chữ tắt đứng trước) như BookOrder, OrderNo, và OrderDate, được sử dụng các tài liệu XML của mình với Chuoi_tien_to
coi như thuộc về default namespace. thì không có tài liệu XML nào của các ứng dụng khác
Để đánh dấu một Element hay Attribute không thuộc về default trên phạm vi toàn cầu sử dụng Chuoi_tien_to đó.
namespace, một chữ tắt, đại diện namespace sẽ được gắn làm Với đặc điểm trên thông thường không gian tên đuợc
prefix cho tên Element hay Attribute. chọn là chuỗi tương ứng với một địa chỉ URL của một
Ví dụ như cust:LastName, book:Title tên miền trong định vị của Internet.
13
Định nghĩa không gian tên với URI (Uniform Resource Identifier) 1.8. XML TREE
<hr:employee xmlns:hr="http://www.hr.com/human_resources">
<hr:name> XML documents form a tree structure that starts at
<hr:firstname>Nguyen</hr:firstname> "the root" and branches to "the leaves".
<hr:lastname>Mau Han</hr:lastname>
</hr:name>
<hr:hiredate>July 15, 2012</hr:hiredate> root element
<hr:projects>
<hr:project>
child
<hr:product>Printer</hr:product> elements
<hr:id>111</hr:id>
<hr:price>$111.00</hr:price>
</hr:project>
<hr:project>
<hr:product>Laptop</hr:product>
<hr:id>222</hr:id>
<hr:price>$989.00</hr:price>
</hr:project>
</hr:projects> See also from:
</hr:employee http://www.w3schools.com/xml/xml_namespaces.asp
Ví dụ:
- A, B là 2 thành phần bên trong một hệ thống thông tin
(giao diện, xử lý hay lưu trữ)
- Tài liệu XML đuợc thiết kế cho việc sử dụng nội bộ
giữa 2 thành phần A, B.
1.9. LỢI ÍCH CỦA XML... Ngoài ra XML có thể đƣợc sử dụng để:
1.9.1 Nhu cầu trao đổi thông tin ... Trao đổi thông tin giữa các tầng của một ứng dụng
Trao đổi thông tin giữa các hệ thống thông tin; giữa đuợc thiết kế theo mô hình kiến trúc đa tầng.
các ứng dụng (đặc biệt các ứng dụng Web) Trao đổi thông tin giữa một tầng với hệ thống khác
bên ngoài. Chẳng hạn,
Trao đổi thông tin giữa hệ thống đang xây dựng và Có thể sử dụng XML để trao đổi thông tin giữa hệ thống
lưu trữ dữ liệu (thông thường là hệ quản trị CSDL và tầng
các hệ thống có sẵn xử lý lưu trữ dữ liệu).
Ví dụ: Sử dụng XML trao đổi thông tin giữa tầng dữ liệu và tầng
- A là hệ thống thông tin đang xem xét. xử lý nghiệp vụ.
- B là hệ thống đã có trước với khả năng chuyên biệt Sử dụng XML trao đổi thông tin giữa tầng xử lý nghiệp vụ
và tầng thể hiện.
nào đó.
Sử dụng XML trao đổi thông tin giữa các tầng xử lý nghiệp
- A phải sử dụng tài liệu XML có cấu trúc do B đề vụ (khi hệ thống có nhiều tầng xử lý nghiệp vụ).
xuất.
14
Một ví dụ về sử dụng XML để trao đổi thông tin ví dụ về sử
dụng XML để
Một file XML chứa thông tin về Earthquake trao đổi thông
tin:
An XML
national
weather service
from NOAA
(National
Oceanic and
Atmospheric
Administration-
cơ quan quản
lý quốc gia về
Đại dương và
Khí quyển):
1.9.2 Lƣu trữ thông tin 1.9.2 Lƣu trữ thông tin...
Có 3 cách chính để sử dụng XML trong việc lưu trữ Cách 2 : Một số dữ liệu lưu trữ dưới dạng tập tin XML,
dữ liệu bên trong một HTTT. một số khác lưu trữ bên trong cơ sở dữ liệu.
Cách 1 : Chỉ sử dụng các tập tin XML để lưu trữ dữ liệu - Ưu điểm: Có thể kết hợp tốt ưu điểm của cả 2 mô
- Ưu điểm: Không cần sự hỗ trợ của các DBMS hình lưu trữ thông tin: XML và Cơ cở dữ liệu.
Dễ cài đặt, triển khai - Khuyết điểm: Cần phải có sự cân nhắc và quyết
- Khuyết điểm: Tính hiệu quả không cao khi khối lượng dữ định đúng đắn loại thông tin nào sẽ dùng hình thức
liệu lớn. lưu trữ nào.
- Nhận xét:
- Nhận xét:
Các phần mềm trò chơi sử dụng tốt theo cách 1
Cách 2 là cách sử dụng phổ biến nhất hiện nay
Các phần mềm quản lý không thích hợp
Rất thích hợp cho các ứng dụng trên các môi trường Cấu hình của hệ thống thông tin hoặc các phân
không có (hoặc chưa có) DBMS như điện thoại di động, hệ ứng dụng là loại thông tin thường được chọn
máy công cụ , v.v… để lưu trữ theo dạng tài liệu XML.
1.9.2 Lƣu trữ thông tin 1.9.3 Ứng dụng XML với các cấu trúc dữ liệu
Cách 3 : Lưu trữ toàn bộ dữ liệu bên trong CSDL, tài Trong mô hình DOM, có thể sử dụng XML như một
liệu XML khi đó đuợc nhúng vào nội dung các bảng loại cấu trúc dữ liệu động với nhiều ưu điểm:
dữ liệu Đọc/Ghi dễ dàng:
Các cấu trúc dữ liệu động như: mảng động (Dynamic
Array), Xâu (List), Ngăn xếp (Stack), Hàng đợi (Queue), Cây
- Ưu điểm: Có thể kết hợp tốt ưu điểm của cả 2 mô (Tree), … có nhiều tính năng tốt trong việc biểu diễn và xử lý
hình lưu trữ thông tin: XML, Cơ cở dữ liệu. thông tin trong bộ nhớ chính.
Tuy nhiên việc đọc/ghi thông tin của các cấu trúc dữ liệu
- Khuyết điểm: tốn kém chi phí thời gian chuyển đổi này từ/vào bộ nhớ phụ (thông thường thông qua tập tin) là
không đơn giãn và thường phải thực hiện gián tiếp với một
dữ liệu.
bộ đọc ghi.
Tài liệu XML có thể sử dụng để cài đặt lại hầu hết các cấu
trúc dữ liệu động.
15
1.9.3 Ứng dụng XML với các cấu trúc dữ liệu ... Ngoài ra:
Khả năng truy vấn cao:
Việc truy vấn các thành phần/tập hợp thành phần
của các cấu trúc dữ liệu động thường phải thông XML được tự do mở rộng
qua các vòng lặp duyệt đến từng phần tử.
XML có thể tách rời dữ liệu khỏi HTML
Với tài liệu XML, có thể sử dụng ngôn ngữ truy XML được dùng để chia sẻ dữ liệu
vấn Xpath để truy xuất đến thành phần/tập hợp
thành phần một cách dễ dàng (chỉ với một lệnh gọi XML làm cho dữ liệu hữu dụng hơn
hàm đơn giãn)
XML có thể được dùng để tạo ngôn ngữ mới
1. Viết một file XML để mô tả về lí lịch sinh viên như Xem các ví dụ về XML ở:
sau: http://www.w3schools.com/xml/xml_examples.asp
Viết một file XML để chứa các thông tin về một MV.
Tham khảo:
http://www.w3schools.com/xml/cd_catalog.xml
NỘI DUNG
95
16
2.1. ĐẶC TẢ CẤU TRÚC TÀI LIỆU XML VỚI DTD 2.1. ĐẶC TẢ CẤU TRÚC TÀI LIỆU XML ...
DTD là gì?
Mục đích của DTD:
DTD (Document Type Definition) là một tài liệu dùng
để định nghĩa kiểu dữ liệu cho các phần tử trong tài DTD được sử dụng để xác định cấu trúc và luật lệ
liệu XML của một tài liệu XML. Mỗi tài liệu XML có một khai
Việc định nghĩa các phần tử trong XML là tùy ý, miễn báo DTD riêng tùy theo mục đích của người viết.
sao cho nó hợp quy tắc của tài liệu XML. Tuy nhiên Để có thể đọc được dữ liệu trong XML, người đọc
để tường minh hơn thì ta nên định nghĩa kiểu dữ liệu phải biết DTD của bản XML tương ứng.
cho từng phần tử (thẻ, thuộc tính) trong tài liệu XML
Khi đọc một tài liệu XML nào đó thì chỉ cần đọc phần Mục đích của DTD là làm sao cho nhiều người hay
DTD mô tả tài liệu XML chúng ta sẽ biết được cấu chương trình khác nhau có thể đọc file lẫn nhau.
trúc của tài liệu XML đó
DTD của một tài liệu XML là một file text có phần mở
rộng *.dtd
Ví dụ về một DTD đƣợc định nghĩa bên ngoài tài liệu XML
...from W3CSchool
17
2.2. Phần tử <!DOCTYPE> của tài liệu DTD 2.2. Phần tử <!DOCTYPE> ...
1. Định nghĩa DTD tham chiếu nội
Phần tử <!DOCTYPE> dùng để khai báo thẻ gốc
Cú pháp: <!DOCTYPE root-element [element-declarations]
của tài liệu XML.
Trong đó:
- root-element là thẻ gốc của tài liệu XML,
Khai báo cấu trúc DTD có 2 dạng: - element-declarations là các định nghĩa cho các phần tử
DTD tham chiếu nội: DTD được định nghĩa ngay trong tài liệu XML. khai báo các định nghĩa cho
trong tài liệu XML Ví dụ: version="1.0"?>
- <?xml Xét một tài liệu DTD thẻ gốc các phần tử trong
<!DOCTYPE note [ tài liệu XML
<!ELEMENT note body>
DTD tham chiếu ngoại: DTD được định nghĩa bên <!ELEMENT body (#PCDATA)> thẻ gốc
ngoài tài liệu XML ]>
phần tài liệu XML
<note>
<body>Don't forget me this weekend</body>
</note>
Ví dụ về một DTD tham chiếu nội 2.2. Phần tử <!DOCTYPE> ...
2. Định nghĩa DTD tham chiếu ngoại
Nhận xét: sử dụng định nghĩa DTD tham chiếu ngoại sẽ làm
cho các ứng dụng XML trở nên dễ dàng chia sẻ và dùng
chung với các ứng dụng khác.
Có hai cách để định nghĩa một DTD tham chiếu ngoại:
Tham chiếu ngoại riêng: mang tính cá nhân, không được
dùng cho mục đích chung rộng lớn/mục đích phân phối.
Tham chiếu ngoại chung: mang tính cộng đồng
a) DTD tham chiếu ngoại riêng:
Cú pháp:
<!DOCTYPE root-element SYSTEM “filename”>
Trong đó root-element là tên thẻ gốc trong tài liệu XML,
filename là tên file DTD định nghĩa kiểu tài liệu XML (*.dtd)
Ví dụ định nghĩa một DTD tham chiếu ngoại riêng 2.2. Phần tử <!DOCTYPE> ...
File note.xml với nội dung như sau: Chú ý:
<?xml version="1.0"?> Khi định nghĩa một DTD tham chiếu ngoại thì khai báo
<!DOCTYPE
<!DOCTYPE notenote SYSTEM
SYSTEM "note.dtd">
"http://www.w3schools.com/dtd/note.dtd">
<!DOCTYPE note SYSTEM “filename">
<note>
<to>Tove</to>
phải đặt sau phần khai báo XML.
<from>Jani</from> Các khai báo:
<heading>Reminder</heading> <!ELEMENT note (to,from,heading,body)>
<body>Don't forget me this weekend!</body> <!ELEMENT to (#PCDATA)>
</note>
<!ELEMENT from (#PCDATA)>
File note.dtd với nội dung như sau: <!ELEMENT heading (#PCDATA)>
<!ELEMENT note (to,from,heading,body)> Chú ý: Địa chỉ chứa
file DTD có thể một
<!ELEMENT body (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)> URL/URI. phải đặt trong file dtd
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
18
2.2. Phần tử <!DOCTYPE> ... 2.2. Phần tử <!DOCTYPE> ...
b) Định nghĩa DTD tham chiếu ngoại chung (tham khảo): Trường thứ ba chỉ định kiểu của tài liệu được mô tả,
Cú pháp: <!DOCTYPE root-element PUBLIC “FPI” “URL”> thường thì trường này kèm theo một số định danh duy
Trong đó: nhất nào đó (chẳng hạn như version 1.0).
FPI (Formal Public Identifier) là một định danh chung hình Trường thứ tư chỉ định ngôn ngữ mà bạn định nghĩa DTD
thức. FPI gồm có 4 trường và tuân theo một số quy tắc sau: (ví dụ như ngôn ngữ Tiếng Anh - EN)
Trường đầu tiên của một FPI là xác định kết nối của DTD Mỗi trường của FPI cách nhau bởi dấu //
đến chuẩn hình thức. Đối với các DTD chúng ta tự định <?xml version="1.0"?>
nghĩa thì trường này là một dấu chấm. Đối với các chuẩn <!DOCTYPE note PUBLIC “.//w3schools//note XML version 1.0//EN”
hình thức trường này sẽ tự tham chiếu đến chuẩn của nó. "http://www.w3schools.com/dtd/note.dtd">
Trường thứ hai là tên nhóm hay tên người chịu trách <note>
nhiệm bảo trì và nâng cấp các định nghĩa DTD và tên này <to>Tove</to>
URL là địa chỉ của file DTD
phải mang tính duy nhất. <from>Jani</from>
<heading>Reminder</heading>
<!DOCTYPE note PUBLIC “.//w3schools//note XML version 1.0//EN” <body>Don't forget me this weekend!</body>
</note>
19
Ví dụ File note.xml với nội dung như sau: 2.3. Phần tử <!ELEMENT>...
<?xml version="1.0"?> Định nghĩa một thẻ có chứa thẻ con (cách 1)
<!DOCTYPE note SYSTEM "note.dtd"> <!ELEMENT element_name (child_element)>
<note> Ví dụ: khai báo thẻ note có 4 thẻ con là to, from,
<to>Tove</to> heading, body:
<from>Jani</from> <!ELEMENT note (to,from,heading,body)>
<heading>Reminder</heading>
Có hai cách định nghĩa một thẻ có chứa nhiều hơn
<body>Don't forget me this weekend!</body>
một thẻ con:
</note>
Cách thứ nhất: liệt kê tất cả các thẻ con và mỗi thẻ
File note.dtd với nội dung như sau:
con cách nhau bởi dấu phẩy.
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)> Cách thứ hai: dùng ký tự đại diện cho những thẻ
<!ELEMENT from (#PCDATA)> con.
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Chú ý: Chú ý: Có thể kết hợp với biểu thức tuần tự.
Các thẻ bên trong có thể có tên trùng nhau <!ELEMENT X (A,B?,C)>
Ví dụ: <!ELEMENT TAM_GIAC (DIEM,DIEM,DIEM)> Thành phần đầu tiên của thẻ X là thẻ A, kế đến có
Thẻ TAM_GIAC phải bao hàm bên trong đúng 3 thẻ thể có hay không có thẻ B và thành phần cuối cùng
con với tên thẻ là DIEM. phải là C.
Có thể sử dụng từ khóa #PCDATA trong biểu thức <!ELEMENT X (A,B|C,D)>
tuần tự (và các loại biểu thức khác). Thành phần đầu tiên của thẻ X là thẻ A, kế đến là thẻ
Ví dụ: <!ELEMENT X (#PCDATA, A,#PCDATA)> B hay thẻ C và thành phần cuối cùng phải là D.
Thẻ X phải bao gồm 3 thành phần: <!ELEMENT X (A,B,C)?>
Thành phần thứ 1 là chuỗi văn bản X có thể chứa các thẻ A, B, C (theo thứ tự trên) hay
Thành phần thức 2 là thẻ có tên A cũng có thể không chứa bất kỳ thẻ nào.
Thành phần thứ 3 là chuỗi văn bản
See also: http://www.w3schools.com/dtd/dtd_elements.asp from
20
Bài tập: Breakfastmenu.dtd
Hãy khai
báo cấu
trúc dtd
cho tài
liệu xml
bên cạnh
21
Thuộc tính đang Thuộc tính đang
Một số ví dụ minh họa xét có kiểu ký tự xét là thuộc tính Ví dụ2: Giả sử chúng ta có file att.dtd với nội dung sau:
bắt buộc phải có Cho biết giá trị của
<!ELEMENT attributes (#PCDATA)> thuộc tính là các giá trị
Ví dụ1: Giả sử chúng ta có file att.dtd với nội dung sau: hợp với quy tắc đặt tên
Thuộc tính đang xét
<!ATTLIST attributes aaa CDATA #IMPLIED
là tùy chọn và không bbb NMTOKEN #REQUIRED
<!ELEMENT attributes (#PCDATA)> bắt buộc phải có
<!ATTLIST attributes aaa CDATA #REQUIRED ccc NMTOKENS #REQUIRED>
File XML chúng ta viết như sau là đúng quy tắc:
bbb CDATA #IMPLIED>
<?xml version="1.0"?>
File XML chúng ta viết như sau là đúng quy tắc: <!DOCTYPE attributes SYSTEM "att.dtd">
<attributes aaa="#d1“ bbb="a1:12" ccc=" 3.4 div -4"/>
<?xml version="1.0"?>
Nếu chúng ta viết như sau sẽ không hợp quy tắc vì kiểu
<!DOCTYPE attributes SYSTEM "att.dtd"> NMTOKEN và NMTOKENS không chấp nhận ký tự # :
<attributes aaa="#d1" bbb="*~*“ Text >/attributes> <?xml version="1.0"?>
<!DOCTYPE attributes SYSTEM "att.dtd">
<attributes aaa="#d1“ bbb="#d1" ccc="#d1"/>
22
<!ELEMENT XXX (AAA+, BBB+)>
<!ELEMENT AAA (#PCDATA)> 2.5. Phần tử <!Entity>
<!ELEMENT BBB (#PCDATA)>
<!ATTLIST AAA true ( yes|no ) #REQUIRED> Entity (thực thể) là gì?
<!ATTLIST BBB month (1|2|3|4|5|6|7|8|9|10|11|12) #IMPLIED> Thực thể là một biến lưu trữ một khối dữ liệu, khi
Nếu viết như sau sẽ không hợp quy tắc vì AAA và BBB có thuộc tính true và thực thể này được triệu gọi thì nó sẽ chèn nguyên
month có kiểu liệt kê, trong khi đó chúng ta lại gán giá trị cho hai thuộc tính này khối dữ liệu của nó vào vị trí triệu gọi.
ngoài giá trị đã liệt kê.
Khối dữ liệu của thực thể thường là ở dạng text, tuy
<?xml version="1.0"?>
<!DOCTYPE XXX SYSTEM "att.dtd"> nhiên nó cũng có thể là dữ liệu nhị phân, miễn là
<XXX> khối dữ liệu này không phá vỡ khuôn dạng của một
<AAA true="yes"/> tài liệu XML khi nó được triệu gọi.
<AAA true="no"/>
Có hai loại thực thể:
<AAA true="maybe"/>
<BBB month="8" /> thực thể tổng quát
<BBB month="2" /> thực thể tham số
<BBB month="16" />
</XXX> Thực thể được khai báo trong phần định nghĩa DTD.
2.5.1 Thực thể tổng quát 2.5.1 Thực thể tổng quát ...
entity-name
Có hai loại thực thể tổng quát Ví dụ về thực thể tổng quát nội
<?xml version="1.0"?> URL
thực thể tổng quát nội <!DOCTYPE author [
thực thể tổng quát ngoại (tham khảo) <!ELEMENT author (#PCDATA)>
<!ATTLIST author CR CDATA #REQUIRED>
a.Thực thể tổng quát nội <!ENTITY writer SYSTEM
Lời triệu gọi
"http://www.w3schools.com/entities/entities.xml"> trong tài liệu
Thực thể tổng quát nội là thực thể được định nghĩa
<!ENTITY copyright SYSTEM "copyright.txt"> XML
ngay trên DTD của tài liệu XML. ]>
<author CR="C" >&writer; ©right; </author>
Cú pháp:
Chú ý: Chúng ta không thể dùng tham chiếu thực thể
<!ENTITY entity-name “entity-value”> tổng quát ngay trong bản thân các khai báo DTD
23
2.5.1 Thực thể tổng quát 2.5.2 Thực thể tham số
b. Thực thể tổng quát ngoại Thực thể tham số khác với thực thể tổng quát ở chổ
Thực thể được định nghĩa và tham chiếu từ một là nó cho phép tham chiếu đến nó ngay trong bản
nguồn bên ngoài. thân các khai báo DTD và vùng hoạt động của nó
Sử dụng theo 1 trong 2 cú pháp sau: chỉ nằm trong vùng khai báo các DTD.
<!ENTITY entity-name SYSTEM "URI/URL"> Mục đích của việc sử dụng thực thể tham số là để
tránh các khai báo lặp lại khi định nghĩa DTD và giúp
<!ENTITY entity-name PUBLIC FPI "URI/URL"> cho chúng ta dễ dàng thay đổi.
Trong đó: Tương tự như thực thể tổng quát, thực thể tham số
FPI đã được đề cập đến trong phần Định nghĩa DTD cũng có hai loại:
tham chiếu ngoại chung
thực thể tham số ngoại
URI/URL là địa chỉ đến nguồn dữ liệu cần gán cho
entity-name thực thể tham số nội
2.5.2 Thực thể tham số ... 2.5.2 Thực thể tham số ...
a.Thực thể tham số nội Ví dụ
Thực thể tham số nội là thực thể được định nghĩa Có sử dụng thực thể tham số nội Không sử dụng thực thể tham số nội
ngay trên DTD của tài liệu XML. <?xml version="1.0"?> <?xml version="1.0"?>
Cú pháp: <!DOCTYPE author [ <!DOCTYPE author [
<!ENTITY name “Hue Uni"> <!ENTITY name1 "Hue Uni">
<!ENTITY %entity-name “entity-value”>
<!ENTITY name-Faculty "&name; <!ENTITY name-Faculty
Trong đó: Faculty"> "&name1; Faculty">
Ký tự % là tham số bắt buộc <!ENTITY % EL "<!ELEMENT <!ELEMENT author (#PCDATA)>
author (#PCDATA)>" >
entity-name là tên của thực thể tham số cần > ]>
định nghĩa %EL; <author>&name-Faculty;</author>
entity-value là giá trị cần gán cho entity-name ]>
<author>&name-Faculty;</author>
24
Khi nào thì sử dụng/không sử dụng DTD? Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ
Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ
Để quản lý khách hàng thuê phòng và sử dụng các dịch vụ của
khách sạn người ta sử dụng Hóa đơn thanh toán theo mẫu sau:
HÓA ĐƠN THANH TOÁN
Số hóa đơn: 12345
Họ và tên khách hàng: Nguyễn Văn A
Ngày lập: 01/06/2020
Dịch vụ Số lƣợng Đơn giá Thành tiền
Thuê phòng 4 ngày 600.000 đ 2.400.000 đ
(loại A)
Thuê xe 5 giờ 150.000 đ 750.000 đ
(Loại 4 chỗ)
Điện thoại 10 phút 50.000 đ 500.000 đ
(loại 1)
Tổng tiền: 3.650.000 đ
25
Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ
Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ Ví dụ về khai báo cấu trúc DTD cho CSDL quan hệ
Cách 2: khai báo cấu trúc DTD cho CSDL quan hệ Cách 2: khai báo cấu trúc DTD cho CSDL quan hệ
ChiTietHoaDon
26
Cách 2: khai báo cấu trúc DTD cho CSDL quan hệ Cách 2: khai báo cấu trúc DTD cho CSDL quan hệ
DTD Summary
27
BÀI TẬP:
NỘI DUNG 3.1. ĐẶC TẢ CẤU TRÚC XML VỚI XML Schema
28
a. Lý do sử dụng XML Schema i. XML Schema hỗ trợ kiểu dữ liệu
ii. XML Schema sử dụng cú pháp XML iii. XML Schema dễ dàng mở rộng
Sử dụng lại lược đồ của mình trong các lược đồ khác
Bạn không cần phải học thêm một ngôn ngữ mới Tạo kiểu dữ liệu riêng của mình từ các kiểu dữ liệu chuẩn
Bạn có thể dùng XML Editor để soạn thảo XML Schema Tham chiếu nhiều lược đồ trong cùng một tài liệu XML
Bạn có thể sử dụng XML Parser để phân tích XML Schema
Bạn có thể thao tác trên XML Schema với XML DOM
Bạn có thể chuyển XML Schema với XSLT
171 172
iv. XML Schema bảo toàn sự giao tiếp dữ liệu b. Đặc điểm các tài liệu XLM Schema
XML Schema được lưu trữ theo dạng plain text với phần mở
rộng xsd (XML Schema Definition).
Một tài liệu XML Schema tương tự như một tài liệu XML và
thường sẽ có dạng sau:
Các thẻ trong tài liệu XML Schema đều sử dụng một prefix (tiền
tố) để khai báo. Prefix này được khai báo ngay từ thẻ gốc của tài
liệu. Tên prefix có thể đặt bất kì nhưng thông thường hai tên
prefix thường được sử dụng là xs và xsd. Ví dụ:
173
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">174
29
3.1.1 Giới thiệu về ... 3.1.1 Giới thiệu về ...
b. Cấu trúc của các tài liệu trong XML Schema Nhận xét:
Với DTD, thông tin về một thẻ được mô tả qua 2 phần:
Dạng tổng quát:
Đặc tả cấu trúc nội dung: mô tả cách sắp xếp các thành
<?xml version="1.0"encoding="utf-8"?> phần bên trong của thẻ đang xét
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> Đặc tả thuộc tính: mô tả các thuộc tính của thẻ đang xét.
Đặc tả các thẻ Với XML Schema, thông tin về một thẻ được mô tả tập trung
Đặc tả các kiểu qua một ý niệm duy nhất là kiểu.
</xs:schema>
Mỗi thẻ sẽ có tương ứng một kiểu.
Đặc tả kiểu sẽ mô tả kiểu của thẻ cùng với một số tính chất
khác.
namespace của các từ Đặc tả kiểu mô tả các thông tin về các thẻ thuộc kiểu, bao
khóa dùng trong sự gồm cả các thông tin về cách sắp xếp các thành phần bên
xác định lược đồ XML trong của thẻ và hệ thống các thuộc tính của thẻ.
175 176
177 178
3.1.2 Khai báo thẻ trong XML Schema 3.1.2 Khai báo thẻ trong XML Schema
thẻ và loại dữ liệu trong lược đồ
a. Khai báo thẻ gốc a. Khai báo thẻ gốc được khai báo trong namespace
http://www.w3.org/2001/XMLSchema
Thẻ gốc thường chứa một và
vàicó thuộc tính. Thông
tiền tố là xs
thường có dạng như sau: Các thẻ được định nghĩa trong lược
đồ đến từ namespace
http://www.w3schools.com
namespace mặc định là
xmlns="http://www.w3schools.com"
30
Tài liệu XML tham chiếu đến DTD hoặc XML Schema Tài liệu XML tham chiếu đến DTD hoặc XML Schema
note.xml
181 182
Tài liệu XML tham chiếu đến DTD Tài liệu XML tham chiếu đến XML Schema
183 184
Trong đó, xxx: tên thẻ; yyy: tên kiểu của thẻ
185 186
31
3.2. Thẻ đơn giản... 3.3. Định nghĩa thuộc tính trong XSD
3.2.3 Khai báo giá trị mặc định, cố định Chú ý:
Một thẻ đơn giản có thể có giá trị mặc định (default Một thẻ đơn giản không thể có thuộc tính.
value) hoặc giá trị cố định (fix value)
Một thẻ có thuộc tính thì PHẢI khai báo kiểu phức
Tuy nhiên, thuộc tính của một thẻ được khai báo như
một thẻ đơn giản.
187 188
3.3. Định nghĩa thuộc tính trong XSD... 3.3. Định nghĩa thuộc tính trong XSD...
Khai báo giá trị mặc định cho thuộc tính
Một thuộc tính có thể có giá trị mặc định (default
value) hoặc giá trị cố định (fix value).
Khai báo giá trị bắt buộc (required) cho thuộc tính
189 190
3.4. Thẻ phức trong XSD ... 3.4. Thẻ phức trong XSD ...
Định nghĩa: thẻ phức (complex element) là thẻ chứa
thẻ khác và/hoặc có thuộc tính. c. Thẻ chứa thuộc tính và text
Có 4 loại thẻ phức:
a. Thẻ rỗng có thuộc tính
191 192
32
3.4. Thẻ phức trong XSD ... 3.5. KIỂU DỮ LIỆU TRONG XML SCHEMA
193 194
Được xây dựng, định nghĩa sẵn trong XML Schema. Ý nghĩa sử dụng: dùng để mô tả trực tiếp kiểu của
Một số kiểu cơ sở thông dụng: các thuộc tính hay của thẻ thỏa 2 điều kiện:
Ten_kieu_co_so Ý nghĩa Điều kiện 1: thẻ không có thuộc tính.
string Kiểu ký tự Điều kiện 2: thẻ không chứa thẻ khác và có miền
integer Kiểu số nguyên giá trị thích hợp với kiểu.
float Kiểu số thực
double Kiểu số thực 64-bit
boolean Kiểu logic
Với các thẻ có thuộc tính hay có chứa thẻ khác, bắt
buộc phải dùng kiểu phức vì kiểu cơ sở và kiểu
date Kiểu ngày
đơn giản không cho phép mô tả thông tin về thuộc
month Kiểu Tháng
tính, thẻ con bên trong.
ID Kiểu định danh
binary Kiểu nhị phân
195 196
33
3.5.2. Kiểu đơn giản (simpleType) 3.5.2. Kiểu đơn giản (simpleType) ...
Là các kiểu do người dùng định nghĩa dựa trên các Cú pháp: (dạng đơn giản và thông dụng)
kiểu cơ sở có sẵn trong XML Schema. <xs:simpleType name="Ten_kieu">
Ý nghĩa sử dụng: dùng để mô tả trực tiếp kiểu của các <xs:restriction base="Ten_kieu_co_so">
thuộc tính hay các thẻ thỏa 2 điều kiện: Giới hạn (ràng buộc) trên miền giá trị
Điều kiện 1: thẻ không có thuộc tính </xs:restriction>
Điều kiện 2: thẻ không chứa thẻ khác và có miền </xs:simpleType>
giá trị là tập con của miền giá trị một kiểu cơ sở nào
đó. Giải thích:
Tương tự như kiểu cơ sở, các thẻ có thuộc tính hay Ten_kieu: Tên kiểu đơn giản do người dùng định nghĩa.
thẻ có chứa thẻ con khác phải dùng kiểu phức. Ten_kieu_co_so: Tên của kiểu cơ sở tương ứng.
Người dùng có thể thêm ràng buộc cho kiểu dữ liệu
Chú ý: cần phân biết thẻ đơn giản (Simple Element) với kiểu
để giới hạn nội dung của nó, hoặc yêu cầu dữ liệu đơn giản (SimpleType)
199 200
thỏa mãn một ràng buộc nào đó.
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Xác định giá trị x thuộc miền giá trị của kiểu: Xác định cận trên, cận duới của kiểu cơ sở đang xét.
Cú pháp: Cú pháp:
<xs:minInclusive value="Gia_tri_bien_duoi"/> <xs:simpleType
Ví dụ: name="Ten_kieu">
Kiểu đơn giản đang xét có miền giá trị là tập hợp các <xs:restriction base="Ten_kieu_co_so_loai_so">
<xs:simpleType name="SO_NGUYEN_DUONG">
số x thỏa điều kiện cơ sở x>= Gia_tri_bien_duoi Khai báo cận
<xs:restriction dưới
base="xs:int">
Ví dụ: <xs:minInclusive
Khai báo cận trênvalue="0”/>
<xs:simpleType name="SO_THUC_DUONG"> </xs:restriction>
</xs:restriction>
<xs:restriction base="xs:float"> </xs:simpleType>
</xs:simpleType>
<xs:minInclusive value="0”/> Khai báo cận dưới: Sử dụng từ khoá minInclusive (cận
</xs:restriction> dưới cho phép sử dụng biên) và từ khóa minExclusive (cận
</xs:simpleType> dưới không cho phép sử dụng biên)
201 202
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Khai báo cận trên: Sử dụng từ khoá maxInclusive Ví dụ:
Ràng buộc trên các giá trị
(cận trên cho phép sử dụng biên) , maxExclusive (cận trên
không cho phép sử dụng biên)
Ví dụ:
<xs:simpleType name="DIEM_SO">
<xs:restriction base="xs:float">
<xs:minInclusive value="0”/>
<xs:maxExclusive value="10”/>
</xs:restriction>
</xs:simpleType>
203 204
34
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Ràng buộc trên một tập các giá trị Ràng buộc trên một tập các giá trị ...
Cú pháp:
<xs:simpleType name="Ten_kieu">
<xs:restriction base="Ten_kieu_co_so_loai_so">
<xs:enumeration value=”Gia_tri_1”/>
<xs:enumeration value=”Gia_tri_2”/> Thẻ car chỉ chấp
nhận những giá trị:
.... Audi, Goft, BMW
<xs:enumeration value=”Gia_tri_k”/>
</xs:restriction>
</xs:simpleType>
205 206
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Ràng buộc trên một tập các giá trị ... Ràng buộc trên một chuỗi các giá trị
Cú pháp:
Ví dụ:
<xs:simpleType name="Ten_kieu">
</xs:simpleType> <xs:simpleType name="LOAI_HOC_LUC">
<xs:restriction base="Ten_kieu_co_so_loai_so">
<xs:restriction base="xs:string">
<xs:enumeration value=”Gia_tri_1”/>
<xs:enumeration value="Giỏi”/>
<xs:enumeration value=”Gia_tri_2”/>
<xs:enumeration value="Khá”/>
.... Thẻ letter chỉ chấp
<xs:enumeration
<xs:enumeration value="Trung bình”/>
value=”Gia_tri_k”/> nhận một trong các
chữ cái thường từ a
<xs:enumeration
</xs:restriction> value="Yếu”/> đến z
</xs:restriction>
</xs:simpleType>
</xs:simpleType>
207 208
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Ràng buộc trên một chuỗi các giá trị ... Ràng buộc theo sự lựa chọn
209 210
35
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản (simpleType) ...
Ràng buộc theo sự lựa chọn ... Ràng buộc về độ dài
211 212
3.5.2. Kiểu đơn giản (simpleType) ... 3.5.2. Kiểu đơn giản ... Các tham số ràng buộc
Ràng buộc về sự hạn chế của độ dài
Định nghĩa một danh sách các giá trị có thể chấp nhận được
Mô tả số chữ số thập phân lớn nhất cho phép. Số này phải lớn
hơn hoặc bằng 0
Thẻ password chỉ
chấp nhận một xâu
Mô tả chính xác số ký tự hoặc dãy các hạng mục cho phép. Số
từ 5 đến 8 ký tự
này phải lớn hơn hoặc bằng 0
Mô tả cận trên của một dãy các giá trị số. Mỗi phần tử của dãy
phải nhỏ hơn cận trên này
Mô tả cận trên của một dãy các giá trị số. Mỗi phần tử của dãy
phải nhỏ hơn hoặc bằng cận trên này
Mô tả số lớn nhất các ký tự hoặc danh sách các hạng mục cho
213 214
See also: https://www.w3schools.com/xml/schema_facets.asp phép. Độ dài này phải lớn hơn hoặc bằng 0
3.5.2. Kiểu đơn giản ... Các tham số ràng buộc 3.5.3. Kiểu phức (complexType)
Mô tả cận dưới của một dãy các giá trị số (mỗi phần tử của
dãy phải lớn hơn cận dưới này)
Mô tả cận dưới của một dãy các giá trị số (các giá trị của dãy
phải lớn hơn hoặc bằng cận dưới này
Mô tả số nhỏ nhất các ký tự hoặc danh sách các hạng mục cho
phép. Độ dài này phải lớn hơn hoặc bằng 0
Định nghĩa chính xác một dãy các ký tự có thể chấp nhận
được
Mô tả dấu cách (dấu xuống dòng, phím tab, phím enter) được
215 216
sử dụng như thế nào
36
3.5.3. Kiểu phức (complexType) 3.5.3. Kiểu phức (complexType) ...
Có 4 loại thẻ complexType Thẻ rỗng chứa thuộc tính Là kiểu do người dùng định nghĩa để mô tả nội
1. dung và thuộc tính của các thẻ được khai báo
thuộc về kiểu phức đang xét.
Thẻ chứa thẻ khác
2. Ý nghĩa sử dụng: dùng để mô tả kiểu của các thẻ
thỏa một trong 2 điều kiện:
Thẻ chứa thuộc
tính và text
Điều kiện 1: Có thuộc tính Mô tả cách tổ chức,
Điều kiện 2: Có chứa thẻ khác sắp xếp các thẻ
con bên trong thẻ
Dạng khai báo chung:
3.
<xs:complexType name="Ten_kieu">
Thẻ vừa chứa thẻ khác vừa chứa text
4. Dac_ta_cau_truc_noi_dung
Mô tả hệ thống
Dac_ta_thuoc_tinh các thuộc tính của
thẻ có kiểu là kiểu
</xs:complexType> phức đang xét.
217 218
Chú ý: một thẻ phức thì phải khai báo kiểu phức
3.5.3. Kiểu phức (complexType) ... 3.5.3. Kiểu phức (complexType) ...
1. Khai báo thẻ phức rỗng 2. Khai báo thẻ phức chứa thẻ con
Xét thẻ rỗng có thuộc tính: Dạng tuần tự: Mô tả thứ tự xuất hiện tuần tự các
thành phần.
Cú pháp:
Khai báo trong XSD: <xs:complexType name="Ten_kieu">
<xs:sequence>
Thanh_phan_1
Thanh_phan_2
......
Thanh_phan_k
</xs:sequence>
......
219 220
</xs:complexType>
Đặc tả cấu trúc nội dung của thẻ phức Đặc tả cấu trúc nội dung của thẻ phức ...
Ví dụ về khai báo theo dạng tuần tự Ví dụ về khai báo theo dạng tuần tự
Hoặc có thể khai báo như sau: Nhận xét: cách này thông dụng hơn
221 222
37
Đặc tả cấu trúc nội dung của thẻ phức ... Đặc tả cấu trúc nội dung của thẻ phức ...
Dạng tùy chọn: Sử dụng thẻ/từ khóa choice Ví dụ: <xs:complexType name=“X">
Cú pháp: <xs:complexType name="Ten_kieu"> <xs:choice>
<xs:choice> <xs:element name="A” type="A”/>
Thanh_phan_1 <xs:element name="B” type="xs:string”/>
Thanh_phan_2 </xs:choice>
... </xs:complexType>
Thanh_phan_k
</xs:choice> Giải thích:
... Các thẻ có khai báo kiểu X phải bao hàm bên trong
</xs:complexType> một trong 2 thẻ con:
Ý nghĩa:
Thẻ có kiểu Ten_kieu phải sử dụng một thành phần trong số Thẻ có tên A và có kiểu A (cho phép tên kiểu và
các thành phần Thanh_phan_i. tên thẻ trùng nhau).
Dạng này chỉ sử dụng trong một số trường hợp đặc thù và ít Thẻ có tên B và có kiểu là chuỗi.
thông dụng. 223 224
Đặc tả cấu trúc nội dung ... Đặc tả cấu trúc nội dung ...
Chỉ thị Choice Chỉ thị MinOccurs ... MaxOccurs
225 226
Đặc tả cấu trúc nội dung ... Đặc tả cấu trúc nội dung ...
Chỉ thị MinOccurs ... MaxOccurs Chỉ thị MinOccurs ... MaxOccurs
Cú pháp (thông dụng): Ý nghĩa: Một số trường hợp thông dụng:
<xs:complexType name="Ten_kieu"> Lặp lại ít nhất 0 lần (nhiều hoặc không có lần nào):
<xs:sequence> minOccurs=”0”
....
<xs:element name="Ten_the_con”type="Kieu_the_con" Lặp lại ít nhất 1 lần:
minOccurs=”So_lan_lap_toi_thieu” minOccurs=”1”
maxOccurs=”So_lan_lap_toi_da”/>
....
Lặp lại ít nhất 1 lần và nhiều nhất 5 lần:
</xs:sequence> minOccurs=”1”
...... maxOccurs=”5”
</xs:complexType> Lặp lại đúng 3 lần
minOccurs=”3”
227 maxOccurs=”3” 228
38
Đặc tả thuộc tính của thẻ phức Đặc tả thuộc tính của thẻ phức...
Đặc tả thuộc tính ... 3.6. ĐẶC TẢ THẺ TRONG XML SCHEMA
Một số tính chất thông dụng: 3.6.1 Các thông tin cần mô tả
Giá trị mặc định: từ khóa default Đặc tả các thẻ trong XML nhằm xác định kiểu sẽ
Giá trị cố định: từ khóa fixed được sử dụng của thẻ.
Tùy chọn (có hay không có sử dụng: từ khóa use)
Ví dụ: Các thông tin cần mô tả khi đặc tả một thẻ trong
<xs:attribute name="Tu_so" type="SO_NGUYEN_DUONG" XML bao gồm:
default=”1”/> - Tên thẻ
<xs:attribute name="Bien_so" type="xs:string“ fixed=”x”/> - Kiểu của thẻ
<xs:attribute name="Ten_don_thuc" type="xs:string"
- Một số tính chất khác của thẻ
use=”optional”/>
231 232
39
3.6.3 Thuật toán đặc tả thẻ 3.7 MỘT SỐ PHƢƠNG PHÁP THIẾT KẾ XSD
If A là kiểu đơn giản then
Begin
Đặc tả kiểu cơ sở của A
Đặc tả các hạn chế trên kiểu cơ sở của A
end
If A là kiểu cơ sở then Không cần đặc tả thêm
For i=1 to k do
Xét loại kiểu của Ai
For i=1 to k do
Xét loại kiểu của Bi
For i=1 to k do
Xét loại kiểu của Ti
235 236
See also: https://www.w3schools.com/xml/schema_example.asp
Cách1: Tạo một file XML Schema từ một file XML Tạo một xml schema từ shiporder.xml
Giả sử chúng ta có tài Mở một file mới có tên shiporder.xsd bằng một editor nào đó
liệu xml: shiporder.xml
Trong đó: Lần theo cấu trúc của shiporder.xml để khai báo các thẻ:
•Thẻ gốc: "shiporder“ có
(1)
(2) Bắt đầu bằng việc khai báo thẻ gốc xs:schema của lược đồ
thuộc tính "orderid". Và
có các thẻ con là:
"orderperson", "shipto"
and "item".
•Thẻ Item xuất hiện 2 lần
và có các thẻ con là:
"title", "note“, "quantity“
shiporder.xml Trong Schema ở trên chúng ta đã sử dụng không gian tên
và "price”. chuẩn (xs) và URI chỉ nơi định nghĩa ngôn ngữ Schema
•Dòng (1): nói với XML Tiếp theo, khai báo thẻ gốc “shiporder”. Thẻ này chứa 1
Parser rằng tài liệu này
được xác định đối với thuộc tính và các thẻ con nên nó phải có kiểu phức
lược đồ.
•Dòng (2): chỉ vị trí của
lược đồ (ở đây là trong
cùng một thư mục với
"shiporder.xml").
237 238
Tạo một xml schema từ shiporder.xml : Tạo một xml schema từ shiporder.xml :
Tiếp tục khai báo các thẻ "orderperson" có kiểu đơn giản (vì Tiếp tục khai báo cho "item"
nó không chứa thuộc tính hoặc thẻ con)
Khai báo thuộc tính cho thẻ gốc “shiporder”. Chú ý rằng
khai báo thuộc tính phải sau cùng.
40
Cách 2: Phƣơng pháp phân chia lƣợc đồ
shiporder.xsd
Nhận xét:
https://www.w3schools.com/xml/schema_example.asp
241 242
shiporder.xsd được thiết kế như sau: shiporder.xsd được thiết kế như sau:
<!– Phần khai báo đầu tiên--> <!– Khai báo thẻ phức-->
243 244
shiporder.xsd được thiết kế như sau: Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ
Một khách sạn có 3 lọai dịch vụ với đơn giá tương
ứng như sau:
1. Thuê phòng:
• Lọai A: 600.000 đ/ngày,
• Lọai B: 480.000 đ/ngày,
• Lọai C: 360.000 đ/ngày.
2. Thuê xe:
• Lọai 1 (7 chỗ): 300.000 đ/giờ,
• Lọai 2 (4 chỗ): 150.000 đ/giờ.
3. Điện thoại:
Xem phương pháp thiết kế Divide the Schema ở site:
https://www.w3schools.com/xml/schema_example.asp • Lọai 1: 50.000 đ/phút,
• Lọai 2: 30.000 đ/phút.
245 246
41
Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ
Để quản lý khách hàng thuê phòng và sử dụng các dịch vụ của
khách sạn người ta sử dụng Hóa đơn thanh toán theo mẫu sau:
HÓA ĐƠN THANH TOÁN
Số hóa đơn: 12345
Họ và tên khách hàng: Nguyễn Văn A
Ngày lập: 01/06/2020
Dịch vụ Số lƣợng Đơn giá Thành tiền
Thuê phòng 4 ngày 600.000 đ 2.400.000 đ
(loại A)
Thuê xe 5 giờ 150.000 đ 750.000 đ
(Loại 4 chỗ)
Điện thoại 10 phút 50.000 đ 500.000 đ
(loại 1)
Tổng tiền: 3.650.000 đ 247
XSD
248
Ví dụ1: Về khai báo cấu trúc DTD cho CSDL quan hệ Ví dụ1: Về khai báo cấu trúc DTD cho CSDL quan hệ
249 250
Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ
hoadon.xsd được thiết kế như sau: <!– Khai báo thuộc tính -->
<!– Phần khai báo đầu tiên-->
<xs:attribute name="MSDV" use="required" type="ID">
<xs:restriction base="xs:string"/>
</xs:attribute>
<xs:attribute name=“TenDV" use="required" type="xs:string">
<!– Khai báo các thẻ đơn giản - Không có thẻ đơn giản->
<xs:restriction base="xs:string"/>
<!– Khai báo thuộc tính --> </xs:attribute>
<xs:attribute name="SoHD" use="required" type="ID">
<xs:attribute name="MSLoaiDV" use="required" type="ID">
<xs:restriction base="xs:string"/>
<xs:restriction base="xs:string"/>
</xs:attribute>
</xs:attribute>
<xs:attribute name=“HoTenKH" use="required" type="xs:string">
<xs:attribute name=“TenLoaiDV" use="required" type="xs:string">
<xs:restriction base="xs:string"/>
<xs:restriction base="xs:string"/>
</xs:attribute
</xs:attribute>
<xs:attribute name=“NgayLap" use="required" type="xs:date">
<xs:attribute name=“DonGia” use="required" type="xs:int">
<xs:restriction base="xs:date"/>
<xs:restriction base="xs:int"/>
</xs:attribute
</xs:attribute>
<xs:attribute name=“SoLuong” use="required" type="xs:int"> <!– Khai báo thẻ phức-->
<xs:restriction base="xs:int"/>
</xs:attribute>
251 252
42
Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ Ví dụ1: Về khai báo cấu trúc XSD cho CSDL quan hệ
<!– Khai báo thẻ phức-->
<!– Khai báo thẻ phức-->
<xs:element name=“HoaDon">
<xs:element name=“LoaiDichVu"> <xs:complexType>
<xs:complexType> <xs:element ref=" DichVu"/>
<xs:sequence> <xs:attribute ref=“SoHD" use="required"/>
<xs:attribute ref=" MSLoaiDV“ use="required"/> <xs:attribute ref=“HoTenKH" use="required"/>
<xs:attribute ref=" TenLoaiDV“ use="required"/> <xs:attribute ref=“NgayLap" use="required"/>
<xs:attributet ref=" DonGia" use="required"/> </xs:complexType>
<xs:attribute ref=" SoLuong" use="required"/> </xs:element>
</xs:sequence>
</xs:complexType> <xs:element name=“Danh_Sach_Hoa_Don">
</xs:element> <xs:complexType>
<xs:element name=“DichVu"> <xs:element ref=" HoaDon"/>
<xs:complexType> </xs:complexType>
<xs:element ref=" LoaiDichVu"/> </xs:element>
<xs:attribute ref=“MSDV" use="required"/>
<xs:attribute ref=“TenDV" use="required"/> </xs:schema>
</xs:complexType>
</xs:element>
Xem phương pháp thiết kế Divide the Schema ở site:
253 254
https://www.w3schools.com/xml/schema_example.asp
Cách 3: Phƣơng pháp sử dụng tên kiểu Cách 3: Phƣơng pháp sử dụng tên kiểu ...
Bằng cách định nghĩa các lớp và kiểu, phương pháp
này sử dụng lại các thẻ và thuộc tính đã định nghĩa
trước. Using Named Types
Trong trường hợp này, shiporder.xsd được thiết kế
như sau:
255 256
Cách 3: Phƣơng pháp sử dụng tên kiểu ... Cách 3: Phƣơng pháp sử dụng tên kiểu ...
43
Ví dụ2: Xét biểu đồ lớp của một hệ thống tra cứu thông tin về
Bài tập
nhân viên của một công ty. Bằng XML Schema hãy mô tả cấu trúc
của file XML chứa các dữ liệu như trong khai báo của biểu đồ lớp.
Sử dụng các tài liệu xml đã có: CD Catalog.xml,
Foodmenu.xml, Plant.xml ở các site:
www.w3schools.com/xml/cd_catalog.xml
www.w3schools.com/xml/simple.xml
www.w3schools.com/xml/plant_catalog.xm
để thiết kế các XSD tương ứng bằng các phương
pháp khác nhau.
259 260
Chuyển Class Diagram trong UML thành cấu trúc XSD Chuyển Class Diagram trong UML thành cấu trúc XSD ...
261 262
Chuyển Class Diagram trong UML thành cấu trúc XSD ... Chuyển Class Diagram trong UML thành cấu trúc XSD ...
Bảng sau đây mô tả ánh xạ mặc định của các cấu trúc UML sang các cấu trúc
XSD.
Một phần tử lƣợc đồ đƣợc tạo cho gói
đích. Nếu gói mục tiêu bao gồm các lớp
từ gói khác, có các giá trị đƣợc gắn thẻ,
Target targetNamespace, và Target
targetNamespacePrefix, thì chúng đƣợc
bao gồm nhƣ là các thuộc tính của
phần tử lƣợc đồ.
263 264
44
Chuyển một class Diagram trong UML thành XML file ...
265
http://sparxsystems.com.au/resources/xml_schema_generation.html 266
Ví dụ: Xét biểu đồ lớp của một hệ thống tra cứu thông tin các
nhân viên của một công ty. Hãy mô tả cấu trúc của file XML chứa
các dữ liệu như trong khai báo của biểu đồ Class bằng XML
Schema
267 268
269 270
45
NỘI DUNG
46
4.2. CHỌN CÁC NÚT CỦA XPath Ví dụ: Xét tài liệu books.xml dưới đây:
Biểu thức Mô tả
nodename Chọn tất cả các nút có tên "nodename"
/ Chọn từ nút gốc Parse
Chọn những nút từ nút hiện thời mà không
//
quan tâm các nút được chọn hiện đang ở đâu
. Chọn nút hiện thời
.. Chọn nút cha của nút hiện thời
@ Chọn thuộc tính
277 278
Ví dụ: Xét tài liệu books.xml dưới đây: b. Chọn các nút bằng vị từ (Predicate)
BT đƣờng dẫn Kết quả
bookstore
Chọn tất cả các nút có tên ❖Vị từ được sử dụng để tìm những nút đặc biệt hoặc
là "bookstore" nút chứa giá trị đặc biệt.
/bookstore Chọn nút gốc là bookstore ❖Vị từ luôn luôn được đặt trong cặp dấu móc vuông
[...].
Chọn tất cả các nút con của
bookstore/book
bookstore có tên book
Chọn tất cả các nút book
//book mà không quan tâm chúng
nằm ở đâu trong xml tree
Chọn tất cả thẻ /bookstore/book mà có /bookstore/* Chọn tất cả các nút con của nút bookstore
price>35 //* Chọn tất cả các nút trong tài liệu
Chọn title của các thẻ /bookstore/book mà có
281
//title[@*] Chọn tất cả các nút title mà có thuộc tính 282
price>35
47
4.3. DUYỆT CÁC NÚT CỦA XPath... 4.3. DUYỆT CÁC NÚT CỦA XPath...
4.3.1 Đường dẫn tuyệt đối ❖Đến thuộc tính của nút: cần phải khai báo từ khóa
Attribute trong cú pháp nguyên hoặc @ trong cú
❖/ : bắt đầu từ thẻ gốc. pháp tắt.
Ví dụ:
Ví dụ: muốn chọn nút Order: Để lấy giá trị của thuộc tính
OrderNo của nút Order ta dùng
▪ Cú pháp nguyên: /child::Order
cú pháp XPath như sau:
▪ Cú pháp tắt: /Order
Cú pháp nguyên:
❖Đi ra nhánh con Customer: /child::Order/Attribute::OrderNo
Cú pháp nguyên: /child::Order/child::Customer Cú pháp tắt:
Cú pháp tắt: /Order/Customer /Order/@OrderNo
283 284
4.3. DUYỆT CÁC NÚT CỦA XPath... 4.3. DUYỆT CÁC NÚT CỦA XPath ...
4.3.2 Đường dẫn tương đối 4.3.3 Chọn các thẻ theo điều kiện
❖Sử dụng trong trường hợp muốn trích thông tin một Sử dụng dấu ngoặc vuông ([ ]) để lấy các thẻ thỏa mãn
thẻ nào đó mà chỉ biết tên chứ không biết vị trí. điều kiện nào đó.
Ví dụ: trích các thẻ có tên là Product: Ví dụ, lấy mọi thẻ Product có thuộc tính UnitPrice>70:
Cú pháp nguyên: //child::Product Cú pháp nguyên:
//child::Product[Attribute::UnitPrice>70]
Cú pháp viết tắt: //Product Cú pháp tắt:
4.3.3 Chọn các thẻ bằng ký tự đại diện //Product[@UnitPrice>70]
* : chọn tất cả các nút con của một của một nút nào đó. Ví dụ, để lấy những thẻ Item có thẻ con là Product và
Ví dụ: để lấy tất cả các thẻ con của thẻ Order: có thuộc tính ProductID=1:
Cú pháp nguyên: /child::Order/child::* Cú pháp nguyên:
Cú pháp tắt: /Order/* //child::Item[child::Product/Attribute::ProductID=1]
285
Cú pháp tắt: //Item[Product/@ProductID=1] 286
4.4. MỘT SỐ HÀM VÀ TOÁN TỬ THÔNG DỤNG... 4.4. MỘT SỐ HÀM VÀ TOÁN TỬ THÔNG DỤNG...
287 288
48
Tên hàm Ý nghĩa Ví dụ
Hàm kiểm tra chuỗi str có //item/*[starts-with(name(),’P’)]
4.4. MỘT SỐ HÀM VÀ TOÁN TỬ THÔNG DỤNG...
starts- chứa chuỗi substr (tính từ Chọn tất cả các thẻ con của Item có
with(str,substr) vị trí đầu tiên) hay không tên bắt đầu bởi ký tự P Tên toán tử Chức năng Ví dụ
Toán tử hoặc dùng //Item/*[starts-with(name(),‟U‟) |
Kiểm tra chuỗi str có chứa //item/*[contains(name(),’u’)] starts-with(name(),‟Q‟) ]
chuổi con substr hay Chọn tất cả các thẻ con của thẻ Item | để chọn ra một lần
contains(str,substr) không nhiều thẻ có điều Chọn tất cả các thẻ là con của Item
mà tên của các thẻ con này có chứ ký có có tên bắt đầu bởi ký tự U hoặc Q
tự u kiện khác nhau
Hàm lấy chiều dài của 1 //Item/*[string-length(name())=5] Chọn thẻ con của /Order
chuỗi thẻ chỉ định /Item/Product/descendant::*
Chọn tất cả các thẻ con của Item mà descendant
string-length(str) Chọn tất cả các thẻ là con của
độ dài tên của các thẻ con này là 5
/Order/Item/Product
Cho biết vị trí hiện tại của //Item[position()=5] Chọn thẻ cấp trên /Order/Item/Product/ancestor::*
ancestor
position() thẻ chọn 2 thẻ Item và thẻ Order
Chọn thẻ Item có vị trí là 5
Lấy giá trị nhỏ nhất gần Chọn thẻ cùng cấp /Order/OrderDate/following-
floor() kế tiếp sibling::*
với giá trị chỉ định following-
Lấy giá trị lớn nhất gần với chọn các thẻ Custumer và hai thẻ
ceiling() sibling Item theo sau và cùng cấp với thẻ
giá trị chỉ định
OrderDate
Vị trí nút cuối cùng //Item[last()]
last() 289 290
Chọn thẻ Item cuối cùng
Chọn tất cả các thẻ BBB là con của DDD mà DDD là con của AAA?
Chọn thẻ CCC là con của AAA? /AAA/CCC
(/AAA/DDD/BBB)
<AAA> AAA <AAA> AAA
<BBB/>
<BBB/> <CCC/> BBB
BBB
<CCC/> <BBB/>
<DDD> CCC
<BBB/> CCC <BBB/>
<DDD> <DDD> BBB
<BBB/> BBB <CCC/>
DDD BBB
<DDD>
</DDD>
DDD BBB <BBB/> CCC DDD BBB
<CCC/>
<BBB/>
</AAA> CCC </AAA> BBB
293 294
49
Chọn tất cả các thẻ BBB là con của DDD? //DDD/BBB
Chọn tất cả các thẻ BBB? //BBB
<AAA>
AAA
<AAA> AAA <BBB/>
<BBB/> <CCC/> BBB
<CCC/> BBB <BBB/>
<BBB/> <DDD>
<DDD> <BBB/> CCC
CCC
<BBB/> </DDD>
</DDD> <CCC> BBB
<CCC> BBB <DDD>
<DDD> <BBB/> DDD BBB
<BBB/> DDD BBB <BBB/>
<BBB/> </DDD> CCC DDD BBB
</DDD> CCC DDD BBB </CCC>
</CCC> </AAA> BBB
</AAA> BBB 295 296
Chọn thẻ BBB đầu tiên là con của AAA? /AAA/BBB[1] Chọn tất cả các thuộc tính có tên id? //@id
BBB
50
Chọn tất cả các thẻ BBB có thuộc tính:
BBB (//BBB[@*]) Chọn tất cả các thẻ có chứa các thẻ mà trong đó có 2 thẻ con tên là
BBB
(//*[starts-with(name(),’B’)]) (//*[contains(name(),’B’)])
<AAA>
<AAA> <BCC> AAA
<BCC> AAA <BBB/>
<BBB/> <BBB/> BCC BBB
<BBB/> BCC BBB </BCC>
</BCC>
<BEC> BBB
<BEC> BBB
<CCC/> <CCC/>
<DBD/> BEC CCC <DBD/> BEC CCC
</BEC> </BEC>
</AAA> DBD </AAA> DBD
303 304
51
Chọn tất cả các thẻ là con của AAA/BBB:
BBB Chọn tất cả các thẻ là tổ tiên của thẻ DDD
BBB
(/AAA/BBB/descendant::*) (//DDD/ancestor::*)
<AAA>
<BBB>
<AAA> <DDD>
AAA
<BBB>
AAA
<CCC>
<DDD> <DDD/>
<CCC> BBB DDD CCC <EEE/> BBB DDD
<DDD/> </CCC>
<EEE/> DDD </DDD>
</CCC> </BBB> CCC DDD
</DDD> <CCC>
</BBB>
EEE <DDD>
CCC DDD EEE
<CCC> <EEE>
<DDD/> <DDD>
</CCC> CCC DDD <FFF/>
</AAA> </DDD> EEE DDD
</EEE>
</DDD> FFF
</CCC>
307 </AAA> 308
(//BBB/following-sibling::*) (//XXX/preceding-sibling::*)
<AAA> <AAA>
<BBB> <BBB>
<CCC/>
AAA <CCC/> AAA
<DDD/> CCC <DDD/>
</BBB> </BBB> CCC
BBB
<XXX> <XXX> BBB
DDD
<DDD> <DDD> DDD
<EEE/> <EEE/>
XXX DDD EEE
</DDD> </DDD> XXX DDD EEE
</XXX> </XXX>
<CCC> <CCC>
CCC DDD <DDD/>
<DDD/> CCC DDD
</CCC> </CCC>
</AAA> </AAA>
309 310
(//ZZZ/following::*) (//XXX/preceding::*)
<AAA>
<AAA> AAA <BBB>
<BBB> <CCC/> AAA
<CCC/> CCC <ZZZ>
CCC
<ZZZ> <DDD/>
BBB </ZZZ> BBB
<DDD/>
</ZZZ> ZZZ DDD <FFF> ZZZ DDD
<FFF> <GGG/>
<GGG/> </FFF>
FFF GGG FFF GGG
</FFF> </BBB>
</BBB> <XXX>
<XXX> EEE <DDD> EEE
<DDD> <EEE/>
<EEE/> <DDD/> XXX DDD DDD
XXX DDD DDD <FFF/>
<DDD/>
<FFF/> </DDD>
</XXX>
FFF
</DDD> FFF
</XXX> <CCC>
<CCC> <DDD/> CCC DDD
<DDD/>
CCC DDD </CCC>
</CCC> 311 </AAA> 312
</AAA>
52
Chọn tất cả các thẻ CCC và con của nó:
BBB Chọn tất cả các thẻ GGG và tổ tiên của nó:
BBB
(//CCC/descendant-or-self::*) (//GGG/ancestor-or-self::*)
<AAA> <AAA>
<BBB> AAA <BBB>
<CCC/> <CCC/>
<ZZZ> CCC </BBB>
AAA
<DDD/> BBB <XXX>
</ZZZ> <DDD>
ZZZ DDD BBB CCC
</BBB> <FFF/>
<XXX> <FFF>
<DDD> <GGG/>
<CCC/> CCC FFF
</FFF>
<FFF/> XXX DDD </DDD> XXX DDD
</DDD> FFF </XXX> FFF
</XXX> <CCC>
<CCC> <DDD/> GGG
<DDD/> </CCC>
</CCC> CCC DDD
CCC DDD </AAA>
</AAA>
313 314
BBB BBB
4.5. XML VÀ CSDL QUAN HỆ ... 4.5. XML VÀ CSDL QUAN HỆ ...
❖XML và trao đổi dữ liệu trên mạng
❖Ví dụ: Thông tin về lương của nhân viên Công ty
⮚XML là giải pháp thích hợp cho vấn đề trao đổi dữ VINAMEX được mô tả theo dữ liệu quan hệ:
liệu tự động giữa các kho thông tin và các CSDL
trên Internet. Lương Phụ
STT Họ và Tên Chức Vụ
⮚Đối với các thông tin có cấu trúc như thông tin Chính Cấp
trong các CSDL, việc mô tả chúng bằng XML là 1 Nguyễn Nam Giám Đốc 5.000.000 70%
rất dễ dàng và chính xác.
2 Trần Thị Thêm Trợ lý giám đốc 1.500.000 30%
⮚XML không có được những tính năng của CSDL
quan hệ như: lưu trữ hiệu quả với số lượng mẫu 3 Phạm Văn Bớt Trưởng phòng tvụ 2.500.000 40%
tin cực lớn, sao chép dự phòng, phục hồi dữ liệu,
tối ưu hệ thống.
Biểu diễn
⮚Trong thực tế nhu cầu chuyển đổi dữ liệu từ XML sang XML
sang CSDL quan hệ là cần thiết. 317 318
53
<?xml version='1.0' encoding='ISO-8859-1'?>
5.4. XML VÀ CSDL QUAN HỆ
<SALARYTABLE> ... 4.5. XML VÀ CSDL QUAN HỆ ...
<TABLENAME>
Bảng lương nhân viên Công ty VINAMEX
</TABLENAME>
❖Mô tả một quan hệ dƣới dạng XPath
<EMPLOYEE ID="1">
<NAME>Nguyễn Nam</NAME>
<POSITION>Giám đốc</POSITION>
<SALARY>5000000</SALARY>
<PERCENT>70</PERCENT>
</EMPLOYEE> row1 row2 row3
<EMPLOYEE ID="2">
<NAME>Trần Thị Thêm</NAME> Name MSSV
<POSITION>Trợ lý giám đốc</POSITION>
Hùng 038
<SALARY>1500000</SALARY>
MSSV MSSV MSSV
<PERCENT>30</PERCENT> Cƣờng 742
</EMPLOYEE> name
name name
<EMPLOYEE ID="3"> Thủy 513
<NAME>Phạm Văn Bớt<NAME>
<POSITION>Trưởng phòng tài vụ</POSITION>
<SALARY>2500000</SALARY>
“Hùng” 038 “Cƣờng” 742 “Thủy” 513
<PERCENT>40</PERCENT>
</EMPLOYEE>
</SALARYTABLE> 319 320
321 322
54
4.6.2. Mục đích của XQuery 4.6.3. Phân biệt XPath và XQuery
❖ XPath và XQuery giống nhau về một số mặt. Thậm chí
XPath là một phần trọn vẹn của XQuery. Cả hai ngôn ngữ
cho phép chọn những mẫu dữ liệu từ một tài liệu XML hoặc
một kho lưu trữ tài liệu XML.
❖ XPath là một ngôn ngữ định vị, có khả năng trích ra một
hoặc một số thẻ nào đó trong tài liệu XML, nhưng nó không
có khả năng chỉ ra chính xác dữ liệu cần lấy.
❖ XPath mang lại sự đơn giản còn XQuery cung cấp thêm
sức mạnh và tính linh hoạt.
❖ XPath là công cụ hoàn hảo cho nhiều kiểu truy vấn. Ví dụ,
XPath là cách dễ nhất để tạo một danh sách không sắp thứ
tự các số điện thoại từ một tập hợp con các bản ghi trong
một tài liệu XML. Tuy nhiên, nếu cần một truy vấn biểu diễn
các tiêu chuẩn lựa chọn bản ghi phức tạp hơn, có chuyển
325 đổi tập kết quả, hoặc yêu cầu đệ quy, thì cần XQuery. 326
4.6.3. Phân biệt XPath và XQuery... 4.6.4. Phân biệt XQuery và SQL
<user>
Nếu muốn thu được một danh sách các tên họ của XQuery SQL
Ví dụ 1: Xem tài liệu Listing.xml: trẻ em mà <name>
được sắp thứ tự, chúng ta có thể sử dụng
câu lệnh FLWOR trong XQuery như sau.
<first>Tracy</first> XQuery được thiết kế để thao tác với Các bảng biểu được hỗ trợ trong
<users> let $xml:= XML from Listing
<last>Keller</last> các mô hình dữ liệu có nhiều đặc DBMS quan hệ là cấu trúc phẳng và
<user> for $user in $xml//user[age lt 18]
<name> </name> trưng khác biệt. Tài liệu XML có cấu dựa trên tập hợp, do đó các bản ghi là
order by $user/name/last
<first>Lola</first> return <age>35</age>
$user/name/last/text() trúc phân cấp và có tính chất thứ bậc. không có thứ tự.
<last>Solis</last> </user>
(: Result XQuery cho phép người lập trình SQL phẳng không có (hoặc không cần
</name> </users>
Serafina
Solis
duyệt trên cấu trúc phân cấp của tài thiết) các biểu thức tương ứng để
<age>2</age> liệu XML. duyệt trên cấu trúc dữ liệu bảng.
:)
</user>
<user> Nếu muốn thu được một danh sách các tên XQuery hỗ trợ cả hai loại dữ liệu có Dữ liệu SQL luôn luôn phải được định
<name> họ của trẻ em trong tài liệu này, chúng ta có kiểu và không có kiểu. kiểu rõ ràng.
<first>Nina</first> thể sử dụng biểu thức XPath sau. XQuery không có giá trị null bởi vì các SQL lại sử dụng giá trị null để biểu
<last>Serafina</last>
tài liệu XML bỏ qua dữ liệu thiếu hoặc diễn những dữ liệu dạng đó.
</name> /user[age lt 18]/name/last/text()
<age>4</age>
dữ liệu không biết.
<visits> (: Result XQuery trả về một chuỗi dữ liệu XML. SQL trả về kết quả là các tập hợp các
Solis
<first>2008-01-15</first>
Serafina
kiểu dữ liệu SQL khác nhau.
<last>2008-02-15</last>
</visits>
:) XQuery hoạt động trên các kiểu XML. SQL hoạt động trên các cột được định
</user>
327 kiểu SQL truyền thống. 328
329 330
55
Một ví dụ đơn giản ... 4.6.5. Cú pháp Xquery ...
Predicates Cú pháp tổng quát:
XQuery uses predicates to limit the extracted data from XML
documents. (for | let) duyệt qua các nút của cây xml.
The following predicate is used to select all the book elements where điều kiện lọc, sử dụng các toán
under the bookstore element that have a price element with a tử and, or.
value that is less than 30:
order by sắp xếp dữ liệu.
return Kết quả trả về.
331 FLWOR tương tự như câu lệnh truy vấn SELECT trong SQL332
56
Mệnh đề where Mệnh đề order by
❖Ý nghĩa: sử dụng để xác định một hoặc nhiều điều ❖Ý nghĩa: Được sử dụng để sắp xếp các kết quả,
kiện cho dữ liệu kết quả. Tương tự mệnh đề order by trong SQL nhưng sử
Thể hiện điều kiện để lọc các kết quả của các bộ dữ dụng XPath
liệu có được trong mệnh đề for hay let, tương tự ❖Cú pháp: order by expr [ascending|descending]
như mệnh đề where trong câu lệnh SQL nhưng biểu ❖Ví dụ: Xét truy vấn
thức trong where ở XQuery chính là câu lệnh XPath for $x in doc("books.xml")/bookstore/book
❖Cú pháp: where expr order by $x/@category, $x/title
❖Ví dụ: return $x/title
Xét điều kiện: where $x/price>30 and $x/price<100 <title lang="en">Harry Potter</title>
<title lang="en">Everyday Italian</title>
Kết quả: chỉ những nút thỏa vị từ sau where mới được Kết quả
<title lang="en">Learning XML</title>
duyệt <title lang="en">XQuery Kick Start</title>
337 338
57
Một số ví dụ về XQuery 4.7. ỨNG DỤNG XQuery TRONG HTML
Ví dụ 3 1.Thêm thành phần HTML vào kết quả truy vấn XQuery.
for $a in (1 to 50),$b in (2, 3, 5, 7) Xét tập tin books.xml
where $a mod $b eq 0 Ta đặt kết quả vào file HTML như sau:
return $a * $b <html>
áp dụng mệnh đề where để chọn những giá trị a chia hết cho <body>
b và đưa ra kết xuất là tích của a và b <h1>Bookstore</h1>
<ul>
{
for $x IN document(„book.xml‟)/bookstore/book
order by $x/title
return
<li> {data($x/title)}. Category: {data($x/@category)}</li>
}
</ul>
</body>
343 </html> 344
4.7. ỨNG DỤNG XQuery TRONG HTML 4.7. ỨNG DỤNG XQuery TRONG HTML...
Kết quả trả về: 2. Thêm thuộc tính của thành phần HTML trong kết quả truy
<html> vấn XQuery.
<body> <html> Chú ý: Ở đây, sử dụng thuộc
<body> tính category như 1 thuộc
<h1>Bookstore</h1> tính lớp trong HTML.
<h1>Bookstore</h1>
<ul>
<ul>
<li>Everyday Italian. Category: COOKING</li>
{
<li>Harry Potter. Category: CHILDREN</li> for $x in doc("books.xml")/bookstore/book
<li>Learning XML. Category: WEB</li> order by $x/title
<li>XQuery Kick Start. Category: WEB</li> return
</ul> <li class="{data($x/@category)}">{data($x/title)}
</body> </li>}
</html> </ul>
</body>
345 </html> 346
347 348
58
BÀI TẬP VỀ XPart-XQuery
Thực hiện các thao tác FLWOR trên tài liệu CD Catalog.xml
(http://www.w3schools.com/xml/cd_catalog.xml) CHƢƠNG 6
Chú ý: có thể sử dụng EXISTDB để kiểm tra kết quả truy vấn CHUYỂN ĐỔI ĐỊNH DẠNG
của Xquery từ một file XML:
http://exist-db.org/exist/apps/homepage/index.html TÀI LIỆU XML VỚI XSLT
Bài đọc thêm: Sử dụng giao diện lập trình API của XQuery
cho Java (XQJ) để giới thiệu việc cài đặt các hàm XQuery TRANSFORM A XML DOCUMENT STYLE BY XSLT
trong môi trường Java™.
(eXtensible StyLe sheet Transformations)
http://www.ibm.com/developerworks/vn/edu/x-xqfunc/#listing6
PGS.TS. Nguyễn Mậu Hân
Khoa CNTT-ĐHKH HUẾ
nmhan@husc.edu.vn
349
350
6.2. QUÁ TRÌNH CHUYỂN ĐỔI TRONG eXtensible StyLe sheet Transformations
XSLT
6.3. CÁC PHẦN TỬ THÔNG DỤNG
CỦA XSLT
6.3.1. Phần tử <xsl:template>
• CSS = Style Sheets for HTML
6.3.2 Phần tử <xsl:value-of> • XSL = Style Sheets for XML
6.3.2 Phần tử <xsl:for-each>
6.3.4 Phần tử <xsl:if>
6.3.5 Phần tử <xsl:choose>
6.3.6 Phần tử <xsl:sort> 351 352
XSLT (eXtensible StyLe sheet Transformations). XSL bao gồm 3 thành phần sau:
XSL là ngôn ngữ chuẩn dùng để chuyển đổi tài XSLT (XSL Transformation ), ngôn ngữ dựa trên
liệu XML thành các định dạng khác như HTML, XML, để chuyển đổi một tài liệu XML thành một tài
XHTML ... và ngay cả XML liệu khác: XML, WML, HTML, XHTML
XSL-FO (XSL Formatting Objects), ngôn ngữ dùng
Bản thân XSL cũng là một XML well-formed, một để định dạng các tài liệu XML để hiển thị
textfile có phần mở rộng *.xsl Xpath: XSLT dùng Xpath để di chuyển trên các
nodes của XML Tree
XSLT sử dụng các biểu thức đường dẫn của
Xpath để di chuyển trên XML Tree.
353 354
59
Ví dụ:
6.1. GIỚI THIỆU VỀ XSLT
6.1.2 Khai báo
Để trình phân tích XML nhận diện được các lệnh của
XSL thì chúng ta cần phải khai báo một namespace
trong thẻ gốc của tài liệu XML. Một style sheet thường
chứa một trong hai namespace:
Namespace nguyên thủy: http://www.w3.org/TR/WD-xsl
text file Namespace của XSLT:
http://www.w3.org/1999/XSL/Transform
Khai báo namespace phải đặt ở đầu tài liệu xml
*.xml *.xsl
355 356
Sử dụng XML parser để hiển thị kết quả 6.2. QUÁ TRÌNH CHUYỂN ĐỔI TRONG XSLT
Bằng cách thêm một hàng processing instruction xml-
stylesheet vào đầu tài liệu XML như sau:
Ví dụ chuyển một tài liệu XML thành XHTML
<?xml-stylesheet type="text/xsl" href=“Filename.xsl"?>
Giả sử ta có file catalog.xml
60
Kết nối file XSL Style Sheet đến tài liệu XML bằng cách thêm
dòng lệnh tham chiếu vào "catalog.xml"
361 362
6.2. QUÁ TRÌNH CHUYỂN ĐỔI TRONG XSLT 6.2. QUÁ TRÌNH CHUYỂN ĐỔI TRONG XSLT
61
6.2. QUÁ TRÌNH CHUYỂN ĐỔI TRONG XSLT 6.3. CÁC PHẦN TỬ THÔNG DỤNG CỦA XSL
6.3.1 Phần tử <xsl:template>
Bƣớc 1: XSL processor chuyển đổi văn bản XML
• Mục đích:
thành cấu trúc dạng cây
Dùng để định nghĩa các template (mẫu)
Bƣớc 2: • Cú pháp:
XSL processor bắt đầu áp dụng các khuôn mẫu <xsl:template match=”(Biểu thức Xpath)”></xsl:template>
(template) được khai báo trong file XSL cho cấu trúc
cây của tài liệu XML. Thuộc tính match dùng để kết hợp một template với
Quá trình này bắt đầu từ nút root và đến các nút một nút trong xml Tree
con, khi tìm thấy nút có khai báo template trong XSL,
XSL processor sẽ áp dụng template này cho nút đó Thuộc tính match cũng có thể được dùng để xác
và kết quả thu được cũng là một cấu trúc cây nhưng định một template cho toàn bộ các nút trong cây xml
dữ liệu đã được chuyển đổi. Giá trị của thuộc tính match là một biểu thức Xpath
367 368
Ví dụ:
Minh họa phần tử <xsl:template>
Giải thích ví dụ
6.3.2 Phần tử <xsl:value-of> DòngVí dụ về
2: Khai báo phần
kiểu dữ tử <xsl:value-of>
liệu ra, kiểu dữ liệu ra là dưới dạng HTML
Dòng 3: Khai báo phần tử template chính và cho biết vị trí khởi đầu là nút gốc
• Mục đích: Dòng 5, 6, 7: Chọn nội dung của nút BBB thứ 1, 2, 3
rút trích nội dung nằm trong các thẻ XML và kết
xuất ra file kết quả (cũng là file xml).
Các thẻ được rút trích nội dung được xác định
thông qua thuộc tính select.
Nếu select trả về một tập các thẻ thì nội dung các
thẻ này đều được kết xuất ra file kết quả.
• Cú pháp:
<xsl:value-of select="(Biểu thức Xpath)"/>
371 372
62
Minh họa về phần tử <xsl:value-of> 6.3.2 Phần tử <xsl:for-each>
Phần tử <xsl:for-each>
<hocsinh>
<hoten>Nguyen Van A</hoten>
<mssv>0412341</mssv> • Mục đích:
</hocsinh>
Dùng để đi qua tất cả các nút được chỉ ra trong
*.xml thuộc tính select
for-each làm việc giống như lệnh FOR của các ngôn
ngữ lập trình.
<xsl:stylesheet….>
<xsl:template match=“/”>
<h1><xsl:value-of
<h1> </h1>
select=“//hoten”/></h1> • Cú pháp:
Nguyen Van A
<h2><xsl:value-of
<h2> select=“//mssv”/></h2>
0412341 </h2>
</xsl:template> <xsl:for-each select=”(Biểu thức Xpath)”/></xsl:for-each>
</xsl:stylesheet>
*.xsl
373 374
Dòng 4: Phần tử for-each sẽ cho phép duyệt qua hết tất cả các nút BBB Ví dụ:
DòngVí dụ về
5: Phần Phần sẽ
tử value-of tửlấy<xsl:for-each>
nội dung của nút BBB hiện thời.
375 376
<xsl:stylesheet….>
• Cú pháp:
<xsl:template match=“/”>
<xsl:for-each select = “//hoten”>
<xsl:if test=”(Biểu thức điều kiện)”></xsl:if>
<xsl:text>id=</xsl:text>
<xsl:value-of select=“@id”/> Thuộc tính test là một biểu thức điều kiện, nó có
<xsl:text>hoten=</xsl:text> thể là một biểu thức so sánh hoặc một biểu thức
<xsl:value-of select=“.”/>
</xsl:for-each> Xpath.
</xsl:template> <xsl:if test> giống như cấu trúc if ... then trong
</xsl:stylesheet>
các ngôn ngữ lập trình
377 378
63
Ví dụ:
Minh họa về phần tử <xsl:if test>
<xsl:if test>
<root>
<value>1</value>
<value>20</value>
<value>9</value>
</root>
<xsl:stylesheet….>
<xsl:template match=“/”>
<xsl:for-each select = “//value”>
<xsl:sort data-type=“number” select=“.”/>
<xsl:value-of select=“.”/> Kết quả:
<xsl:if test=“not (position()=last())”> 1,9,20
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
379 </xsl:stylesheet> 380
Ví dụ:
6.3.5 Phần tử <xsl:choose>
• Mục đích: Dùng để điều khiển chọn lựa.
• Cú pháp:
<xsl:choose>
<xsl:when test=”(biểu thức điều kiện)”>
......
</xsl:when>
<xsl:otherwise>
......
</xsl:otherwise>
</xsl:choose>
</xsl:choose> giống như câu lệnh switch trong
ngôn ngữ lập trình C, các lựa chọn trong phần tử
điều khiển choose là các phần tử xsl:when và
381 382
xsl:otherwise
64
Ví dụ:
Minh họa phần tử <xsl:sort>
<xsl:stylesheet….> <root>
<xsl:template match=“/”> <value>1</value>
<xsl:for-each select = “//hoten”> <value>9</value>
<xsl:sort order=“ascending” select=“.”/> <value>20</value>
</root>
<xsl:value-of select=“.”/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet> ?????
385 386
Minh họa phần tử <xsl:sort> Kiểm tra kết quả thực hiện của XSL (Online)
• Vào trang: ttps://www.w3schools.com/xml/xsl_intro.asp
<xsl:sort data-type>
• Chọn để vào trang:
• https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&x
<root>
sltfile=cdcatalog
Kết quả:
<value>1</value> 1
<value>20</value> 9
<value>9</value> 20
</root>
389 390
65
Ví dụ về XSLT Giải tham khảo:
Giả sử file PTB2.xml chứa thông tin các hệ số của PT bậc 2.
Dùng XSL để đọc và giải PT với dữ liệu trong PTB2. xml
391 392
NỘI DUNG
CHƢƠNG 7: 7.1 GIỚI THIỆU VỀ CSS
ĐỊNH DẠNG TÀI LIỆU XML BẰNG 7.2 CÁC CÁCH KHAI BÁO CSS
FORMAT A XML DOCUMENT BY CSS 7.4 TẠO BỘ CHỌN CHO BẢNG ĐỊNH
(CASCADING STYLE SHEETS) KIỂU
66
7.1. GIỚI THIỆU VỀ CSS 7.1. GIỚI THIỆU VỀ CSS
CSS (Cascading Style Sheets) là file định dạng văn Ví dụ: nội dung một file CSS
bản theo tầng, là cách mà chúng ta thêm các kiểu
hiển thị (font chữ, kích thước, màu sắc, ...) cho một
trang web. Ngoài ra nó còn được dùng để định dạng
cho tài liệu XML.
CSS là một file text có phần mở rộng *.css, trong
file này chứa những câu lệnh của CSS mà không
bao gồm dữ liệu văn bản.
Sự khác biệt giữa CSS và HTML:
HTML được sử dụng để cấu trúc nội dung.
CSS được sử dụng để định dạng nội dung đã được cấu
trúc.
67
Một số ví dụ: Nhận xét:
Ví dụ1: Đoạn mã để tạo một button (nút nhấn) có màu Trong các ví dụ ở trên, chúng ta có thể thiết lập một
nền là tím (magenta). số thuộc tính của bất kỳ phần tử nào bằng cách đưa
•<input type="button" style="background-color:magenta" vào dòng:
value="Hello world"> style="Tên thuộc tính:<Giá trị của thuộc tính>“
•Kết quả hiển thị: Trong đó, tên thuộc tính, giá trị của thuộc tính có
Ví dụ2: Tạo một nút nhấn (Button), sao cho khi rê chuột thể tra trong bảng các thuộc tính của CSS.
đến nút đó thì con trỏ chuột có hình bàn tay () Có thể đưa vào một hoặc nhiều thuộc tính trong
• Chú ý rằng thuộc tính qui định chuột có kiểu hình bàn biểu thức style="...." , khi đưa nhiều thuộc tính thì
tay là "cursor:hand", các thuộc tính cách nhau bởi dấu chấm phẩy ";"
Thêm thuộc tính "cursor:hand", trong định nghĩa thẻ: Ví dụ:
<input type ="button" style="background-color:magenta;
•<Input type = button style="cursor:hand" value="Chuột hình bàn tay">
color:white" value="Nền tím - chữ trắng">
7.2. Các cách khai báo CSS 7.2. Các cách khai báo CSS
7.2.2. Khai báo CSS Internal 7.2.3. Khai báo CSS External
Viết mã CSS trực tiếp trong tài liệu XML, cụ thể là Đây là cách khai báo CSS được sử dụng nhiều nhất.
trong thuộc tính style Phạm vi ảnh hưởng của nó đến toàn bộ website
CSS Internal có tác dụng trong tài liệu XML được CSS liên kết ngoài thực chất là một file văn bản có
khai báo. phần mở rộng là .css, nó có thể được lưu trữ trên
Ví dụ: một thư mục nào đó.
Để khai báo CSS External , ta chỉ cần tạo một
file style.css chẳng hạn, sau đó chèn đoạn code sau
trong phần <head></head> của trang web.
Ví dụ:
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
7.2. Các cách khai báo CSS 7.3. Cú pháp của CSS
Thứ tự ưu tiên trong Khai báo CSS Cú pháp tạo CSS bao gồm một bộ selector và một
khối khai báo được mô tả như sau:
Nếu một thẻ của HTML cùng thừa hưởng một thuộc
tính CSS khai báo giống nhau thì mức độ ưu tiên của
CSS trên các kiểu sẽ theo thứ tự sau: Trong đó:
1. Khai báo CSS inline Phần chọn selector: là phần cần định dạng, thường
là thẻ HTML cần định dạng
2. Khai báo CSS internal Phần khai báo declaration, bao gồm thuộc tính
3. Khai báo CSS external (property) và giá trị (value).
Thuộc tính và giá trị được phân chia bởi một dấu :
4. CSS mặc định của trình duyệt và nằm trong cặp ngoặc { }. Nếu có nhiều thuộc tính
thì chúng đặt cách nhau bởi dấu ;
68
7.3. Cú pháp của CSS 7.3. Cú pháp của CSS
Ví dụ: body {color: black}
Nếu giá trị gồm nhiều từ thì phải đặt trong cặp nháy kép
p {font-family: "sans serif"}
Chú ý: Nếu muốn định nghĩa cho nhiều thuộc tính thì
các thuộc tính phải được phân cách nhau bởi dấu “;”.
p {text-align:center;color:red}
7.3. Cú pháp của CSS 7.4. TẠO BỘ CHỌN CHO BẢNG ĐỊNH DẠNG
Quy tắc tạo bộ chọn
Để chỉ ra phần tử nào cần định dạng, ta dùng bộ chọn.
Bộ chọn có tên là tên của phần tử cần định dạng
Ví dụ: paragraph {display: block;margin-top:10}
dùng để định dạng cho thẻ paragraph.
69
title {display: block; font-size: 36pt; font-weight: bold;text-
7.4. TẠO BỘ CHỌN CHO BẢNG ĐỊNH DẠNG 7.5. TẠO LỚP ĐỊNH DẠNG
align:center}
Tạo lớp định dạng bằng cách đặt dấu '.' trước tên lớp- Ví dụ: Paragraph#first{text-indent:40;margin-top:30}
author{display: block; font-size: 16pt; text-align: center}
title {display: block; font-size: 36pt; font-weight: bold;text- paragraph {display: block;margin-top: 10}
align:center} Paragraph#first{text-indent:40;margin-top:30}
author{display: block; font-size: 16pt; text-align: center} <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
paragraph {display: block;margin-top: 10} <?xml-stylesheet type="text/css" href="vidu7_11.css"?>
.standout{color:cyan; background-color:coral} <document>
Áp dụng lớp cho phần tử: <Tên_Phần_tử class="tên_lớp"> <title>GHEN</title>
Ví dụ: áp dụng lớp .standout cho phần tử title <author>Nguyen Binh</author>
<paragraph id="first">
<title class="standout"> GHEN</title>
Co nhan tinh be cua toi oi
Chọn phần tử cần định dạng bằng ID: Có thể sử dụng giá trị ID Toi muon moi co chi mim cuoi
của phần tử để chọn phần tử cần định dạng theo cú pháp: </paragraph>
eleementName#idValue </document>
PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS
1. Các thuộc tính áp dụng cho Font chữ: 2. Các thuộc tính áp dụng cho màu và nền:
THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ
font-family [Tên font hoặc kiểu] font-family: Verdana, color Màu color: red
Arial; background- Màu hoặc transparent background-color: yellow
font-style normal hoặc italic font-style:italic; color
font-variant normal hoặc small-caps font-variant:small- background- Địa chỉ (url) hoặc Không background-image:
caps; image đặt gì url(house.jpg)
font-weight normal hoặc bold font-weight:bold; background- repeat | repeat-x | background-repeat: no-
font-size [ xx-large | x-large | large | font-size:12pt; repeat repeat-y | no-repeat repeat
medium | small | x-small | xx- background- scroll hoặc fixed background-attachment:
small ] | [ larger | smaller ] attachment fixed
font [ font-style || font-variant || font: bold 12pt Arial; background- [ position | length ] | {1,2} background-position: top
font-weight ] ? font-size [ / position | [ top | center | bottom ] center
419 420
line-height ] ? font-family || [ left | center | right ]
70
PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS
3. Các thuộc tính áp dụng cho text: 4. Các thuộc tính áp dụng cho các ô trong bảng:
THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ
letter-spacing normal | length letter-spacing:5pt margin-top length | percentage | auto margin-top:5px
text-decoration none | underline | text-decoration:underline margin-right length | percentage | auto margin-right:5px
overline | line-through margin-bottom length | percentage | auto margin-bottom:1em
vertical-align sub | super | vertical-align:sub margin-left length | percentage | auto margin-left:5pt
text-transform capitalize | uppercase | text-transform:lowercase margin length | percentage | auto margin: 10px 5px 10px 5px
lowercase | none
padding-top length | percentage padding-top:10%
text-align left | right | center | justify text-align:center
padding-right length | percentage padding-right:15px
text-indent length | percentage text-indent:25px
padding-bottom length | percentage padding-bottom:1.2em
padding-left length | percentage padding-left:10pt; }
padding length | percentage {1,4} padding: 10px 10px 10px
421 422
15px
PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS
4. Các thuộc tính áp dụng cho các ô trong bảng: 4. Các thuộc tính áp dụng cho các ô trong bảng :
THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ
border-top-width thin | medium | thick | length border-top-width:thin border-top- none | solid | double | groove | border-top-
border-right-width thin | medium | thick | length border-right-width:medium style ridge | inset | outset style:solid
border-bottom-width thin | medium | thick | length border-bottom-width:thick
border-right- none | solid | double | groove | border-right-
border-left-width thin | medium | thick | length border-left-width:15px style ridge | inset | outset style:double
border-width thin | medium | thick | length border-width: 3px 5px 3px 5px
{1,4}
border-bottom- none | solid | double | groove | border-bottom-
style ridge | inset | outset style:groove
border-top-color color border-top-color:navajowhite
border-right-color color border-right-color:whitesmoke border-left- none | solid | double | groove | border-left-
border-bottom-color color border-bottom-color:black
style ridge | inset | outset style:none
border-left-color color border-left-color:#C0C0C0 border-style none | solid | double | groove | border-style:ridge; }
border-color color {1,4} border-color: green red white ridge | inset | outset
blue; } border-top border-width | border-style | border-top: medium
423 424
border-color outset red
PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS
5. Các thuộc tính phân loại - classification Properties: 5. Các thuộc tính định vị trí cho các phần tử:
THUỘC CÁC GIÁ TRỊ HỢP VÍ DỤ
THUỘC LỆ
Có thể áp dụng cho
CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ TÍNH
TÍNH
clip Toạ độ của một hình chữ clip:rect(0px 200px
display none | block | inline | list-item display:none nhật| auto 200px 0px)
list-style- disk | circle | square | decimal | list-style-type:upper- height length | auto height:200px
type lower-roman | upper-roman | alpha left length | percentage | auto left:0px
lower-alpha | upper-alpha | none overflow visible | hidden | scroll | auto overflow:scroll
list-style- url | none list-style- position absolute| relative | static position:absolute
image image:url(icFile.gif) top length | percentage | auto top:0px
list-style- inside | outside list-style- visibility visible | hidden | visibility:visible tất cả các phần tử
inherit
position position:inside
width length | percentage | width:80% DIV, SPAN and
list-style keyword || position || url list-style: square auto replaced elements
outside url z-index auto | integer z-index:-1 Các phần tử được định
425 426
display none | block | inline | list-item display:none vị tuyệt đối và tương
đối
71
PHỤ LỤC : BẢNG TRA CỨU CÁC THUỘC TÍNH CỦA CSS
6. Các thuộc tính liên quan đến in ấn - Printing Properties
THUỘC TÍNH CÁC GIÁ TRỊ HỢP LỆ VÍ DỤ CHƢƠNG 9
page-break-before auto | always || left | right page-break-
In other words: The XML DOM is a standard for how to get,
change, add, or delete XML elements.
72
9.1. GIỚI THIỆU VỀ DOM
DOM bao gồm hệ thống các đối tượng thư viện cho
phép truy xuất nội dung của tài liệu XML, toàn bộ
tập tin XML trên bộ nhớ phụ.
DOM xem một tài liệu xml như là một cây, với thẻ
gốc là nút gốc.
Mỗi thẻ bên trong tập tin XML:
Đối tượng XmlElement của DOM
Mỗi thuộc tính của thẻ:
Đối tượng XmlAttribute của DOM
VÍ DỤ
Ví dụ1:
Tập tin Duong_tron.XML biểu diễn thông tin về đường
tròn C có tâm O(2,1) và bán kính R=4.
<?XML version="1.0" encoding="utf-8" ?>
<DUONG_TRON Ban_kinh="4">
<DIEM x="2“ y="1" />
</DUONG_TRON>
73
9.2. XỬ LÝ TÀI LIỆU XML TRONG CÁC NNLT 9.3 Xử lý tài liệu XML với NNLT C#
9.2.1 Giới thiệu: 9.3.1 Giới thiệu:
XML là một ngôn ngữ đánh dấu dùng để lưu trữ và NNLT C# cung cấp nhiều lớp đối tượng để có thể
truyền tải dữ liệu độc lập với hệ điều hành và NNLT tương tác với tài liệu XML. Trong đó, lớp
Có hai phương pháp chính mà các NNLT sử dụng XmlDocument đại diện cho phương pháp 1 còn lớp
để xử lý tài liệu XML: XmlReader đại diện cho phương pháp 2.
Phương pháp 1: Đọc toàn bộ tài liệu XML vào trong bộ
nhớ, sau đó nhờ bộ phân tích cú pháp biến tài liệu XML 9.3.2 Lớp XmlDocument
thành một cây theo mô hình DOM
Để nạp tài liệu XML vào trong cấu trúc DOM, chúng ta
Phương pháp 2: Tại mỗi thời điểm bộ phân tích chỉ đọc
một hoặc một số nút liên quan đến truy vấn tạo thể hiện của lớp XmlDocument và sử dụng
Nhận xét: Phương pháp 1 hữu ích đối với các tài liệu XML có phương thức Load hoặc LoadXml() như sau:
dung lượng nhỏ; và sẽ gây tốn bộ nhớ và hiệu năng thấp đối XmlDocument doc = new XmlDocument();
với các tài liệu XML có dung lượng lớn. Do đó, đối với tài liệu
XML có dung lượng lớn thì chúng ta nên sử dụng theo doc.Load("bookstore.xml");
phương pháp 2.
9.3 Xử lý tài liệu XML với NNLT C# Bảng các kiểu nút:
9.3.3 Một số thuộc tính trong lớp XmlDocument:
Kiểu Giá trị Mô tả
Thuộc tính Mô tả Element 1 Nút thẻ (Thẻ mở)
Name Tên của nút Attribute 2 Nút thuộc tính
Nút giá trị hay nút văn bản
InnerXml Nội dung của các thẻ con Text 3
CDATA 4 Phần CDATA
InnerText Giá trị của nút và nội dung Entity 6 Thẻ khai báo một thực thể
của các thẻ con Comment 8 Nút chú thích
Document 9 Toàn bộ tài liệu XML
NodeType Kiểu của nút DocumentType 10 Nút mô tả kiểu tài liệu
ParentNode Nút cha của nút hiện tại Whitespace 13 Thẻ chứa khoảng trắng
EndElement 15 Nút đóng (Thẻ đóng)
Kiểu của nút trong XmlDocument được quy định trong enum XmlDeclaration 17 Nút mô tả tài liệu XML
XmlNodeType. Sau đây là bảng các kiểu nút được sử dụng:
Một số phƣơng thức trong lớp XmlDocument: Một số đối tƣợng của lớp XmlNode:
74
9.3 Xử lý tài liệu XML với NNLT C# Một số phƣơng thức của lớp XmlNode:
9.3.3 Một số thuộc tính trong lớp XmlDocument: Phƣơng thức Mô tả
Thuộc tính Mô tả SelectNodes(xPath) Lấy danh sách các nút theo biểu
thức XPath trong tham số
Name Tên của nút
SelectSingleNode(xPath) Lấy nút đầu tiên trong danh sách
InnerXml Nội dung của các thẻ con kết quả theo biểu thức XPath
InnerText Giá trị của nút và nội dung trong tham số
của các thẻ con
NodeType Kiểu của nút
ParentNode Nút cha của nút hiện tại
Kiểu của nút trong XmlDocument được quy định trong enum
XmlNodeType. Sau đây là bảng các kiểu nút được sử dụng:
75
... any questions?
HẾT CHƢƠNG 9
TRUY XUẤT TÀI LIỆU XML VỚI DOM
451
76