【发布时间】:2013-01-21 11:25:46
【问题描述】:
我正在尝试完成以下元素声明: XML 元素可能包含一个文本或/和一个元素,但它必须至少包含其中一个。
如果我这样做:
<!ELEMENT myelem (#PCDATA|myanotherelem)*>
这意味着骨髓可能仍然是空的。我想过使用
(#PCDATA|myanotherelem)+
但混合内容模型应该从零开始。我该如何处理?
【问题讨论】:
我正在尝试完成以下元素声明: XML 元素可能包含一个文本或/和一个元素,但它必须至少包含其中一个。
如果我这样做:
<!ELEMENT myelem (#PCDATA|myanotherelem)*>
这意味着骨髓可能仍然是空的。我想过使用
(#PCDATA|myanotherelem)+
但混合内容模型应该从零开始。我该如何处理?
【问题讨论】:
XML DTD 中内容模型的唯一合法形式是 (#PCDATA) 和 (#PCDATA | a | b | ... | z)* 对于某些数字元素(零或多个)a、b、...z。
请注意,<myelem></myelem> 形式的元素实际上被 XML 规范视为具有 #PCDATA 内容——您想要指定非零长度的 #PCDATA 内容并非不合理,但那是实际上不是关键字#PCDATA 的含义。您要强加的约束(#PCDATA 内容的最小长度 - 可能您也可能希望它不只包含空白字符)不能用 DTD 表示法表示。这是其他模式语言(例如 XSD 和 Relax NG)通过数据类型添加的内容之一。
【讨论】: