Как я могу разработать свой xsd для игнорирования последовательности элементов?
Я должен использовать extension
по причинам генерации кода, таким образом, я попробовал следующее использование all
:
Этот xsd не допустим, хотя, в следующую ошибку являются :
cos-all-limited.1.2: вся образцовая группа должна появиться в частице с {минута происходит} = {макс. происходит} = 1, и та частица должна быть частью пары, которая составляет {тип контента} определения составного типа.
В документации cos-all-limited.1.2 говорится:
1.2 {термин} свойство частицы с {макс. происходит} =1, который является частью пары, которая составляет {тип контента} определения составного типа.
Я действительно не понимаю это (ни xsd, ни английский носитель языка :)).
Я делаю неправильную вещь, я делаю правильную вещь неправильно или не являюсь там никаким способом достигнуть этого?
ОСНОВНОЕ РЕДАКТИРОВАНИЕ Изначально я пропустил требование использования xsd: extension
. Обратите внимание, что xsd: extension
работает так, как если бы существовала xsd: sequence
с содержимым базового типа, за которым следует содержимое расширенного типа. Как пишет XML Schema Primer:
Когда сложный тип является производным от расширения , его эффективная модель содержимого представляет собой модель содержимого базового типа плюс модель содержимого указано в порождении типа. Кроме того, две модели контента рассматриваются как два дочерних элемента последовательной группы.
Таким образом, кажется, что единственный способ сделать эту работу - иметь пустой базовый тип и хранить всю альтернативу в расширенном типе или наоборот (все в базовом и пустое расширение). Примерно так:
<xsd:complexType name="ExtendedType">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:choice>
<xsd:sequence>
<xsd:element name="a" type="xsd:string"/>
<xsd:element name="b" type="xsd:string"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="b" type="xsd:string"/>
<xsd:element name="a" type="xsd:string"/>
</xsd:sequence>
</xsd:choice>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="BaseType"/>
<xsd:element name="root" type="ExtendedType"/>
<xs:complexType name="BaseType">
<xs:sequence>
<xs:element name="a" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ExtendedType">
<xs:complexContent>
<xs:extension base="t:BaseType">
<xs:sequence>
<xs:element name="b" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="root" type="t:ExtendedType"></xs:element>