XSD类型属性和限制属性之间有什么区别?
我正在做一些关于xsd的知识有限的xsd清理活动。我的文件包含一个复杂的元素,定义了两个属性,但不同XSD类型属性和限制属性之间有什么区别?,xsd,xsd-validation,Xsd,Xsd Validation,我正在做一些关于xsd的知识有限的xsd清理活动。我的文件包含一个复杂的元素,定义了两个属性,但不同 <xs:attribute name="DecisioningRequestType" type="xs:string" use="required"/> <xs:attribute name="ProcessingRequestType" use="required"> &l
<xs:attribute name="DecisioningRequestType"
type="xs:string"
use="required"/>
<xs:attribute name="ProcessingRequestType"
use="required">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:attribute>
当xml被创建时,两个属性都包含一个字符串值,但我试图理解当属性被定义为有限制时会有什么不同?我不是可以定义与上面显示的第一个属性类似的第二个属性吗
如果相同,我可以通过此清理在XSD文件中统一定义属性。带有限制的属性意味着定义了属性值的类型 内联,直接在属性本身的定义中 一方面,属性类型是特殊的(不仅仅是基类型),但另一方面,它仅用于该属性时使用。 因此,将该类型定义为单独的组件是多余的 但在您的案例中,构造:
<xs:attribute name="ProcessingRequestType" use="required">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:attribute>
虽然是有效的,但实际上并不限制任何内容(它是一个空限制)。
因此,它相当于
<xs:attribute name="ProcessingRequestType" type="xs:string" use="required"/>
真正的限制如下所示:
<xs:attribute name="ProcessingRequestType" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="typeA"/>
<xs:enumeration value="typeB"/>
<xs:enumeration value="typeC"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
这意味着属性值是一个字符串,但仅限于列表中的一个:“typeA”、“typeB”、“typeC”。属性的声明要求指定属性的类型;这可以通过提供类型名称的
type
属性或匿名类型的内联声明来完成
XSDrestriction
元素的使用或不使用与type
属性和simpleType
子元素之间的差异是正交的。在您给出的情况下,限制
是空的;内联声明也可以很容易地采用这种形式
<xs:simpleType>
<xs:union memberTypes="xs:string"/>
</xs:simpleType>
您编写的两个属性都包含一个字符串值——这是事实,但两个属性的类型不同:一个与typexs:string
关联,另一个与匿名类型关联,其值和词法空间与xs:string
的值和词法空间相同(因为它是由xs:string
的空洞限制创建的)。在某些情况下,这种差异可能很重要