Mam schematu XML, który definiuje podstawowe pola dla samochodu:Zastępowanie i zmiana XML element typu bazowego
<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>
Teraz powiedzmy, że chcemy zdefiniować Honda typ samochodu, który rozciąga się od CarType ale ma własną definicję paliwa:
<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>
Rozszerzanie CarType dostaje mi wszystko, co chcę, ale schemat pozwala teraz na dwa elementy o nazwie Paliwo (w różnych przestrzeniach nazw). Oto przykład próbka 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>
Choć jest doskonale prawidłowy XML to nie ma logicznego sensu (przynajmniej dla mnie). Zamierzałem rozszerzyć typ bazy o przesłonięcie * Paliwa *, aby umożliwić tylko wartości określone w HondaFuelType.
Czy istnieje sposób mogę przesłanianie lub maskować bazę paliwa elementem w moim rozszerzonego typu?