3.3.8 WSDLのインポート
wsdl:import要素を定義することで,ほかのWSDLファイルをインポートできます。インポートできるのは,インポート元とインポート対象とを合わせて2階層までです。インポート対象に,さらにwsdl:import要素を定義することはできません。
WSDLのインポートの概念を次の図に示します。
(1) wsdl:import要素の書式
wsdl:import要素の書式と属性を示します。
- 書式
<wsdl:import namespace="インポート対象の名前空間のURI" location="インポート対象のWSDLのファイル名"/>
- 属性
-
-
namespace
インポート対象の名前空間のURIを定義します。この属性の定義は必須です。
-
location
インポート対象のWSDLのファイル名を定義します。この属性の定義は必須です。
location属性に定義できるのは相対パスだけです。したがって,絶対パスや,http://やftp://などのプロトコルで始まるURIは定義できません。また,相対パスにショートカットを含めることはできません。
相対パスを記述するときは,「3.3.6(2) xsd:import要素の書式」に記載された「相対パスに指定する文字に関する注意」の内容に注意してください。
-
(2) wsdl:import要素の構文
wsdl:import要素の構文,および定義時の注意事項を示します。
(a) WSDLをインポートする場合の要素の組み合わせ
WSDLをインポートする場合,インポート元またはインポート対象のどちらかのWSDLに,wsdl:binding要素を定義する必要があります。次の表に,WSDLをインポートする場合に定義が必要な要素の組み合わせを示します。
インポート元 |
インポート対象 |
---|---|
wsdl:binding wsdl:service |
wsdl:types※ wsdl:message wsdl:portType |
wsdl:service |
wsdl:types※ wsdl:message wsdl:portType wsdl:binding |
(b) wsdl:import要素の記述位置
wsdl:import要素は,次に示す規則に従って記述してください。
-
wsdl:definitions要素の子要素として記述してください。
-
wsdl:documentation要素よりもあとに記述してください。
-
wsdl:documentation要素を除く,ほかのすべての要素よりも前に記述してください。
(c) インポート対象のWSDLの定義
インポート対象のWSDLでは,ルート要素をwsdl:definitions要素にしてください。また,インポート対象のwsdl:definitions要素のtargetNamespace属性は,次に示す規則に従って記述してください。
-
インポート元のwsdl:import要素のnamespace属性と同じ値を定義してください。
-
インポート元のtargetNamespace属性と異なる値を定義してください。
(d) 複数のWSDLのインポート
wsdl:definitionsの子要素にwsdl:import要素を複数行記述することで,複数のWSDLをインポートできます。ただし,インポート対象のWSDLで名前空間(namespace属性の値)またはファイル名(location属性の値)のどちらかが重複した場合は,インポートできません。
(3) wsdl:import要素の定義例
WSDLをインポートする場合の定義例を示します。
-
DataInfoService.wsdl(インポート元)
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://service.dictionary.com" xmlns:intf="http://dictionary.com" xmlns:svc="http://service.dictionary.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:import namespace="http://dictionary.com" location="DataInfo.wsdl"/> <wsdl:binding name="DataInfoSoapBinding" type="intf:DataInfo"> ... </wsdl:binding> <wsdl:service name="DataInfoService"> ... </wsdl:service> </wsdl:definitions>
-
DataInfo.wsdl(インポート対象)
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://dictionary.com" xmlns:intf="http://dictionary.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> ... </wsdl:types> <wsdl:message name="getDataResponse"> ... </wsdl:message> <wsdl:portType name="DataInfo"> ... </wsdl:portType> </wsdl:definitions>