プライマリ・コンテンツに移動
Oracle® XML Developer's Kitプログラマーズ・ガイド
12c リリース1 (12.1) B71283-04
目次へ移動
目次
索引へ移動
索引

前
次

19 XSLT Processor for CおよびXVM Processor for Cの使用

この章では、Extensible Stylesheet Language Transformation (XSLT)およびXSLT Virtual Machine (XVM) Processor for Cの使用方法について説明します。

内容は次のとおりです。

注意:

Oracle XML Developer's Kit (XDK)およびOracle XML DBアプリケーションには、統合Cアプリケーション・プログラミング・インタフェース(API)を使用します。非統合の旧C関数は非推奨で、下位互換性のためにのみサポートされています。これは、将来のリリースでは削除される予定です。

統合C APIの詳細は、「XML Parser for Cの使用」を参照してください。

19.1 XSLT XVMプロセッサ

Oracle XVMパッケージには、XSLTコンパイラおよびXVMが含まれます。このパッケージは、1999年11月16日のWorld Wide Web Consortium (W3C)勧告で指定されているとおりにXSLT言語を実装します。

XSLTコンパイラおよびXVMを実装すると、XSLT (バージョン1.0)をバイトコード形式でコンパイルできるようになります。XVMは、コンパイル済のXSLTコードを実行するよう設計されたCPUのソフトウェアによる実装です。この仮想マシンでは、一連のバイトコードまたは「XSLT CPU」の機械命令にXSLTスタイルシートをコンパイルするコンパイラを想定します。バイトコード・プログラムは、プラットフォームに依存しない2バイト単位のシーケンスです。異なるXVM上で格納、キャッシュおよび実行することが可能です。XVMでは、バイトコード・プログラムを使用してExtensible Markup Language (XML)インスタンス・ドキュメントを変換します。このため、コンパイル時の計算と実行時の計算は明確に区別され、命令間でのデータ交換には決まった方法が指定されます。

この方法のメリットは次のとおりです。

  • 異なるプラットフォーム上でも、XSLTスタイルシートをコンパイルしたり、1つのファイルに保存したり、頻繁に再利用することができます。

  • XVMは他のXSLTプロセッサに比べて著しく高速であり、使用するメモリーは少ないです。

  • バイトコードは言語に依存しません。そのため、CまたはC++のXSLTコンパイラで生成されたコードに違いはありません。

19.1.1 XVMの使用例

APIパッケージを使用する一般的な場面には、次の手順が含まれます。

  1. XMLメタコンテキスト・オブジェクトを作成して使用します。

    xctx = XmlCreate(&err,...);
    
  2. XSLTコンパイラ・オブジェクトを作成して使用します。

    comp = XmlXvmCreateComp(xctx);
    
  3. XSLTスタイルシートまたはXPath式をコンパイルし、結果として戻るバイトコードを格納またはキャッシュします。

    code = XmlXvmCompileFile(comp, xslFile, baseuri, flags, &err);
    

    または

    code = XmlXvmCompileDom (comp, xslDomdoc, flags, &err);
    

    または

    code = XmlXvmCompileXPath (comp, xpathexp,  namespaces, &err);
    
  4. XVMオブジェクトを作成して使用します。XVMが「スタックがオーバーフローしました」のメッセージで終了するとき、または必要とするメモリー・フットプリントがより少ないときは、スタック・サイズを明示的に設定する必要があります。XmlXvmCreate()を参照してください。

    vm = XmlXvmCreate(xctx, "StringStack", 32, "NodeStack", 24, NULL);
    
  5. 出力を設定します(オプション)。デフォルトはストリームです。

    err = XmlXvmSetOutputDom (vm, NULL);
    

    または

    err = XmlXvmSetOutputStream(vm, &xvm_stream);
    

    または

    err = XmlXvmSetOutputSax(vm, &xvm_callback, NULL);
    
  6. スタイルシートのバイトコードをXVMオブジェクトに設定します。他のバイトコードを使用して繰り返すことができます。

    len = XmlXvmGetBytecodeLength(code, &err);
    err = XmlXvmSetBytecodeBuffer(vm, code, len);
    

    または

    err = XmlXvmSetBytecodeFile (vm, xslBytecodeFile);
    
  7. XMLインスタンス・ドキュメントを変換するか、コンパイルしたXPath式を評価します。同じXML文書または他のXML文書を使用して繰り返すことができます。

    err = XmlXvmTransformFile(vm, xmlFile, baseuri);
    

    または

    err = XmlXvmTransformDom (vm, xmlDomdoc);
    

    または

    obj  = (xvmobj*)XmlXvmEvaluateXPath (vm, code, 1, 1, node);
    
  8. 出力ツリー・フラグメントを取得します(手順5でDOM出力が設定されている場合)。

    node = XmlXvmGetOutputDom (vm);
    
  9. オブジェクトを削除します。

    XmlXvmDestroy(vm);
    XmlXvmDestroyComp(comp);
    XmlDestroy(xctx);

