ограничение xsd в расширенном элементе

Предположим, у меня есть элемент A и элемент B, расширенный из A, как показано ниже.

<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 может принимать любое значение, а та же самая требуемая переменная в B должна быть фиксированным значением. т.е. я должен применить ограничение на желанное значение в B. Как я могу это сделать?


person ganesshkumar    schedule 05.09.2013    source источник


Ответы (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

Я слышал, что при использовании XML 1.1 есть больше возможностей.

person VoteCoffee    schedule 11.11.2013