PHP SOAPについて

http://www.php.net/manual/ja/soapclient.soapclient.php
日本語のマニュアルに
非WSDLモードのときはオプションを指定する必要があり、「location はリクエストを行う URL、 uri は SOAP サービスのターゲット名前空間です」とあります。

ここでいう「サービスのターゲット名前空間」とは何でしょうか。locationにはSOAPサーバのプログラムを指定しているのですが、uriに指定する「サービスのターゲット名前空間」というものが具体的によくわかりません。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/07/22 10:29:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント60pt

厳密にお知りになりたい場合は、下記文書からXMLの名前空間について学んでいただくことになろうかと思います

http://www.doraneko.org/xml/namespace10/19990114/Overview.html

長いことSOAPはいじってないので、ざっくりとしか説明できません、一部ばっすいしてみますと

1. 動機とまとめ

我々が思い描くのは、1つのXML(拡張可能マークづけ言語)文書が、複数のソフトウェアモジュールのために定義され、またモジュールによって使われるエレメントやアトリビュート(ここでは「マークアップ語彙」と呼ばれる)を含んでよいという、XMLの応用物である。このことの一つの動機はモジュラ性にある。よく理解され、有益なソフトウェアが利用可能であるようなマークアップ語彙が存在するならば、このマークアップを開発し直すよりもむしろ再利用するほうがよい。

そうした文書は、複数のマークアップ語彙を含むから、認識や衝突の問題を突きつけてくる。ソフトウェアモジュールは、他のあるソフトウェアパッケージ向けのマークアップが同じエレメント型やアトリビュート名を使っているときに生じる「衝突」に直面した場合であっても、そのモジュールが処理するように設計されているタグやアトリビュートを認識できる必要がある。

これらの考慮は、文書構造物が、スコープがその包含文書を越えて広がるユニバーサルな名前をもつべきことを要求する。この仕様書は、これを実現するXML名前空間という機構を記述したものである。

これをざっくりとまとめると「よそが定義したものとごちゃまぜになると困るからどこの空間で使うものだかわかるように名前書いておいてよ」ということです

http://test-uri/ と書いてあれば http://test-uri/ で使うものという意味になりますし、

http://test-uri/test と書いてあれば http://test-uri/test で使うものという意味になりますので、

サーバにアップする場合はサーバーのアドレスを書いておくことになりますね


WSDLについては下記などですが、これまたざっくりと要約すると「Webサービスでの利用」ということです

http://www.ibm.com/developerworks/jp/webservices/library/ws-soap...

回答1は下記から適当に抜き出しているだけだと思います(著作権もなにもあったものではないですね)

どのように評価なさるかは質問者さんのポイント配分や回答拒否チェックなどでご対応ください

http://www.xmlconsortium.org/websv/kaisetsu/C1/main.html

id:dedara

http://www.php.net/manual/ja/soapserver.soapserver.php

なんとなくSoapServerクラスをnewするときにもuriを指定しているので

ここをServerとClientで合わせればいいだけなのかな、という感じに思えてきたのですが、


今回SOAPの目的はSOAPサーバで登録したメソッドを呼び出すだけです。

ファイルをアップしたりはしません。

それでもとりあえずSoapServerを置いてあるサーバのアドレスを書いておけばいいのでしょうか?

2010/07/21 16:58:08

その他の回答1件)

id:yamaneroom No.1

回答回数1040ベストアンサー獲得回数61

ポイント10pt

SOAPでは名前空間を使うことになっています。SOAPエンベロープの名前空間は次のものです。

http://schemas.xmlsoap.org/soap/envelope/

実は、SOAP封筒構造のHeaderやBodyには、なにを入れるか、ということは封筒構造の決まりでは「なにも決めてない」のです。これは現実の世界で封筒に入れるものはとくに決まっていないのと同じです。ただし、「基本的には渡したいXMLをBodyに入れ、付加的なXMLをHeaderに入れる」ということになっています。現実の封筒でいえば、Headerは封筒の外側、Bodyは封筒の中、ということになります。

SOAPはRPCを行うためのプロトコルと思い込んでいる人が多いようですが、SOAPの封筒構造はさまざまな用途に使えることになっています。SOAP-RPCは、SOAP封筒構造の単なるひとつの使い方、ということです。