19.1.2 XVM Processorコマンドライン・ユーティリティの使用

次の方法で、コマンドラインからXVMプロセッサにアクセスします。

xvm

使用方法

xvm options xslfile xmlfile
xvm options xpath xmlfile

オプション

-c        Compile xslfile. The bytecode is in "xmlfile.xvm".
-ct       Compile xslfile and transform xmlfile.
-t        Transform xmlfile using bytecode from xslfile.
-xc       Compile xpath. The bytecode is in "code.xvm".
-xct      Compile and evaluate xpath with xmlfile.
-xt       Evaluate XPath bytecode from xpath with xmlfile.

xvm -ct  db.xsl db.xml
xvm -t   db.xvm db.xml
xvm -xct "doc/employee[15]/family" db.xml

19.1.3 XVM Processor for Cの入手方法

Oracle XVM Processor for Cは、Oracle Databaseの標準インストールに含まれています。

関連項目:

19.2 XSLTプロセッサ

Oracle XSL/XPathパッケージは、1999年11月16日のW3C勧告で指定されたとおりにXSLT言語を実装します。このパッケージには、XSLTプロセッサおよびXPathプロセッサが含まれます。より一般的な設計方法に従い、OracleによってXSLTプロセッサが実装されます。この方法では、コンパイラとプロセッサが1つのオブジェクトに融合されています。

19.2.1 XSLTプロセッサの使用例

APIパッケージを使用する一般的な場面には、次の手順が含まれます。

  1. XMLメタコンテキスト・オブジェクトを作成して使用します。

    xctx = XmlCreate(&err,...);
    
  2. XSLTスタイルシートを解析します。

    xslDomdoc = XmlLoadDom(xctx, &err, "file", xslFile, "base_uri", baseuri, NULL);
    
  3. スタイルシート用のXSLTプロセッサを作成します。

    xslproc = XmlXslCreate (xctx, xslDomdoc, baseuri, &err);
    
  4. XMLインスタンス・ドキュメントを解析します。

    xmlDomdoc = XmlLoadDom(xctx, &err, "file", xmlFile,  "base_uri", baseuri, NULL);
    
  5. 出力を設定します(オプション)。デフォルトはDocument Object Model (DOM)です。

    err = XmlXslSetOutputStream(xslproc, &stream);
    
  6. XML文書を変換します。この手順は、同じXML文書または他のXML文書を使用して繰り返すことができます。

    err = XmlXslProcess (xslproc, xmlDomdoc, FALSE);
    
  7. 出力を取得します(DOMの場合)。

    node = XmlXslGetOutput(xslproc);
    
  8. オブジェクトを削除します。

    XmlXslDestroy(xslproc);
    XmlDestroy(xctx);

19.2.2 XPathプロセッサの使用例

