ヘッダーをスキップ
Oracle® XML Developer's Kitプログラマーズ・ガイド
11gリリース2 (11.2)
B56264-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

この章の内容は次のとおりです。


注意:

新規のXDKおよびOracle XML DBアプリケーションには、新規の統合C APIを使用してください。以前のC関数は非推奨です。下位互換性のみを目的としてサポートされていますが、今後は拡張されません。これは、将来のリリースでは削除される予定です。

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


XVMプロセッサ

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

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

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

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

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);
    

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

XVM Processor for Cの入手方法

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


関連項目:


XSLTプロセッサ

Oracle XSL/XPathパッケージは、1999年11月16日のW3C勧告で指定されたとおりにXSL Transformation (XSLT)を実装します。このパッケージには、XSLTプロセッサおよびXPathプロセッサが含まれます。より一般的な設計方法に従い、OracleによってXSLTプロセッサが実装されます。この方法では、コンパイラとプロセッサが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. 出力を設定します(オプション)。デフォルトはDOMです。

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

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

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

    XmlXslDestroy(xslproc);
    XmlDestroy(xctx);
    

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);
    

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

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

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

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

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

表17-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またはSAXエンコーディングを指定します。

-f

ファイル: URIではなくfilespecを解析します。

-G xptrexprs

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

-h

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

-hh

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

-i n

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

-l language

エラーを報告する言語。

-o XSLoutfile

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

-v

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

-V var value

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

-w

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

-W

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


Oracle XSLT Processor for Cの入手方法

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


関連項目:


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

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

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

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

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

XSLSample.c

XSLSampleプログラムのソース

XSLSample.std

XSLSampleからの予想される出力

class.xml

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

iden.xsl

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

cleo.xml

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

XVMSample.c

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

XVMXPathSample.c

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

XSLXPathSample.c

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


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

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

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

XSLSample xmlfile xslss