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 応答を CSV に変換する 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>

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

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

    2. クライアントがビューのデータを要求する場合 (たとえば 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 の着信/発信メッセージの変換 」を参照してください。