XSLTRANSFORM スカラー関数

XSLTRANSFORM を使用して XML データを他の形式に変換します。 これには、1 つの XML スキーマに準拠する XML 文書を別のスキーマに準拠する文書に変換することも含まれます。

Read syntax diagramSkip visual syntax diagramXSLTRANSFORM(xml-documentUSINGxsl-stylesheet WITHxsl-parameters ASdata-type )
data-type
Read syntax diagramSkip visual syntax diagramCHARACTERCHAR(-1)(integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING(integerOCTETSCODEUNITS32)CLOBCHARACTERCHARLARGE OBJECT(1M)(integerKMGOCTETSCODEUNITS32)BLOBBINARY LARGE OBJECT(1M)(integerKMG)

スキーマは 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 列に格納する際にコード・ページ変換が発生することがあります。 その場合、結果として文字が失われることがあります。

この例は、XSLT をフォーマット設定エンジンとして使用する方法を示しています。 セットアップするには、まず XML_TAB 表を作成してから、XML 文書と XSL スタイル・シートが含まれる行を表に挿入します。
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 文書をトランスフォームする場合は、文書のトランスフォームをデータベースで行うか、アプリケーション・サーバーで行うかに関して、注意深く決定する必要があります。