Как сделать элементы необязательными в <xs: all>? - PullRequest
11 голосов
/ 15 апреля 2011

У меня есть такой xsd.Все эти поля могут существовать или не существовать в непредсказуемом порядке.

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

<xs:element name="request">
<xs:complexType>
  <xs:all  minOccurs="0">
    <xs:element ref="field1"/>
    <xs:element ref="field2"/>
    <xs:element ref="field3"/>
    <xs:element ref="field4"/>
    <xs:element ref="field5"/>
  </xs:all>
</xs:complexType>
</xs:element>

</xs:schema>

field4 не существует в xml, и валидатор говорит, что он ожидает field4, но он не должен этого говорить.Так что же не так?

w3cschools.com говорит

<xs:element name="person">
<xs:complexType>
<xs:all minOccurs="0">
  <xs:element name="firstname" type="xs:string"/>
  <xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>

Приведенный выше пример показывает, что элементы «имя» и «фамилия» могут появляться в любом порядкеи каждый элемент МОЖЕТ появиться ноль или один раз!

Ответы [ 2 ]

16 голосов
/ 15 апреля 2011

Вам нужно поставить minOccurs на отдельные элементы, а не <xs:all>, т.е.

<xs:all>
    <xs:element ref="field1" minOccurs="0"/>
    <xs:element ref="field2" minOccurs="0"/>
    <xs:element ref="field3" minOccurs="0"/>
    <xs:element ref="field4" minOccurs="0"/>
    <xs:element ref="field5" minOccurs="0"/>
</xs:all>

Помещение minOccurs="0" в <xs:all> означает, что вся группа может быть опущена, а не отдельные элементы.

См. Документы схемы XML .

3 голосов
/ 15 апреля 2011

попробуй так во всех

 <xs:element ref="field4" minOccurs="0" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...