XSD 属性前缀命名空间
XSD attribute prefix namespace
我正在尝试根据 XSD 验证 XML。我有一个带前缀的属性,但我不知道如何用 XSD 来检查它。经过长时间的斗争,我想出了如何检查元素的前缀,但现在我无法验证属性的前缀。我正在尝试类似于元素前缀验证的方法:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:p="http://www.xx.com/2014/p-Document" targetNamespace="http://www.xx.com/2014/p-Document" >
<xs:element name="EL" type="p:EL">
</xs:element>
<xs:complexType name="EL">
<xs:sequence>
<xs:element name="Group">
<xs:complexType>
<xs:attribute name="Table" type="p:Table" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Table">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
</xs:schema>
并且在验证 xml 之后:
<p:EL xmlns:p="http://www.xx.com/2014/p-Document">
<Group p:Table=""/>
</p:EL>
我遇到错误:
Cvc-complex-type.3.2.2: Attribute 'p:Table' Is Not Allowed To Appear In Element 'Group'.. Line '2', Column '20'.
Cvc-complex-type.4: Attribute 'Table' Must Appear On Element 'Group'.. Line '2', Column '20'.
默认情况下,"Local" complexType
中元素和属性的声明不采用模式的目标命名空间。您可以使用 xs:schema
上的 elementFormDefault
和 attributeFormDefault
属性更改此默认值,但如果您只想影响一个属性而不是所有属性,则可以使用 form
具体属性声明:
<xs:attribute name="Table" form="qualified" type="p:Table" use="required"/>
或者,在顶级声明属性(因为全局顶级元素和属性始终是限定的)并且 ref
根据需要将其声明。
<xs:attribute name="Table" type="p:Table"/>
<xs:complexType name="EL">
<xs:sequence>
<xs:element name="Group">
<xs:complexType>
<xs:attribute ref="p:Table" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
我正在尝试根据 XSD 验证 XML。我有一个带前缀的属性,但我不知道如何用 XSD 来检查它。经过长时间的斗争,我想出了如何检查元素的前缀,但现在我无法验证属性的前缀。我正在尝试类似于元素前缀验证的方法:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:p="http://www.xx.com/2014/p-Document" targetNamespace="http://www.xx.com/2014/p-Document" >
<xs:element name="EL" type="p:EL">
</xs:element>
<xs:complexType name="EL">
<xs:sequence>
<xs:element name="Group">
<xs:complexType>
<xs:attribute name="Table" type="p:Table" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Table">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
</xs:schema>
并且在验证 xml 之后:
<p:EL xmlns:p="http://www.xx.com/2014/p-Document">
<Group p:Table=""/>
</p:EL>
我遇到错误:
Cvc-complex-type.3.2.2: Attribute 'p:Table' Is Not Allowed To Appear In Element 'Group'.. Line '2', Column '20'.
Cvc-complex-type.4: Attribute 'Table' Must Appear On Element 'Group'.. Line '2', Column '20'.
"Local" complexType
中元素和属性的声明不采用模式的目标命名空间。您可以使用 xs:schema
上的 elementFormDefault
和 attributeFormDefault
属性更改此默认值,但如果您只想影响一个属性而不是所有属性,则可以使用 form
具体属性声明:
<xs:attribute name="Table" form="qualified" type="p:Table" use="required"/>
或者,在顶级声明属性(因为全局顶级元素和属性始终是限定的)并且 ref
根据需要将其声明。
<xs:attribute name="Table" type="p:Table"/>
<xs:complexType name="EL">
<xs:sequence>
<xs:element name="Group">
<xs:complexType>
<xs:attribute ref="p:Table" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>