DTD的混合内容模型

use*_*677 1 xml dtd

说我有这样的事情

       <offor>Ubuntu Juju is all that you need 
      <charm Id="lisp" \>.</offor><offor>This one is the name thing</offor>
Run Code Online (Sandbox Code Playgroud)

这是我的DTD

       <!ELEMENT offor (#PCDATA, charm?) >
      <!ELEMENT charm EMPTY>
      <!ATTLIST id ID #REQUIRED>
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?我的DTD无效

Dan*_*ley 5

您的XML和DTD都有一些问题:

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

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

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

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

  5. Id在XML属性不匹配的属性名称的情况下,id在DTD.

这是更新的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>
Run Code Online (Sandbox Code Playgroud)