我需要一个 DTD,它允许元素 A 有 0、1 或 2 个子元素 B。我试过了
<!ELEMENT A (B? |(B,B))>
但后来我得到一个错误:
validity error : Content model of A is not determinist
有什么问题,我该如何解决?还是不能用DTD解决?
内容模型,例如
(B? |(B,B))
或者
(B?, B?)
或者
(B? | (B,B) | B)
是不确定的;B
如果不向前看后面的内容,解析器就无法判断哪个正在匹配。
XML 1.0 建议中不允许使用非确定性内容模型:http: //www.w3.org/TR/xml/#determinism。但是,确定性要求是为了与 SGML 兼容。我想这可能有助于解释 XML 解析器之间的行为差异:
试试这个 DTD 以获得所需的 XML:
<!ELEMENT A ((B?|(B,B)|B))>
<!ELEMENT B (#PCDATA)>