XSD не позволяет мне иметь неограниченный внутри всех индикаторов

Я пытаюсь сделать неупорядоченный список переменных в 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>

Ответ 1

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

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


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

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

Ответ 2

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

fooobar.com/questions/511894/...

<xs:element name="A">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="B"/>
      <xs:element ref="C"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

Ответ 3

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