目標は、既存の XML スキーマを拡張する XML スキーマを作成して、生成されるインスタンス ドキュメントをベース XSD または拡張 XSD のいずれかで検証できるようにすることです。
ベース XSD の例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:dx="dataxsd/1"
targetNamespace="dataxsd/1"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="DataType">
<xs:sequence>
<xs:element name="Start" type="xs:dateTime" minOccurs="0"/>
<xs:element name="End" type="xs:dateTime" minOccurs="0"/>
<xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="type" type="xs:integer"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Data" type="dx:DataType"></xs:element>
</xs:schema>
それを拡張してスーパーセットを作成したいと思います。私の最初のアプローチは、次のような xs:redefine 機能を使用することでした。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:dx="dataxsd/1"
targetNamespace="dataxsd/1"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:redefine schemaLocation="data.xsd">
<xs:complexType name="DataType">
<xs:complexContent>
<xs:extension base="dx:DataType">
<xs:sequence>
<xs:element name="Status" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
oXygen 14.1 を使用すると、これらのスキーマは両方とも正常に検証されます。
xs:any 名前空間は「##other」のみを許可するため、拡張スキーマを含むインスタンス ドキュメントは非拡張スキーマに対して検証されません。xs:redefine では拡張が同じ名前空間にある必要があります。
基本スキーマを変更することは望ましくありませんが、xs:any 名前空間の制限を "##any" に設定するように変更して実験しましたが、XSD 自体は検証されません。Xerces の苦情は次のとおりです。
cos-nonambig: "dataxsd/1":Start and WC[##any] (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles.
xs:redefine は現在 1.1 で非推奨に指定されているため、XML スキーマ 1.1 の xs:override 機能も試しましたが、これを正しく検証することはできず、サポートは非常に初期段階にあるようです。
元の基本スキーマを拡張し、拡張を含むインスタンス ドキュメントを基本の非拡張スキーマで検証できるようにするという目標を達成する方法はありますか?