DTD的混合内容模型

时间:2011-10-13 12:23:37

标签: xml 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无效

1 个答案:

答案 0 :(得分:5)

您的XML和DTD都存在一些问题:

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

  2. 关闭\时,您使用了反斜杠(/)而不是正斜杠(charm)。

  3. 如果您有mixed content,则无法使用#PCDATA指定,和子元素的顺序。您必须使用|(或)和星号(*)。

  4. ATTLIST声明中,您忘记添加声明属性的元素的名称。

  5. XML中的Id属性与DTD中属性名称id的大小写不匹配。

  6. 以下是更新的XML和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>