我有一个定义汽车基本字段的 xml 模式:
<xs:simpleType name="FuelType">
<xs:restriction base="xs:string">
<xs:enumeration value="Regular Unleaded"/>
<xs:enumeration value="High Octane"/>
<xs:enumeration value="Leaded"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="CarType">
<xs:sequence>
<xs:element name="Make" type="xs:string"/>
<xs:element name="Model" type="xs:string"/>
<xs:element name="Cylinders" type="xs:int"/>
<xs:element name="Fuel" type="FuelType"/>
</xs:sequence>
</xs:complexType>
现在假设我想定义一个继承自CarType但有自己的Fuel定义的本田汽车类型:
<xs:simpleType name="HondaFuelType">
<xs:restriction base="xs:string">
<xs:enumeration value="85"/>
<xs:enumeration value="87"/>
<xs:enumeration value="89"/>
<xs:enumeration value="91"/>
<xs:enumeration value="93"/>
<xs:enumeration value="95"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="HondaCarType">
<xs:complexContent>
<xs:extension base="car:CarType">
<xs:sequence>
<xs:element name="Fuel" type="HondaFuelType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
扩展CarType得到了我想要的一切,但是架构现在允许两个名为Fuel的元素(在不同的命名空间中)。这是一个示例 Xml 实例:
<HondaCar xmlns="HondaNS" xmlns:car="CarNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="HondaNS D:\Development\Temp\honda.xsd">
<car:Make/>
<car:Model/>
<car:Cylinders>4</car:Cylinders>
<car:Fuel>High Octane</car:Fuel>
<Fuel>87</Fuel>
</HondaCar>
尽管这是完全有效的 Xml,但它没有逻辑意义(至少对我而言)。我的意图是扩展基本类型,然后覆盖*Fuel* 以仅允许HondaFuelType中定义的值。
有没有办法可以覆盖或屏蔽扩展类型中的基本燃料元素?