扩展元素中的xsd限制
假设我有一个元素A和一个从A扩展而来的元素B,如下所示扩展元素中的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
<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>