Zend_Soap_Wsdl.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.soap.wsdl">
  5. <title>WSDL Zugriffsmethoden</title>
  6. <note>
  7. <para>
  8. Die <classname>Zend_Soap_Wsdl</classname> Klasse wird von der Zend_Soap_Server Komponente intern verwendet
  9. um mit WSDL Dokumenten zu arbeiten. Trotzdem könnte man die Funktionalität die von dieser
  10. Klasse angeboten wird auch für eigene Zwecke verwendet werden. Das Zend_Soap_Wsdl Paket enthält
  11. sowohl einen Parser als auch einen Ersteller für WSDL Dokumente.
  12. </para>
  13. <para>
  14. Wenn man nicht plant das zu tun, kann dieses Kapitel der Dokumentation übersprungen werden.
  15. </para>
  16. </note>
  17. <sect2 id="zend.soap.wsdl.constructor">
  18. <title><classname>Zend_Soap_Wsdl</classname> Konstruktor.</title>
  19. <para>
  20. Der <classname>Zend_Soap_Wsdl</classname> Konstruktor nimmt drei Parameter:
  21. <orderedlist>
  22. <listitem>
  23. <simpara><code>$name</code> - Name des Web Services der beschrieben wird.</simpara>
  24. </listitem>
  25. <listitem>
  26. <simpara>
  27. <code>$uri</code> - URI wo das WSDL vorhanden sein wird (könnte auch eine Referenz
  28. zu einer Datei auf dem Dateisystem sein.)
  29. </simpara>
  30. </listitem>
  31. <listitem>
  32. <simpara>
  33. <code>$strategy</code> - Optionales Flag das verwendet wird um die Strategie für
  34. die Erkennung von komplexen Typen (Objekte) zu identifizieren. Das war vor der
  35. Version 1.7 ein boolscher <code>$extractComplexTypes</code> und kann aus Gründen
  36. der Rückwärtskompatibilität noch immer als Boolean gesetzt werden. Standardmäßig
  37. ist das Erkennungsverhalten von 1.6 gesetzt. Um mit Strategien für komplexe
  38. Typenerkennung weiterzumachen lesen wie weiter im Kapitel:
  39. <xref linkend="zend.soap.wsdl.types.add_complex" />.
  40. </simpara>
  41. </listitem>
  42. </orderedlist>
  43. </para>
  44. </sect2>
  45. <sect2 id="zend.soap.wsdl.addmessage">
  46. <title>Die <code>addMessage()</code> Methode.</title>
  47. <para>
  48. Die <code>addMessage($name, $parts)</code> Methode fügt eine neue Nachrichten Beschreibung
  49. zu einem WSDL Dokumetn hinzu (/definitions/message Element).
  50. </para>
  51. <para>
  52. Jede Nachricht korrespondiert zu einer Methode im Sinne von <classname>Zend_Soap_Server</classname>
  53. und <classname>Zend_Soap_Client</classname> Funktionalität.
  54. </para>
  55. <para>
  56. Der <code>$name</code> Parameter repräsentiert den Namen der Nachricht.
  57. </para>
  58. <para>
  59. Der <code>$parts</code> Parameter ist ein Array von Nachrichten Teilen welche SOAP Aufruf
  60. Parameter beschreiben. Es ist ein assoziatives Array:
  61. 'part name' (SOAP Aufruf Parameter Name) =&gt; 'part type'.
  62. </para>
  63. <para>
  64. Das Typ Mapping Management wird durchgeführt indem die <code>addTypes()</code>,
  65. <code>addTypes()</code> und <code>addComplexType()</code> Methoden ausgeführt werden (siehe anbei).
  66. </para>
  67. <note>
  68. <para>
  69. Nachrichten Teile können entweder 'element' oder 'type' Attribute für das typisieren
  70. verwenden (siehe <ulink url="http://www.w3.org/TR/wsdl#_messages"/>).
  71. </para>
  72. <para>
  73. 'element' Attribute müssen zu einem entsprechenden Element von Daten Typ Definition referieren.
  74. 'type' zu einem entsprechenden complexType Eintrag.
  75. </para>
  76. <para>
  77. Alle standardmäßigen XSD Typen haben beide 'element' und 'complexType' Definitionen
  78. (siehe <ulink url="http://schemas.xmlsoap.org/soap/encoding/"/>).
  79. </para>
  80. <para>
  81. Alle nicht-standardmäßigen Typen, welche hinzugefügt werden können durch verwenden der
  82. <classname>Zend_Soap_Wsdl::addComplexType()</classname> Methode, sind beschrieben durch Verwendung
  83. des 'complexType' Nodes des '/definitions/types/schema/' Abschnitts des WSDL Dokuments.
  84. </para>
  85. <para>
  86. <code>addMessage()</code> Methoden verwenden also immer das 'type' Attribut um Typen zu
  87. beschreiben.
  88. </para>
  89. </note>
  90. </sect2>
  91. <sect2 id="zend.soap.wsdl.add_port_type">
  92. <title>Die <code>addPortType()</code> Methode.</title>
  93. <para>
  94. Die <code>addPortType($name)</code> Methode fügt neue Port Typen zu einem WSDL Dokument
  95. (/definitions/portType) mit dem spezifizierten Port Typ Namen hinzu.
  96. </para>
  97. <para>
  98. Es verbindet ein Set von Web Service Methoden die im Sinne der Zend_Soap_Server Implementation
  99. definiert sind.
  100. </para>
  101. <para>
  102. Siehe <ulink url="http://www.w3.org/TR/wsdl#_porttypes"/> für Details.
  103. </para>
  104. </sect2>
  105. <sect2 id="zend.soap.wsdl.add_port_operation">
  106. <title>Die <code>addPortOperation()</code> Methode.</title>
  107. <para>
  108. Die <code>addPortOperation($portType, $name, $input = false, $output = false, $fault = false)</code>
  109. Methode fügt eine neue Port Operation zum spezifizierten Port Typ des WSDL Dokuments hinzu
  110. (/definitions/portType/operation).
  111. </para>
  112. <para>
  113. Jede Port Operation korrespondiert zu einer Methode der Klasse (wenn der Web Service auf einer
  114. Klasse basiert) oder Funktion (wenn der Web Service auf einem Set von Methoden basiert) im Sinne der
  115. Zend_Soap_Server Implementation.
  116. </para>
  117. <para>
  118. Sie fügt auch eine korrespondierende Port Operations Nachricht hinzu anhängig von den spezifizierten
  119. <code>$input</code>, <code>$output</code> und <code>$fault</code> Parametern.
  120. <note>
  121. <para>
  122. Die Zend_Soap_Server Komponente erzeugt zwei Nachrichten für jede Port Operation wärend das
  123. Service das auf der <classname>Zend_Soap_Server</classname> Klasse basiert beschrieben wird:
  124. <itemizedlist>
  125. <listitem>
  126. <para>
  127. Eine Eingabe Nachricht mit dem Namen <code>$methodName . 'Request'</code>.
  128. </para>
  129. </listitem>
  130. <listitem>
  131. <para>
  132. Eine Ausgabe Nachricht mit dem Namen <code>$methodName . 'Response'</code>.
  133. </para>
  134. </listitem>
  135. </itemizedlist>
  136. </para>
  137. </note>
  138. </para>
  139. <para>
  140. Siehe <ulink url="http://www.w3.org/TR/wsdl#_request-response"/> für Details.
  141. </para>
  142. </sect2>
  143. <sect2 id="zend.soap.wsdl.add_binding">
  144. <title>Die <code>addBinding()</code> Methode.</title>
  145. <para>
  146. Die <code>addBinding($name, $portType)</code> Methode fügt neue Bindungen in das WSDL Dokument ein
  147. (/definitions/binding).
  148. </para>
  149. <para>
  150. Der 'binding' WSDL Dokument Knoten definiert das Nachrichtenformat und Protokolldetails für
  151. Operationen und Nachrichten die von einem speziellen portType definiert sind
  152. (siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/>).
  153. </para>
  154. <para>
  155. Die Methode erzeugt einen Bindungsknoten und gibt diesen zurück. Dieser kann dann verwendet werden
  156. um mit aktuellen Daten gefüllt zu werden.
  157. </para>
  158. <para>
  159. Die Zend_Soap_Server Implementation verwendet den <code>$serviceName . 'Binding'</code> Namen
  160. für das 'binding' Element eines WSDL Dokuments.
  161. </para>
  162. </sect2>
  163. <sect2 id="zend.soap.wsdl.add_binding_operation">
  164. <title>Die <code>addBindingOperation()</code> Methode.</title>
  165. <para>
  166. Die <code>addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)</code>
  167. Methode fügt eine Operation zu einem gebundenen Element mit dem spezifizierten Namen hinzu
  168. (/definitions/binding/operation).
  169. </para>
  170. <para>
  171. Sie nimmt das <code>XML_Tree_Node</code> Objekt das von <code>addBinding()</code> zurückgegeben
  172. wird als Eingabe (<code>$binding</code> Parameter) um ein 'operation' Element mit
  173. Eingabe/Ausgabe/Falsch Einträgen hinzuzufügen abhängig von den spezifizierten Parametern.
  174. </para>
  175. <para>
  176. Die Zend_Soap_Server Implementation fügt korrespondierende gebundene Einträge für jede
  177. Web Service Methode mit Eingabe und Ausgabe Einträgen hinzu die ein 'soap:body' Element als
  178. '&lt;soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/&gt; definieren.
  179. </para>
  180. <para>
  181. Siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/> für Details.
  182. </para>
  183. </sect2>
  184. <sect2 id="zend.soap.wsdl.add_soap_binding">
  185. <title>Die <code>addSoapBinding()</code> Methode.</title>
  186. <para>
  187. Die <code>addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')</code>
  188. Methode fügt einen SOAP Bindung Eintrag ('soap:binding') zum Bindung Element (welches bereits
  189. zu einigen Port Typen verbunden ist) mit dem spezifizierten Stil und Transport hinzu
  190. (Die Zend_Soap_Server Implementation verwendet RPC Stil über HTTP).
  191. </para>
  192. <para>
  193. Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren das das Bindung zum
  194. SOAP Protokoll Format gebunden ist.
  195. </para>
  196. <para>
  197. Siehe <ulink url="http://www.w3.org/TR/wsdl#_bindings"/> für Details.
  198. </para>
  199. </sect2>
  200. <sect2 id="zend.soap.wsdl.add_soap_operation">
  201. <title>Die <code>addSoapOperation()</code> Methode.</title>
  202. <para>
  203. Die <code>addSoapOperation($binding, $soap_action)</code> Methode fügt einen SOAP Operations Eintrag
  204. ('soap:operation') zum Bindungs Element mit den spezifizierten Aktionen hinzu. Das 'style' Attribut
  205. des 'soap:operation' Elements wird nicht verwendet seit das Programmier Modell (RPC-orientiert
  206. oder Dokument-orientiert) die <code>addSoapBinding()</code> Methode verwenden kann.
  207. </para>
  208. <para>
  209. Das 'soapAction' Attribut des '/definitions/binding/soap:operation' Elements spezifiziert den Wert
  210. des SOAPAction Headers für diese Operation. Dieses Attribut wird für SOAP über HTTP benötigt und
  211. <emphasis>darf in keinem Fall</emphasis> für andere Transporte spezifiziert werden.
  212. </para>
  213. <para>
  214. Die Zend_Soap_Server Implementation verwendet <code>$serviceUri . '#' . $methodName</code> für
  215. den SOAP Operations Action Namen.
  216. </para>
  217. <para>
  218. Siehe <ulink url="http://www.w3.org/TR/wsdl#_soap:operation"/> für Details.
  219. </para>
  220. </sect2>
  221. <sect2 id="zend.soap.wsdl.add_service">
  222. <title>Die <code>addService()</code> Methode.</title>
  223. <para>
  224. Die <code>addService($name, $port_name, $binding, $location)</code> Methode fügt dem WSDL Dokument
  225. ein '/definitions/service' Element mit dem spezifizierten Web Service Namen, Port Namen, Bindung
  226. und Ort hinzu.
  227. </para>
  228. <para>
  229. WSDL 1.1 erlaubt es verschiedene Port Typen pro Service zu haben (Sets von Operationen). Diese
  230. Fähigkeit wird von der Zend_Soap_Server Implementation nicht verwendet und von der
  231. <classname>Zend_Soap_Wsdl</classname> Klasse nicht unterstützt.
  232. </para>
  233. <para>
  234. Die Zend_Soap_Server Implementation verwendet:
  235. <itemizedlist>
  236. <listitem>
  237. <para>
  238. <code>$name . 'Service'</code> als Web Service Name,
  239. </para>
  240. </listitem>
  241. <listitem>
  242. <para>
  243. <code>$name . 'Port'</code> als Port Typ Name,
  244. </para>
  245. </listitem>
  246. <listitem>
  247. <para>
  248. <code>'tns:' . $name . 'Binding'</code>
  249. <footnote>
  250. <para>
  251. <code>'tns:' namespace</code> wird als Skript URI definiert
  252. (<code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code>).
  253. </para>
  254. </footnote>
  255. als Bindungs Name,
  256. </para>
  257. </listitem>
  258. <listitem>
  259. <para>
  260. Die Skript URI<footnote><para><code>'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']</code></para></footnote>
  261. als eine Service URI für die Web Service Definition bei Verwendung von Klassen.
  262. </para>
  263. </listitem>
  264. </itemizedlist>
  265. wobei <code>$name</code> der Klassenname für die Web Service Definition ist wenn Klassen verwendet
  266. werden und Skript Name für die Web Service Definition wenn ein Set von Funktionen verwendet wird.
  267. </para>
  268. <para>
  269. Siehe <ulink url="http://www.w3.org/TR/wsdl#_services"/> für Details.
  270. </para>
  271. </sect2>
  272. <sect2 id="zend.soap.wsdl.types">
  273. <title>Typ Entsprechung.</title>
  274. <para>
  275. Die Zend_Soap WSDL Implementation der Zugriffsmethoden verwendet die folgenden Typ Entsprechungen
  276. zwischen PHP und SOAP Typen:
  277. <itemizedlist>
  278. <listitem>
  279. <para>PHP Strings &lt;-&gt; <code>xsd:string</code>.</para>
  280. </listitem>
  281. <listitem>
  282. <para>PHP Integer &lt;-&gt; <code>xsd:int</code>.</para>
  283. </listitem>
  284. <listitem>
  285. <para>PHP Float und Double &lt;-&gt; <code>xsd:float</code>.</para>
  286. </listitem>
  287. <listitem>
  288. <para>PHP Boolean &lt;-&gt; <code>xsd:boolean</code>.</para>
  289. </listitem>
  290. <listitem>
  291. <para>PHP Arrays &lt;-&gt; <code>soap-enc:Array</code>.</para>
  292. </listitem>
  293. <listitem>
  294. <para>PHP Objekt &lt;-&gt; <code>xsd:struct</code>.</para>
  295. </listitem>
  296. <listitem>
  297. <para>
  298. PHP Klasse &lt;-&gt; basierend auf der Strategie der komplexen Typen (Siehe: <xref linkend="zend.soap.wsdl.types.add_complex" />)
  299. <footnote>
  300. <para>
  301. Standardmäßig wird <classname>Zend_Soap_Wsdl</classname> mit der Klasse
  302. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> als Erkennungsalgorithmus
  303. für komplexe Typen erstellt. Der erste Parameter des AutoDiscover
  304. Constructors nimmt jede Strategie für komplexe Typen die
  305. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> implementiert oder einen
  306. String mit dem Namen dieser Klasse. Für Rückwärtskompatibilität mit den
  307. dem Boolean <code>$extractComplexType</code> werden Variablen auf dem
  308. folgenden Weg geparst: Bei true, wird
  309. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> verwendet, und bei
  310. false <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>.
  311. </para>
  312. </footnote>.
  313. </para>
  314. </listitem>
  315. <listitem>
  316. <para>PHP Void &lt;-&gt; Leerer Typ.</para>
  317. </listitem>
  318. <listitem>
  319. <para>Wenn der Typ auf irgendeinem Grund zu keinem dieser Typen passt, dann wird
  320. <code>xsd:anyType</code> verwendet.</para>
  321. </listitem>
  322. </itemizedlist>
  323. Wo <code>xsd:</code> ein "http://www.w3.org/2001/XMLSchema" Namespace ist, ist
  324. <code>soap-enc:</code> ein "http://schemas.xmlsoap.org/soap/encoding/" Namespace,
  325. und <code>tns:</code> ist ein "Ziel Namespace" für das Service.
  326. </para>
  327. <sect3 id="zend.soap.wsdl.types.retrieve">
  328. <title>Empfangen von Typ Informationen.</title>
  329. <para>
  330. Die <code>getType($type)</code> Methode kann verwendet werden um ein Mapping für einen
  331. spezifizierten PHP Typ zu erhalten:
  332. <programlisting role="php"><![CDATA[
  333. ...
  334. $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri);
  335. ...
  336. $soapIntType = $wsdl->getType('int');
  337. ...
  338. class MyClass {
  339. ...
  340. }
  341. ...
  342. $soapMyClassType = $wsdl->getType('MyClass');
  343. ]]>
  344. </programlisting>
  345. </para>
  346. </sect3>
  347. <sect3 id="zend.soap.wsdl.types.add_complex">
  348. <title>Hinzufügen komplexer Typ Informationen.</title>
  349. <para>
  350. Die <code>addComplexType($type)</code> Methode wird verwendet um komplexe Typen
  351. (PHP Klassen) zu einem WSDL Dokument hinzuzufügen.
  352. </para>
  353. <para>
  354. Es wird automatisch von der <code>getType()</code> Methode verwendet und fügt einen
  355. korrespondierenden komplexen Typen von Methodenparametern oder Rückgabetypen hinzu.
  356. </para>
  357. <para>
  358. Der Algorithmus für das Erkennen und Aufbauen basiert auf der aktuellen Strategie für
  359. die aktive Erkennung von komplexen Typen. Man kann die Strategie für die Erkennung setzen
  360. indem entweder der Klassenname as String spezifiziert wird, oder indem eine Instanz einer
  361. <classname>Zend_Soap_Wsdl_Strategy_Interface</classname> Implementation als dritter Parameter des
  362. Konstruktors verwendet wird, oder indem die <code>setComplexTypeStrategy($strategy)</code>
  363. Funktion von Zend_Soap_Wsdl verwendet wird. Die folgenden Strategien für die Erkennung
  364. existieren aktuell:
  365. </para>
  366. <itemizedlist>
  367. <listitem>
  368. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname>: Standardmäßig
  369. aktiviert (wenn dem Konstruktor kein dritter Parameter gesetzt wird). Er iteriert
  370. über die öffentlichen Attribute eines Klassentyps und registriert Sie als Untertypen
  371. des komplexen Objekttyps.</para>
  372. </listitem>
  373. <listitem>
  374. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_AnyType</classname>: Castet alle komplexen Typen
  375. in einen einfachen XSD Typ xsd:anyType. Vorsicht ist angeraten da diese Abkürzung für
  376. die Erkennung von komplexen Typen kann warscheinlich nur von lose typisierten Sprachen
  377. wie PHP erfolgreich behandelt werden.
  378. </para>
  379. </listitem>
  380. <listitem>
  381. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence</classname>: Diese Strategie
  382. erlaubt es die Rückgabeparameter mit diesen Typen zu spezifizieren: <code>int[]</code>
  383. oder <code>string[]</code>. Er kann einfache PHP Typen wie Int, String, Boolean, Float
  384. und so weiter behandeln, erlaubt aber die Spezifikation von verschachtelten Arrays oder
  385. Typen von Arrays.</para>
  386. </listitem>
  387. <listitem>
  388. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex</classname>: Diese Strategie
  389. erlaubt die Erkennung von sehr komplexen Arrays von Objekten. Objekttypen werden basierend
  390. auf <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> erkannt und ein Array wird
  391. um diese Definition gewrappt.</para>
  392. </listitem>
  393. <listitem>
  394. <para>Klasse <classname>Zend_Soap_Wsdl_Strategy_Composite</classname>: Diese Strategie kann
  395. alle Strategien kombinieren indem PHP komplexe Typen (Klassennamen) zu der gewünschten
  396. Strategie über die <code>connectTypeToStrategy($type, $strategy)</code> Methode verbunden
  397. werden. Eine komplette Typemap kann dem Contructor als Array, mit
  398. <code>$type</code> -> <code>$strategy</code> Paaren angegeben werden. Der zweite Parameter
  399. spezifiziert die Standardstrategie die verwendet wird wenn ein unbekannter Typ hinzugefügt
  400. werden soll. Diese Parameter ist standardmäßig die
  401. <classname>Zend_Soap_Wsdl_Strategy_DefaultComplexType</classname> Strategie.</para>
  402. </listitem>
  403. </itemizedlist>
  404. <para>
  405. Die <code>addComplexType()</code> Methode erstellt ein
  406. '/definitions/types/xsd:schema/xsd:complexType' Element für jeden beschriebenen komplexen
  407. Typen mit dem Namen der spezifizierten PHP Klasse.
  408. </para>
  409. <para>
  410. Die Klassen Eigenschaften <emphasis>MÜSSEN</emphasis> ein Docblock Kapitel mit den
  411. beschriebenen PHP Typen haben damit die Eigenschaft in die WSDL Beschreibung hinzugefügt wird.
  412. </para>
  413. <para>
  414. <code>addComplexType()</code> prüft ob der Typ bereits im Typ Kapitel des WSDL Dokuments
  415. beschrieben wird.
  416. </para>
  417. <para>
  418. Es verhindert Duplikate wenn diese Methode zwei oder mehrmals aufgerufen wird und auch
  419. Rekursionen im Kapitel der Typ Definitionen.
  420. </para>
  421. <para>
  422. Siehe <ulink url="http://www.w3.org/TR/wsdl#_types"/> für Details.
  423. </para>
  424. </sect3>
  425. </sect2>
  426. <sect2 id="zend.soap.wsdl.add_documentation">
  427. <title>Die <code>addDocumentation()</code> Methode.</title>
  428. <para>
  429. Die <code>addDocumentation($input_node, $documentation)</code> Methode fügt menschlich lesbare
  430. Dokumentation hinzu indem das optionale 'wsdl:document' Element verwendet wird.
  431. </para>
  432. <para>
  433. Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren das die Bindung
  434. zum SOAP Protokoll Format gebunden wurde.
  435. </para>
  436. <para>
  437. Siehe <ulink url="http://www.w3.org/TR/wsdl#_documentation"/> für Details.
  438. </para>
  439. </sect2>
  440. <sect2 id="zend.soap.wsdl.retrieve">
  441. <title>Das endgültige WSDL Dokument erhalten.</title>
  442. <para>
  443. Die <code>toXML()</code>, <code>toDomDocument()</code> und <code>dump($filename = false)</code>
  444. Methoden können verwendet werden um das WSDL Dokument als XML, DOM Struktur oder Datei zu erhalten.
  445. </para>
  446. </sect2>
  447. <sect2 id="zend.soap.wsdl.parser">
  448. <title>Parsen von WSDL Dokumentenrsing WSDL documents</title>
  449. <para>
  450. Zend_Soap_Wsdl enthält auch einen Parser für WSDL Dokumente der seine eigene Hauptanwendung für
  451. das Unit-Testen und die Code-Erzeugung von SOAP Webservices (Client und Server) hat. Das folgende
  452. Beispiel zeigt wie der Parser verwendet werden kann:
  453. </para>
  454. <programlisting role="php"><![CDATA[
  455. // Laden von WSDL in DOMDocument
  456. $dom = new DOMDocument();
  457. $dom->loadXML($wsdlString);
  458. // Parser erstellen
  459. $parser = Zend_Soap_Wsdl_Parser::factory($dom);
  460. $result = $parser->parse();
  461. // Name des Webservices
  462. echo $result->getName();
  463. // Auf Ports und innere Element zugreifen
  464. foreach($result->ports AS $port) {
  465. echo $port->getName();
  466. foreach($port->bindings AS $binding) {
  467. echo $binding->getName();
  468. foreach($binding->operations AS $operation) {
  469. echo $operation->getName();
  470. echo $operation->inputMessage->getName();
  471. echo $operation->outputMessage->getName();
  472. }
  473. }
  474. }
  475. // Man kann auf Bindungen, Nachrichten und Operationen und andere
  476. // Elemente direkt zugreifen
  477. foreach($result->operations AS $operation) {
  478. // mach was
  479. }
  480. foreach($result->bindings AS $binding {
  481. // mach was
  482. }
  483. foreach($result->messages AS $message) {
  484. // mach was
  485. }
  486. foreach($result->services AS $service) {
  487. // mach was
  488. }
  489. foreach($result->types AS $type) {
  490. // mach was
  491. }
  492. ]]>
  493. </programlisting>
  494. <para>Alle Element implementieren das Interface <classname>Zend_Soap_Wsdl_Element_Interface</classname> das
  495. auf eine <code>getName()</code> und <code>getDocumentation()</code> Funktion mit den eindeutigen
  496. Identifikatoren des Elements und seiner Dokumentation verweist. Alle Elemente haben öffentliche
  497. Eigenschaften die Ihren Status detailierter beschreiben und auch Ihre untergeordneten Abhängigkeiten
  498. für den einfachen Zugriff über Iteration enthalten.</para>
  499. </sect2>
  500. </sect1>