XSD не позволяет мне быть неограниченным внутри всего индикатора - PullRequest
14 голосов
/ 02 марта 2010

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

Есть ли какое-нибудь решение для того, что я пытаюсь сделать?

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="testcomment">
    <xs:complexType>
      <xs:all>
        <xs:element name="var1" type="xs:string" maxOccurs="2" />
        <xs:element name="var2" type="xs:integer" maxOccurs="unbounded" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

Ответы [ 3 ]

12 голосов
/ 10 мая 2013

Я столкнулся с той же проблемой, и есть решение! Проверьте этот ответ:

https://stackoverflow.com/a/3827606/637142

<xs:element name="A">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="B"/>
      <xs:element ref="C"/>
    </xs:choice>
  </xs:complexType>
</xs:element>
4 голосов
/ 01 марта 2014

просто, просто используйте <xs:choice maxOccurs="unbounded"> вместо <xs:all>. Это даст эффект, который вы ищете.

2 голосов
/ 02 марта 2010

То, что вы пытаетесь сделать, звучит так, как будто тип элемента в вашем списке может быть неоднозначным без предварительного чтения, и в этом случае в XSD нет обходного пути из-за классов языков, которые он может описать.

Можете ли вы опубликовать соответствующую часть вашего XSD?


Обновление: нет, вы не можете сделать это с XSD. Правила относительно того, что вы можете поместить в элемент <xs:all>, перечислены, например, здесь . У этого ограничения есть имя - ограничение УПА или уникального атрибута частиц. Это все связано с неоднозначностью, и на сайте Microsoft есть хорошее объяснение, почему существует здесь .

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

...