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) <= 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) <= 5"/>