Dtd trong xml (Bài 4)
Dtd trong xml được sử dụng để validate tài liệu XML. Chẳng hạn, chúng ta muốn qui định tài liệu xml như: Phần tử root của tài liệu phải là note; note chỉ chứa 4 phần tử: “to,from,heading,body”; Kiểu dữ liệu của 4 phần tử: chuỗi, không chứa được phần tử khác
DTD viết tắt Document Type Definition. DTD xác định cấu trúc và sự hợp lý của các phần tử và thuộc tính trong tài liệu XML. Một tài liệu XML đúng cú pháp được gọi là “Well Formed”. Đúng cấu trúc được gọi là validate.
DTD trong XML – Tạo phần tử (Element)
Cú pháp
<!ELEMENT element-name (#PCDATA)>
Ví dụ: Định nghĩa phần tử tên <to> chỉ được phép chứa giá trị không chứa được phần tử khác
<!ELEMENT to (#PCDATA)>
DTD trong XML – Tạo phần tử chứa phần tử khác
Một hoặc nhiều phần tử con được khai báo bên trong dấu ngoặc đơn
Cú pháp khai báo chỉ chứa một phần tử con
<!ELEMENT element-name (child1)>
Cú pháp khai báo chỉ chứa nhiều phần tử con
<!ELEMENT element-name (child1,child2,...)>
Ví dụ khai báo phần tử note gồm 4 phần tử con là to, from, heading và body
<!ELEMENT note (to,from,heading,body)>
DTD trong XML – Chỉ định một phần tử phải xuất hiện một lần
Cú pháp
<!ELEMENT element-name (child-name)>
Ví dụ khai báo phần tử note chứa phần tử message
<!ELEMENT note (message)>
Trong ví dụ trên khai báo phần tử message phải xuất hiện một lần bên trong phần tử note
DTD trong XML – Chỉ định một phần tử xuất hiện ít nhất một lần
Cú pháp
<!ELEMENT element-name (child-name+)>
Ví dụ khai báo phần tử note chứa phần tử message
<!ELEMENT note (message+)>
Trong ví dụ trên khai báo phần tử message phải xuất hiện ít nhất một lần bên trong phần tử note
DTD trong XML – Chỉ định một phần tử không xuất hiện hoặc xuất hiện nhiều lần
Cú pháp
<!ELEMENT element-name (child-name*)>
Ví dụ khai báo phần tử note chứa phần tử message
<!ELEMENT note (message*)>
Trong ví dụ trên khai báo phần tử message có thể không xuất hiện hoặc xuất hiện nhiều lần bên trong phần tử note
DTD trong XML – Chỉ định một phần tử không xuất hiện hoặc xuất hiện một lần
Cú pháp
<!ELEMENT element-name (child-name?)>
Ví dụ khai báo phần tử note chứa phần tử message
<!ELEMENT note (message?)>
Trong ví dụ trên khai báo phần tử 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
DTD trong XML – Chỉ định một trong hai phần tử xuất hiện
Ví dụ khai báo phần tử note chứa các phần tử con
<!ELEMENT note (to,from,header,(message|body))>
Trong ví dụ trên khai báo phần tử note phải chứa một phần tử to, một phần tử from, một phần tử header, một phần tử hoặc là message hoặc body (không được xuất hiện cả hai).
DTD trong XML – Khai báo thuộc tính cho phần tử
Cú pháp
<!ATTLIST element-name attribute-name attribute-type attribute-value>
Ví dụ khai báo thuộc tính type cho phần tử payment
<!ATTLIST payment type CDATA "check">
Kết quả trong tài liệu xml
<payment type="check"/>
Trong đó attribute-type có thể là
attribute-type | Miêu tả |
CDATA | Giá trị là các ký tự |
(en1|en2|..) | Giá trị phải là một từ một danh sách liệt kê |
Trong đó attribute-value có thể là
attribute-value | Giải thích |
value | Giá trị mặc định của thuộc tính |
#REQUIRED | Giá trị của thuộc tính là bắt buộc |
#IMPLIED | Giá trị của thuộc tính không bắt buộc |
#FIXED value | Giá trị thuộc tính là cố định |
DTD trong XML – Ví dụ mẫu 1
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
DTD trong XML – Ví dụ mẫu 2 (Định nghĩa DTD ngoài XML)
Tạo tập tin Sample.dtd
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
Tạo tập tin Sample.xml
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "Sample.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
DTD trong XML – Bài tập thực hành
Dựa vào cấu trúc tài liệu xml bên dưới, hãy tạo tập tin DTD
<?xml version="1.0"?> <!DOCTYPE DOCUMENT SYSTEM "mydtd.dtd"> <DOCUMENT> <CUSTOMER TYPE = "Good"> <NAME> <LAST_NAME> aaa </LAST_NAME> <FIRST_NAME> bbb </FIRST_NAME> </NAME> <DATE> 1/1/03 </DATE> <ORDERS class="SanPham"> <ITEM> <PRODUCT> <PRODUCT_ID>12</PRODUCT_ID> </PRODUCT> <NUMBER>25</NUMBER> <PRICE>20</PRICE> </ITEM> <ITEM> <PRODUCT>Tomatoes</PRODUCT> <NUMBER>25</NUMBER> <PRICE>3</PRICE> </ITEM> </ORDERS> </CUSTOMER> </DOCUMENT>