我尝试验证以下使用架构扩展和所有指标的架构:
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;继续使用未定义元素顺序的架构扩展,任何人都可以帮助我。因为我不需要指定确切的元素顺序?
提前谢谢你。马西莫
答案 0 :(得分:2)
您需要XML Schema 1.1才能通过扩展将元素添加到xsd:all
内容模型中。如果您可以使用强制元素排序,则可以使用xsd:sequence
代替XSD 1.0或1.1。
请参阅XML Schema Part 1: Structures Second Edition,2.2.1.3 Complex Type Definition部分:
注意:此规范仅允许附加,而不允许其他类型 扩展。此决定简化了所需的应用程序处理 将实例从派生类型转换为基类型。未来版本可能允许 更多种类的扩展,需要更复杂的转换 效果铸造。
请参阅W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures,2.2.1.3 Complex Type Definition部分:
注意:在大多数情况下,此规范仅允许附加,和 不是其他类型的扩展。此决定简化了应用程序 将实例从派生类型转换为实例所需的处理 基础类型。一个特殊情况允许以方式扩展所有组 不能保证新材料只在最后发生 内容。另一个特例是通过Open Contents扩展 交错模式。
Per @ helderdarocha的评论,请务必另见: