如何在 XML 模式中的元素范围内的任何位置定义 maxOccurs?
How to define maxOccurs anywhere in element's scope in XML Schema?
我想知道有没有办法在abc
元素中定义content
的maxOccurs? a
、b
和 c
中有多少 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) <= 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) <= 5"/>
我想知道有没有办法在abc
元素中定义content
的maxOccurs? a
、b
和 c
中有多少 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) <= 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) <= 5"/>