Xml DTD:0、1或2个元素

Xml DTD:0、1或2个元素,xml,dtd,Xml,Dtd,我需要一个DTD,它允许元素a有0、1或2个子元素B。我试过了 <!ELEMENT A (B? |(B,B))> 问题是什么?我如何解决?或者,是否可以使用DTD解决此问题?尝试此DTD以获得所需的XML: <!ELEMENT A ((B?|(B,B)|B))> <!ELEMENT B (#PCDATA)> 内容模型,例如 (B? |(B,B)) 或 或 (B? | (B,B) | B) 是不确定的;如果不向前看,解析器就无法判断匹配的是哪个B XML

我需要一个DTD,它允许元素a有0、1或2个子元素B。我试过了

<!ELEMENT A (B? |(B,B))>

问题是什么?我如何解决?或者,是否可以使用DTD解决此问题?

尝试此DTD以获得所需的XML:

<!ELEMENT A ((B?|(B,B)|B))>
<!ELEMENT B (#PCDATA)>

内容模型,例如

(B? |(B,B))

(B? | (B,B) | B)
是不确定的;如果不向前看,解析器就无法判断匹配的是哪个
B

XML 1.0建议中不允许使用非确定性内容模型:。然而,决定论要求与SGML兼容。我想这可能有助于解释XML解析器之间的行为差异:

  • xmllint(libxml2)更“苛刻”,并将上述所有内容模型报告为错误(“A的内容模型不是确定性的”)
  • Xerces-J(Oxygen中使用的解析器,顺便说一句)可能并不试图与SGML兼容,而是接受它们

另请参见:

试试这是我的第一个解决方案,但同样的错误我检查了这个DTD,它在氧气中工作正常。它能够根据需要支持类似XML的内容。
(B?, B?)
(B? | (B,B) | B)