繁体   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