XSLTRANSFORM スカラー関数
XSLTRANSFORM を使用して XML データを他の形式に変換します。 これには、1 つの XML スキーマに準拠する XML 文書を別のスキーマに準拠する文書に変換することも含まれます。
スキーマは SYSIBM です。 この関数を修飾名で指定することはできません。
XSLTRANSFORM 関数は XML 文書を別のデータ形式に変換します。 データは XSLT プロセッサーで可能なあらゆる形式、例えば、XML、HTML、またはプレーン・テキスト (ただし必ずしもこれらに限定されない) などに変換できます。
XSLTRANSFORM で使用されるパスはすべて、データベース・システム内部のパスです。 現在のところ、このコマンドを外部ファイル・システムにあるファイルやスタイルシートで直接使用することができません。
- XML 文書
- データ・タイプ XML、CHAR、VARCHAR、CLOB、または BLOB の整形式 XML 文書を戻す式。 これは、xsl-stylesheet で指定された XSL スタイルシートを使用して変換される文書です。
XML 文書は、少なくとも 1 つのルートを持つ整形式文書でなければなりません。
xsl-stylesheet - データ・タイプ XML、CHAR、VARCHAR、CLOB、または BLOB の整形式 XML 文書を戻す式。 文書は W3C XSLT バージョン 1.0 勧告に準拠した XSL スタイルシートです。 XQUERY ステートメントまたは
xsl:include
宣言を組み込むスタイル・シートはサポートされていません。 このスタイルシートは、xml-document で指定された値を変換するために適用されます。 xsl パラメーター - データ・タイプ XML、CHAR、VARCHAR、CLOB、または BLOB の整形式 XML 文書またはヌルを戻す式。 これは、xsl-stylesheet で指定された XSL スタイルシートにパラメーター値を提供する文書です。 パラメーターの値は、属性またはテキスト・ノードとして指定できます。パラメーター文書の構文は次のとおりです。
<params xmlns="http://www.ibm.com/XSLTransformParameters"> <param name="..." value="..."/> <param name="...">enter value here</param> ... </params>
スタイルシート文書には、パラメーター文書で指定された名前属性値と一致する名前属性値を持つ
xsl:param
要素が含まれていなければなりません。 - AS データ・タイプ
- 結果のデータ・タイプを指定します。 指定された結果のデータ・タイプの暗黙的または明示的な長さ属性には、変換された出力を収める十分な大きさがなければなりません (SQLSTATE 22001)。 デフォルトの結果データ・タイプは CLOB (2G OCTETS) です。ただし、Unicode データベースでは、デフォルトが CLOB (536870911 CODEUNITS32) の場合、環境のストリング単位は CODEUNITS32 に設定されます。
xml-document 引数または xsl-stylesheet 引数のいずれかがヌルの場合、結果はヌルになります。
上記文書のいずれかを CHAR、VARCHAR、または CLOB 列に格納する際にコード・ページ変換が発生することがあります。 その場合、結果として文字が失われることがあります。
例
CREATE TABLE XML_TAB (DOC_ID INTEGER, XML_DOC XML, XSL_DOC XML);
INSERT INTO XML_TAB VALUES
(1,
'<?xml version="1.0"?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = "/home/steffen/xsd/xslt.xsd">
<student studentID="1" firstName="Steffen" lastName="Siegmund"
age="23" university="Rostock"/>
</students>',
'<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="headline"/>
<xsl:param name="showUniversity"/>
<xsl:template match="students">
<html>
<head/>
<body>
<h1><xsl:value-of select="$headline"/></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">First Name</td>
<td width="200">Last Name</td>
<td width="50">Age</td>
<xsl:choose>
<xsl:when test="$showUniversity =''true''">
<td width="200">University</td>
</xsl:when>
</xsl:choose>
</tr>
</th>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="student">
<tr>
<td><xsl:value-of select="@studentID"/></td>
<td><xsl:value-of select="@firstName"/></td>
<td><xsl:value-of select="@lastName"/></td>
<td><xsl:value-of select="@age"/></td>
<xsl:choose>
<xsl:when test="$showUniversity = ''true''">
<td><xsl:value-of select="@university"/></td>
</xsl:when>
</xsl:choose>
</tr>
</xsl:template>
</xsl:stylesheet>'
);
次に、XSLTRANSFORM 関数を呼び出して XML データを HTML に変換し、表示します。SELECT XSLTRANSFORM (XML_DOC USING XSL_DOC AS CLOB(1M)) FROM XML_TAB;
結果は次の文書になります。<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1></h1>
<table border="1">
<th>
<tr>
<td width="80">StudentID</td>
<td width="200">First Name</td>
<td width="200">Last Name</td>
<td width="50">Age</td>
</tr>
</th>
<tr>
<td>1</td>
<td>Steffen</td><td>Siegmund</td>
<td>23</td>
</tr>
</table>
</body>
</html>
この例では、出力は HTML で、各パラメーターによってどのような HTML が生成されるか、およびどのようなデータがパラメーターにもたらされるかのみが影響を受けます。 このため、ここでは XSLT のエンド・ユーザーの出力用のフォーマット・エンジンとしての使用例を示しています。
使用上の注意
XML 文書をトランスフォームする方法は多数あります。例えば、XSLTRANSFORM 関数、XQuery 更新式、および外部アプリケーション・サーバーによる XSLT 処理を使用する方法などです。 データベース表の XML 列に保管される文書のトランスフォーメーションについては、多くの場合、XSLT よりも XQuery 更新式を使用した方が効率よく実行できます。XSLT では常に、トランスフォームされる XML 文書の構文解析が必要になるからです。 XSLT を使って XML 文書をトランスフォームする場合は、文書のトランスフォームをデータベースで行うか、アプリケーション・サーバーで行うかに関して、注意深く決定する必要があります。