APIパッケージを使用する一般的な場面には、次の手順が含まれます。

  1. XMLメタコンテキスト・オブジェクトを作成して使用します。

    xctx = XmlCreate(&err,...);
    
  2. XML文書を解析するか、既存のDOMから現行のノードを取得します。

    node = XmlLoadDom(xctx, &err, "file", xmlFile,  "base_uri", baseuri, NULL);
    
  3. XPathプロセッサを作成します。

    xptproc = XmlXPathCreateCtx(xctx, NULL, node, 0, NULL);
    
  4. XPath式を解析します。

    exp = XmlXPathParse (xptproc, xpathexpr, &err);
    
  5. XPath式を評価します。

    obj = XmlXPathEval(xptproc, exp, &err);
    
  6. オブジェクトを削除します。

    XmlXPathDestroyCtx (xptproc);
    XmlDestroy(xctx);

19.2.3 C XSLT Processorコマンドライン・ユーティリティの使用

C Oracle XSLT Processorは、次のようにbin/xsl:をコールすることによって、実行可能ファイルとしてコールできます。

xsl [switches] stylesheet instance
or
xsl -f [switches] [document filespec]

スタイルシートが指定されないと、出力は生成されません。スタイルシートはあるが出力ファイルがない場合は、出力はstdoutとなります。

表19-1に、コマンドライン・オプションを示します。

表19-1 XSLT Processor for C: コマンドライン・オプション

オプション 説明
-B BaseUri

XSLTプロセッサ用のベースURIを設定します。http://pqr/xsl.txtBaseUriは、pqr.txtを解釈してhttp://pqr/pqr.txtに変換します。

-e encoding

デフォルトの入力ファイルのエンコーディングを指定します(-eeを強制)。

-E encoding

DOMまたはSimple API for XML (SAX)エンコーディングを指定します。

-f

ファイル: Universal Resource Identifier (URI)ではなく、ファイル指定として解釈します。

-G xptrexprs

ファイルに指定されたXPointerスキーマの例を評価します。

-h

ヘルプ: この使用方法を示します。(詳細なオプションには-hhを使用します。)

-hh

詳細なオプションのリストを表示します。

-i n

XSLTプロセスを繰り返す回数。

-l language

エラーを報告する言語。

-o XSLoutfile

XSLTプロセッサの出力ファイルを指定します。

-v

バージョン: パーサーのバージョンを表示し、終了します。

-V var value

C XSLTで最上位の変数をテストします。

-w

空白: 空白をすべて保持します。

-W

警告: 警告の後で解析を停止します。

19.2.4 Oracle XSLT Processor for Cの入手方法

Oracle XSLT Processor for Cは、Oracle Databaseの標準インストールに含まれています。

関連項目:

19.3 ソフトウェアに含まれるデモ・ファイルの使用

$ORACLE_HOME/xdk/demo/c/parser/ディレクトリには、XSLT for Cの使用方法を示すXMLアプリケーションがあります。

表19-2に、このディレクトリにあるファイルを示します。

表19-2 XSLT for Cのデモ・ファイル

サンプル・ファイル名 説明

XSLSample.c

XSLSampleプログラムのソース

XSLSample.std

XSLSampleからの予想される出力

class.xml

XSLSampleで使用できるXMLファイル

iden.xsl

XSLSampleで使用できるスタイルシート

cleo.xml

シェークスピアの戯曲のXMLバージョン

XVMSample.c

XVMおよびコンパイラの使用例。入力として、XMLファイルおよびXSLTスタイルシート・ファイルの2つのファイル名を取ります。

XVMXPathSample.c

XVMおよびコンパイラの使用例。入力として、XMLファイル名およびXPath式を取ります。評価されたXPath式の結果を生成します。

XSLXPathSample.c

XSL/XPathプロセッサの使用例。入力として、XMLファイル名およびXPath式を取ります。評価されたXPath式の結果を生成します。

19.3.1 XSLT for Cデモ・プログラムの作成

デモ・ディレクトリに移動し、READMEファイルを参照してください。このドキュメントには、サンプル・プログラムの作成方法がオペレーティング・システムごとに記載されています。

XSLTプロセッサのサンプルXSLSampleの使用方法が説明されています。ここでは、入力として、XMLファイルおよびXSLTスタイルシートの2つのファイルを取ります。

XSLSample xmlfile xslss