我很难将头包裹在| 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;在问题标题中。]
答案 0 :(得分:1)
你太近了!试试这个:
<!ELEMENT response ((character|player)*|(base,option*))>
另请注意,#REQUIRED
已从声明中删除。您只需要在属性声明(ATTLIST
)中。如果你将它删除,你的最后一次尝试也会起作用:
<!ELEMENT response (character | player | base | option)*>