簡體   English   中英

擴展XSD以放置單個元素,而不是在XSD中使用xs:any

[英]Extend XSD to put individual elements instead of using the xs:any in an XSD

我有一個帶有xs:any的XSD。這使我可以插入自己選擇的任何標記/元素。 但是,我想擴展此XSD,以便可以使用自己的特定元素來代替使用xs:any。

我不想編輯相同的XSD,但創建一個擴展XSD,該擴展添加了特定的我想使用的特定元素,而不是使用xs:any

這是我的XSD的一部分。

...
...
... 
<xs:element name="MRegReq" type="mss:MRegReqType" />
<xs:complexType name="MRegReqType">
    <xs:complexContent>
        <xs:extension base="mss:MessageAbstractType">
            <xs:sequence>
                <xs:element name="User" type="mss:UserType" />
                <xs:element name="EData" type="xenc:EDataType"
                    minOccurs="0" />
                <xs:any namespace="##other" processContents="lax" minOccurs="0"
                    maxOccurs="unbounded" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

在上面,

我想用擴展名替換它,以便當我使用JAX-WS重新生成存根等時,可以訪問XSD擴展名中指定的各個元素(而不必獲取request.getAny()和遍歷節點以獲取每個元素)。

任何指針/幫助將不勝感激

您不能替換擴展中的元素:

架構組件約束:派生有效(擴展)

如果{derivation method}是擴展名,則以下情況中的適當情況必須為真:

...

1.2其{屬性用途}必須是復雜類型定義本身的{屬性用途}的子集,也就是說,對於{基本類型定義}的{屬性用途}中的每個屬性用途,都必須有一個屬性用途復雜類型定義本身的{屬性使用}中,其{屬性聲明}與它的屬性聲明具有相同的{name},{target namespace}和{type definition}。

用簡單的語言:擴展名必須包括所有具有相同名稱,名稱空間和類型的元素作為基本類型。


但是創建另一個擴展應該不是問題:

<xs:choice>
    <xs:element name="MRegReqA" type="mss:MRegReqTypeA" />
    <xs:element name="MRegReqB" type="mss:MRegReqTypeB" />
</xs:choice>

<xs:complexType name="MRegReqType">
    <xs:complexContent>
        <xs:extension base="mss:MessageAbstractType">
            <xs:sequence>
                <xs:element name="User" type="mss:UserType" />
                <xs:element name="EData" type="xenc:EDataType" minOccurs="0" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="MRegReqTypeA">
    <xs:complexContent>
        <xs:extension base="mss:MRegReqType">
            <xs:sequence>
                <xs:element name="Product" type="mss:ProductType" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="MRegReqTypeB">
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM