限制 XSD 中所有子元素的最大字符数
Limit max character count across all child elements in XSD
我有这个代码:
<desc>
<paragraphe>bala bla bla</paragraphe>
<paragraphe>bala bla bla bla</paragraphe>
<paragraphe>bala bla bla</paragraphe>
</desc>
我想限制 desc
元素的最大长度为 120 个字符,仅包括所有 paragraphe
内容。
例如,对于单个 paragraphe
元素,我可以针对 40 个字符的固定最大长度执行此操作:
<xs:element name="paragraphe">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
但我想将 desc
的长度(总共 paragraphe
个字符)限制为 120 个字符。
您可以在 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"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="desc">
<xs:complexType>
<xs:sequence>
<xs:element name="paragraphe" maxOccurs="unbounded"/>
</xs:sequence>
<xs:assert test="string-length(string-join(paragraphe, '')) < 12"/>
</xs:complexType>
</xs:element>
</xs:schema>
那么这个XML文件就会有效:
<desc>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
<paragraphe>asd</paragraphe>
</desc>
而这个XML文档将无效:
<desc>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
</desc>
(测试后将12
改为120
即可)
我有这个代码:
<desc>
<paragraphe>bala bla bla</paragraphe>
<paragraphe>bala bla bla bla</paragraphe>
<paragraphe>bala bla bla</paragraphe>
</desc>
我想限制 desc
元素的最大长度为 120 个字符,仅包括所有 paragraphe
内容。
例如,对于单个 paragraphe
元素,我可以针对 40 个字符的固定最大长度执行此操作:
<xs:element name="paragraphe">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
但我想将 desc
的长度(总共 paragraphe
个字符)限制为 120 个字符。
您可以在 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"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="desc">
<xs:complexType>
<xs:sequence>
<xs:element name="paragraphe" maxOccurs="unbounded"/>
</xs:sequence>
<xs:assert test="string-length(string-join(paragraphe, '')) < 12"/>
</xs:complexType>
</xs:element>
</xs:schema>
那么这个XML文件就会有效:
<desc>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
<paragraphe>asd</paragraphe>
</desc>
而这个XML文档将无效:
<desc>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
<paragraphe>asdf</paragraphe>
</desc>
(测试后将12
改为120
即可)