DTD的混合内容模型

问题描述:

说我有这样的事情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不工作

有几件事情错你都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