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 trong xml 1

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>

Trả lời