1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21740 -->
4 <sect1 id="zend.soap.wsdl">
5 <title>WSDLアクセッサ</title>
10 内部的に<classname>Zend_Soap_Server</classname>コンポーネントによって<classname>Zend_Soap_Wsdl</classname>が使われます。
11 それでも、このクラスにより提供される機能を独自の必要性によって使うこともできます。
12 <classname>Zend_Soap_Wsdl</classname>パッケージは、パーサーとWSDL文書のビルダーを含みます。
15 あなたに使う予定がなければ、この節を読み飛ばすことができます。
19 <sect2 id="zend.soap.wsdl.constructor">
20 <title>Zend_Soap_Wsdlコンストラクタ</title>
22 <classname>Zend_Soap_Wsdl</classname>コンストラクタは3つのパラメータをとります:
25 <simpara><code>$name</code> - 記述されたウェブサービスの名前。</simpara>
29 <code>$uri</code> - WSDLが利用できる<acronym>URI</acronym>
30 (ファイルシステムのファイルへのリファレンスでも可)
35 <code>$strategy</code> - 複雑な型(オブジェクト)を検出する方策を
36 識別するために用いられるオプションのフラグです。
37 これはバージョン1.7以前はブール値 <code>$extractComplexTypes</code>でしたが、
38 後方互換性のためにまだブール値として設定できます。
39 デフォルトで、1.6の検出動作が設定されます。
40 複雑な型の検出の方策について詳しくは、この節をご覧下さい:
41 <xref linkend="zend.soap.wsdl.types.add_complex" />
48 <sect2 id="zend.soap.wsdl.addmessage">
49 <title>addMessage()メソッド</title>
51 <methodname>addMessage($name, $parts)</methodname>メソッドは、新しいメッセージの説明をWSDL文書に加えます。
52 (/definitions/message 要素)
55 <classname>Zend_Soap_Server</classname>および<classname>Zend_Soap_Client</classname>の機能に関して、
59 <code>$name</code>パラメータはメッセージの名前を示します。
62 <code>$parts</code>パラメータは<acronym>SOAP</acronym>呼び出しパラメータを表すメッセージ部分の配列です。
63 それは連想配列です: 'part name' (<acronym>SOAP</acronym>呼び出しパラメータ名) => 'part type'.
66 型マッピングの管理は<methodname>addTypes()</methodname>や<methodname>addTypes()</methodname>、
67 および<methodname>addComplexType()</methodname>メソッド(下記参照)を用いて実行されます。
71 メッセージ部分は 'element' または 'type' 属性を型決定のために使います。
72 (<ulink url="http://www.w3.org/TR/wsdl#_messages"/>をご覧ください).
75 'element' 属性は、データ型定義の対応する要素を参照しなければなりません。
76 'type' 属性は、対応するcomplexType項目を参照します。
79 標準XSD型のすべてで 'element' および 'complexType' 定義の両方があります。
80 (<ulink url="http://schemas.xmlsoap.org/soap/encoding/"/>参照)
83 <methodname>Zend_Soap_Wsdl::addComplexType()</methodname>メソッドを用いて追加されるであろう、
84 標準ではない型のすべてがWSDL文書の '/definitions/types/schema/' セクションの 'complexType' ノードで記述されます。
87 そして<methodname>addMessage()</methodname>メソッドは型を表現するために、
93 <sect2 id="zend.soap.wsdl.add_port_type">
94 <title>addPortType()メソッド</title>
96 <methodname>addPortType($name)</methodname>メソッドは指定されたポートタイプ名で
97 WSDL文書 (/definitions/portType) に新規のポートタイプを追加します。
100 <classname>Zend_Soap_Server</classname>の実装に関して定義されるウェブサービスメソッドのセットと結びつきます。
103 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_porttypes"/>をご覧ください。
107 <sect2 id="zend.soap.wsdl.add_port_operation">
108 <title>addPortOperation()メソッド</title>
110 <methodname>addPortOperation($portType, $name, $input = false, $output = false, $fault = false)</methodname>
111 メソッドは、新しいポート・オペレーションをWSDL文書 (/definitions/portType/operation) の
115 各々のポート・オペレーションは<classname>Zend_Soap_Server</classname>実装では、
116 クラス・メソッド(ウェブサービスがクラスに基づくならば)
117 または関数(ウェブサービスがメソッドセットに基づくならば)に対応します。
120 それも、指定されたパラメータ、<code>$input</code>や<code>$output</code>および<code>$fault</code>に従って、
121 対応するポート・オペレーション・メッセージを加えます。
124 <classname>Zend_Soap_Server</classname>クラスに基づいてサービスを記述するために、
125 <classname>Zend_Soap_Server</classname>コンポーネントは各々のポート・オペレーションのために2つのメッセージを生成します:
129 <code>$methodName . 'Request'</code>という名前で入力メッセージ。
134 <code>$methodName . 'Response'</code>という名前で出力メッセージ。
142 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_request-response"/>をご覧ください。
146 <sect2 id="zend.soap.wsdl.add_binding">
147 <title>addBinding()メソッド</title>
149 <methodname>addBinding($name, $portType)</methodname>メソッドは、新しいバインディングをWSDL文書 (/definitions/binding) に加えます。
152 'binding' WSDL文書ノードでは、
153 メッセージ形式と特定のportTypeによって定義されるオペレーションとメッセージに関するプロトコル詳細を定義します。
154 (<ulink url="http://www.w3.org/TR/wsdl#_bindings"/>をご覧ください)
157 メソッドはバインディング・ノードをつくって、それを返します。
158 それから、実際のデータで満たすために使われるかもしれません。
162 <classname>Zend_Soap_Server</classname>の実装ではWSDL文書の 'binding' 要素のために<code>$serviceName . 'Binding'</code> の名前が使われます。
166 <sect2 id="zend.soap.wsdl.add_binding_operation">
167 <title>addBindingOperation()メソッド</title>
169 <methodname>addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)</methodname>
170 メソッドはバインディング要素 (/definitions/binding/operation) に指定された名前で操作を追加します。
174 入力・出力・false値を持つ 'operation' 要素を加えるために、
175 入力(<code>$binding</code>パラメータ)として<methodname>addBinding()</methodname>によって返される
176 <code>XML_Tree_Node</code>オブジェクトをそのメソッドは取得します。
179 <classname>Zend_Soap_Server</classname>の実装で、 'soap:body' 要素を
180 '<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
182 ウェブサービス・メソッドごとに対応するバインディング・エントリを加えます。
185 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_bindings"/>をご覧ください。
189 <sect2 id="zend.soap.wsdl.add_soap_binding">
190 <title>addSoapBinding()メソッド</title>
192 <methodname>addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')</methodname>
193 メソッドは、指定されたスタイルとトランスポート(<classname>Zend_Soap_Server</classname>の実装では、<acronym>HTTP</acronym>についてRPCスタイルを使用します)で
194 <acronym>SOAP</acronym>バインディング項目 ('soap:binding') をバインディング要素(それは、あるポートタイプにすでにリンクされます)に追加します。
197 '/definitions/binding/soap:binding' 要素は、
198 バインディングが<acronym>SOAP</acronym>プロトコル形式に束縛されることを示すのに用いられます。
201 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_bindings"/>をご覧ください。
205 <sect2 id="zend.soap.wsdl.add_soap_operation">
206 <title>addSoapOperation()メソッド</title>
208 <methodname>addSoapOperation($binding, $soap_action)</methodname>メソッドは、
209 <acronym>SOAP</acronym>操作項目 ('soap:operation') を指定されたアクションでバインディング要素に加えます。
210 'soap:operation' 要素の 'style' 属性は、(RPC指向か文書指向の)プログラミング・モデルが
211 <methodname>addSoapBinding()</methodname>メソッドを使用しているかもしれないので使われません。
214 '/definitions/binding/soap:operation' 要素の 'soapAction' 属性は、
215 この操作のためにSOAPActionヘッダの値を指定します。
216 この属性は<acronym>HTTP</acronym>を通じた<acronym>SOAP</acronym>で必須です。
217 他のトランスポートのために指定しては<emphasis>いけません</emphasis>。
220 <classname>Zend_Soap_Server</classname>の実装では、<acronym>SOAP</acronym>操作アクション名のために
221 <code>$serviceUri . '#' . $methodName</code>を使います。
224 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_soap:operation"/>をご覧ください。
228 <sect2 id="zend.soap.wsdl.add_service">
229 <title>addService()メソッド</title>
231 <methodname>addService($name, $port_name, $binding, $location)</methodname>メソッドは
232 指定したウェブサービス名やポートタイプ及びバインディング、ロケーションとともに
233 WSDL文書に '/definitions/service' 要素を追加します。
236 WSDL 1.1では、サービスごとにいくつかのポートタイプ(操作のセット)を持つことができます。
237 この能力は<classname>Zend_Soap_Server</classname>の実装では使われず、
238 <classname>Zend_Soap_Wsdl</classname>クラスでサポートされません。
241 <classname>Zend_Soap_Server</classname>の実装に使用します:
245 ウェブサービス名として<code>$name . 'Service'</code>
250 ポートタイプ名として<code>$name . 'Port'</code>
255 バインディング名として<code>'tns:' . $name . 'Binding'</code>
258 <code>'tns:' namespace</code>はスクリプトの<acronym>URI</acronym>
259 (<code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code>)
267 クラスを使うウェブサービスの定義のためのサービス<acronym>URI</acronym>としてスクリプトの<acronym>URI</acronym>
268 <footnote><para><code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code></para></footnote>
272 <code>$name</code>がクラスを使うウェブサービス定義モードのためのクラス名と
273 関数のセットを使うウェブサービス定義モードのためのスクリプト名前であるところ。
276 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_services"/>をご覧ください。
280 <sect2 id="zend.soap.wsdl.types">
281 <title>型のマッピング</title>
283 <classname>Zend_Soap</classname> WSDLアクセッサの実装では、<acronym>PHP</acronym>と<acronym>SOAP</acronym>型の間で以下の型マッピングを使用します:
286 <para><acronym>PHP</acronym>文字列 <-> <code>xsd:string</code></para>
289 <para><acronym>PHP</acronym> integer <-> <code>xsd:int</code></para>
292 <para><acronym>PHP</acronym> floatおよびdouble値 <-> <code>xsd:float</code></para>
295 <para><acronym>PHP</acronym>ブール値 <-> <code>xsd:boolean</code></para>
298 <para><acronym>PHP</acronym>配列 <-> <code>soap-enc:Array</code></para>
301 <para><acronym>PHP</acronym>オブジェクト <-> <code>xsd:struct</code></para>
305 <acronym>PHP</acronym>クラス <-> 複雑な型のストラテジーに基づいた (<xref linkend="zend.soap.wsdl.types.add_complex" />参照)
308 デフォルトで、<classname>Zend_Soap_Wsdl</classname>は複雑な型のための検出アルゴリズムとして
309 <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>クラスで生成されます。
310 AutoDiscoverコンストラクタの最初のパラメータは、
311 <classname>Zend_Soap_Wsdl_Strategy_Interface</classname>を実装した、
312 どんな複雑な型ストラテジーでも、クラスの名前を持つ文字列でもとります。
313 <code>$extractComplexType</code>との後方互換性のために、
315 もし <constant>TRUE</constant> なら、<classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>、
316 もし <constant>FALSE</constant> なら、<classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>。
322 <para><acronym>PHP</acronym> void <-> 空の型</para>
325 <para>なんらかの理由でこれらの型のいずれとも型が一致しなければ、<code>xsd:anyType</code>が使われます。</para>
329 <code>xsd:</code> が "http://www.w3.org/2001/XMLSchema" ネームスペースであるところでは、
330 <code>soap-enc:</code> は "http://schemas.xmlsoap.org/soap/encoding/" ネームスペースで、
331 <code>tns:</code> はサービスのための "target namespace" です。
334 <sect3 id="zend.soap.wsdl.types.retrieve">
335 <title>型情報の取得</title>
337 <methodname>getType($type)</methodname>メソッドは、指定された <acronym>PHP</acronym> 型をマップするために用いられるかもしれません:
339 <programlisting language="php"><![CDATA[
341 $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
344 $soapIntType = $wsdl->getType('int');
351 $soapMyClassType = $wsdl->getType('MyClass');
356 <sect3 id="zend.soap.wsdl.types.add_complex">
357 <title>複雑な型の情報を追加する</title>
359 <methodname>addComplexType($type)</methodname>メソッドは、
360 複雑な型(<acronym>PHP</acronym>クラス)をWSDL文書に追加するために使われます。
364 メソッド・パラメータの対応する複雑な型を追加するか、型を返すために、
365 <methodname>getType()</methodname>メソッドによってそれは自動的に使われます。
369 その検出とビルドのアルゴリズムは、複雑な型に対して現在実装中の検出ストラテジーに基づきます。
371 または、コンストラクタの第3パラメータとして<classname>Zend_Soap_Wsdl_Strategy_Interface</classname>を実装したインスタンス、
372 または、<classname>Zend_Soap_Wsdl</classname>の<code>setComplexTypeStrategy($strategy)</code>関数の利用のいずれかにより、
374 以下の検出ストラテジーが、現在存在します:
379 <para>クラス<classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>:
380 デフォルトで許可されます(第3のコンストラクタ・パラメータが設定されないとき)。
381 クラス型の public 属性項目を反復して、
382 複雑なオブジェクト型のサブタイプとして登録します。</para>
385 <para>クラス<classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>:
386 単純なXSD型 xsd:anyType に、すべての複雑な型を投げます。
388 <acronym>PHP</acronym>のような型検査の弱い言語により、うまく取り扱われるかどうか注意してください。</para>
391 <para>クラス<classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence</classname>:
392 このストラテジーにより、以下のようにタイプの戻りパラメータを指定できます:
393 <code>int[]</code>または<code>string[]</code>.
394 Zend Framework バージョン 1.9 以降、
395 それは単純な<acronym>PHP</acronym>型(例えばint)、文字列、ブール値、floatなどを取り扱えるばかりではなく、
396 オブジェクトおよびオブジェクトの配列も指定できます。</para>
399 <para>クラス<classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex</classname>:
400 このストラテジーにより、非常に複雑な多数のオブジェクトを見つけることができます。
401 オブジェクト型は<classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>に基づいて
402 検出されます。配列はその定義の周囲を包まれます。</para>
405 <para>クラス<classname>Zend_Soap_Wsdl_Strategy_Composite</classname>:
406 このストラテジーは、<methodname>connectTypeToStrategy($type, $strategy)</methodname>メソッドを通じて
407 希望するストラテジーに<acronym>PHP</acronym>の複雑な型(クラス名)を接続することによって、
409 完全なタイプマップを、<code>$type</code> -> <code>$strategy</code> のペアを持つ配列として
411 もし未知の型の追加が必要であれば、第2パラメータで使われるデフォルト・ストラテジーを指定します。
412 このパラメータのデフォルトは、<classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>です。</para>
417 <methodname>addComplexType()</methodname>メソッドは、指定された<acronym>PHP</acronym>クラスの名前で、
418 記述された複雑な型ごとに '/definitions/types/xsd:schema/xsd:complexType' 要素を生成します。
422 クラスのプロパティは、プロパティをWSDL記述にインクルードしておくために、記述された<acronym>PHP</acronym>型でdocblock部を持って<emphasis>いなければなりません</emphasis>。
426 <methodname>addComplexType()</methodname>は型がWSDL文書の型セクションの範囲内ですでに記述されるかどうか調べます。
430 このメソッドが型定義部で2回以上再帰で呼ばれると、それは重複を防ぎます。
434 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_types"/>をご覧ください。
440 <sect2 id="zend.soap.wsdl.add_documentation">
441 <title>addDocumentation()メソッド</title>
443 <methodname>addDocumentation($input_node, $documentation)</methodname>メソッドは、
444 オプションの 'wsdl:document' 要素を用いて人間の読める文書を追加します。
447 '/definitions/binding/soap:binding' 要素は、
448 バインディングが<acronym>SOAP</acronym>プロトコル構成にバインドされることを示すために使われます。
451 詳しくは<ulink url="http://www.w3.org/TR/wsdl#_documentation"/>をご覧ください。
455 <sect2 id="zend.soap.wsdl.retrieve">
456 <title>確定したWSDL文書を取得</title>
458 <methodname>toXML()</methodname>や<methodname>toDomDocument()</methodname>および<methodname>dump($filename = false)</methodname>メソッドは、
459 WSDL文書を<acronym>XML</acronym>やDOMの構造もしくはファイルとして取得するために使われるかもしれません。