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では、バイトコード・プログラムを使用して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がStack Overflowメッセージで終了するとき、または必要とするメモリー・フットプリントがより少ないときは、スタック・サイズを明示的に設定する必要があります。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

使用方法:

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 XDK用のXSLT Processor for C

Oracle XSL/XPathパッケージは、1999年11月16日のW3C勧告で指定されたとおりにXSLT言語を実装します。このパッケージには、XSLT 1.0プロセッサおよびXPath 1.0プロセッサが含まれます。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 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