XSD两个xs:xs内的第一个元素相同的序列:选择错误

时间:2015-11-24 09:07:27

标签: xml xsd

我写了一个像这样的简单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”替换为其他名称,它将正常工作。我没有找到关于此的参考文档,请你帮我告诉我为什么?非常感谢你!

1 个答案:

答案 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重写为非模糊形式。)