2015-10-27 2 views
1

Рассмотрим два сценария:Может ли два элемента иметь разные имена, но такого же типа в XSD?

У меня есть один XML, который выглядит как:

<personinfo> 
    <info> 
     <option1>Coke</option1> 
    </info> 
</personinfo> 

, где я должен быть выбор между option1 и option2 элементом.

У меня есть другой XML, который выглядит как:

<personinfo> 
     <info> 
      <firstname>Yair</firstname> 
      <lastname>Zaslavsky</lastname> 
     </info> 
    </personinfo> 

, где должен появиться как Firstname и фамилия (и значит, последовательность).

Я попытался использовать следующую схему:

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:complexType name="optionsChoice"> 
    <xs:choice> 
     <xs:element name="option1" type="xs:string"/> 
     <xs:element name="option2" type="xs:string"/> 
    </xs:choice> 
    </xs:complexType> 

    <xs:complexType name="optionsSequence"> 
    <xs:sequence> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 

<xs:complexType name="personinfo"> 
    <xs:choice> 
     <xs:element name="info" type="optionsSequence"/> 
     <xs:element name="info" type="optionsChoice"/> 
    </xs:choice> 
</xs:complexType> 


</xs:schema> 

не повезло.

Имейте в виду, что я должен иметь «информацию» в качестве имени элемента в обоих случаях.

Как исправить эту проблему?

ответ

1

У вас не может быть двух элементов с тем же именем, но разные типы вместе отображаются вместе.

Вы можете, однако, толкать выбор вниз так, что personinfo может быть либо выбор option1 или option2 или последовательность firstname и lastname:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="personinfo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="info"> 
      <xs:complexType> 
      <xs:choice> 
       <xs:choice> 
       <xs:element name="option1" type="xs:string"/> 
       <xs:element name="option2" type="xs:string"/> 
       </xs:choice> 
       <xs:sequence> 
       <xs:element name="firstname" type="xs:string"/> 
       <xs:element name="lastname" type="xs:string"/> 
       </xs:sequence> 
      </xs:choice> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Этот XSD будет действителен оба ваших XML-документов, успешно ,

Смежные вопросы