車の基本フィールドを定義する 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から拡張されたHondaの車のタイプを定義したいとしますが、 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という名前の 2 つの要素を使用できるようになりました。サンプルの 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で定義された値のみを許可することでした。
拡張型のベースのFuel要素をオーバーライドまたはマスクする方法はありますか?