Interstage Portalworks 管理者ガイド
目次 索引 前ページ次ページ

第4章 WebサービスUSPの管理> 4.4 Webサービスの利用

4.4.5 カスタムXSLTの作成

標準のレスポンスXSLTが出力するHTMLは、非常にシンプルです。ここでは、SOAPレスポンスメッセージを下図のように変更するカスタムXSLTを作成してみます。この画面では、翻訳結果を表示し、かつ、次の翻訳処理を呼び出すことができます。

■WebサービスのSOAPレスポンスメッセージの表示

まずは、翻訳WebサービスがレスポンスとしてどのようなXMLドキュメントを返しているのか観察してみましょう。

作成した「Translater.html」には、[翻訳]ボタンの横に、レスポンスの出力形式(XMLまたはHTML)を選択できるラジオボタンがあります。このラジオボタンは、サンプルフォームからそのまま流用したものです(Translater.htmlの30行目と31行目)。
「name」属性に指定している「ResXSLT」の意味は、下表のとおりです。

振る舞い

なし または ""

WS USP標準のXSLT変換を行います。

"none"

XSLT変換を行いません。

カスタムXSLTのURL

指定されたXSLTを使って変換処理を行います。

4.4.4 カスタムフォームの作成”にあるサンプルフォームのHTMLにカスタムXSLTを指定する場合は、30行目と31行目のチェックボックスを削除し、以下のような<input>タグを追加してください。

<input type="hidden" name="ResXSLT" value="http://Portalworksサーバ名:ポート番号/wscontrol/custom/Translater.xsl"/>

カスタムXSLTを指定せず、ラジオボタンのXMLを選択し、翻訳元の文を 「Web-Service is easy」にして、「英語からフランス語へ」翻訳した結果が、以下のSOAPレスポンスメッセージです。

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <namesp1:BabelFishResponse xmlns:namesp1="urn:xmethodsBabelFish">
            <return xsi:type="xsd:string"> Web-Service est facile </return>
        </namesp1:BabelFishResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

■カスタムXSLTの作成

SOAPレスポンスメッセージから、翻訳結果はルートから見て次の位置(XPath 式)にあることが分かります。

SOAP-ENV:Envelope/SOAP-ENV:Body/namesp1:BabelFishResponse/return

この情報を元に、作成したのが次のカスタムXSLTです。

カスタムXSLT(Translater.xsl)

 1: <?xml version="1.0" encoding="Shift_JIS"?>
 2: <xsl:stylesheet
 3:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 4:   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 5:   xmlns:namesp1="urn:xmethodsBabelFish"
 6:   version="1.0">
 7: 
 8:   <xsl:output method="html" encoding="UTF-8"/>
 9:   <xsl:template match="/">
10:     <html>
11:       <head>
12:         <title>Translater</title>
13:       </head>
14:       
15:       <body>
16:         
17:         <h2>翻訳</h2>
18:         <form action="$pwdir:c/$pwsrv;pw%3AsponsorAction=invoke" method="post">
19:           <input type="hidden" name="WSDL" value="http://www.xmethods.net/sd/2001/BabelFishService.wsdl"/>
20:           <input type="hidden" name="operation" value="BabelFish"/>
21:           <input type="hidden" name="ResXSLT" value="http://Portalworksサーバ名:ポート番号/wscontrol/custom/Translater.xsl"/>
22:           翻訳する文:
23:           <br/>
24:           <textarea name="sourcedata" rows="5" cols="40"></textarea>
25:           <br/>
26:           <select name="translationmode">
27:             <option value="en_fr">英語からフランス語へ</option>
28:             <option value="en_de">英語からドイツ語へ</option>
29:             <option value="en_it">英語からイタリア語へ</option>
30:             <option value="en_pt">英語からポルトガル語へ</option>
31:             <option value="en_es">英語からスペイン語へ</option>
32:             <option value="fr_en">フランス語から英語へ</option>
33:             <option value="de_en">ドイツ語から英語へ</option>
34:             <option value="it_en">イタリア語から英語へ</option>
35:             <option value="pt_en">ポルトガル語から英語へ</option>
36:             <option value="es_en">スペイン語から英語へ</option>
37:           </select>
38:           <input type="submit" value="翻訳"/>
39:         </form>
40: 
41:         <h2>結果</h2>
42:         <p>
43:           <xsl:value-of select="SOAP-ENV:Envelope/SOAP-ENV:Body/namesp1:BabelFishResponse/return"/>
44:         </p>
45:           
46:       </body>
47:     </html>
48:   </xsl:template>
49: 
50: </xsl:stylesheet>

このXSLTでポイントとなる行は、8行目、18行目、21行目、43行目です。その他の部分は、「Translater.html」とほぼ同じHTMLを出力するようになっています。

XSLTの詳細については、市販の専門書などを参照してください。

■カスタムXSLTの配置と指定

作成したカスタムXSLT(Translater.xsl)を、以下のフォルダ内に配置します。ただし、「custom」というフォルダが存在しない場合は、フォルダを新規に作成してから配置してください。

次に、つねにカスタムXSLTを使ってレスポンスを整形するように、「カスタムフォーム(Translater.html)」を修正します(12行目)。
「value」属性の値は、カスタムXSLTのURLです。

 1: <html>
 2:   <head>
 3:     <title>Translater</title>
 4:   </head>
 5:   <body>
 6:     
 7:     <h2>翻訳</h2>
 8:     <form action="$pwdir:c/$pwsrv;pw%3AsponsorAction=invoke" method="post">
 9:       <input type="hidden" name="WSDL"
10:       value="http://www.xmethods.net/sd/2001/BabelFishService.wsdl"/>
11:       <input type="hidden" name="operation" value="BabelFish"/>
12:      <input type="hidden" name="ResXSLT" value="http://Portalworksサーバ名:ポート番号/wscontrol/custom/Translater.xsl"/>
13:       翻訳する文:
14:       <br>
15:       <textarea name="sourcedata" rows="5" cols="40"></textarea>
16:       <br>
17:       <select name="translationmode">
18:         <option value="en_fr">英語からフランス語へ</option>
19:         <option value="en_de">英語からドイツ語へ</option>
20:         <option value="en_it">英語からイタリア語へ</option>
21:         <option value="en_pt">英語からポルトガル語へ</option>
22:         <option value="en_es">英語からスペイン語へ</option>
23:         <option value="fr_en">フランス語から英語へ</option>
24:         <option value="de_en">ドイツ語から英語へ</option>
25:         <option value="it_en">イタリア語から英語へ</option>
26:         <option value="pt_en">ポルトガル語から英語へ</option>
27:         <option value="es_en">スペイン語から英語へ</option>
28:       </select>
29:       <input type="submit" value="翻訳"/>
30:     </form>
31:   </body>
32: </html>

最後に、ポータルページから翻訳Webサービスのブリックにアクセスして、動作を確認してください。画面にエラーメッセージが表示される場合は、カスタムXSLTのパスに誤りがないか、XSLファイルに文法エラーがないかを確認してください。

ここまでで説明した手順で、インターネット上に公開されているさまざまなWebサービスをPortalworksから利用することができます。

ここで説明に使用した例は、単体のWebサービスを呼び出して、そのレスポンスを表示するものですが、Portalworksのシナリオ機能を利用すれば、あるWebサービスのレスポンスを他のWebサービスの入力とするような複数のWebサービスの間でサービスの連携を行うこともできます。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007