假设我有一个元素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应用restiction。我该怎么做?
答案 0 :(得分: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 schema abstract type problem
我听说使用XML 1.1时有更多选择。