XSLTRANSFORM
XSLTRANSFORM は、XML 文書を他のデータ形式に変換します。データは XSLT プロセッサーで可能なあらゆる形式、例えば、XML、HTML、またはプレーン・テキスト (ただし必ずしもこれらに限定されない) などに変換できます。
>>-XSLTRANSFORM--(--XML-document--USING--xsl-stylesheet---------> .-AS--CLOB--(--2G--)-. >--+----------------------+--+--------------------+--)--------->< '-WITH--xsl-parameters-' '-AS--| data-type |--' data-type .-(--1--)-------. |--+-+-+-+-CHARACTER-+--+---------------+----------+--+----------------+---------------------+------------+--| | | | '-CHAR------' '-(--integer--)-' | +-FOR BIT DATA---+ | | | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)-' +-FOR SBCS DATA--+ | | | | | '-CHAR------' | +-FOR MIXED DATA-+ | | | | '-VARCHAR----------------' '-ccsid-clause---' | | | | .-(--1M--)-------------. | | | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+----------------+-' | | | '-CHAR------' | '-(--integer--+---+--)-' +-FOR SBCS DATA--+ | | '-CLOB------------------------' +-K-+ +-FOR MIXED DATA-+ | | +-M-+ '-ccsid-clause---' | | '-G-' | | .-(--1--)-------. | +-+---GRAPHIC----+---------------+-------+--+--------------+-------------------------------------------+ | | '-(--integer--)-' | '-ccsid-clause-' | | +-+-GRAPHIC VARYING-+--(--integer--)---+ | | | '-VARGRAPHIC------' | | | | .-(--1M--)-------------. | | | '---DBCLOB----+----------------------+-' | | '-(--integer--+---+--)-' | | +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | +-+-+-+-NATIONAL CHARACTER-+--+---------------+----------+---------------------+--+------------------+-+ | | | +-NATIONAL CHAR------+ '-(--integer--)-' | | '-normalize-clause-' | | | | '-NCHAR--------------' | | | | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)-' | | | | | +-NATIONAL CHAR------+ | | | | | | '-NCHAR--------------' | | | | | '-NVARCHAR------------------------' | | | | .-(--1M--)-------------. | | | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+-' | | | '-NCHAR--------------' | '-(--integer--+---+--)-' | | '-NCLOB--------------------------------' +-K-+ | | +-M-+ | | '-G-' | | .-(--1--)-------. | '-+-+-BINARY--+---------------+---------+-----------------+--------------------------------------------' | | '-(--integer--)-' | | | '-+-BINARY VARYING-+--(--integer--)-' | | '-VARBINARY------' | | .-(--1M--)-------------. | '---+-BLOB----------------+----+----------------------+-' '-BINARY LARGE OBJECT-' '-(--integer--+---+--)-' +-K-+ +-M-+ '-G-'
ccsid-clause |--CCSID--integer--+------------------+-------------------------| '-normalize-clause-' normalize-clause .-NOT NORMALIZED-. |--+----------------+-------------------------------------------| '-NORMALIZED-----'
XSLTRANSFORM を使用して XML データを他の形式に変換します。これには、1 つの XML スキーマに準拠する XML 文書を別の XML スキーマに準拠する文書に変換することも含まれます。
- XML-document
- 整形式 XML 文書を戻す文字ストリング、Unicode グラフィック・ストリング、2 進ストリング、または XML 式。これは、xsl-stylesheet で指定された XSL スタイルシートを使用して変換される文書です。
- xsl-stylesheet
- 整形式 XML 文書を戻す文字ストリング、Unicode グラフィック・ストリング、2 進ストリング、または XML 式。文書は XSLT バージョン 1.10 勧告に準拠した XSL スタイルシートです。xsl:include 宣言を取り込むスタイルシートはサポートされていません。このスタイルシートは、xml-document で指定された値を変換するために適用されます。
- xsl-parameters
- 整形式 XML 文書を戻す文字ストリング、Unicode グラフィック・ストリング、2 進ストリング、または XML 式。これは、xsl-stylesheet で指定された XSL スタイルシートにパラメーター値を提供する文書です。パラメーターの値は、属性またはテキストとして指定できます。
- パラメーター文書の構文は次のとおりです。
<params xmlns="http://www.ibm.com/XSLTransformParameters"> <param name="..." value="..."/> <param name="...">enter value here</param> ... </params>
注: スタイルシート文書には xsl:param エレメントが含まれている必要があり、パラメーター文書で指定されたものと一致する名前属性値がなければなりません。
- AS data-type
- 結果のデータ・タイプを指定します。指定された結果のデータ・タイプの暗黙的または明示的な長さ属性は、変換された出力を収容するのに十分な大きさでなければなりません。デフォルトの結果のデータ・タイプは CLOB(2G) です。
CCSID が指定され、data-type が GRAPHIC、VARGRAPHIC、または DBCLOB の場合、CCSID は Unicode CCSID であることが必要です。
CCSID 属性が指定されないと、CCSID は CAST の指定に記されているように、XML-document が data-type にキャストされた場合のように決定されます。
関数の結果は、指定のデータ・タイプになります。 前述の文書を文字データ・タイプで保管すると、CCSID 変換時にデータが失われる恐れがあります。
XML-document と xsl-stylesheet のどちらかが NULL の場合、結果は NULL 値になります。
注記
前提条件: XSLTRANSFORM 関数を使用するには、XML Toolkit for IBM® i および International Components for Unicode (ICU オプション) がインストールされていなければなりません。
例
この例では、XSLT をフォーマット・エンジンとして使用する方法を示します。セットアップのために、まず以下の 2 つの例の文書をデータベースに挿入します。CREATE TABLE XML_TAB (c1 INT, xml_doc CLOB(2M), xsl_doc CLOB(256K));
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
WITH '<params xmlns="http://www.ibm.com/XSLTransformParameters"></params>')
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 の使用例を示しています。