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

StackOverflow https://stackoverflow.com/questions/2362365

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top