没有严格的元素顺序如何定义DTD?

发布于 2024-10-31 18:39:55 字数 92 浏览 5 评论 0原文

作为一名 XML“菜鸟”,我发现在创建针对 DTD 进行验证的 XML 流/文件时元素顺序的重要性。是否可以定义一个不依赖于元素顺序的 DTD?如果,那么请提供语法示例。

As an XML "noob" I have discovered the importance of element order when creating an XML stream/file that is validated against a DTD. Is it possible to define a DTD that is not order dependent on elements ? If, so please provide syntactic example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

生寂 2024-11-07 18:39:55

您使用(垂直管道)和重复(星号:)

<!ELEMENT eltype1 ( eltype2 | eltype3)*>

这意味着eltype1可以包含任意数量的eltype2重复eltype3

You use or (a vertical pipe) and repeat (an asterisk:)

<!ELEMENT eltype1 ( eltype2 | eltype3)*>

This means eltype1 can contain any number of repetitions of eltype2 or eltype3.

千秋岁 2024-11-07 18:39:55

当前接受的答案的唯一问题是它不会以任何顺序仅强制每个元素之一。例如,您可以有 2 个 eltype2 元素,但没有 eltype3 元素。

如果您需要确保两个元素都存在并且每个元素仅出现一次,则这是更精确的元素声明:

<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>

内部子集中的示例:

<!DOCTYPE eltype1 [
<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
<!ELEMENT eltype2 (#PCDATA)>
<!ELEMENT eltype3 (#PCDATA)>
]>
<eltype1>
  <eltype3>element three</eltype3>
  <eltype2>element two</eltype2>
</eltype1>

The only issue with the currently accepted answer is that it doesn't force only one of each element in any order. For example, you could have 2 eltype2 elements and no eltype3 elements.

If you need to be sure that both elements are present and that each occurs only one time, this is a more precise element declaration:

<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>

Example in an internal subset:

<!DOCTYPE eltype1 [
<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
<!ELEMENT eltype2 (#PCDATA)>
<!ELEMENT eltype3 (#PCDATA)>
]>
<eltype1>
  <eltype3>element three</eltype3>
  <eltype2>element two</eltype2>
</eltype1>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文