如何在 XML 模式中的元素范围内的任何位置定义 maxOccurs?

How to define maxOccurs anywhere in element's scope in XML Schema?

我想知道有没有办法在abc元素中定义content的maxOccurs? abc 中有多少 content 元素并不重要,只要整个 [=] 中出现的次数不超过 x 13=]。提前致谢!

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

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

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

XSD 1.0

不可能。必须检查 out-of-band wrt XSD.

XSD1.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>

注意: 上述断言限制了 abc 的 child 个元素中 content 个元素出现的总数。如果您想限制 abc 层次结构中任何地方的出现,正如您的标题所暗示的那样,在元素范围 的任何地方说 ,您可以改为使用此断言:

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