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>
. Это даст эффект, который вы ищете.