2016-06-09 46 views
1

XML元素我有其通過從VS的一例的XML文件生成以下XSD:限定必須是空的或十進制

   <xs:element name="amperage_rating"> 
        <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:decimal"> 
         <xs:attribute name="unit" type="xs:string" use="required" /> 
         </xs:extension> 
        </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 

它要求的數值。但有時價值是未知的,這也必須允許:

<amperage_rating unit="A"></amperage_rating> 

我試過nillable =「true」,但它沒有效果。我也試圖用一個長度爲0的字符串來定義一個聯合,但是一直說它「在這種情況下不被支持」。

那麼如何調整XSD以允許這個?

回答

1

您可以將您希望通過xs:union允許兩種類型:

<xs:element name="amperage_rating" type="empty_or_decimal"/> 

<xs:simpleType name="empty_or_decimal"> 
    <xs:union memberTypes="empty xs:decimal"/> 
</xs:simpleType> 

<xs:simpleType name="empty"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value=""/> 
    </xs:restriction> 
</xs:simpleType> 
1

有兩種方法。一個是@kjhughes建議的:在xs:decimal和零長度字符串類型之間定義一個聯合。我個人更喜歡的另一種方法是定義一個列表類型,其中的項目類型爲xs:decimal和maxLength 1.雖然對驗證的影響完全相同,但我認爲使用模式進行數據類型時,列表類型更易於使用:當然,使用XSLT和XQuery時,元素的原子化會給你一個零或一位小數的序列。

1

聽起來好像您的用例非常類似於xsi:nil的一些激勵案例。從你的描述,這聽起來就好像你所做的元素的nillable,但隨後餵它形式的非nilled實例

<amperage_rating unit="A"></amperage_rating> 

,而不是指定元素應被nilled:

<amperage_rating unit="A" xsi:nil="true"></amperage_rating> 

如果你想修改類型,kjhughes和Michael Kay描述的方法應該可以正常工作。

相關問題