1

有人知道混合内容元素(在 dtd 中)需要在末尾添加“*”吗?

例如:<!ELEMENT note (#PCDATA|to|from|header|message)*>

我指的是我不想再重复任何事情的情况......我只想能够在#PCDATA 和其他元素之间进行选择。

我知道如果我在 decleration 的末尾去掉“*”,我会得到一个糟糕的 DTD decleration ...但是 - 我不知道这是什么原因......

有谁知道为什么?

4

2 回答 2

6

您遇到了这个限制,因为混合内容模型只允许限制出现的元素而不是它们的顺序或数量。恐怕这是XML 规范本身所要求的。

恐怕混合内容很难。该模型的设计考虑了文档 - 当您想到内联文本时它是有意义的,但在许多其他情况下则不然。如果您可以选择,最佳实践建议您创建一个元素来包含您的 PCDATA。如果你不能,那么我担心你会受到混合内容模型的限制(我担心使用另一种模式语言也无济于事)。

于 2010-12-14T06:45:50.070 回答
0

你想使用任何

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE things [
    <!ELEMENT things ANY>
]>
<things>
    <person name="a" />
    <cats />
    <dogs />
    <animals><a rel="gogo" /></animals>
</things>

此外,*是零到更多次出现的运算符。所以(element|element2)*说要么或/和

于 2010-12-13T20:50:33.780 回答