Нужен любой элемент среди неупорядоченных детей

Мне нужно проверить наличие списка дочерних элементов элемента XML, но мне также нужно разрешить одному из дочерних элементов быть любым другим элементом.

Например, если XML такой:

<fruits>
  <item1>banana</item1>
  <item2>apple </item2>
  <anything>yolo</anything>
</fruits>

И с таким XSD:

<xsd:complexType name="fruits">
  <xsd:all>
    <xsd:element name="item1" type="xsd:string" minOccurs="1" maxOccurs="1" />
    <xsd:element name="item2" type="xsd:string"  minOccurs="1" maxOccurs="1" />
  </xsd:all>
</xsd:complexType>

Я хотел бы, чтобы этот XML-файл был в порядке при проверке. Но с моим файлом xsd я получаю такую ​​​​ошибку:

Элемент «фрукты» имеет недопустимый дочерний элемент «что угодно».

У тебя есть какой-нибудь совет ?


person Kypaz    schedule 02.07.2015    source источник


Ответы (2)


Вы можете отказаться от неупорядоченного требования и использовать xs:any в xs:sequence, или вы можете удовлетворить неупорядоченное требование и использовать фиксированный элемент-оболочку вокруг вашего элемента xs:any в xs:all.

У вас не может быть и того, и другого. XSD не так ортогонален, как вы ожидаете.

person kjhughes    schedule 02.07.2015
comment
Да, я видел это в этой теме: stackoverflow.com/questions/3347822/. Я найду другой способ. Благодарность - person Kypaz; 02.07.2015

Попробуйте использовать любой элемент .

Элемент any позволяет автору расширить XML-документ элементами, не указанными в схеме.

В соответствии с документацией вам нужно будет использовать последовательность вместо всех, потому что единственными допустимыми родительскими элементами любого являются выбор и последовательность.

person James Wierzba    schedule 02.07.2015
comment
Да, я пробовал это, но, как вы сказали, элемент ‹xsd:any› не разрешен в элементе ‹xsd:all›. И мне нужно сохранить ‹xsd:all›, потому что мой дочерний элемент может появляться в любом порядке... - person Kypaz; 02.07.2015
comment
Я полагаю, вы могли бы поместить любой элемент с minOccurs = 0 между каждым из необходимых элементов? Это позволит эффективно упорядочить любой - person James Wierzba; 02.07.2015