【问题标题】:XSD what is the difference between attribute with type and attribute with restriction?XSD带类型的属性和带限制的属性有什么区别?
【发布时间】:2013-10-24 11:10:08
【问题描述】:

我正在做一些 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 文件中的属性。

【问题讨论】:

    标签: xsd xsd-validation


    【解决方案1】:

    Attribute with Restriction 表示定义了属性值的类型 内联,直接在属性本身的定义内。

    当一方面,属性类型是特殊的(不仅仅是基本类型),但另一方面,它仅用于该属性时使用。 因此,将该类型定义为单独的组件将是多余的。

    但在你的情况下,构造:

    <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”。

    【讨论】:

      【解决方案2】:

      属性的声明需要指定属性的类型;这可以通过 type 属性给出类型的名称来完成,也可以通过匿名类型的内联声明来完成。

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

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

      你写的两个属性都包含一个字符串值——就目前而言,这已经足够了,但是这两个属性具有相同的类型:一个与xs:string 类型相关联,另一个与匿名类型相关联,其值和词法空间与xs:string 的相同(因为它是由xs:string 的空限制创建的)。在某些情况下,这种差异可能很重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-28
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2011-11-14
        • 2016-04-29
        相关资源
        最近更新 更多