限制XSD中所有子元素的最大字符数

时间:2015-03-09 14:11:32

标签: xml xsd xsd-validation xsd-1.1

我有这段代码:

<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个字符。

1 个答案:

答案 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, '')) &lt; 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。)