2011-06-01 59 views
1

我有這個在我的xsd:如何定義適當的複雜類型?

<xs:element name="Parameter" type="complex"> 

,我想這樣定義複雜:

<xs:simpleType name="complex"> 
    1 xs:decimal 
    2 xs:string 
    </xs:simpleType> 

所以,如果參數的值是小數取小數,如果值不是小數承擔該值是字符串。如何聲明我的複雜類型?

回答

2

你需要一個complexType連同choice來表達這一點:

<xs:complexType name="complex"> 
    <xs:choice> 
     <xs:element name="number" type="xs:decimal"/> 
     <xs:element name="string" type="xs:string"/> 
    </xs:choice> 
</xs:complexType> 

編輯:根據您的意見,也許這是值得一試:

<xs:simpleType name="monat"> 
    <xs:union memberTypes="xs:decimal xs:string"/> 
</xs:simpleType> 

但JAXB將translate這至少String,所以聯盟沒有任何好處,至少就生成的類而言。而你使用JAXB只是一個猜測。

+0

這也可以用單個元素來完成,它接受''多種類型,但它不會真正分離字符串和小數,因爲每個有效的小數也是一個字符串。 – jasso 2011-06-01 13:42:32

+0

這將首先檢查一個小數,然後轉到字符串? – Dominating 2011-06-01 14:47:37

+0

@指定它將要求你將內容包裝在一個'數字'或'字符串'元素中。正如jasso指出的,否則很難,因爲每個數字也是一個字符串。 – Waldheinz 2011-06-01 14:49:10