如果我有:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE country[
<!ELEMENT country
(president | king | (king,queen) | queen)>
<!ELEMENT president (#PCDATA)>
<!ELEMENT king (#PCDATA)>
<!ELEMENT queen (#PCDATA)>
]>
如果我们尝试验证,为什么(president | king | (king,queen) | queen)>
会生成以下错误
<country><king>Luis</king></country>
我们收到错误消息[...]Both 1st and 2nd occurence of "king" are possible
。如果我写的是(president | (king) | (king,queen) | queen)>
?
答案 0 :(得分:1)
这是因为您的内容模型是非确定性的。这意味着给定king
元素,解析器无法在不向前看的情况下确定匹配哪个模型。有关详细信息,请参阅Deterministic Content Models (Non-Normative)。
当queen
出现时,我要做的是king
可选:
<!ELEMENT country (president | (king,queen?) | queen)>
对评论的回应......
XML处理器无法使用&#34;展望未来&#34;为了弄清楚会发生什么事情&#34;发生&#34;匹配&#34;国王&#34;,对吧?
右。例如,假设我们有country
元素:
<country>
<king/>
</country>
我们在DTD中声明country
:
<!ELEMENT country (president | king | (king,queen) | queen)>
country
的内容有4种可能的选项:
因此,如果我们的XML中有king
元素,则解析器不知道它是选项#2还是选项#3。
如果我们这样声明country
:
<!ELEMENT country (president | (king,queen?) | queen)>
country
的内容有3种可能的选项:
如您所见,如果我们的XML中有一个king
元素,那么解析器只能选择一个可能的选项。