DTD phải định rừ nguyờn tắc cho từng thành phần, thực thể và thuộc tớnh sẽ xuất hiện trong tài liệu XML. Nếu khụng, tài liệu XML sẽ đƣợc xem là khụng hợp lệ.
2.3.2.1. Quy định cỏc thành phần (Elements)
Quy định nội dung và cấu trỳc của từng thành phần trong tài liệu XML. Dựng thẻ khai bỏo <!ELEMENT> định nghĩa kiểu tƣ liệu DTD cho một phần tử theo cấu trỳc sau:
<!ELEMENT Name Contents>
Trong đú, Name là tờn thành phần muốn định nghĩa; Contents cú thể là EMPTY (thành phần khụng chứa gỡ cả), ANY (chứa tổ hợp thành phần và văn bản khụng xỏc định) hoặc chứa cả hai nội dung bao gồm dữ liệu cú thể dựng phõn tớch hoặc cỏc thành phần khỏc. Một số quy định thành phần cơ bản:
Quy định thành phần chỉ chứa văn bản: Thành phần đƣợc quy định là chứa #PCDATA (Parsed Character Data) khụng thể chứa cỏc thành phần nào khỏc. Hay núi một cỏch khỏc, nú chỉ chứa dữ liệu văn bản thụ, khụng thuộc phần định dạng. Theo thớ dụ trờn, định nghĩa cỏc thành phần con HOCPHAN, BAISO, TENBAI chỉ chứa văn bản thụ:
<Element HOCPHAN (#PCDATA)> <Element BAISO (#PCDATA)> <Element TENBAI (#PCDATA)>
Quy định thành phần chứa dóy: Quy định dóy thành phần con chứa trong thành phần cha. Mỗi thành phần đƣợc phõn cỏch bằng dấu phẩy. Thớ dụ, <Element BAIGIANG (HOCPHAN,BAISO,TENBAI)>
Quy định cỏc lựa chọn: Cú thể quy định lựa chọn giữa cỏc thành phần, thành phần DTD cú thể chứa hoặc thành phần <eName1> hoặc thành phần <eName2>. Thớ dụ, <!Element eName (eName1|eName2)>
Quy định số lượng đơn vị: Đơn vị là thành phần đơn lẻ. Trong DTD cú ba ký hiệu đại diện, chỳng cho phộp quy định số lƣợng đơn vị xuất hiện trong thành phần. Ký tự ? cho biết đơn vị xuất hiện nhiều nhất là một lần trong thành phần đƣợc xỏc định. Ký tự + cho biết đơn vị phải xuất hiện ớt nhất một lần và bao nhiờu lần tựy ý trong thành phần đƣợc xỏc định. Ký tự * cho biết đơn vị cú thể xuất hiện bao nhiờu lần cũng đƣợc, hoặc khụng trong thành phần đƣợc xỏc định.
Ký tự đại diện Diễn giải
eName* Khụng hoặc cú nhiều thành phần con giống nhau eName+ Cú một hoặc nhiều thành phần con giống nhau
eName? Thành phần eName hoặc khụng cú thành phần nào cả eName1,eName2 Thành phần eName1 tiếp đến thành phần eName2 eName1 | eName2 Thành phần eName1 hoặc thành phần eName2
(expression) Tập cỏc thành phần expression trong cặp ngoặc sẽ ảnh hƣởng bởi ký tự đại diện *, + hoặc ?
Bảng 2.3.2.1: Túm tắt nguyờn tắc sử dụng ký tự đại diện 2.3.2.2. Cỏc thực thể (Entities)
Một thực thể là cỏch XML tham chiếu đến một mục dữ liệu, thực thể cú thể là văn bản hoặc là dữ liệu nhị phõn. Cú nhiều loại thực thể, hoạt động của chỳng là nhƣ nhau. Khỏc biệt nằm ở cỏch quy định thực thể và chỳng chứa loại thụng tin nào. Cú thể chia thực thể thành hai nhúm chớnh: thực thể tổng quỏt (general entity) và thực thể tham số (parameter entity). Cú thể tiếp tục chia thực thể tổng quỏt thành nội hoặc ngoại tựy theo chỳng đƣợc quy định trong DTD hay tập tin ngoài. Thực thể cú thể ở dạng phõn tớch hoặc khụng phõn tớch. Nội dung thực thể phõn tớch đƣợc trỡnh phõn tớch XML phõn tớch khi nú đi qua tài liệu XML. Nội dung thực thể khụng phõn tớch-thƣờng trỏ vào dữ liệu nhị phõn phi văn bản-khi khụng muốn trỡnh phõn tớch XML phõn tớch chỳng, thớ dụ nhƣ cỏc tập tin ảnh, phim,....[3,5,10].
Thực thể tổng quỏt nội và thực thể tổng quỏt ngoại
Khai bỏo và định nghĩa một thực thể tổng quỏt:
<!ENTITY Name Definition>
Name là tờn thực thể, Definition là định nghĩa của thực thể. Tờn của thực thể đƣợc dựng để tham chiếu đến nội dung của nú, nội dung định nghĩa của thực thể đơn giản nhất là cỏc văn bản cần thay thế khi thực thể đƣợc tham chiếu đến. Để tham chiếu đến nội dung thực thể phải theo nguyờn tắc đặt tờn XML hợp lệ nhƣ
&Name. Thớ dụ, định nghĩa và tham chiếu đến thực thể tổng quỏt nội cú tờn DinhSinh:
<?xml version=“1.0” standalone=“yes”?> <!DOCTYPE BAIGIANG [
<!ENTITY DinhSinh „<entry>
<HOTEN><HO>Dinh</HO><TEN>Sinh</TEN></HOTEN> <DIENTHOAI>056-811438</DIENTHOAI> <EMAIL href=”mailto:pdsinh@yahoo.com ”/> </entry>‟> ]> <BAIGIANG> &DinhSinh; <BAIGIANG>
Thực thể cú thể đƣợc định nghĩa và khai bỏo từ một nguồn bờn ngoài và đƣợc gọi là thực thể ngoại. Việc khai bỏo thực thể ngoại bằng từ khúa SYSTEM (thực thể dựng trong nội bộ hay tổ chức cỏ nhõn) hoặc PUBLIC (cho phộp thực thể dựng chung toàn cục). Cỳ phỏp:
<!ENTITY Name System URI> <!ENTITY Name Public FPI URI>
Thớ dụ, định nghĩa và tham chiếu đến thực thể tổng quỏt ngoại cú tờn DinhSinh:
<?xml version=“1.0” standalone=“no”?> <!DOCTYPE BAIGIANG [
<!ENTITY DinhSinh SYSTEM “data.xml” ]>
<BAIGIANG>
&DinhSinh; <BAIGIANG>
Nội dung tập tin data.xml nhƣ sau:
<entry>
<HOTEN><HO>Dinh</HO><TEN>Sinh</TEN></HOTEN> <DIENTHOAI>056-811438</DIENTHOAI>
<EMAIL href=”mailto:pdsinh@yahoo.com ”/> </entry>
Thực thể tham số nội và thực thể tham số ngoại
Khỏc với tham chiếu thực thể tổng quỏt, nú bắt đầu bằng ký tự & thỡ tham chiếu thực thể tham số bắt đầu bằng tự %. Việc định nghĩa và khai bỏo thực thể tham số cũng tƣơng tự nhƣ thực thể tổng quỏt ngoại trừ thờm ký tự % vào sau thành phần chỉ thị <ENTITY>. Cỳ phỏp khai bỏo thực thể tham số nội nhƣ sau:
Khai bỏo cỏc thực thể tham số ngoại bằng cỏch thờm từ khúa SYSTEM và PUBLIC:
<!ENTITY %Name System URI> <!ENTITY %Name Public FPI URI>
Thớ dụ, định nghĩa và tham chiếu đến thực thể tham số nội cú tờn listTP (danh sỏch thành phố):
<?xml version=”1.0”?>
<!DOCTYPE DiaChi SYSTEM “DiaChi.dtd”[ <!ENTITY %listTP SYSTEM “listTPho.xml”> %listTP; ]> <DiaChi> <Dienthoai>811438</Dienthoai> <Duong>99 Vu Bao</Duong> <Thanhpho>&qn;</Thanhpho> </DiaChi>
Nội dung tập tin listTPho.xml
<?xml version=”1.0”?> <!ENTITY hn “Ha Noi”>
<!ENTITY hcm “Ho Chi Minh”> <!ENTITY h “Hue”>
<!ENTITY qn “Quy Nhon”> <!ENTITY dn “Da Nang”> <!— và tiếp tục -->
2.3.2.3. Thuộc tớnh (Attribute)
Thuộc tớnh nhằm bổ sung thờm thụng tin cho thành phần thẻ. Định nghĩa danh sỏch thuộc tớnh theo cỳ phỏp sau:
<!ATTLIST eName
attrName Type DefaultValue attrName Type DefaultValue ...
>
Trong đú, eName là tờn thành phần muốn đặt thuộc tớnh attrName cho nú.
Type là kiểu thuộc tớnh. DefaultValue là giỏ trị mặc định mà thuộc tớnh đƣợc gỏn. Thớ dụ, <!ATTLIST Tel Preferred (true|false) “false”>
Trong đú, tờn thành phần là Tel; tờn thuộc tớnh là Preferred, kiểu thuộc tớnh là (true | false) và giỏ trị mặc định của thuộc tớnh là false.
Kiểu Mụ tả
CDATA Dữ liệu ký tự đơn giản khụng chứa phần định dạng
ENTITIES Tham chiếu cỏc thực thể, những thực thể này phải đƣợc khai bỏo trong DTD
ENTITY Tờn tham chiếu của thực thể, nú cũng phải khai bỏo trong DTD Enumerated Đại diện cho một danh sỏch cỏc giỏ trị mà thuộc tớnh cú thể
đƣợc gỏn
ID Tờn định danh duy nhất trong tài liệu XML
Bảng 2.3.2.3.a: Mụ tả cỏc kiểu của thuộc tớnh.
Giỏ trị Mụ tả
VALUE Chuỗi giỏ trị văn bản thụ bọc trong dấu nhỏy kộp hoặc đơn
#IMPLIED Chỉ định rằng khụng cú trị mặc định cho thuộc tớnh và thuộc tớnh này khụng cần phải dựng đến
#REQUIRED Chỉ định rằng khụng cú trị mặc định cho thuộc tớnh nhƣng cần phải gỏn giỏ trị cho thuộc tớnh khi dựng
#FIXED VALUE VALUE là giỏ trị bắt buộc và cố định. Thuộc tớnh luụn mang giỏ trị VALUE này.
Bảng 2.3.2.3.b: Mụ tả giỏ trị mặc định mà thuộc tớnh.