Проигнорируйте порядок элементов с помощью xs:extension

Как я могу разработать свой xsd для игнорирования последовательности элементов?

   

   

Я должен использовать extension по причинам генерации кода, таким образом, я попробовал следующее использование all:




    
        
            
        
    

    
        
            
                 
                    
                
            
        
    

    


Этот xsd не допустим, хотя, в следующую ошибку являются :

cos-all-limited.1.2: вся образцовая группа должна появиться в частице с {минута происходит} = {макс. происходит} = 1, и та частица должна быть частью пары, которая составляет {тип контента} определения составного типа.

В документации cos-all-limited.1.2 говорится:

1.2 {термин} свойство частицы с {макс. происходит} =1, который является частью пары, которая составляет {тип контента} определения составного типа.

Я действительно не понимаю это (ни xsd, ни английский носитель языка :)).


Я делаю неправильную вещь, я делаю правильную вещь неправильно или не являюсь там никаким способом достигнуть этого?

15
задан John Saunders 8 February 2014 в 21:44
поделиться

2 ответа

ОСНОВНОЕ РЕДАКТИРОВАНИЕ Изначально я пропустил требование использования 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"/>
6
ответ дан 1 December 2019 в 05:02
поделиться

<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> 

-3
ответ дан 1 December 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: