Ответ 1
На данный момент эта проблема не так просто разрешить; это связано с тем, что большинство процессоров XSD равны 1.0, а версия схемы, введенная в спецификации XSD 1.1, не может применяться обратно. Чтобы узнать больше об этом (в общем), посмотрите The Versioning Namepace и примеры, приведенные в разделе 4.2. 2 Условное включение.
Вы можете реализовать собственное решение для предварительной обработки, то есть, по крайней мере, помочь выбрать подходящий XSD-процессор, используя что-то вроде этого:
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning">
<xsd:element name="e" vc:minVersion="1.1">
<xsd:complexType>
<xsd:all>
<xsd:element name="a" minOccurs="0"/>
<xsd:element name="b" maxOccurs="unbounded"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="e" vc:minVersion="1.0" vc:maxVersion="1.1">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="a" minOccurs="0"/>
<xsd:element name="b" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Таким образом, по крайней мере, вы будете использовать одобренный XSD 1.1 подход к управлению версиями; он также поставляется с моделью обработки. Для некоторых задач относительно легко построить предварительный процессор, который, по крайней мере, будет обрабатывать соответствующий выбор XSD-процессора (1.0 или 1.1). Чтобы упростить работу в закрытой среде, вы также можете выбрать соглашение, в котором вы могли бы отметить все xsd:schema
с помощью vc: minVersion = "1.1" - в основном, с чего вы, похоже, хотели начать.
Что касается вашего последнего абзаца, выбор XSD-процессора должен утверждаться, а не подразумеваться. Это связано с тем, что XSD 1.1 позволяет создавать конструкции, которые были невозможны в XSD 1.0 (например, компоновщик all
, содержащий частицы с макс. Появлением больше 1)... поэтому, если вы не принимаете прежнее решение повторно: процессор для использования, XSD может или может быть недействительным. В то время как другие вещи будут недействительными независимо от используемого процессора.