DTD 中有什麼內容?

http://www-128.ibm.com/developerworks/cn/xml/x-dtdint/index.html

XML 的優點在於它允許您定義自己的有意義的標記,因此您可以最大程度地定製文檔。但 XML 就是 XML(可擴展),而人就是人(瘋狂的人),這可能很快就會無法控制。解決方案是 DTD,它指定了 XML 文檔的標記。簡而言之,DTD 指定:可以在文檔中存在的元素、那些元素可以具有的屬性、在元素內部元素的層次結構以及元素在整個文檔中出現的順序。

雖然 DTD 不是必需的,但它們確實帶來方便。DTD 適合三個基本用途。它能:

  • 對標記編制文檔
  • 加強標記參數內部的一致性
  • 使 XML 語法分析器能夠確認文檔

如果不對 XML 文檔進行 DTD 定義,文檔就無法由 XML 語法分析器進行確認。使用 XML Schema 實例來代替 DTD 如何?(請參閱側欄 模式如何?)清單 3 是清單 1 中顯示的 XML 文檔的 DTD。


清單 3. 精簡 person.xml 的 DTD

<!ELEMENT person (firstname, lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT nothing EMPTY>

關於示例的幾點說明

清單 3 中 DTD 的第一行定義了 XML 文檔的父元素: person 。person 元素有兩個子元素: firstnamelastname

第二和第三行包含了元素屬性 #PCDATA ,它表明 firstnamelastname 元素可能包含經過語法分析的字符數據(在這種情況下是文本)。DTD 文件的最後一行描述了一個空標記: nothing

從清單 3 中的 DTD 可以看出,任何閱讀我們的 XML 文檔的人(以及對它進行語法分析的語法分析器)都知道 person 元素僅包含兩個文本元素: firstnamelastname 。此外,DTD 規定,在整個文檔中, firstname 元素必須在 lastname 元素之前出現。

在轉到更復雜的示例之前,讓我們回顧一下一些最常用的 DTD 語法元素。可以在 W3C 主頁上找到完整的 DTD 規範(請參閱 參考資料)。

DTD 語法快速指南

A、B、C 和 D 是在下例中代表元素的變量。

元素必須有正好一個 A 、至少一個 B (由加號表示)、零個或多個 C (由星號表示)以及零個或一個 D (由問號表示):

<!ELEMENT element (A, B+, C*, D?)>

元素可能有 ABC 之一:

<!ELEMENT element (A | B | C)>

元素不包含任何內容:

<!ELEMENT element EMPTY>

元素可以包含在 DTD 中列出的任何元素:

<!ELEMENT element ANY>

元素可能包含經過語法分析的字符數據或另一個元素( element2 )。星號(*)表示混合內容模型 — 其中元素可以包含不同類型的屬性。

<!ELEMENT element (#PCDATA|element2)*>

下例將文本 "entity reference" 插到文檔中它出現的任何地方:

<!ENTITY element "entity reference">

可以看到在 XML 文檔中該實體引用元素如下:

&element;

下例表明其元素是一個包含三個屬性的空標記:屬性 1( att1 )是一個可選屬性,屬性 2( att2 )是帶有固定值 "A" 的屬性,屬性 3( att3 )是必需的文本屬性。

   <!ELEMENT element EMPTY>
     
        
        <!ATTLIST element
     att1 ID #IMPLIED
     att2 CDATA #FIXED "A"
     att3 CDATA #REQUIRED>
      
      

可以看到在 XML 文檔中使用的這個元素如下:

<element att2="A" att3="MustHave"/>

屬性 CDATA 表示包括的信息應該是文本。 ID 屬性表明必須填入唯一的標識。每個元素只能有一個 ID 屬性。另外, CDATA 表示 att2att3 可能包含任何字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章