通过带有“|”字符的DTD进行XML验证。独家或如何使用它?

时间:2012-08-21 12:34:23

标签: xml dtd

我很难将头包裹在| DTD中用于定义哪些元素可以包含在另一个元素中的字符。我试了谷了很长一段时间,但没有一个主要的结果以我能理解的方式解决这个问题 - 可能只是我坐在墙前生动地凝视着。

想象一下以下示例。我有一个名为"响应"可以包含无序和未定义数量的标签"字符"和#34;玩家"或者特别是一个标签" base"和未完成的"选项"标签。如:

<response>
    <character>text</character>
    <player>text</player>
    <character>text</character>
</response>

有效。也:

<response>
    <base>text</base>
    <option>other elements</option>
    <option>other elements</option>
    <option>other elements</option>
</response>

也有效。但是,字符/播放器和基本/选项标签的混合无效。 我在我的DTD中尝试了以下内容:

<!ELEMENT response ((character*, player*)
                   |(base, option*))>
然而,这并没有导致任何适当的验证。某种

<!ELEMENT response (character*, player*, 
                    base*, option*)>

并不是我想要的,我的编辑也会哭,如果我在我的层次结构中做了character-&gt; player-&gt;字符。 w3schools和其他一些页面告诉我,像

<!ELEMENT response (character | player | base 
                   | option)*>

将是混合内容,我可以像我希望的那样在我的标签中添加内容(或者至少,这是我所能相信的内容),但这不是我想要的,我的编辑似乎也不满意。

所以,如果有人能告诉我正确使用|,我会很高兴在DTD中定义元素时的字符。提前谢谢。

编辑:编辑了 - 当然是假的 - 声明中的#REQUIRED标签。我没有在我的代码中使用它们,只是搞砸了写这个。

[修改:删除了对混合内容的错误引用&#39;在问题标题中。]

1 个答案:

答案 0 :(得分:1)

你太近了!试试这个:

<!ELEMENT response ((character|player)*|(base,option*))>

另请注意,#REQUIRED已从声明中删除。您只需要在属性声明(ATTLIST)中。如果你将它删除,你的最后一次尝试也会起作用:

<!ELEMENT response (character | player | base | option)*>
相关问题