我写了一个像这样的简单xsd文件
<xs:element name="Cell">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element ref="RF"/>
<xs:element ref="BCCH"/>
<xs:element ref="CarrierMeas"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="RF"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
当我在notepad ++中使用xml工具验证xml文件时,它会显示
“无法解析模式文件,本地复杂类型:内容模型是 不是决定论者!“
我发现如果两个序列具有相同的第一个元素,则会发生此错误,如果我将XSD中的任何“RF”替换为其他名称,它将正常工作。我没有找到关于此的参考文档,请你帮我告诉我为什么?非常感谢你!
答案 0 :(得分:1)
基本上,要求解析器不必向前看&#34;在文档中确定哪个是应用的内容模型(应该是DTD还是模式)。这也称为&#34; unique particle violation&#34;。
作为参考,您可以查看http://www.w3.org/TR/REC-xml/#determinism。
无论如何,您的内容模型可以轻松地重写,而无需重命名任何元素:
<xs:element name="Cell">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element ref="RF" />
<xs:sequence minOccurs="0">
<xs:element ref="BCCH"/>
<xs:element ref="CarrierMeas"/>
</xs:sequence>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
允许的元素序列正是您希望在发布的模式中实现的元素序列。 (但请注意,有时可能无法将XSD重写为非模糊形式。)