WSDL-クイックガイド
WSDLはWebサービス記述言語の略です。これは、Webサービスを記述するための標準形式です。WSDLはMicrosoftとIBMが共同で開発しました。
WSDLの機能
WSDLは、分散環境および分散環境での情報交換のためのXMLベースのプロトコルです。
WSDL定義は、Webサービスにアクセスする方法とそれが実行する操作を記述します。
WSDLは、XMLベースのサービスとのインターフェース方法を記述するための言語です。
WSDLは、XMLベースの世界規模のビジネスレジストリであるUDDI(Universal Description、Discovery、and Integration)の不可欠な部分です。
WSDLは、UDDIが使用する言語です。
WSDLは「wiz-dull」と発音され、「WSD-L」と綴られます。
WSDLの使用法
WSDLは、インターネットを介してWebサービスを提供するために、SOAPおよびXMLスキーマと組み合わせて使用されることがよくあります。Webサービスに接続するクライアントプログラムは、WSDLを読み取って、サーバーで使用できる機能を判別できます。使用される特別なデータ型は、XMLスキーマの形式でWSDLファイルに埋め込まれます。その後、クライアントはSOAPを使用して、WSDLにリストされている関数の1つを実際に呼び出すことができます。
WSDLの歴史
WSDL 1.1は、2001年3月にXMLプロトコルでのW3C XMLアクティビティのサービスを説明するために、Ariba、IBM、およびMicrosoftによってW3Cノートとして提出されました。
WSDL 1.1は、World Wide Web Consortium(W3C)によって承認されていませんが、推奨(公式標準)となるバージョン2.0のドラフトをリリースしたばかりであるため、W3Cによって承認されています。
WSDLは、Webサービスを3つの特定の識別可能な要素に分解します。これらの要素は、一度定義すると結合または再利用できます。
個別に定義できるWSDLの3つの主要な要素は次のとおりです。
- Types
- Operations
- Binding
WSDLドキュメントにはさまざまな要素がありますが、これらはこれら3つの主要な要素に含まれており、個別のドキュメントとして作成し、組み合わせたり再利用したりして、完全なWSDLファイルを形成できます。
WSDL要素
WSDLドキュメントには次の要素が含まれています-
Definition−これはすべてのWSDLドキュメントのルート要素です。これは、Webサービスの名前を定義し、ドキュメントの残りの部分で使用される複数の名前空間を宣言し、ここで説明するすべてのサービス要素を含みます。
Data types −メッセージで使用されるデータ型は、XMLスキーマの形式です。
Message −これは、ドキュメント全体として、またはメソッド呼び出しにマップされる引数として提示されるメッセージの形式での、データの抽象的な定義です。
Operation −メッセージを受け入れて処理するのは、メソッド、メッセージキュー、またはビジネスプロセスの命名など、メッセージの操作の抽象的な定義です。
Port type−これは、1つ以上のエンドポイントにマップされた操作の抽象的なセットであり、バインディングの操作のコレクションを定義します。操作のコレクションは抽象的であるため、さまざまなバインディングを介して複数のトランスポートにマップできます。
Binding −これは、特定のポートタイプに対して定義された操作とメッセージの具体的なプロトコルとデータ形式です。
Port −バインディングとネットワークアドレスの組み合わせであり、サービス通信のターゲットアドレスを提供します。
Service−ファイル内のサービス定義を含む関連エンドポイントのコレクションです。サービスはバインディングをポートにマップし、拡張性の定義を含めます。
これらの主要な要素に加えて、WSDL仕様では次のユーティリティ要素も定義されています。
Documentation −この要素は、人間が読める形式のドキュメントを提供するために使用され、他のWSDL要素内に含めることができます。
Import −この要素は、他のWSDLドキュメントまたはXMLスキーマをインポートするために使用されます。
NOTE − WSDLパーツは通常、Webサービス対応ツールを使用して自動的に生成されます。
WSDLドキュメントの構造
WSDLドキュメントの主な構造は次のようになります-
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
<operation>
definition of a operation.......
</operation>
</portType>
<binding>
definition of a binding....
</binding>
<service>
definition of a service....
</service>
</definitions>
WSDLドキュメントには、拡張要素やサービス要素などの他の要素を含めることもできます。これにより、複数のWebサービスの定義を1つのWSDLドキュメントにグループ化できます。
さらに進んで、WSDLドキュメントの例を分析します。
以下に示すのは、単純なWSDLプログラムを示すために提供されているWSDLファイルです。
サービスがsayHelloと呼ばれる単一の公開されている関数を提供すると仮定します。この関数は、単一の文字列パラメータを想定し、単一の文字列グリーティングを返します。たとえば、パラメータworldを渡すと、サービス関数sayHelloは「Hello、world!」という挨拶を返します。
例
HelloService.wsdlファイルの内容-
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/" />
</port>
</service>
</definitions>
分析例
Definitions − HelloService
Type −組み込みのデータ型を使用し、それらはXMLSchemaで定義されています。
Message −
sayHelloRequest −firstNameパラメーター
sayHelloresponse-挨拶の戻り値
Port Type −リクエストサービスとレスポンスサービスで構成されるsayHello操作。
Binding − SOAPHTTPトランスポートプロトコルを使用する方向。
Service −http://www.examples.com/SayHello/で利用可能なサービス
Port −実行中のサービスにアクセスできるURIhttp://www.examples.com/SayHello/にバインディングを関連付けます。
ザ・ <definitions>elementは、すべてのWSDLドキュメントのルート要素である必要があります。Webサービスの名前を定義します。
これは、definitions要素を使用する前の章のコードです。
<definitions name="HelloService"
targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
................................................
</definitions>
上記の例から、我々はその結論付けることができ定義を-
他のすべての要素のコンテナです。
このドキュメントがHelloServiceと呼ばれることを指定します。
targetNamespace属性を指定します。targetNamespaceのは、自分自身を参照するためにWSDL文書を可能にするXMLスキーマの慣例です。この例では、http://www.examples.com/wsdl/HelloService.wsdlのtargetNamespaceを指定しています。
デフォルトの名前空間を指定します:xmlns = http://schemas.xmlsoap.org/wsdl/。したがって、messageやportTypeなど、名前空間プレフィックスのないすべての要素は、デフォルトのWSDL名前空間の一部であると見なされます。
ドキュメントの残りの部分で使用される多数の名前空間を指定します。
NOTE−名前空間の仕様では、ドキュメントが指定された場所に存在する必要はありません。重要な点は、定義されている他のすべての名前空間とは異なる、一意の値を指定することです。
Webサービスは、その入力と出力、およびそれらがサービスにマップされる方法とサービスからマップされる方法を定義する必要があります。WSDL<types>elementは、Webサービスで使用されるデータ型の定義を処理します。タイプはXMLドキュメントまたはドキュメントパーツです。
種類の要素は、クライアントとサーバー間で使用されるすべてのデータ型を記述します。
WSDLは、特定のタイピングシステムに排他的に関連付けられているわけではありません。
WSDLは、データ型を定義するためのデフォルトの選択肢としてW3CXMLスキーマ仕様を使用します。
サービスが文字列や整数などのXMLスキーマ組み込みの単純型のみを使用する場合、types要素は必要ありません。
WSDLを使用すると、型を個別の要素で定義できるため、型を複数のWebサービスで再利用できます。
これは、W3C仕様から抜粋したコードです。このコードは、WSDL内でtypes要素を使用する方法を示しています。
<types>
<schema targetNamespace = "http://example.com/stockquote.xsd"
xmlns = "http://www.w3.org/2000/10/XMLSchema">
<element name = "TradePriceRequest">
<complexType>
<all>
<element name = "tickerSymbol" type = "string"/>
</all>
</complexType>
</element>
<element name = "TradePrice">
<complexType>
<all>
<element name = "price" type = "float"/>
</all>
</complexType>
</element>
</schema>
</types>
データ型は、Webサービスで使用する予定のデータ型と形式を識別する問題に対処します。タイプ情報は、送信者と受信者の間で共有されます。したがって、メッセージの受信者は、データのエンコードに使用した情報にアクセスする必要があり、データのデコード方法を理解している必要があります。
ザ・ <message> 要素は、Webサービスプロバイダーとコンシューマーの間で交換されるデータを記述します。
各Webサービスには、入力と出力の2つのメッセージがあります。
入力はWebサービスのパラメーターを記述し、出力はWebサービスからの戻りデータを記述します。
各メッセージには0個以上が含まれています <part> パラメータ、Webサービス関数のパラメータごとに1つ。
各 <part> パラメータは、で定義された具象型に関連付けられます <types> コンテナ要素。
WSDLの例の章からコードを取り出しましょう-
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
ここでは、2つのメッセージ要素が定義されています。1つ目は要求メッセージSayHelloRequestを表し、2つ目は応答メッセージSayHelloResponseを表します。
これらの各メッセージには、単一のパーツ要素が含まれています。リクエストの場合、パーツは関数パラメーターを指定します。この場合、単一のfirstNameパラメーターを指定します。応答の場合、パーツは関数の戻り値を指定します。この場合、単一の挨拶の戻り値を指定します。
ザ・ <portType> elementは、複数のメッセージ要素を組み合わせて、完全な一方向または往復の操作を形成します。
たとえば、 <portType>1つの要求と1つの応答メッセージを1つの要求/応答操作に組み合わせることができます。これは、SOAPサービスで最も一般的に使用されます。portTypeは、複数の操作を定義できます。
WSDLの例の章からコードを取り出しましょう-
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
portType要素は、sayHelloと呼ばれる単一の操作を定義します。
この操作は、単一の入力メッセージSayHelloRequestと
出力メッセージSayHelloResponse。
操作のパターン
WSDLは4つの基本的な操作パターンをサポートします-
一方通行
サービスはメッセージを受信します。したがって、操作には単一の入力要素があります。一方向操作の文法は次のとおりです。
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:input name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
要求/応答
サービスはメッセージを受信し、応答を送信します。したがって、操作には1つの入力要素があり、その後に1つの出力要素が続きます。エラーをカプセル化するために、オプションの障害要素を指定することもできます。要求/応答操作の文法は次のとおりです。
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
要請応答
サービスはメッセージを送信し、応答を受信します。したがって、操作には1つの出力要素があり、その後に1つの入力要素が続きます。エラーをカプセル化するために、オプションの障害要素を指定することもできます。要請応答操作の文法は次のとおりです。
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken" parameterOrder = "nmtokens">
<wsdl:output name = "nmtoken"? message = "qname"/>
<wsdl:input name = "nmtoken"? message = "qname"/>
<wsdl:fault name = "nmtoken" message = "qname"/>*
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
お知らせ
サービスはメッセージを送信します。したがって、操作には単一の出力要素があります。以下は、通知操作の文法です。
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name = "nmtoken">
<wsdl:output name = "nmtoken"? message = "qname"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
ザ・ <binding>elementは、portType操作が実際にネットワークを介して送信される方法に関する特定の詳細を提供します。
バインディングは、HTTP GET、HTTP POST、SOAPなどの複数のトランスポートを介して利用可能にすることができます。
バインディングは、portType操作の転送に使用されているプロトコルに関する具体的な情報を提供します。
バインディングは、サービスが配置されている場所に関する情報を提供します。
SOAPプロトコルの場合、バインディングは <soap:binding>、およびトランスポートはHTTPプロトコル上のSOAPメッセージです。
1つのportTypeに複数のバインディングを指定できます。
バインディング要素には、name属性とtype属性の2つの属性があります。
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
名前属性は、バインディングの名前を定義し、そして結合は、この場合の「TNS:Hello_PortType」のポートタイプ属性点ポート。
SOAPバインディング
WSDL 1.1には、SOAP1.1の組み込み拡張機能が含まれています。これにより、SOAPヘッダー、SOAPエンコーディングスタイル、SOAPActionHTTPヘッダーなどのSOAP固有の詳細を指定できます。SOAP拡張要素には、次のものが含まれます。
- soap:binding
- soap:operation
- soap:body
石鹸:バインディング
この要素は、バインディングがSOAPを介して利用可能になることを示します。スタイル属性は、SOAPメッセージ・フォーマットの全体的なスタイルを示しています。rpcのスタイル値は、RPC形式を指定します。
トランスポート属性は、SOAPメッセージのトランスポートを示します。値http://schemas.xmlsoap.org/soap/httpはSOAPHTTPトランスポートを示し、http://schemas.xmlsoap.org/soap/smtpはSOAPSMTPトランスポートを示します。
石鹸:操作
この要素は、特定の操作を特定のSOAP実装にバインドすることを示します。soapActionのSOAPAction HTTPヘッダがサービスを識別するために使用されることが属性を指定します。
soap:body
この要素を使用すると、入力メッセージと出力メッセージの詳細を指定できます。HelloWorldの場合、body要素は指定されたサービスに関連付けられたSOAPエンコーディングスタイルと名前空間URNを指定します。
これが例の章のコードです-
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc" transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
A <port> 要素は、バインディングに単一のアドレスを指定することにより、個々のエンドポイントを定義します。
ポートを指定するための文法は次のとおりです-
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name = "nmtoken" binding = "qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
port要素には、nameとbindingの2つの属性があります。
名前の属性が囲み、WSDLドキュメント内で定義されたすべてのポート間で一意の名前を提供します。
バインディング属性は、WSDLで定義されたリンクルールを使用したバインディングを参照します。
バインディング拡張性要素は、ポートのアドレス情報を指定するために使用されます。
ポートは複数のアドレスを指定してはなりません(MUSTNOT)。
ポートは、アドレス情報以外のバインディング情報を指定してはなりません(MUSTNOT)。
これが例の章のコードです-
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
ザ・ <service>elementは、Webサービスでサポートされるポートを定義します。サポートされているプロトコルごとに、1つのポート要素があります。service要素は、ポートのコレクションです。
Webサービスクライアントは、サービス要素から次のことを学ぶことができます-
- サービスにアクセスする場所、
- Webサービスにアクセスするためのポート、および
- 通信メッセージの定義方法。
service要素には、人間が読める形式のドキュメントを提供するためのドキュメント要素が含まれています。
これが例の章のコードです-
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address
location = "http://www.examples.com/SayHello/">
</port>
</service>
ポート要素のバインディング属性は、サービスのアドレスをWebサービスで定義されたバインディング要素に関連付けます。この例では、これはHello_Bindingです。
<binding name =" Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice" use = "encoded"/>
</output>
</operation>
</binding>
このチュートリアルでは、WSDLの基本について説明しました。次のステップは、SOAP、UDDI、およびWebサービスを学習することです。
ウェブサービス
Webサービスは、データを交換する目的で他のWebアプリケーションと対話するオープンスタンダード(XML、SOAP、HTTPなど)のWebアプリケーションです。
Webサービスの詳細については、Webサービスチュートリアルにアクセスしてください。
UDDI
UDDIは、Webサービスを記述、公開、および検索するためのXMLベースの標準です。
UDDIの詳細については、UDDIチュートリアルにアクセスしてください。
石鹸
SOAPは、アプリケーションがHTTPを介して情報を交換できるようにする単純なXMLベースのプロトコルです。
SOAPの詳細については、SOAPチュートリアルにアクセスしてください。
会社、Webサイト、または書籍をWSDLリソースとしてリストアップすることに興味がある場合は、webmaster @ tutorialspoint.comまでご連絡ください。
WSDL仕様のリスト
Specification | Draft / Proposal | W3C Recommendation |
WSDL1.1注 | 15. 2001年3月 |
|
WSDLの使用シナリオ | 2002年6月4日 |
|
WSDL要件 | 2002年10月28日 |
|
WSDLアーキテクチャ | 2004年2月11日 |
|
WSDL用語集 | 2004年2月11日 |
|
WSDLの使用シナリオ | 2004年2月11日 |
|
WSDL1.2コア言語 | 11. 2003年6月 |
|
WSDL1.2メッセージパターン | 11. 2003年6月 |
|
WSDL1.2バインディング | 11. 2003年6月 |
|
WSDL2.0プライマー | 2006年3月27日 |
|
WSDL2.0コア言語 | 2006年3月27日 |
|
WSDL2.0付属物 | 2006年3月27日 |
|
WSDL 2.0 SOAP1.1バインディング | 2006年3月27日 |
|
WSDL 2.0RDFマッピング | 18. 2006年5月 |
|
WS Addressing Core | 2006年5月9日 |
|
WS AddressingSOAPバインディング | 2006年5月9日 |
|
Webアーキテクチャ | 2004年12月15日 |