XSLT 変換¶
既存の SOAP クライアントおよび REST クライアントがある環境では、Virtual DataPort Web サービスで動作するようにこれらのクライアントを変更する必要はありません。XSLT スタイルシート (XSL 変換) を定義することによって、受信リクエストを変換し、Denodo Web サービスで必要な形式にそれらを適応させることができます。また、スタイルシートを定義して、それらのサービスの応答を変換してから既存のクライアントに送信することもできます。
Virtual DataPort は、 Saxon-HE XSLT and XQuery processor を使用して、XSLT 変換を処理します。このプロセッサーは、XSLT 2.0 仕様をサポートします。
Web サービスの XSLT 変換を定義するには、以下の手順に従って実施してください。
「SOAP Web サービス」または「REST Web サービス」の [Settings] タブで、変換する操作 ([Operation name]) またはビュー ([Resource configuration]) を選択して [XSLT Transformation] をクリックします。
[Input XSLT Transformation] チェックボックスをチェックして、スタイルシートを作成します。このスタイルシートを受信リクエストに適用して、Virtual DataPort Web サービスが要求する形式に変換します。このチェックボックスがチェックされていない場合、入力は変更されません。
[Output XSLT Transformation] チェックボックスをチェックして、スタイルシートを作成します。このスタイルシートを、Denodo Web サービスによって生成された応答に適用して、既存の SOAP クライアントが要求する形式に変換します。このチェックボックスがチェックされていない場合、入力は変更されません。
SOAP Web サービスの場合のみ: 既存の SOAP クライアントがリクエストでパラメータ
SOAPAction
を送信し、このパラメータが変更不可である場合、[Incoming SOAPAction] チェックボックスをチェックして、スタイルシートを作成します。[Ok] をクリックします。変換する Web サービスの操作ごとに、これらの手順を繰り返します。
デフォルトでは、XSLT 変換はデータに適用されますが、Web サービスによって返されるエラーメッセージには適用されません。変換をエラーメッセージにも適用する場合は、[Apply output XSLT to error messages] を選択します。REST Web サービスでは、このオプションは、ビューの XML 表現にのみ影響を及ぼします。
例
例 1: XML から CSV への変換
以下の出力 XSL 変換を使用して REST Web サービスを構成している場合に、クライアントがビューの XML 表現を要求すると、応答は CSV ファイルになります。応答の HTTP ヘッダー Content-type
は text/plain
になります。
<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>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
注釈
この例には制限があります。なぜなら、コンマ区切り値では複合値 (レジスターと配列) を表現できないからです。
例 2: XML から JSON への変換
以下の出力 XSL 変換を使用して REST Web サービスを構成している場合に、クライアントがビューの XML 表現を要求すると、応答は同等の JSON ドキュメントになります。応答の HTTP ヘッダー Content-type
は application/json
になります。
<?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 変換を応答にのみ適用します。
クライアントがデータの XML 表現を要求する場合。つまり、リクエストの URL にパラメータ
$format=xml
が含まれるか、またはリクエストに HTTP ヘッダーAccept: application/xml
が含まれる場合。クライアントが別の表現 (たとえば HTML) を要求した場合、サービスはその XSL 変換を適用しません。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 の着信/発信メッセージの変換 」を参照してください。