在SOA服务中,我可以将进程绑定到XSD复杂类型而不是元素

时间:2014-09-18 19:13:28

标签: xml oop xsd bpel oracle-soa

我们正在创建一个企业级XSD结构来处理系统中的常见元素。例如,我们有以下复杂类型:

<xs:complexType name="Person">
    <xs:attribute name="First" type="xs:string" />
    <xs:attribute name="Last" type="xs:string" />
</xs:complexType>

关闭这个复杂类型,我们得出以下两个元素:

<xs:element name="Employee">
    <xs:extension base="Person" />
    <xs:attribute name="SSN" type="xs:string" />
</xs:element>

<xs:element name="Customer">
    <xs:extension base="Person" />
    <xs:attribute name="CustomerID" type="xs:integer" />
</xs:element>

我们希望有一个SOA服务,它将被绑定到&#34; Person&#34;的复杂类型。而不是像#34; Employee&#34;或&#34;客户&#34;。基本上我们希望将SOA输入作为多态对象而不是具体实现来处理。

有没有办法将BPEL WSDL绑定到抽象类型而不是具体元素?

1 个答案:

答案 0 :(得分:1)

XML Schema complexType元素

<强>抽象
可选的。指定是否可以在实例文档中使用复杂类型。 True表示元素不能直接使用此复杂类型,但必须使用从此复杂类型派生的复杂类型。默认值为false。 Reference

XML Schema扩展元素

扩展元素扩展了现有的simpleType或complexType元素。 Reference

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" targetNamespace="yourNameSpace"
    xmlns="yourNameSpace" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="Person" abstract="true">
        <xs:attribute name="First" type="xs:string"/>
        <xs:attribute name="Last" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Employee">
        <xs:complexContent>
            <xs:extension base="Person">
                <xs:attribute name="SSN" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="Customer">
        <xs:complexContent>
            <xs:extension base="Person">
                <xs:attribute name="CustomerID" type="xs:integer"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

  

Oracle SOA Web服务它不会将抽象类型识别为   可用的类型。

XML Schema any Element

any元素使作者能够使用未由模式指定的元素扩展XML文档。 Reference

请参阅namespace属性以添加限制。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" targetNamespace="yourNameSpace"
    xmlns="yourNameSpace" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Person" type="Person"/> 
    <xs:complexType name="Person">
        <xs:sequence>
            <xs:any minOccurs="0" namespace="##targetNamespace"/>
        </xs:sequence>
        <xs:attribute name="First" type="xs:string"/>
        <xs:attribute name="Last" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Employee">
        <xs:attribute name="SSN" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Customer">
        <xs:attribute name="CustomerID" type="xs:integer"/>
    </xs:complexType>
</xs:schema>