例: XSLT変換でのスタイルシートの使用 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ XMLデータ型

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/jki1512081750759.ditamap
dita:ditavalPath
ja-JP/jki1512081750759.ditaval
dita:id
B035-1140
Product Category
Software
Teradata Vantage

スタイルシートをテーブルに格納しておき、結合処理を通じてXSLT変換を実行する関数およびメソッドでそれらを使用することができます。この例では、スタイルシートをインポートするための情報がxslt.txtファイルに含まれています(スタイルシートのファイル名およびID)。styletabテーブルに格納されるスタイルシートは、Itemlist.xsltファイルに書き込まれます。

CREATE TABLE styletab(
   stylesheetid INTEGER,
   stylesheetcontent XML )
   PRIMARY INDEX (stylesheetid);

xslt.txtファイルの内容は、以下のとおりです。

Itemlist.xslt|1

Itemlist.xsltファイルの内容は、以下のとおりです。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/Customer">
      <html>
      <title>Items Ordered</title>
      <body>
      <table border="1">
      <tr>
         <th>Item ID</th>
         <th>Description</th>
         <th>Part Number</th>
         <th>Qty</th>
         <th>Unit Price</th>
         <th>Total Price</th>
      </tr>
      <xsl:for-each select="Order/Item">
      <tr>
         <td><xsl:value-of select="@ID"/></td>
         <td><xsl:value-of select="Description"/></td>
         <td><xsl:value-of select="PartNumber"/></td>
         <td><xsl:value-of select="Quantity"/></td>
         <td><xsl:value-of select="UnitPrice"/></td>
         <td><xsl:value-of select="Price"/></td>
      </tr>
      </xsl:for-each>
      </table>
      </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

スタイルシートをstyletabテーブルに格納するには、次の文を使用します。

.IMPORT VARTEXT '|' LOBCOLS=1 FILE='xslt.txt'
USING (fxslt CLOB AS DEFERRED, schemaid VARCHAR(32))
INSERT INTO styletab values(:schemaid, new XML(:fxslt));

ここで、XSLTTRANSFORMメソッドを使用してstyletabテーブルを結合することにより、スタイルシートを参照することができます。

SELECT customerXML.XSLTTRANSFORM(styletab.stylesheetcontent, '')
FROM customer, styletab
WHERE customerID=1 and styletab.stylesheetid = 1;

この問合わせの結果の一部を以下に示します。省略記号(...)は、問合わせ結果の一部ではありません。これは、問合わせからさらに結果が返されるが、この例では省略されていることを示しています。

customerXML.XSLTTRANSFORM(stylesheetcontent, '')
-----------------------------------------------------------------------
<html><title>Items Ordered</title><body><table border="1"><tr><th>Item ID</th><th>Description</th><th>Part Number</th><th>Qty</th><th>Unit Price</th><th>Total Price</th></tr><tr><td>001</td><td>Motoro ...