验证元素的未转义长度

时间:2016-07-29 15:10:56

标签: c# .net xml xsd

我是一个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>

1 个答案:

答案 0 :(得分:2)

从数据模型的角度来看,&apos;仅计为单个字符,与'相同。 XML Schema在抽象级别中更高,因为它consumes the XML infoset,实体引用已经解析as a character code

一些已解析的实体引用可能still appear in the XML infoset,但这仅适用于外部实体和非验证处理器(在DTD验证意义上),据我所知,XML Schema does not explicitly reference them

所以我担心这不可能直截了当;但我当然会很高兴被证明是错误的并且学到了一些东西。如果向XML Schema“解释”哪些字符被认为是被转义的话,使用带有模式和联合的约束方面可能会有效,但是可能需要一些努力,这仍然无法区分'和{{1在语法层面上。