验证元素的未标注长度
本文关键字:元素 验证 | 更新日期: 2023-09-27 17:59:23
我有一个XSD,它定义了一个元素的最大长度为10。字符串"12345678'"
无效,因为它将被转义为"12345678'"
,并且超过10个字符。我希望"12345678'"
也有效,但我一直找不到如何做到这一点的方法。
XSD:
<xs:element name="ElementName">
<xs:annotation>
<xs:appinfo>
<b:recordInfo notes="XXX" xmlns:b="XXX" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Element1">
<xs:annotation>
<xs:appinfo>
<b:fieldInfo notes="XXX" />
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element minOccurs="0" name="Element2">
<xs:annotation>
<xs:appinfo>
<b:fieldInfo notes="XXX" xmlns:b="XXX" />
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
从数据模型的角度来看,'
仅算作单个字符,与'
相同。XMLSchema在抽象级别上更高,因为它使用XML信息集,其中实体引用已经被解析为字符代码。
一些解析后的实体引用可能仍然出现在XML信息集中,但这仅适用于外部实体和非验证处理器(在DTD验证意义上),而且据我所知,XMLSchema并没有显式引用它们。
因此,我担心这不可能直接实现;但我当然很乐意被证明是错的,并学到一些东西。如果向XMLSchema"解释"哪些字符被认为是转义的,那么使用带有模式和并集的约束facet可能会起作用,但这可能需要一些努力,而且这在语法级别上仍然无法区分'
和'
。