ページの先頭行へ戻る
Interstage Interaction Manager V9.1.1 Interstage Portalworks管理者ガイド

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を使ってレスポンスを整形するように、“4.4.4 カスタムフォームの作成”にある「カスタムフォーム(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サービスの間でサービスの連携を行うこともできます。