創建

2011-10-24 56 views
4

我已經成功創建使用可選的小數元素限制的XSD可選的小數元素這樣的:創建

<xs:simpleType name="OptionalDecimal"> 
    <xs:union memberTypes="xs:decimal empty-string" /> 
    </xs:simpleType> 

,但我還需要補充的限制,因此如果已經輸入,將它限制例如,最大長度爲10,最大數量爲3位小數。所以我有這個:

<xs:restriction base="xs:decimal"> 
    <xs:maxInclusive value="9999999999"/> 
    <xs:fractionDigits value="3"/> 
</xs:restriction> 

問題是我不知道如何將它們結合起來。他們可以合併?或者有更好的方法來做到這一點?

+1

你真的需要讓這個類型接受空字符串嗎?你不能使用可選的元素/屬性嗎? 爲什麼不定義RestrictedDecimal類型,就像您做空字符串一樣,然後讓聯合類型的成員類型爲RestrictedDecimal或空字符串? – Kevin

+0

@凱文大聲笑是啊我明白你的意思了,不知道爲什麼我以前沒有看到!感謝您的幫助 – w69rdy

回答

5

感謝凱文的建議,我想出了這裏面做的伎倆:

<xs:simpleType name="Decimal10-2"> 
    <xs:restriction base="xs:decimal"> 
     <xs:maxInclusive value="9999999999"/> 
     <xs:fractionDigits value="2"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="OptionalDecimal10-2"> 
    <xs:union memberTypes="Decimal10-2 empty-string" /> 
    </xs:simpleType> 
0

您必須使用「選擇」元素:看這個

<xsd:simpleType name="OptionA"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:length value="11" fixed="true"/> 
    </xsd:restriction> 
</xsd:simpleType> 


<xsd:simpleType name="OptionB"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:length value="14" fixed="true"/> 
     <xsd:whiteSpace value="collapse"/> 
    </xsd:restriction> 
</xsd:simpleType> 


<xsd:complexType name="MyField"> 
    <xsd:choice> 
     <xsd:element name="OptA" type="OptionA" minOccurs="1" maxOccurs="1"/> 
     <xsd:element name="OptB" type="OptionB" minOccurs="1" maxOccurs="1"/> 
    </xsd:choice> 
</xsd:complexType> 

最好的問候, 丹

+0

感謝Dan,當我看到Kevins評論一個更簡單的方法時,我正準備嘗試這個方法 – w69rdy