XSD не позволяет мне иметь неограниченный внутренний индикатор
-
23-09-2019 - |
Вопрос
Я пытаюсь создать неупорядоченный список переменных в 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>
Решение
То, что вы пытаетесь сделать, похоже на то, что тип элемента в вашем списке может быть неоднозначным без упреждающего чтения, и в этом случае в XSD нет обходного пути из-за классов языков, которые он может описывать.
Можете ли вы опубликовать соответствующую часть вашего XSD?
Обновлять:Нет, вы не можете сделать это с XSD.Правила о том, что можно поместить в <xs:all>
элемент перечислен, например здесь.У этого ограничения есть имя — UPA, или ограничение уникальной атрибуции частиц.Все дело в двусмысленности, и на веб-сайте Microsoft есть хорошее объяснение того, почему она существует. здесь.
Вы можете либо изменить макет документа, чтобы устранить необходимость в таком объявлении, либо обратиться к более выразительному языку схемы, например РасслабьсяНГ.
Другие советы
Я столкнулся с той же проблемой и есть решение!Посмотрите этот ответ:
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>
легко, просто используйте<xs:choice maxOccurs="unbounded">
вместо <xs:all>
.Это даст тот эффект, который вы ищете.