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 回答