验证元素的未标注长度

本文关键字:元素 验证 | 更新日期: 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>

验证元素的未标注长度

从数据模型的角度来看,&apos;仅算作单个字符,与'相同。XMLSchema在抽象级别上更高,因为它使用XML信息集,其中实体引用已经被解析为字符代码。

一些解析后的实体引用可能仍然出现在XML信息集中,但这仅适用于外部实体和非验证处理器(在DTD验证意义上),而且据我所知,XMLSchema并没有显式引用它们。

因此,我担心这不可能直接实现;但我当然很乐意被证明是错的,并学到一些东西。如果向XMLSchema"解释"哪些字符被认为是转义的,那么使用带有模式和并集的约束facet可能会起作用,但这可能需要一些努力,而且这在语法级别上仍然无法区分'&apos;