名前空間接頭辞を付与されたXMLメッセージ

<?xml version="1.0" encoding="shift_jis"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <m:getEstimate xmlns:m="http://www.unitec-denki.utj.co.jp/schema/2002/">
      <m:GoodsName>もぐらたたきキーボード</m:GoodsName>
      <m:Code>k-001</m:Code>
      <m:Value>100</m:Value>
      <m:DeliveryDate>2002-09-30</m:DeliveryDate>
    </m:getEstimate>
  </soapenv:Body>
</soapenv:Envelope>
id:dedara

すみません。難しくてわかりません。

書いていただいたenvelopeのurlを指定すれば良いのでしょうか。

マニュアルのコードサンプルには

http://test-uri/

と指定されていますが。

2010/07/21 12:16:04
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント60pt

厳密にお知りになりたい場合は、下記文書からXMLの名前空間について学んでいただくことになろうかと思います

http://www.doraneko.org/xml/namespace10/19990114/Overview.html

長いことSOAPはいじってないので、ざっくりとしか説明できません、一部ばっすいしてみますと

1. 動機とまとめ

我々が思い描くのは、1つのXML(拡張可能マークづけ言語)文書が、複数のソフトウェアモジュールのために定義され、またモジュールによって使われるエレメントやアトリビュート(ここでは「マークアップ語彙」と呼ばれる)を含んでよいという、XMLの応用物である。このことの一つの動機はモジュラ性にある。よく理解され、有益なソフトウェアが利用可能であるようなマークアップ語彙が存在するならば、このマークアップを開発し直すよりもむしろ再利用するほうがよい。

そうした文書は、複数のマークアップ語彙を含むから、認識や衝突の問題を突きつけてくる。ソフトウェアモジュールは、他のあるソフトウェアパッケージ向けのマークアップが同じエレメント型やアトリビュート名を使っているときに生じる「衝突」に直面した場合であっても、そのモジュールが処理するように設計されているタグやアトリビュートを認識できる必要がある。

これらの考慮は、文書構造物が、スコープがその包含文書を越えて広がるユニバーサルな名前をもつべきことを要求する。この仕様書は、これを実現するXML名前空間という機構を記述したものである。

これをざっくりとまとめると「よそが定義したものとごちゃまぜになると困るからどこの空間で使うものだかわかるように名前書いておいてよ」ということです

http://test-uri/ と書いてあれば http://test-uri/ で使うものという意味になりますし、

http://test-uri/test と書いてあれば http://test-uri/test で使うものという意味になりますので、

サーバにアップする場合はサーバーのアドレスを書いておくことになりますね


WSDLについては下記などですが、これまたざっくりと要約すると「Webサービスでの利用」ということです

http://www.ibm.com/developerworks/jp/webservices/library/ws-soap...

回答1は下記から適当に抜き出しているだけだと思います(著作権もなにもあったものではないですね)

どのように評価なさるかは質問者さんのポイント配分や回答拒否チェックなどでご対応ください

http://www.xmlconsortium.org/websv/kaisetsu/C1/main.html

id:dedara

http://www.php.net/manual/ja/soapserver.soapserver.php

なんとなくSoapServerクラスをnewするときにもuriを指定しているので

ここをServerとClientで合わせればいいだけなのかな、という感じに思えてきたのですが、


今回SOAPの目的はSOAPサーバで登録したメソッドを呼び出すだけです。

ファイルをアップしたりはしません。

それでもとりあえずSoapServerを置いてあるサーバのアドレスを書いておけばいいのでしょうか?

2010/07/21 16:58:08
  • id:windofjuly
    うぃんど 2010/07/21 13:34:24
    訂正です
    3箇所ある「使うもの」という表現は全て「定義されているもの」と読み替えてください
    「書いておくことになりますね。」は「書く場合が多いですね」と読み替えてください
  • id:windofjuly
    うぃんど 2010/07/21 17:11:17
    >とりあえずSoapServerを置いてあるサーバのアドレスを書いておけばいいのでしょうか?

    そうですね

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません