【问题标题】:xsd restriction in extended element扩展元素中的 xsd 限制
【发布时间】:2013-11-12 03:44:10
【问题描述】:

假设我有一个元素 A 和一个从 A 扩展而来的元素 B,如下所示。

<xsd:complexType name="A">
  <xsd:sequence>
    <xs:element name="desiredVariable" type="xs:string"/>
  </xsd:sequence>
<xsd:complexType>

<xsd:complexType name="B">
  <xsd:complexContent>
    <xsd:extension base="A">
      <xsd:sequence>
        <xs:element name="anotherVariable" type="xs:string"/>
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

我有一个用例,其中 A 中的desiredVariable 可以取任何值,而 B 中的相同desiredVariable 应该是一个固定值。即我必须对 B 中的 desiredValue 应用限制。我该怎么做?

【问题讨论】:

    标签: xsd restriction


    【解决方案1】:

    一般来说,XML 1.0 不允许条件数据。但是你可以通过扩展实现你想要的。这是在 XML 1.0 中实现它的方法:

    如果您想强制执行这些限制,您需要将基本元素定义为抽象元素。在 XML 文件中,他们需要指定他们正在实现的扩展。您需要单独定义限制。

    XSD:

    <xsd:complexType name="A" abstract="true">
      <xsd:sequence>
        <xs:element name="desiredVariable" type="xs:string"/>
      </xsd:sequence>
    <xsd:complexType>
    
    <xsd:complexType name="B">
      <xsd:complexContent>
        <xsd:extension base="A">
          <xsd:restriction base="checksumType">
            <xsd:sequence>
              <xs:element name="desiredVariable" type="xs:string" fixed="FixedValue"/>
              <xs:element name="anotherVariable" type="xs:stringLimitedType"/>
            </xsd:sequence>
          </xsd:restriction>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:simpleType name="stringLimitedType">
        <xsd:restriction base="xs:string">
            <xsd:pattern value="([a-zA-Z0-9])*"/>
        </xsd:restriction>
    </xsd:simpleType>
    

    XML:

    <A namespace:type="B">
        ...
    </A>
    

    有关抽象和扩展的更多信息,请参阅以下内容: XSD schema abstract type problem

    我听说使用 XML 1.1 时有更多选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多