XMLチュートリアル

XMLホーム XMLの紹介 XML使用方法 XMLツリー XML構文 XML要素 XML属性 XML名前空間 XML表示 XML HttpRequest XMLパーサー XML DOM XML XPath XML XSLT XML XQuery XML XLink XMLバリデーター XML DTD XMLスキーマ XMLサーバー XMLの例 XMLクイズ XML証明書

XML AJAX

AJAXの紹介 AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

XML DOM

DOMの紹介 DOMノード DOMアクセス DOMノード情報 DOMノードリスト DOMトラバース DOMナビゲーション DOMは値を取得します DOM変更ノード DOM削除ノード DOM置換ノード DOM作成ノード DOM追加ノード DOMクローンノード DOMの例

XPathチュートリアル

XPathの概要 XPathノード XPath構文 XPath軸 XPath演算子 XPathの例

XSLTチュートリアル

XSLTの紹介 XSL言語 XSLT変換 XSLT <テンプレート> XSLT <値> XSLT <for-each> XSLT <ソート> XSLT <if> XSLT <選択> XSLT適用 クライアント上のXSLT サーバー上のXSLT XSLT Edit XML XSLTの例

XQueryチュートリアル

XQueryの紹介 XQueryの例 XQuery FLWOR XQuery HTML XQueryの用語 XQuery構文 XQuery追加 XQuery Select XQuery関数

XML DTD

DTDの紹介 DTDビルディングブロック DTD要素 DTD属性 DTD要素と属性 DTDエンティティ DTDの例

XSDスキーマ

XSDの概要 XSDハウツー XSD <スキーマ> XSD要素 XSD属性 XSDの制限

XSDコンプレックス

XSD要素 XSDが空です XSD要素のみ XSDテキストのみ XSD混合 XSDインジケーター XSD <任意> XSD <anyAttribute> XSD置換 XSDの例

XSDデータ

XSD文字列 XSD日付 XSD数値 XSDその他 XSDリファレンス

Webサービス

XMLサービス XML WSDL XML SOAP XML RDF XML RSS

参考文献

DOMノードタイプ DOMノード DOM NodeList DOM NamedNodeMap DOMドキュメント DOM要素 DOM属性 DOMテキスト DOM CDATA DOMコメント DOM XMLHttpRequest DOMパーサー XSLT要素 XSLT / XPath関数

XML Soap


  • SOAPは、S imple O bject A ccess Protocolの略です。
  • SOAPはアプリケーション通信プロトコルです
  • SOAPは、メッセージを送受信するための形式です。
  • SOAPはプラットフォームに依存しません
  • SOAPはXMLに基づいています
  • SOAPはW3C勧告です

なぜSOAPなのか?

Webアプリケーションがインターネットを介して通信できることが重要です。

HTTPはすべてのインターネットブラウザとサーバーでサポートされているため、アプリケーション間で通信するための最良の方法はHTTPを介することです。これを実現するためにSOAPが作成されました。

SOAPは、さまざまなテクノロジーとプログラミング言語を使用して、さまざまなオペレーティングシステムで実行されているアプリケーション間で通信する方法を提供します。


SOAPビルディングブロック

SOAPメッセージは、次の要素を含む通常のXMLドキュメントです。

  • XMLドキュメントをSOAPメッセージとして識別するエンベロープ要素
  • ヘッダー情報を含むヘッダー要素
  • 呼び出しおよび応答情報を含むBody要素
  • エラーとステータス情報を含む障害要素

上記のすべての要素は、SOAPエンベロープのデフォルトの名前空間で宣言されています。

http://www.w3.org/2003/05/soap-envelope/

また、SOAPエンコーディングとデータ型のデフォルトの名前空間は次のとおりです。

http://www.w3.org/2003/05/soap-encoding


構文規則

重要な構文規則は次のとおりです。

  • SOAPメッセージはXMLを使用してエンコードする必要があります
  • SOAPメッセージはSOAPEnvelope名前空間を使用する必要があります
  • SOAPメッセージにはDTD参照を含めることはできません
  • SOAPメッセージにはXML処理命令を含めることはできません


スケルトンSOAPメッセージ

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

SOAPエンベロープ要素

必要なSOAPEnvelope要素は、SOAPメッセージのルート要素です。この要素は、XMLドキュメントをSOAPメッセージとして定義します。

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns:soap名前空間

上記の例のxmlns:soap名前空間に注意してください。常に「http://www.w3.org/2003/05/soap-envelope/」の値を持つ必要があります。

名前空間は、エンベロープをSOAPエンベロープとして定義します。

別の名前空間が使用されている場合、アプリケーションはエラーを生成し、メッセージを破棄します。


encodingStyle属性

encodingStyle属性は、ドキュメントで使用されるデータ型を定義するために使用されます。この属性は任意のSOAP要素に表示される可能性があり、要素のコンテンツとすべての子要素に適用されます。

SOAPメッセージにはデフォルトのエンコーディングはありません。

構文

soap:encodingStyle="URI"

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

SOAPヘッダー要素

オプションのSOAPヘッダー要素には、SOAPメッセージに関するアプリケーション固有の情報(認証、支払いなど)が含まれています。

Header要素が存在する場合、それはEnvelope要素の最初の子要素である必要があります。

注: Header要素のすべての直接の子要素は、名前空間で修飾されている必要があります。

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

