我们正在创建一个企业级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绑定到抽象类型而不是具体元素?
答案 0 :(得分:1)
<强>抽象强>
可选的。指定是否可以在实例文档中使用复杂类型。 True表示元素不能直接使用此复杂类型,但必须使用从此复杂类型派生的复杂类型。默认值为false。 Reference
扩展元素扩展了现有的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服务它不会将抽象类型识别为 可用的类型。
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>