0

以下に示すように、要素 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 に制限を適用する必要があります。どうすればよいですか?

4

1 に答える 1

0

一般に、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 スキーマの抽象型の問題

XML 1.1 を使用する場合、さらに多くのオプションがあると聞きました。

于 2013-11-11T19:44:10.553 に答える