4 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の使用」で説明されています。
4.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では、バイトコード・プログラムを使用してXMLインスタンス・ドキュメントを変換します。このため、コンパイル時の計算と実行時の計算は明確に区別され、命令間でのデータ交換には決まった方法が指定されます。
この方法のメリットは次のとおりです。
-
異なるプラットフォーム上でも、XSLTスタイルシートをコンパイルしたり、1つのファイルに保存したり、頻繁に再利用できます。
-
XVMは他のXSLTプロセッサに比べて著しく高速であり、使用するメモリーは少ないです。
-
バイトコードは言語非依存です。そのため、CまたはC++のXSLTコンパイラで生成されたコードに違いはありません。
4.1.1 XVMの使用例
APIパッケージを使用する一般的なシナリオについて説明します。
-
XMLメタコンテキスト・オブジェクトを作成して使用します。
xctx = XmlCreate(&err,...);
-
XSLTコンパイラ・オブジェクトを作成して使用します。
comp = XmlXvmCreateComp(xctx);
-
XSLTスタイルシートまたはXPath式をコンパイルし、結果として戻るバイトコードを格納またはキャッシュします。
code = XmlXvmCompileFile(comp, xslFile, baseuri, flags, &err);
または
code = XmlXvmCompileDom (comp, xslDomdoc, flags, &err);
または
code = XmlXvmCompileXPath (comp, xpathexp, namespaces, &err);
-
XVMオブジェクトを作成して使用します。XVMが
Stack Overflow
メッセージで終了するとき、または必要とするメモリー・フットプリントがより少ないときは、スタック・サイズを明示的に設定する必要があります。XmlXvmCreate()
を参照してください。vm = XmlXvmCreate(xctx, "StringStack", 32, "NodeStack", 24, NULL);
-
出力を設定します(オプション)。デフォルトはストリームです。
err = XmlXvmSetOutputDom (vm, NULL);
または
err = XmlXvmSetOutputStream(vm, &xvm_stream);
または
err = XmlXvmSetOutputSax(vm, &xvm_callback, NULL);
-
スタイルシートのバイトコードをXVMオブジェクトに設定します。他のバイトコードを使用して繰り返すことができます。
len = XmlXvmGetBytecodeLength(code, &err); err = XmlXvmSetBytecodeBuffer(vm, code, len);
または
err = XmlXvmSetBytecodeFile (vm, xslBytecodeFile);
-
XMLインスタンス・ドキュメントを変換するか、コンパイルしたXPath式を評価します。同じXML文書または他のXML文書を使用して繰り返すことができます。
err = XmlXvmTransformFile(vm, xmlFile, baseuri);
または
err = XmlXvmTransformDom (vm, xmlDomdoc);
または
obj = (xvmobj*)XmlXvmEvaluateXPath (vm, code, 1, 1, node);
-
出力ツリー・フラグメントを取得します(ステップ5でDOM出力が設定されている場合)。
node = XmlXvmGetOutputDom (vm);
-
オブジェクトを削除します。
XmlXvmDestroy(vm); XmlXvmDestroyComp(comp); XmlDestroy(xctx);
4.1.2 XVM Processorコマンドライン・ユーティリティの使用
XVMプロセッサには、コマンドラインからコマンド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
4.1.3 XVM Processor for Cの入手方法
Oracle XVM Processor for Cは、Oracle Databaseの標準インストールに含まれています。
関連項目:
-
『Oracle Database XML C APIリファレンス』のC用のXSLTVM APIに関する項
4.2 XDK用のXSLT Processor for C
Oracle XSL/XPathパッケージは、1999年11月16日のW3C勧告で指定されたとおりにXSLT言語を実装します。このパッケージには、XSLT 1.0プロセッサおよびXPath 1.0プロセッサが含まれます。OracleによるXSLTプロセッサの実装は、コンパイラとプロセッサを1つのオブジェクトに融合する、一般的な設計方法に従っています。
4.2.1 XSLTプロセッサの使用例
APIパッケージを使用する一般的なシナリオを示します。
-
XMLメタコンテキスト・オブジェクトを作成して使用します。
xctx = XmlCreate(&err,...);
-
XSLTスタイルシートを解析します。
xslDomdoc = XmlLoadDom(xctx, &err, "file", xslFile, "base_uri", baseuri, NULL);
-
スタイルシート用のXSLTプロセッサを作成します。
xslproc = XmlXslCreate (xctx, xslDomdoc, baseuri, &err);
-
XMLインスタンス・ドキュメントを解析します。
xmlDomdoc = XmlLoadDom(xctx, &err, "file", xmlFile, "base_uri", baseuri, NULL);
-
出力を設定します(オプション)。デフォルトはDocument Object Model (DOM)です。
err = XmlXslSetOutputStream(xslproc, &stream);
-
XML文書を変換します。このステップは、同じXML文書または他のXML文書を使用して繰り返すことができます。
err = XmlXslProcess (xslproc, xmlDomdoc, FALSE);
-
出力を取得します(DOMの場合)。
node = XmlXslGetOutput(xslproc);
-
オブジェクトを削除します。
XmlXslDestroy(xslproc); XmlDestroy(xctx);
4.2.2 XPathプロセッサの使用例
APIパッケージを使用する一般的なシナリオについて説明します。
次のステップを実行します。
-
XMLメタコンテキスト・オブジェクトを作成して使用します。
xctx = XmlCreate(&err,...);
-
XML文書を解析するか、既存のDOMから現行のノードを取得します。
node = XmlLoadDom(xctx, &err, "file", xmlFile, "base_uri", baseuri, NULL);
-
XPathプロセッサを作成します。
xptproc = XmlXPathCreateCtx(xctx, NULL, node, 0, NULL);
-
XPath式を解析します。
exp = XmlXPathParse (xptproc, xpathexpr, &err);
-
XPath式を評価します。
obj = XmlXPathEval(xptproc, exp, &err);
-
オブジェクトを削除します。
XmlXPathDestroyCtx (xptproc); XmlDestroy(xctx);
4.2.3 C XSLT Processorコマンドライン・ユーティリティの使用
C Oracle XSLT Processorは、bin/xsl
をコールすることによって、実行可能ファイルとしてコールできます。
xsl [switches] stylesheet instance
or
xsl -f [switches] [document filespec]
スタイルシートが指定されないと、出力は生成されません。スタイルシートはあるが出力ファイルがない場合は、出力はstdout
となります。
表4-1に、コマンドライン・オプションを示します。
表4-1 XSLT Processor for C: コマンドライン・オプション
オプション | 説明 |
---|---|
-B BaseUri |
XSLTプロセッサ用のベースURIを設定します。 |
-e encoding |
デフォルトの入力ファイルのエンコーディングを指定します( |
-E encoding |
DOMまたはSimple API for XML (SAX)エンコーディングを指定します。 |
-f |
ファイル: Universal Resource Identifier (URI)ではなく、ファイル指定として解釈します。 |
-G xptrexprs |
ファイルに指定されたXPointerスキーマの例を評価します。 |
-h |
ヘルプ: この使用方法を示します。(詳細なオプションには |
-hh |
詳細なオプションのリストを表示します。 |
-i n |
XSLTプロセスを繰り返す回数。 |
-l language |
エラーを報告する言語。 |
-o XSLoutfile |
XSLTプロセッサの出力ファイルを指定します。 |
-v |
バージョン: パーサーのバージョンを表示し、終了します。 |
-V var value |
C XSLTで最上位の変数をテストします。 |
-w |
空白: 空白をすべて保持します。 |
-W |
警告: 警告の後で解析を停止します。 |
4.2.4 Oracle XSLT Processor for Cの入手方法
Oracle XSLT Processor for Cは、Oracle Databaseの標準インストールに含まれています。
関連項目:
-
『Oracle Database XML C APIリファレンス』のC用のXSLT APIに関する項
-
『Oracle Database XML C APIリファレンス』のC用のXPath APIに関する項
4.3 ソフトウェアに含まれるデモ・ファイルの使用
ディレクトリ$ORACLE_HOME/xdk/demo/c/parser/
には、XSLT for Cの使用方法を示す複数のXMLアプリケーションがあります。
表4-2 XSLT for Cのデモ・ファイル
サンプル・ファイル名 | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
シェークスピアの戯曲のXMLバージョン |
|
XVMおよびコンパイラの使用例。入力として、XMLファイルおよびXSLTスタイルシート・ファイルの2つのファイル名を取ります。 |
|
XVMおよびコンパイラの使用例。入力として、XMLファイル名および |
|
|