1

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

想象一下下面的例子。我有一个名为“response”的元素,它可以包含无序和未定义数量的标签“character”和“player”,或者恰好包含一个标签“base”和未定义数量的“option”标签。如:

<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*)>

不完全是我想要的,如果我在我的层次结构中执行角色->玩家->角色,我的编辑也会哭。w3schools 和其他一些页面告诉我,比如

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

将是混合内容,我可以随心所欲地在我的标签中添加东西(或者至少,这就是我所相信的),但这既不是我想要的,我的编辑似乎也不满意.

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

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

[编辑:删除了问题标题中对“混合内容”的错误引用。]

4

1 回答 1

1

你离得太近了!试试这个:

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

另请注意,#REQUIRED已从声明中删除。您只希望在属性声明 ( ATTLIST) 中使用它。如果您将其删除,那么您的最后一次尝试也会奏效:

<!ELEMENT response (character | player | base | option)*>
于 2012-08-21T14:51:54.980 回答