一個良好的XML文檔只有受到良好的約束纔能有效的工作,對此,這裏我們用DTD文件對XML進行語義約束。
XML中引入DTD:
<!DOCTYPE 根元素的名稱 SYSTEM “DTD文件的路徑”>
定義元素:
定義任意類型的元素:
<!ELEMENT 元素名 ANY>
定義空元素:
<!ELEMENT 元素名 EMPTY>
定義字符串內容的元素:
<!ELEMENT 元素名 (#PCDATA)>
定義子元素:
定義有序的子元素:
<!ELEMENT 書 (書名,作者,出版社,介紹)>
定義互斥的子元素:(下面三者每次只能出現一次)
<!ELEMENT 書 (好書|壞書|二手書)>
子元素出現的頻率:+代表出現1次或多次,*代表出現0次或多次,?代表出現0次或1次
定義元素的屬性:
約束類型:#REQUIRED:必需的屬性 #IMPLIED:可有可無的屬性 #FIXED:固定的屬性
<!ATTLIST 元素名 屬性名 屬性類型 [約束類型] [默認值]>
枚舉類型:
<!ATTLIST 人 類型 (中國人|美國人|日本人) #REQUIRED>
定義實體(相當於C語言的宏定義):
<!ENTITY 實體名 "實體值"> <!-- 定義格式-->
&實體名;<!-- 引用格式-->
下面寫一個例子:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT qq (friend|classmate)*>
<!ELEMENT friend (name,age)>
<!ELEMENT classmate (school)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT school EMPTY>
<!ATTLIST friend id ID #REQUIRED>
<!ATTLIST classmate name CDATA #REQUIRED>
對應的XML文檔:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qq SYSTEM "E:\Util\XMLSPY\XMLCode\company.dtd">
<qq>
<friend id="first">
<name>張三</name>
<age>12</age>
</friend>
<classmate name="李四">
<school />
</classmate>
</qq>