2016-07-29 60 views
0

我有一個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

從數據模型的角度看,只有&apos;計數爲單個字符和相同'。 XML Schema在抽象層次上更高,因爲其實體引用已被解析as a character code,因爲它是consumes the XML infoset

一些解析實體引用still appear in the XML infoset,但這只是對外部實體和非驗證的處理器(在DTD驗證的意義上)而據我所知,XML模式does not explicitly reference them

所以我恐怕這是不可能的,直接的方式;但當然我會很樂意被證明是錯誤的,並學習一些東西。如果向XML Schema「解釋」哪些字符被認爲是逃逸的,那麼使用模式和聯合的約束方面可能會起作用,但它可能需要一些努力,並且這在句法層面上仍不能區分'&apos;