Как определить maxOccurs где-нибудь в области видимости элемента в XML-схеме? - PullRequest
1 голос
/ 05 мая 2019

Я хотел бы знать, если есть способ, как определить maxOccurs content в abc элемент?Неважно, сколько элементов content содержится в a, b и c, если в целом abc не более чем x вхождений.Заранее спасибо!

<abc>
    <a>
        <content>AA</content>
        <content>AAA</content>
    </a>

    <b>
        <content>B</content>
    </b>

    <c>
        <content>CCC</content>
        <content>C</content>
    </c>
</abc>

1 Ответ

0 голосов
/ 05 мая 2019

XSD 1.0

Невозможно.Должны быть проверены вне диапазона по XSD.

XSD 1.1

Возможно использование xs:assert:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">

  <xs:element name="abc">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" type="HasContentType"/>
        <xs:element name="b" type="HasContentType"/>
        <xs:element name="c" type="HasContentType"/>
      </xs:sequence>
      <xs:assert test="count(*/content) &lt;= 5"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="HasContentType">
    <xs:sequence>
      <xs:element name="content" type="xs:string" 
                  minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Примечание: Приведенное выше утверждение ограничивает общее число вхождений элемента content в дочерних элементах abc.Если вы хотите ограничить вхождения в любом месте иерархии ниже abc, как предполагает ваш заголовок, сказав в любом месте области видимости , вы можете вместо этого использовать это утверждение:

      <xs:assert test="count(.//content) &lt;= 5"/>
...