USER MANUALS

XSLT 変換

既存の SOAP クライアントおよび REST クライアントがある環境では、Virtual DataPort Web サービスで動作するようにこれらのクライアントを変更する必要はありません。XSLT スタイルシート (XSL 変換) を定義することによって、受信リクエストを変換し、Denodo Web サービスで必要な形式にそれらを適応させることができます。また、スタイルシートを定義して、それらのサービスの応答を変換してから既存のクライアントに送信することもできます。

Virtual DataPort は、 Saxon-HE XSLT and XQuery processor を使用して、XSLT 変換を処理します。このプロセッサーは、XSLT 2.0 仕様をサポートします。

Web サービスの XSLT 変換を定義するには、以下の手順に従って実施してください。

  1. 「SOAP Web サービス」または「REST Web サービス」の [Settings] タブで、変換する操作 ([Operation name]) またはビュー ([Resource configuration]) を選択して [XSLT Transformation] をクリックします。

  2. [Input XSLT Transformation] チェックボックスをチェックして、スタイルシートを作成します。このスタイルシートを受信リクエストに適用して、Virtual DataPort Web サービスが要求する形式に変換します。このチェックボックスがチェックされていない場合、入力は変更されません。

  3. [Output XSLT Transformation] チェックボックスをチェックして、スタイルシートを作成します。このスタイルシートを、Denodo Web サービスによって生成された応答に適用して、既存の SOAP クライアントが要求する形式に変換します。このチェックボックスがチェックされていない場合、入力は変更されません。

  4. SOAP Web サービスの場合のみ: 既存の SOAP クライアントがリクエストでパラメータ SOAPAction を送信し、このパラメータが変更不可である場合、[Incoming SOAPAction] チェックボックスをチェックして、スタイルシートを作成します。

  5. [Ok] をクリックします。変換する Web サービスの操作ごとに、これらの手順を繰り返します。

デフォルトでは、XSLT 変換はデータに適用されますが、Web サービスによって返されるエラーメッセージには適用されません。変換をエラーメッセージにも適用する場合は、[Apply output XSLT to error messages] を選択します。REST Web サービスでは、このオプションは、ビューの XML 表現にのみ影響を及ぼします。


例 1: XML から CSV への変換

以下の出力 XSL 変換を使用して REST Web サービスを構成している場合に、クライアントがビューの XML 表現を要求すると、応答は CSV ファイルになります。応答の HTTP ヘッダー Content-typetext/plain になります。

XML 応答を CSV に変換する XSL 変換
<xsl:stylesheet version="1.0"
                     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text"
                     media-type="text/plain"
                     encoding="UTF-8" />
     <xsl:strip-space elements="*" />
     <xsl:template match="/*/child::*">
             <xsl:for-each select="child::*">
                     <xsl:if test="position() != last()">"<xsl:value-of select="normalize-space(.)"/>",    </xsl:if>
                     <xsl:if test="position()  = last()">"<xsl:value-of select="normalize-space(.)"/>"<xsl:text>&#xD;</xsl:text>
                     </xsl:if>
             </xsl:for-each>
     </xsl:template>
</xsl:stylesheet>

注釈

この例には制限があります。なぜなら、コンマ区切り値では複合値 (レジスターと配列) を表現できないからです。

例 2: XML から JSON への変換

以下の出力 XSL 変換を使用して REST Web サービスを構成している場合に、クライアントがビューの XML 表現を要求すると、応答は同等の JSON ドキュメントになります。応答の HTTP ヘッダー Content-typeapplication/json になります。

XML 応答を JSON に変換する XSL 変換
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output media-type="application/json"/>

    <xsl:template match="*">

        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

この例のような XSL 変換は、Denodo Web サービスから JSON 形式でデータを取得する必要があるアプリケーションを使用しているが、Web サービスが生成するものとは異なる構造の JSON ドキュメントをアプリケーションが必要とする場合に役立ちます。この場合、Web サービスの デフォルト表現 を JSON に設定し、この例の XSLT スタイルシートを適用してください。

  • 以下に示す条件を両方とも満たす場合、REST Web サービスは出力 XSL 変換を応答にのみ適用します。

    1. クライアントがデータの XML 表現を要求する場合。つまり、リクエストの URL にパラメータ $format=xml が含まれるか、またはリクエストに HTTP ヘッダー Accept: application/xml が含まれる場合。クライアントが別の表現 (たとえば HTML) を要求した場合、サービスはその XSL 変換を適用しません。

    2. Web サービスが変換をビューのリストに適用せず、ビューのデータのみに適用する場合 (たとえば http://denodo-server.acme.com/server/customer360/ws_rest_customer360/views/customer)。

  • REST サービスは、入力 XSL 変換ではなく、出力 XSL 変換の <xsl:output> 宣言を処理します。

  • xsl:output 宣言はオプションです。この宣言を使用する場合は、別のスタイルシートモジュール内にネストするのではなく、常に最上位のエレメントとして記述する必要があります。

  • SOAP Web サービスは、 xsl:output 宣言を無視します。

  • XSL 変換を作成する方法の詳細については、付録「 XSLT スタイルシートによる SOAP/REST の着信/発信メッセージの変換 」を参照してください。

Add feedback