我有这段代码:
<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个字符。
答案 0 :(得分:4)
您可以在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
。)