2011-11-18 63 views
1

我有一個XML模式與幾個元素,每個元素有兩個相同類型的子元素(oldValue & newValue)。 該類型可以例如是一個字符串,但我有幾個元素具有不同的maxLength限制。定義這個最簡單的方法是什麼?複雜類型的幾個元素的限制

<xsd:sequence> 
    <xsd:element name="foo"> 
    <xs:sequence> 
     <xs:element name="oldValue" minOccurs="0"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="10"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element name="newValue"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="10"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
    </xsd:element> 

    <xsd:element name="bar"> 
    <xs:sequence> 
     <xs:element name="oldValue" minOccurs="0"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="30"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element name="newValue"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:maxLength value="30"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
    </xsd:element> 
</xsd:sequence> 

我需要定義很多這些元素,每個元素都有不同的限制。是否有比爲每個限制定義複雜類型更簡單的方法?

編輯:我需要使用XML模式1.0

回答

1

如果你可以使用XML架構1.1,斷言元素讓你約束添加到子結構。請參閱http://www.w3.org/TR/xmlschema11-1/#cAssertions test屬性允許使用XPath 2.0表達式。 例如:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:group name="valuesGroup"> 
     <xs:sequence> 
      <xs:element name="oldValue" type="xs:string"/> 
      <xs:element name="newValue" type="xs:string"/> 
     </xs:sequence> 
    </xs:group> 
    <xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="foo"> 
        <xs:complexType> 
         <xs:group ref="valuesGroup"/> 
         <xs:assert test="every $x in * satisfies 
          (string-length($x) &lt;= 30)"/> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="bar"> 
        <xs:complexType> 
         <xs:group ref="valuesGroup"/> 
         <xs:assert test="every $x in * satisfies 
          (string-length($x) &lt;= 10)"/> 
        </xs:complexType> 
       </xs:element>     
      </xs:sequence> 
     </xs:complexType>   
    </xs:element> 
</xs:schema> 
+0

謝謝,這將是一個完美的解決方案,但不幸的是XML Schema 1.1是無法選擇的 –

相關問題