使用扩展名和所有指示符的XSD验证错误

时间:2014-04-03 19:43:48

标签: validation xsd unordered

我尝试验证以下使用架构扩展和所有指标的架构:

001 <?xml version='1.0' encoding='UTF-8'?>
002 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://myschemas.com/test" elementFormDefault="qualified" attributeFormDefault="unqualified"
    targetNamespace="http://myschemas.com/test">
003 <xsd:complexType name="baseClass">
004  <xsd:all>
005   <xsd:element name="field1" type="xsd:string"/>
006  </xsd:all>
007 </xsd:complexType>
008 <xsd:complexType name="derivedClass">
009  <xsd:complexContent>
010   <xsd:extension base="tns:baseClass">
011     <xsd:all>      <!-- Fails with error: cos-all-limited.1.2 -->
012     <xsd:element name="extField2" type="xsd:string"/>
013    </xsd:all>
014   </xsd:extension>
015  </xsd:complexContent>
016 </xsd:complexType>
017 </xsd:schema>

架构验证在第011行失败,出现以下错误: &#34; cos-all-restricted.1.2:所有模型组必须出现在{min occurrence} = {max occurrence} = 1的粒子中,并且该粒子必须是构成{的一对的一部分复杂类型定义的内容类型。&#34; 如果可以使用全部指标&#34;&lt; all&gt;&#34;继续使用未定义元素顺序的架构扩展,任何人都可以帮助我。因为我不需要指定确切的元素顺序?

提前谢谢你。马西莫

1 个答案:

答案 0 :(得分:2)

您需要XML Schema 1.1才能通过扩展将元素添加到xsd:all内容模型中。如果您可以使用强制元素排序,则可以使用xsd:sequence代替XSD 1.0或1.1。

XML Schema 1.0

请参阅XML Schema Part 1: Structures Second Edition2.2.1.3 Complex Type Definition部分:

  

注意:此规范仅允许附加,而不允许其他类型   扩展。此决定简化了所需的应用程序处理   将实例从派生类型转换为基类型。未来版本可能允许   更多种类的扩展,需要更复杂的转换   效果铸造。

XML Schema 1.1

请参阅W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures2.2.1.3 Complex Type Definition部分:

  

注意:在大多数情况下,此规范仅允许附加,和   不是其他类型的扩展。此决定简化了应用程序   将实例从派生类型转换为实例所需的处理   基础类型。一个特殊情况允许以方式扩展所有组   不能保证新材料只在最后发生   内容。另一个特例是通过Open Contents扩展   交错模式。

另见

Per @ helderdarocha的评论,请务必另见: