扩展元素中的xsd限制

扩展元素中的xsd限制,xsd,restriction,Xsd,Restriction,假设我有一个元素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:complexCon

假设我有一个元素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应该是固定值。ie我必须对B中的desiredValue应用restiction。我如何才能做到这一点?

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

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

XSD:


XML:

我听说在使用XML1.1时有更多的选择

<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>
<A namespace:type="B">
    ...
</A>