Professional Documents
Culture Documents
XML Và NG D NG
XML Và NG D NG
<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
Namespace trong XML
Trong ví dụ trên:
Thuộc tính xmlns trong phần tử <table> đầu tiên cung cấp cho tiền tố h: một
không gian tên đủ điều kiện.
Thuộc tính xmlns trong phần tử <table> thứ hai cung cấp cho tiền tố f: một
không gian tên đủ điều kiện.
Khi một không gian tên được xác định cho một phần tử, tất cả các phần tử
con có cùng tiền tố được liên kết với cùng một không gian tên.
Không gian tên cũng có thể được khai báo trong phần tử gốc XML:
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.w3schools.com/furniture">
Hiển thị các tập tin XML
Hầu hết các trình duyệt sẽ hiển thị một tài liệu XML với các phần tử được mã
hóa màu.
Thường có thể nhấp vào dấu cộng (+) hoặc dấu trừ (-) ở bên trái của các
phần tử để mở rộng hoặc thu gọn cấu trúc phần tử.
Để xem nguồn XML thô, hãy thử chọn "Xem Nguồn Trang" hoặc "Xem Nguồn"
từ trình đơn trình duyệt.
Lưu ý: Trong Safari 5 (trở về trước), chỉ văn bản phần tử mới được hiển
thị. Để xem XML thô, bạn phải nhấp chuột phải vào trang và chọn "Xem
Nguồn".
Bài tập chương 1
1. Phát hiện lỗi và sửa lại sao cho đúng các file XML sau
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>
2.
<Order>
<OrderDate>2002-6-14</OrderDate>
<Customer>Helen Mooney</Customer>
<Item>
<ProductID>2</ProductID>
<Quantity>1</Quantity>
<Item>
<ProductID>4</ProductID>
<Quantity>3</Quantity>
</Item>
</Order>
Bài tập chương 1
3.
<Order>
<OrderDate>2001-01-01</Orderdate>
<Customer>Graeme Malcolm</Customer>
</Order>
4.
<Catalog>
<Category CategoryName="Beverages">
<Product ProductID="1">
Coca-Cola
</Category>
</Product>
</Catalog>
Chương 2:
Thực thể Ký tự
< <
> >
& &
" “
' ‘
DTD
PCDATA
PCDATA có nghĩa là dữ liệu ký tự được phân tích cú pháp.
Hãy coi dữ liệu ký tự là văn bản được tìm thấy giữa thẻ bắt đầu và thẻ kết
thúc của một phần tử XML.
PCDATA là văn bản SẼ được phân tích bởi trình phân tích cú pháp . Văn bản
sẽ được trình phân tích cú pháp kiểm tra các thực thể và đánh dấu.
Các thẻ bên trong văn bản sẽ được coi là đánh dấu và các thực thể sẽ được
mở rộng.
Tuy nhiên, dữ liệu ký tự được phân tích cú pháp không được chứa bất kỳ ký
tự &, <, hoặc> nào; những thứ này cần được biểu thị bằng & amp; & lt; và &
gt; các thực thể, tương ứng.
CDATA
CDATA có nghĩa là dữ liệu ký tự.
CDATA là văn bản sẽ KHÔNG được phân tích bởi trình phân tích cú pháp. Các
thẻ bên trong văn bản sẽ KHÔNG được coi là đánh dấu và các thực thể sẽ
không được mở rộng.
DTD
DTD – Phần tử
Trong một DTD, các phần tử được khai báo với một khai báo ELEMENT.
Khai báo các phần tử
Trong một DTD, các phần tử XML được khai báo theo cú pháp sau:
<!ELEMENT element-name category>
hoặc
<!ELEMENT element-name (element-content)>
Phần tử trống
Các phần tử trống được khai báo với từ khóa danh mục EMPTY:
<!ELEMENT element-name EMPTY>
Ví dụ:
<!ELEMENT br EMPTY>
Ví dụ XML:
<br />
DTD
Phần tử có dữ liệu ký tự được phân tích cú pháp
Các phần tử chỉ có dữ liệu ký tự được phân tích cú pháp được khai báo với
#PCDATA bên trong dấu ngoặc đơn:
<!ELEMENT element-name (#PCDATA)>
Ví dụ:
<!ELEMENT from (#PCDATA)>
Các phần tử có bất kỳ Nội dung nào
Các phần tử được khai báo với từ khóa danh mục BẤT CỨ, có thể chứa bất kỳ
kết hợp dữ liệu có thể phân tích cú pháp nào:
<!ELEMENT element-name ANY>
Ví dụ:
<!ELEMENT note ANY>
DTD
Phần tử có phần tử con (sắp xếp theo thứ tự)
Các phần tử có một hoặc nhiều phần tử con được khai báo với tên của các
phần tử con bên trong dấu ngoặc đơn:
<!ELEMENT element-name (child1)>
hoặc
<!ELEMENT element-name (child1,child2,...)>
Ví dụ:
<!ELEMENT note (to,from,heading,body)>
Khi các phần tử con được khai báo trong một chuỗi được phân tách bằng dấu
phẩy, các phần tử con phải xuất hiện theo trình tự trong tài liệu. Khai báo
đầy đủ của phần tử "note" là:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD
Khai báo phần tử chỉ xuất hiện một lần
<!ELEMENT element-name (child-name)>
Ví dụ: Khai báo phần tử con “message” phải xuất hiện một lần và chỉ một lần
bên trong phần tử “note”
<!ELEMENT note (message)>
Khai báo một lần xuất hiện tối thiểu một phần tử
<!ELEMENT element-name (child-name+)>
Ví dụ:
<!ELEMENT note (message+)>
Dấu + trong ví dụ trên cho biết rằng phần tử con "message" phải xuất hiện
một hoặc nhiều lần bên trong phần tử "note".
Khai báo Không hoặc Nhiều lần xuất hiện của một phần tử
<!ELEMENT element-name (child-name*)>
Ví dụ:
<!ELEMENT note (message*)>
Dấu * trong ví dụ trên khai báo rằng phần tử con "message" có thể xuất hiện
không hoặc nhiều lần bên trong phần tử "note".
DTD
Khai báo một phần tử không xuất hiện hoặc xuất hiện một lần
<!ELEMENT element-name (child-name?)>
Ví dụ:
<!ELEMENT note (message?)>
Dấu “?” trong ví dụ trên cho biết rằng phần tử con "message" có thể không
xuất hiện hoặc xuất hiện một lần bên trong phần tử "note".
Khai báo phần tử này xuất hiện hoặc phần tử khác xuất hiện
<!ELEMENT note (to,from,header,(message|body))>
Ví dụ trên khai báo rằng phần tử "note" phải chứa phần tử "to", phần tử
"from", phần tử "header" và phần tử "message" hoặc "body".
Khai báo nội dung hỗn hợp
<!ELEMENT note (#PCDATA|to|from|header|message)*>
Ví dụ trên cho biết rằng phần tử "note" có thể chứa không hoặc nhiều lần
xuất hiện dữ liệu ký tự được phân tích cú pháp, các phần tử "to", "from",
"header" hoặc "message".
DTD
DTD - Thuộc tính
Trong một DTD, các thuộc tính được khai báo với một khai báo ATTLIST.
Khai báo các thuộc tính
Một khai báo thuộc tính có cú pháp sau:
<!ATTLIST element-name attribute-name attribute-type attribute-
value>
Ví dụ DTD:
<!ATTLIST payment type CDATA "check">
Ví dụ XML:
<payment type="check" />
XPath
Ví dụ: tập tin XML thể hiện cấu trúc ổ đĩa C
<?xml version="1.0" encoding="utf-8" ?>
<C>
<Windows>
<System>
<Driver/>
</System>
<Intenet>
Webpage.html
data.xml
</Intenet>
</Windows>
<MyDocument/>
<ProgramFiles>
<WinZip/>
<Photoshop/>
</ProgramFiles>
</C>
Định nghĩa XPath
• Ở ví dụ trên biểu diễn nội dung cấu trúc thư mục trên ổ đĩa cứng C. Trên đĩa
cứng muốn truy xuất đến một tập tin hay một thư mục nào đó trên ổ đĩa cứng
C ta dùng đường dẫn.
• Ví dụ: C:\Windows\Internet\data.xml là một đường dẫn tuyệt đối tử ổ đĩa gốc
đến file data.xml.
• Nếu bạn đang ở thư mục Windows, thì đường dẫn tương đối tham chiếu đến
file dữ liệu data.xml là \Internet\data.xml
• Nếu muốn lấy tất cả các file trong thư mục Internet ta có thể dùng kí tự đại
diện /internet/*.xml.
• Trong tài liệu XML, có thể dùng khái niệm tương tự như trong hệ thống file
của hệ điều hành thông qua Xpath.
• Tài liệu XML luôn có phần tử gốc (root). Ví dụ <C> </C> là phần tử gốc. Mọi
phần tử con đều nằm trong phần tử gốc.
• Xpath định nghĩa phần tử gốc là kí tự /.
• Tham chiếu đến một nút dữ liệu trong tài liệu XML, bạn có thể chỉ đường dẫn
tương tự như đường dẫn thư mục.
Xpath và tham chiếu đường dẫn
• Đường dẫn tuyệt đối: nếu đường dẫn bắt đầu bằng / thì có nghĩa đây là
đường dẫn tuyệt đối bắt đầu từ phần tử gốc.
Ví dụ: ta có tài liệu như sau:
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Xpath: /AAA kết quả phần tử AAA được chọn.
Xpath: /AAA/CCC kết quả tất cả những phần tử CCC là con của phần tử
AAA được chọn.
Xpath: /AAA/DDD/BBB kết quả chọn tất cả những phần tử BBB là con của
/AAA/DDD
• Đường dẫn tổng thể: bạn sử dụng chuỗi kí tự // để tham chiếu đến tất cả
các phần tử trong tài liệu
o Ví dụ:
Xpath: //BBB kết quả chọn tất cả các phần tử BBB trong tài liệu.
Xpath: //DDD/BBB kết quả chọn tất cả những phần tử BBB là con của
phần tử DDD.
• Chọn phần tử bằng kí tự đại diện: kí tự đại diện * dùng chọn tất cả các
phần tử cùng thỏa mãn đường dẫn chỉ định.
o Ví dụ:
Xpath: /AAA/CCC/DDD/* kết quả chọn tất cả các phần tử có đường dẫn
/AAA/CCC/DDD
Xpath /*/*/*/BBB kết quả là chọn những phần tử BBB nằm ở cấp thứ 3.
Xpath: //* chọn tất cả phần tử trong tài liệu
• Chọn các phần tử theo vị trí bằng ngoặc []: bạn có thể dùng ngoặc vuông
[] để chỉ định vị trí của một phần tử XML cần chọn.
Ví dụ:
Xpath: /AAA/BBB[1]: chọn phần tử BBB đầu tiên trong nhánh AAA.
Xpath: /AAA/BBB[last()]: chỉ ra phần tử BBB cuối cùng trong nhánh
AAA.
• Chọn thuộc tính của một phần tử trong tài liệu: dùng kí tự @ để chọn hay chỉ đường
dẫn đến một thuộc tính bên trong phần tử XML.
• Ví dụ: ta có tài liệu sau:
<AAA>
<BBB id=“b1”/>
<CCC/>
<BBB id=“b2”/>
<BBB name=“bbb”/>
<DDD>
<BBB id=“b3”/>
</DDD>
<CCC/>
</AAA>
Xpath: //@id: chọn tất cả các phần tử có thuộc tính mang tên id.
Xpath: //BBB[@id]: chọn tất cả các phần tử BBBcó thuộc tính mang tên id
Xpath: //BBB[@name]: chọn tất cả thuộc tính name của phần tử BBB
Xpath: //BBB[@*]: chọn tất cả các phần tử BBB có khai báo thuộc tính.
Xpath: //BBB[not(@*)]: chọn tất cả các phần tử BBB không có khai báo thuộc
tính
• Chọn phần tử trong tài liệu dựa trên số đếm: dùng hàm count() để xác định
tiêu chuẩn lựa chọn dựa vào tổng số phần tử có mặt trong tài liệu.
Ví dụ:
Xpath: //*[count(BBB)=2]: chọn tất cả các phần tử có chứa 2 phần tử
con BBB
Xpath: //*[count(*)=2]: chọn tất cả các phần tử có 2 phần tử con.
• Chọn phần tử dựa trên tên của phần tử: có thể dựa trên tên của phần tử để
lọc ra các phần tử cần chọn.
Ví dụ:
Xpath: //*[name()=‘BBB’]: chọn các phần tử BBB trong tài liệu.
Xpath: //*[starts-with(name(), ‘B’)]: chọn tất cả các phần tử có tên bắt
đầu bằng chữ B
Xpath: //*[contains(name(), ‘C’)]: chọn các phần tử mà tên có chứa kí tự
C.
• Chọn phần tử dựa vào chiều dài thẻ: hàm string-length() trả về chiều dài
của tên thẻ, dùng hàm này để làm tiêu chuẩn chọn.
Ví dụ:
Xpath: //*[string-length(name())=3]: chọn tất cả các phần tử mà tên có
chiều dài bằng 3.
Xpath: //*[string-length(name())<3]: chọn tất cả các phần tử mà tên có
chiều dài bé hơn 3.
• Chọn nhóm các phần tử dựa trên điều kiện logic: có thể kết hợp nhiều lựa
chọn hay đường dẫn Xpath với nhau trong qua phép kết hợp bằng toán tử
|.
Ví dụ:
Xpath: //CCC | //BBB
Xpath: //AAA/EEE | //BBB
• Chỉ định phần tử con trong đường dẫn: có thể sử dụng child để chỉ định chọn
phần tử chứa phần tử con.
Ví dụ:
Xpath: /AAA tương đương //child::AAA: chọn tất cả các phần tử AAA bắt
đầu từ gốc.
Xpath: /AAA/BBB tương đương /child::AAA/child::BBB tương đương
/child::AAA/BBB
• Chọn phần tử con: toán tử descendant dùng để chọn các phần tử con.
Ví dụ:
Xpath: /descendant::* :chọn tất cả các phần tử là con của phần tử gốc.
Xpath: /AAA/BBB/descendant::* : chọn tất cả các phần tử con của
/AAA/BBB
Xpath: //CCC/descendant::* : chọn mọi phần tử là con của phần tử CCC
Xpath: //CCC/descendant::DDD : tìm phần tử DDD là con của CCC
• Chọn phần tử cha: dùng toán tử parent để chọn một phần tử là cha (một
cấp) của một phần tử chỉ định.
Ví dụ: //DDD/parent::* : chọn phần tử là cha của phần tử DDD
• Chọn các phần tử cha: dùng toán tử ancestor để chọn các phần tử trên
phần tử chỉ định 1 hay nhiều cấp.
• Chọn các phần tử cùng cấp kế tiếp: dùng toán tử following-sibling để yêu
cầu chọn chọn các phần tử cùng cấp.
Ví dụ:
Xpath: /AAA/BBB/following-sibling::*: chọn các phần tử cùng cấp tiếp
theo sau /AAA/BBB
Xpath: //CCC/following-sibling::*: chọn các mọi phần tử trong tài liệu
cùng cấp và theo sau phần tử CCC
• Dùng từ khóa preceding-sibling để chọn các phần tử cùng cấp trước phần
tử chỉ định.
• Dùng từ khóa following để chọn các phần tử theo sau phần tử chỉ.
• Dùng từ khóa preceding để chọn tất cả các phần tử đứng trước phần tử chỉ
định.
• Chọn phần tử cấp dưới và phần tử chỉ định dùng từ khóa descendant-or-
self.
• Chọn phần tử cấp trên và phần tử chỉ định dùng từ khóa ancestor-or-self.
Chương 6: