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

我正在做一些关于xsd的知识有限的xsd清理活动。我的文件包含一个复杂的元素,定义了两个属性,但不同

<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
属性或匿名类型的内联声明来完成

XSD
restriction
元素的使用或不使用与
type
属性和
simpleType
子元素之间的差异是正交的。在您给出的情况下,
限制
是空的;内联声明也可以很容易地采用这种形式

<xs:simpleType>
  <xs:union memberTypes="xs:string"/>
</xs:simpleType>

您编写的两个属性都包含一个字符串值——这是事实,但两个属性的类型不同:一个与type
xs:string
关联,另一个与匿名类型关联,其值和词法空间与
xs:string
的值和词法空间相同(因为它是由
xs:string
的空洞限制创建的)。在某些情况下,这种差异可能很重要