Wenn Sie sich die Veröffentlichung eines 1.1-Schemas und eines zugehörigen 1.0-Schemas vorstellen, ist der einfachste und beste Weg die Verwendung des in der XSD 1.1-Spezifikation beschriebenen vc: -Namespace. Sie können den vc: -Namespace verwenden, um 1.1-Features wie die von Ihnen genannten Asserments (oder die Deklarationen, die sie enthalten) zu markieren und 1.0 Äquivalente oder nahezu gleichwertige Elemente anzugeben.
Wir diese verwenden können, die xs:assert
in einem Beispiel aus der XSD-1.1-Spezifikation als 1.1-only-Funktion zu markieren:
<xs:complexType name="arrayType">
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="length" type="xs:int"/>
<xs:assert test="@length eq fn:count(./entry)"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1"/>
</xs:complexType>
All XSD 1.1 Prozessor erforderlich, um die vc zu verstehen: Namensraum und filtert das Schema Dokumentiere entsprechend (akzeptiere Dinge mit vc: minVersion kleiner oder gleich 1.1 oder vc: maxVersion größer als 1.1, und so weiter). Daher kann das Schemadokument mit den Attributen vc: * als 1.1-Schema ausgeliefert werden.
Ein konformer 1.0 Prozessor könnte aktualisiert werden, um den VC zu verstehen: Namespace, aber ich weiß nicht von irgendwelchen, die gewesen sind. Für die Verwendung von 1.0-Prozessoren muss das Schemadokument gefiltert werden, bevor es angezeigt wird.
Wie kjhughes glaube ich, dass ein XSLT Stylesheet wahrscheinlich die beste Wahl für diese Filterung ist. Die Verwendung des vc: * -Namespace macht es jedoch einfach, zuverlässig zu arbeiten, und es ist nicht erforderlich, dass der Schemaautor die Verwendung von 1.1-Features minimiert, um die Transformation zu vereinfachen.
Es ist einfach genug, ein Stylesheet zu schreiben, um die notwendige Filterung durchzuführen, aber in der Tat müssen Sie nicht: Es gibt eine XSLT 1.0 stylesheet, die den Job erledigt (vollständige Offenlegung; Ich schrieb es). Es gab auch eine funktionierende online demo, aber ich sehe, dass Bit-Rot eingestellt hat, und es scheint nicht in aktuellen Browsern zu arbeiten; Ich werde es reparieren, wenn ich Zeit habe. Die documentation kann immer noch nützlich sein.