2013-11-25 34 views
1

我有一個包含以下內容的XSD:在XSD架構複雜類型定義默認值

<xs:complexType name="MyDataType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:boolean"> 
      <xs:attribute name="id" type="xs:int" fixed="9999" /> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

<xs:complexType name="MessageType"> 
    <xs:all> 
     <xs:element name="Data" type="MyDataType"/> 
    </xs:all> 
</xs:complexType> 

所以這個片段是有效的:

<Message> 
    <Data>true</Data> 
</Message> 

當消息被定義爲類型消息類型的。但我想要做的就是給客戶省去了數據元素的能力:

<Message></Message> 

(或等同的自封閉元素)

語義,有點像:

<xs:complexType name="MyDataType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:boolean" default="true"> 
      <xs:attribute name="id" type="xs:int" fixed="9999" /> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

將默認值添加到擴展中。雖然沒有工作....

+0

[XML Schema:爲複雜類型設置默認值?]的可能的副本(http://stackoverflow.com/questions/1060190/xml-schema-setting-a-default-value-for-a-complextype) – Tony

回答

0

你不能達到你想要的。假設你將default =「true」移動到Data元素聲明中,並且使Data成爲可選項(通過添加minOccurs =「0」)...,元素和屬性之間的區別在於它的工作方式有所不同...從Primer引用:「缺省屬性值適用於缺少屬性時,並且元素爲空時應用默認元素值。」

因此,您可能得到的最接近的數字是<Message><Data/></Message>,在這種情況下,默認值「true」通過PSVI可用。