2011-10-11 70 views
3

當覆蓋基類型時,是否可以將xml屬性的值設置爲固定值?XML模式:爲在基類型中定義的屬性設置固定值

例如,我的基本類型是這樣的:

<xs:complexType name="Parameter" abstract="true"> 
    ... stuff that all parameters have in common ... 
    <xs:attribute name="parameterType" type="ax21:parameterType"/> 
</xs:complexType> 

類型參數類型是具有兩個可能的值的枚舉:

<xs:simpleType name="parameterType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="singleParameter" /> 
     <xs:enumeration value="arrayParameter" /> 
    </xs:restriction> 
</xs:simpleType> 

參數類型不應該被用來但僅作爲擴展它的兩種複雜類型的基礎:

<xs:complexType name="ParameterImpl1"> 
     <xs:complexContent> 
      <xs:extension base="ax21:Parameter"> 
       ...stuff specific for this implementation of parameter... 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="ParameterImpl2"> 
     <xs:complexContent> 
      <xs:extension base="ax21:WS_Parameter"> 
       ...stuff specific for this implementation of parameter... 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

而在這些子類型中,我想將parameterType屬性設置爲固定值。 有沒有可能做到這一點?

另外,我想解釋的背景在我的情況 - 因爲我覺得可能是一個簡單的解決方案,以我的整個問題:
我正在寫一個WSDL文件和參數類型用於作爲操作中的輸入參數。它只被用作擴展它的兩種類型的接口,但在我的java服務器端代碼(由Axis2生成)處理Web服務請求時,我僅獲得參數對象,並且找不到任何方法來確定實際上哪兩種特定的子類型在請求中被傳遞。 (除手動解析參數對象的xmlString,我想避免)

希望我的解釋是不夠精確 - 只是告訴我,如果你需要更多信息或不明白我試圖做。

在此先感謝!

更新:
此主題的研究後,我認爲這樣做的唯一方法是使用繼承的限制多態性這篇文章中描述:那麼在
http://www.ibm.com/developerworks/library/x-flexschema/
這種情況下,基類型包含屬性和繼承類的「覆蓋」它,設置一個固定值。

+0

可悲的是,從更新的鏈接已經打破了自2011年 –

+0

有一個存檔版本:https://web.archive.org/web/20130731050042/http://www.ibm.com/developerworks/library/x-flexschema/ –

回答

1

至於你說這可以通過限制來完成,生成的XSD會是這個樣子

enter image description here

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML 2015 Developer Bundle Edition 12.1.2.5004 ([http://www.liquid-technologies.com][2])--> 
<xs:schema elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType abstract="true" 
        name="Parameter"> 
     <xs:attribute name="paramterType" 
         type="parameterType" /> 
    </xs:complexType> 
    <xs:simpleType name="parameterType"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="singleParameter" /> 
      <xs:enumeration value="arrayParameter" /> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:complexType name="ParameterImpl1"> 
     <xs:complexContent> 
      <xs:restriction base="Parameter"> 
       <xs:attribute name="paramterType" 
           fixed="singleParameter" 
           type="parameterType" /> 
      </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="ParameterImpl2"> 
     <xs:complexContent> 
      <xs:restriction base="Parameter"> 
       <xs:attribute name="paramterType" 
           fixed="arrayParameter" 
           type="parameterType" /> 
      </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 
相關問題