Понимание XSD: выбор и minOccurs - PullRequest
32 голосов
/ 07 марта 2011

У меня проблемы с пониманием поведения следующей XML-схемы:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="rootnode">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="1" maxOccurs="2">
          <xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
          <xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Я ожидал, что по крайней мере один экземпляр любого элемента <e1> или <e2> потребуется в качестве дочернего элемента <rootnode>,Несмотря на мои ожидания, пустой <rootnode> будет проверяться по этой схеме:

 > xmllint --schema test.xsd empty.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <rootnode>
 </rootnode>
 empty.xml validates

Если я изменю атрибут minOccurs элемента e2 на что-то отличное от "0", я получу поведение Iпервоначально ожидалось.

  • Кажется, что простое отсутствие элемента <e2> в моем примере считается возникновением xsd:choice.

  • Если это так, то почему это бесконечное количество вхождений не нарушает предел maxOccurs в моем xsd:choice?

Ответы [ 2 ]

94 голосов
/ 07 марта 2011

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

Вполне возможно, что вы решите пойти в магазины дважды и в каждом случае не покупать апельсины. Значит, ты возвращаешься ни с чем.

1 голос
/ 08 марта 2011

Вот допустимые комбинации

Two choices:
e1 (1 - 2) + e1 (1 - 2) = e1 x (2 - 4), or
e1 (1 - 2) + e2 (0 - 1), or 
e2 (0 - 1) + e1 (1 - 2), or
e2 (0 - 1) + e2 (0 - 1) = e2 (0 - 2)

One choice (but no new outcomes):
e1 (1-2), or
e2 (0-1)


e1e1, e1e1e1, e1e1e1e1
e1, e1e2, e1e1e2 
e2e1, e2e1e1 
empty, e2, e2e2 

Обратите внимание, что выбор [min = 2 max = 2] дал бы тот же набор допустимых комбинаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...