2011-10-13 72 views
1

說我有這樣的事情DTD的混合內容模型

 <offor>Ubuntu Juju is all that you need 
     <charm Id="lisp" \>.</offor><offor>This one is the name thing</offor> 

這是我DTD

 <!ELEMENT offor (#PCDATA, charm?) > 
     <!ELEMENT charm EMPTY> 
     <!ATTLIST id ID #REQUIRED> 

有人能幫助我嗎?我DTD不工作

回答

5

有幾件事情錯你都XML和DTD中:

  1. 你沒有根元素。我在下面的示例中添加了<doc>

  2. 當您關閉charm時,您使用了反斜槓(\)而不是正斜槓(/)。

  3. 如果您有mixed content,則無法指定#PCDATA的順序以及使用,的子元素。您必須使用|(或)和星號(*)。

  4. 在您的ATTLIST聲明中,您忘記添加聲明屬性的元素名稱。

  5. XML中的Id屬性與DTD中屬性名稱id的大小寫不匹配。

下面是更新的XML和DTD的示例。 DTD位於內部子集中,但如果作爲外部DTD使用,DTD也可以工作。

<!DOCTYPE doc [ 
<!ELEMENT doc (offor+)> 
<!ELEMENT offor (#PCDATA|charm)* > 
<!ELEMENT charm EMPTY> 
<!ATTLIST charm 
      id ID #REQUIRED> 
]> 
<doc> 
    <offor>Ubuntu Juju is all that you need 
    <charm id="lisp"/>.</offor><offor>This one is the name thing</offor> 
</doc> 
+0

優秀的答案。我不知道你無法指定混合內容的順序。偉大的解釋。 – Spredzy