1

如果我有:

<?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)>

4

1 回答 1

1

这是因为您的内容模型是不确定的。这意味着给定king元素,解析器无法在不向前看的情况下确定正在匹配的模型。有关更多详细信息,请参阅确定性内容模型(非规范)

我要做的是在 a存在queen时使其成为可选:king

<!ELEMENT country (president | (king,queen?) | queen)>

回复评论...

XML 处理器不能使用“前瞻”来确定匹配“国王”后会“发生”什么,对吧?

对。例如,假设我们有这个country元素:

<country>
  <king/>
</country>

country我们在 DTD 中这样声明:

<!ELEMENT country (president | king | (king,queen) | queen)>

的内容有 4 个可能的选项country

  1. 一位“总统”
  2. 一个“国王”
  3. 一“王”后一“王”
  4. 一位“女王”

因此,如果我们king的 XML 中有一个元素,解析器不知道它是选项 #2 还是选项 #3。

如果我们这样声明country

<!ELEMENT country (president | (king,queen?) | queen)>

的内容有 3 个可能的选项country

  1. 一位“总统”
  2. 一位“国王”后跟零位或一位“女王”
  3. 一位“女王”

如您所见,如果我们king的 XML 中有一个元素,那么解析器只能选择一个可能的选项。

于 2016-01-18T17:39:00.093 回答