2014-04-04 49 views
1

我有一個名爲SafetyTiming的複雜類型,它有2個元素值和餘量。價值和保證金都是基於一種稱爲Timing的簡單類型。更改複雜類型內的類型的最小限制

<xs:simpleType name="Timing"> 
    <xs:restriction base="xs:unsignedInt"> 
     <xs:minInclusive value="0" /> 
     <xs:maxInclusive value="999" /> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:complexType name="SafetyTiming"> 
    <xs:sequence> 
     <xs:element name="Value" type="Timing" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="Margin" type="Timing" minOccurs="1" maxOccurs="1" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:element name="SafetyTimings"> 
    <xs:complexType> 
     <xs:all> 
     <xs:element name="A" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="B" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="C" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="D" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
     </xs:all> 
    </xs:complexType> 
    </xs:element> 

這是細直到我發現,元件A和B必須爲的simpleType「值」 a最小值爲0,,C和d的最小的1

如何可以完美地解決這個?


我試過以下,但我認爲它看起來相當混亂,我不知道是否有更好的解決方案。

<!--Safety timing type containing the timing value (minimum 0) and the value margin--> 
    <xs:complexType name="SafetyTiming_min0"> 
    <xs:sequence> 
     <xs:element name="Value" type="Timing" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="Margin" type="Timing" minOccurs="1" maxOccurs="1" /> 
    </xs:sequence> 
    </xs:complexType> 

    <!--Safety timing type containing the timing value (minimum 1) and the value margin--> 
    <xs:complexType name="SafetyTiming_min1"> 
    <xs:sequence> 
     <xs:element name="Value" minOccurs="1" maxOccurs="1"> 
     <xs:simpleType> 
      <xs:restriction base="Timing"> 
      <xs:minInclusive value="1" /> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:element> 
     <xs:element name="Margin" type="Timing" minOccurs="1" maxOccurs="1" /> 
    </xs:sequence> 
    </xs:complexType> 

回答

0

您可以從Timing派生限制類型:

<xs:simpleType name="CDTiming"> 
    <xs:restriction base="Timing"> 
     <xs:minInclusive value="1" /> 
    </xs:restriction> 
</xs:simpleType> 

所以,很簡單,只是創建一個新的類型爲CD已限制Value

<xs:complexType name="CDSafetyTiming"> 
    <xs:sequence> 
     <xs:element name="Value" type="CDTiming" minOccurs="1" maxOccurs="1" /> 
     <xs:element name="Margin" type="Timing" minOccurs="1" maxOccurs="1" /> 
    </xs:sequence> 
</xs:complexType> 

你不自原始類型以來,不需要爲AB更改任何內容已經有至少0

如果你可以改變你原來的XSD,您可以在元素的定義中使用的新類型:

<xs:element name="SafetyTimings"> 
    <xs:complexType> 
     <xs:all> 
      <xs:element name="A" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
      <xs:element name="B" type="SafetyTiming" minOccurs="1" maxOccurs="1" /> 
      <xs:element name="C" type="CDSafetyTiming" minOccurs="1" maxOccurs="1" /> 
      <xs:element name="D" type="CDSafetyTiming" minOccurs="1" maxOccurs="1" /> 
     </xs:all> 
    </xs:complexType> 
</xs:element> 
+0

沒錯,就是這樣做的另一種方式。我只是希望沒有創建另一個定時或SafetyTiming對象的方法。就像直接向xs:元素C和D添加新的限制一樣。 –