我在下面定义了ComplexType:
<xs:element name="abstractForm" type="abstractFormType" abstract="true"/>
<xs:complexType name="abstractFormType" abstract="true">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id-form" type="xs:NCName"/>
<xs:attribute name="select"/>
<xs:anyAttribute/>
</xs:complexType>
但在代码之后,每次添加ComplexType时都会出现此错误:derivation-ok-restriction : The particle of the type is not a valid restriction of the particle of the base.
例如:
<xs:element name="abstractNewForm" type="abstractNewFormType" abstract="true"
substitutionGroup="abstractForm"/>
<xs:complexType name="abstractNewFormType" abstract="true">
<xs:complexContent>
<xs:restriction base="abstractFormType">
<xs:sequence>
<xs:sequence>
<xs:element name="customize" minOccurs="0" type="abstractCustomizeType"/>
</xs:sequence>
<xs:sequence>
<xs:element name="positions" minOccurs="0" type="abstractPositionsType"/>
</xs:sequence>
</xs:sequence>
<xs:attribute name="id-form" type="xs:NCName" use="required"/>
<xs:attribute name="select"/>
<xs:anyAttribute/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
有人有想法吗? :)
答案 0 :(得分:1)
Saxon接受此作为有效限制,但有警告:
Warning: on line 20 of test.xsd:
There is no global element declaration named {customize}, so the strict wildcard in the
base type can never be satisfied
Warning: on line 23 of test.xsd:
There is no global element declaration named {positions}, so the strict wildcard in the
base type can never be satisfied
请记住,xs:任何默认值为processContents =“strict”,这意味着此处可以显示的唯一元素是在架构中具有全局声明的元素。由于“自定义”和“位置”没有全局声明,因此它们不满足此条件。我不得不做一些研究来弄清楚撒克逊为什么把它作为警告而不是错误。无论您使用何种模式处理器,它都采用了不同的解释。请注意,Saxon测试包含XSD 1.1的方式,即使XSD 1.1没有启用,因为XSD 1.0规范中存在这方面的错误:但是有些处理器选择严格一致,并且实现了bug和所有错误。 / p>
我建议将“自定义”和“位置”放入全局元素声明中。