Не строгий XSD, ограничить диапазон одним значением, но больше ничего не проверять - PullRequest
0 голосов
/ 31 октября 2018

У меня есть этот XSD, который ограничивает значение вложенного элемента указанным диапазоном значений.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Configuration">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Value">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NestedValue">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="1338"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Прежде всего, я хотел сделать необязательным указание вложенного значения, что легко решается добавлением minOccurs="0" maxOccurs="1" к элементам «Value» и «NestedValue».

Тогда я хотел разрешить любой xml, кроме xml, который содержит вложенные значения вне диапазона.

пример:

<Configuration>
  <Value>
    <NestedValue>1337<NestedValue>
    <OtherValue>10000<OtherValue>
  </Value>
</Configuration>

Я попытался сделать это, используя xs: any-tags, например:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Configuration">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip">
        </xs:any>
        <xs:element name="Value" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NestedValue" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="1338"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Но это дало мне исключение:

Подстановочный знак «## any» допускает использование элемента «Value» и приводит к неоднозначности модели содержимого. Модель содержимого должна быть сформирована таким образом, чтобы во время проверки последовательности элементов информации об элементе частица, содержащаяся прямо, косвенно или неявно в ней, чтобы попытаться проверить каждый элемент в последовательности, в свою очередь, может быть однозначно определена без изучения содержимого или атрибутов этот элемент и без какой-либо информации об элементах в оставшейся части последовательности.

Как правильно разрешить любой контент?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...