单个WSDL中的多个XML模式是否需要使用xsd:import?

时间:2016-06-07 13:16:44

标签: xsd namespaces wsdl wsimport

我是WSDL的新手。我有一个关于XML模式命名空间的问题。

假设我在定义标记中定义了三个名称空间:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:tns="urn:arjun/ws/prime/primeservice/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:Query="urn:/arjun/xml/prime/primeservice/query" 
    xmlns:Data="urn:/arjun/xml/prime/primeservice/data" 
    targetNamespace="urn:arjun/ws/prime/primeservice/" >

当我在其中一个命名空间中定义一个类型时,如果我需要对该命名空间的引用,我需要导入其他命名空间(如下例所示)

<types>
    <xsd:schema targetNamespace="urn:arjun/ws/prime/primeservice/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        attributeFormDefault="unqualified" 
        elementFormDefault="qualified">

        <xsd:import namespace="urn:/arjun/xml/prime/primeservice/query"/>

        <xsd:element name="Input" type="tns:Input"/>
        <xsd:complexType name="Input">
            <xsd:sequence>
                <xsd:element ref="Query:StanderedInput"/> 
            </xsd:sequence>
        </xsd:complexType>

        ...
    </xsd:schema
</types>

或者我可以简单地引用它而不导入该命名空间?

1 个答案:

答案 0 :(得分:2)

  

我可以直接引用该命名空间来引用它吗?

不,你不能。如果没有导入,您应该收到XSD错误。

在XSD架构文档中,xsd:import元素提供一个强制性和一个可选用途。

  • 它表示模式文档中声明的某些模式组件可能依赖于在另一个名称空间中声明的组件; namespace属性标识其他名称空间。

  • 可选地,它还可以使用schemaLocation属性来指定可以找到导入的命名空间的模式文档的位置;处理者可能会也可能不会关注该信息。