上記の例には、「Trans」要素、値1の「mustUnderstand」属性、および値234のヘッダーが含まれています。

SOAPは、デフォルトの名前空間に3つの属性を定義します。これらの属性は、mustUnderstand、actor、およびencodingStyleです。

SOAPヘッダーで定義された属性は、受信者がSOAPメッセージを処理する方法を定義します。


mustUnderstand属性

SOAP mustUnderstand属性を使用して、受信者が処理するヘッダーエントリが必須かオプションかを示すことができます。

mustUnderstand = "1"をHeader要素の子要素に追加すると、Headerを処理するレシーバーが要素を認識しなければならないことを示します。受信者が要素を認識しない場合、ヘッダーの処理時に失敗します。

構文

soap:mustUnderstand="0|1"

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

アクター属性

SOAPメッセージは、メッセージパスに沿ってさまざまなエンドポイントを渡すことにより、送信者から受信者に移動する場合があります。ただし、SOAPメッセージのすべての部分が最終的なエンドポイントを対象としているわけではなく、メッセージパス上の1つ以上のエンドポイントを対象としている場合があります。

SOAPアクター属性は、Header要素を特定のエンドポイントにアドレス指定するために使用されます。

構文

soap:actor="URI"

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:actor="https://www.w3schools.com/code/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

encodingStyle属性

encodingStyle属性は、ドキュメントで使用されるデータ型を定義するために使用されます。この属性は任意のSOAP要素に表示される可能性があり、その要素のコンテンツとすべての子要素に適用されます。

SOAPメッセージにはデフォルトのエンコーディングはありません。

構文

soap:encodingStyle="URI"

SOAPボディ要素

必要なSOAPBody要素には、メッセージの最終エンドポイントを対象とした実際のSOAPメッセージが含まれています。

SOAP Body要素の直接の子要素は、名前空間で修飾されている場合があります。

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="https://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

上記の例では、リンゴの価格を要求しています。上記のm:GetPrice要素とItem要素は、アプリケーション固有の要素であることに注意してください。それらはSOAP名前空間の一部ではありません。

SOAP応答は次のようになります。

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


SOAP障害要素

オプションのSOAPFault要素は、エラーメッセージを示すために使用されます。

SOAP Fault要素は、SOAPメッセージのエラーとステータス情報を保持します。

Fault要素が存在する場合は、Body要素の子要素として表示される必要があります。障害要素は、SOAPメッセージに1回だけ表示されます。

SOAP障害要素には、次のサブ要素があります。

Sub Element Description
<faultcode> A code for identifying the fault
<faultstring> A human readable explanation of the fault
<faultactor> Information about who caused the fault to happen
<detail>

Holds application specific error information related to the Body element

SOAP障害コード

以下に定義されているフォールトコード値は、フォールトを記述するときにフォールトコード要素で使用する必要があります。

Error Description
VersionMismatch Found an invalid namespace for the SOAP Envelope element
MustUnderstand An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood
Client The message was incorrectly formed or contained incorrect information
Server There was a problem with the server so the message could not proceed

HTTPプロトコル

HTTPはTCP / IPを介して通信します。HTTPクライアントは、TCPを使用してHTTPサーバーに接続します。接続を確立した後、クライアントはHTTP要求メッセージをサーバーに送信できます。

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

次に、サーバーは要求を処理し、HTTP応答をクライアントに送り返します。応答には、要求のステータスを示すステータスコードが含まれています。

200 OK
Content-Type: text/plain
Content-Length: 200

上記の例では、サーバーは200のステータスコードを返しました。これはHTTPの標準の成功コードです。

サーバーがリクエストをデコードできなかった場合は、次のようなものが返されている可能性があります。

400 Bad Request
Content-Length: 0

SOAPバインディング

SOAP仕様は、SOAPメッセージの交換方法ではなく、SOAPメッセージの構造を定義します。このギャップは、いわゆる「SOAPバインディング」によって埋められます。SOAPバインディングは、トランスポートプロトコルを使用してSOAPメッセージを効果的に交換できるようにするメカニズムです。

ほとんどのSOAP実装は、HTTPやSMTPなどの一般的なトランスポートプロトコルのバインディングを提供します。

HTTPは同期的であり、広く使用されています。SOAP HTTPリクエストは、少なくとも2つのHTTPヘッダー(Content-TypeとContent-Length)を指定します。

SMTPは非同期であり、最後の手段または特定の場合に使用されます。

SOAPのJava実装は通常、JMS(Javaメッセージングシステム)プロトコルに特定のバインディングを提供します。


コンテンツタイプ

SOAP要求および応答のContent-Typeヘッダーは、メッセージのMIMEタイプと、要求または応答のXML本文に使用される文字エンコード(オプション)を定義します。

構文

Content-Type: MIMEType; charset=character-encoding

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

コンテンツの長さ

SOAP要求および応答のContent-Lengthヘッダーは、要求または応答の本文のバイト数を指定します。

構文

Content-Length: bytes

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

SOAPの例

以下の例では、GetStockPriceリクエストがサーバーに送信されます。リクエストには、StockNameパラメータと、レスポンスで返されるPriceパラメータがあります。関数の名前空間は「http://www.example.org/stock」で定義されています。

SOAPリクエスト:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

SOAP応答:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>