XDK Cコンポーネントは、XML文書の読取り、操作、変換および検証を行うための基本コンポーネントです。
この章の内容は次のとおりです。
C XDKコンポーネントは、Oracle Databaseに付属しています。この章では、Oracle DatabaseとともにXDKをインストールし、Oracle Database Examplesメディアのデモ・プログラムもインストールしたと想定します。インストールの手順およびXDKディレクトリ構造の説明は、「XDKのインストール」を参照してください。
例16-1 に、XDKデモとXDKコンポーネントで使用されるライブラリのUNIXディレクトリ構造を示します。$ORACLE_HOME/xdk/demo/c
のサブディレクトリには、XDK for Cコンポーネントのサンプル・プログラムとデータ・ファイルが入っています。第II部「XDK for C」では、これらのプログラムを理解および使用する方法について説明します。
例16-1 C XDKのライブラリ、ヘッダー・ファイル、ユーティリティおよびデモ
- Oracle_home_directory | - bin/ schema xml xmlcg xsl xvm | - lib/ libcore11.a libcoresh11.so libnls11.a libunls11.a libxml11.a libxmlsh10.a
| - xdk/ | demo/ | - c/ | - dom/ | - parser/ | - sax/ | - schema/ | - webdav/ | - xslt/ | - xsltvm/ | include/ oratypes.h oraxml.h oraxmlcg.h oraxsd.h xml.h xmlerr.h xmlotn.h xmlproc.h xmlsch.h xmlxptr.h xmlxsl.h xmlxvm.h
サブディレクトリには、C XDKコンポーネントのサンプル・プログラムとデータ・ファイルが入っています。第II部「XDK for C」では、これらのプログラムを使用して最も重要なC言語の機能を理解する方法について説明します。
この項の内容は次のとおりです。
この項で説明するCライブラリは、$ORACLE_HOME/lib
にあります。XDK CおよびC++コンポーネントは、次のライブラリに含まれます。
libxml11.a
このライブラリに含まれるXDKコンポーネントは次のとおりです。
XMLパーサー: XML文書が整形式であるか、DTDまたはXMLスキーマに対して妥当であるかどうか(オプション)を確認します。プログラム・アクセス用のDOMおよびSAXインタフェースをサポートします。
XSLTプロセッサ: XML文書を別のXML文書に変換します。
XSLTコンパイラ: XSLTスタイルシートをコンパイルしてバイト・コードを生成します。生成したコードはXSLT仮想マシンによって使用されます。
XSLTVM: XSLT変換エンジンです。
XMLスキーマ・プロセッサ: XMLファイルをXMLスキーマに対して検証します。
表16-1 に、XDK Cコンポーネント(UNIX)が依存するOracleのCOREライブラリおよびGlobalization Supportライブラリを示します。
表16-1 XDK Cコンポーネントの依存ライブラリ(UNIX)
コンポーネント | ライブラリ | 説明 |
---|---|---|
COREライブラリ |
|
複数プラットフォームにわたる移植性を実現するCランタイム関数を含みます。 |
CORE動的リンク・ライブラリ |
|
UNIXプラットフォームでの動的リンクをサポートするCランタイム・ライブラリ。 |
Globalization Support共通ライブラリ |
|
UTF-8、UTF-16およびISO-8859-1のキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルの場所を特定する際に環境に依存します。 |
Unicode用のGlobalization Supportライブラリ |
|
『Oracle Databaseグローバリゼーション・サポート・ガイド』で説明しているキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルの場所を特定する際に環境に依存します。 |
表16-2 に、XDK Cコンポーネントを使用するときに必要なUNIX環境変数を示します。
変数 | 説明 | 設定 |
---|---|---|
|
グローバリゼーション・サポート・キャラクタ・エンコーディング定義ファイルの場所を設定します。エンコーディング・ファイルは、Oracle Databaseで使用可能なキャラクタ・セットのサブセットを表します。 |
グローバリゼーション・サポート・データ・ファイルの場所を設定します。この変数は次のように設定します。 setenv ORA_NLS10 $ORACLE_HOME/nls/data |
|
XMLエラー・メッセージ・ファイルの場所を設定します。 |
setenv ORA_XML_MESG $ORACLE_HOME/xdk/mesg |
|
C XDK実行可能ファイルの場所を設定します。 |
setenv PATH ${PATH}:${ORACLE_HOME}/bin |
表16-3に示すいずれかのユーティリティを実行して、UNIX実行時環境をテストできます。
表16-3 C/C++ XDKユーティリティ(UNIX)
実行可能ファイル | ディレクトリ | 説明 |
---|---|---|
|
|
C XMLスキーマ・バリデータ |
|
|
C XMLパーサー |
|
|
C++ Class Generator |
|
|
C XSLTプロセッサ |
|
|
C XVMプロセッサ |
オプションを付けないでこれらのユーティリティを実行すると、使用方法のヘルプが表示されます。詳細な使用方法の情報を表示するには、-hh
フラグを付けてユーティリティを実行します。
表16-4 に、Cコンポーネントのコンパイルに必要なヘッダー・ファイルを示します。これらのファイルは、$ORACLE_HOME/xdk/include
にあります。コードをコンパイルする前に、実行時環境を設定する必要があります。
表16-4 C XDKのコンパイル時環境のヘッダー・ファイル
ヘッダー・ファイル | 説明 |
---|---|
|
Oracle Cプライベート・データ型をインクルードします。 |
|
|
|
C++ Class Generator用のC APIをインクルードします(下位互換性のみを目的としています)。 |
|
Oracle9i XSDバリデータのデータ型とAPIをインクルードします(下位互換性のみを目的としています)。 |
|
OCI経由で使用するか単独で使用するかにかかわらず、統合されたDOM APIを透過的に処理します。非推奨となった |
|
XMLエラーとエラーの番号をインクルードします。 |
|
単独でコンパイルするか、OCLを使用するかに応じて、その他のヘッダーをインクルードします。 |
|
|
|
Oracle XSDバリデータのパブリックAPIをインクルードします。 |
|
現在はマニュアルでの説明もサポートもされていない、XPointerのデータ型とAPIをインクルードします。 |
|
XSLTプロセッサのデータ型とパブリックAPIをインクルードします。 |
|
XSLTコンパイラとVMのデータ型とパブリックAPIをインクルードします。 |
コンパイル時環境をテストする最も簡単な方法は、Oracle Database CDではなくExamplesメディアにあるサンプル・プログラムに対して、make
ユーティリティを実行することです。デモをインストールした後、サンプル・プログラムは$ORACLE_HOME/xdk/demo/c
ディレクトリにあります。同じディレクトリにあるREADME
に、コンパイルの手順と使用上の注意が示されています。
サンプル・プログラムをビルドし、実行します。そのためには、システム・プロンプトで次のコマンドを実行します。
cd $ORACLE_HOME/xdk/demo/c make
この項の内容は次のとおりです。
この項で説明するCライブラリは、%ORACLE_HOME%/lib
にあります。次のライブラリにXDK Cコンポーネントが含まれます。
libxml11.dll
このライブラリに含まれるXDKコンポーネントは次のとおりです。
XMLパーサー
XSLTプロセッサ
XSLTコンパイラ
XSLT VM
XML Schema Processor
表16-5に、XDK Cコンポーネント(Windows)が依存するOracleのCOREライブラリおよびGlobalization Supportライブラリを示します。
表16-5 XDK Cコンポーネントの依存ライブラリ(Windows)
コンポーネント | ライブラリ | 説明 |
---|---|---|
COREライブラリ |
|
複数プラットフォームにわたる移植性を実現するランタイム関数を含みます。 |
Globalization Support共通ライブラリ |
|
UTF-8、UTF-16およびISO-8859-1のキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルを見つける際に環境に依存します。 |
Unicode用のGlobalization Supportライブラリ |
|
『Oracle Databaseグローバリゼーション・サポート・ガイド』で説明しているキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルを見つける際に環境に依存します。 |
表16-6 に、XDK Cコンポーネントを使用するときに必要なWindows環境変数を示します。
表16-6 C XDKコンポーネントのWindowsでの環境設定
変数 | 説明 | 設定 |
---|---|---|
|
グローバリゼーション・サポート・キャラクタ・エンコーディング定義ファイルの場所を設定します。エンコーディング・ファイルは、Oracle Databaseで使用可能なキャラクタ・セットのサブセットを表します。 |
この変数には、グローバリゼーション・サポート・データ・ファイルの場所を設定します。この変数は次のように設定します。 set ORA_NLS10=%ORACLE_HOME%\nls\data |
|
XMLエラー・メッセージ・ファイルの場所を設定します。 |
set ORA_XML_MESG=%ORACLE_HOME%\xdk\mesg |
|
C XDK DLLおよび実行可能ファイルの場所を設定します。 |
path %path%;%ORACLE_HOME%\bin |
表16-7に示すいずれかのユーティリティを実行して、Windows実行時環境をテストできます。
表16-7 C/C++ XDKユーティリティ(Windows)
実行可能ファイル | ディレクトリ | 説明 |
---|---|---|
|
|
C XMLスキーマ・バリデータ |
|
|
C XMLパーサー |
|
|
C++ Class Generator |
|
|
C XSLTプロセッサ |
|
|
C XVMプロセッサ |
オプションを付けないでこれらのユーティリティを実行すると、使用方法のヘルプが表示されます。詳細な使用方法の情報を表示するには、-hh
フラグを付けてユーティリティを実行します。
「UNIXでのC XDKコンパイル時環境の設定とテスト」の表16-4に、WindowsでのCコンポーネントのコンパイルに必要なヘッダー・ファイルを示しています。UNIXのインストールとWindowsのインストールの両方で、相対ファイル名は同じです。
Windowsでは、ヘッダー・ファイルは%ORACLE_HOME%\xdk\include
にあります。コードをコンパイルする前に、実行時環境を設定する必要があります。
デモ・プログラムをコンパイルすることによって、コンパイル時環境をテストできます。Oracle Database Examplesメディアからインストールしたデモ・プログラムは、%ORACLE_HOME%\xdk\demo\c
にあります。同じディレクトリにあるREADMEに、コンパイルの手順と使用上の注意が示されています。デモ・プログラムをコンパイルする前に「WindowsでのMake.batファイルの編集」の説明に従ってMake.batファイルの編集の編集をします。
%ORACLE_HOME%\xdk\demo\c
フォルダの各サブフォルダに、Make.bat
ファイルがあります。ライブラリおよびヘッダー・ファイルのパスをCOMPILEコマンドに追加して、各フォルダのMake.bat
ファイルを更新する必要があります。/libpath:%ORACLE_HOME%\lib
ですでにCライブラリが指定されているので、:LINK
セクションのパスは編集する必要がありません。例16-2のMake.bat
ファイルのセクションでは、追加する必要があるパスを太字のテキストで示しています。
例16-2 C XDKのMake.batファイルの編集(Windows)
:COMPILE
set filename=%1
cl -c -Fo%filename%.obj %opt_flg% /DCRTAPI1=_cdecl /DCRTAPI2=_cdecl /nologo /Zl
/Gy /DWIN32 /D_WIN32 /DWIN_NT /DWIN32COMMON /D_DLL /D_MT /D_X86_=1
/Doratext=OraText -I. -I..\..\..\include -I%ORACLE_HOME%\xdk\include %filename%.c
goto :EOF
:LINK
set filename=%1
link %link_dbg% /out:..\..\..\..\bin\%filename%.exe
/libpath:%ORACLE_HOME%\lib /libpath:..\..\..\..\lib
%filename%.obj oraxml10.lib user32.lib kernel32.lib msvcrt.lib ADVAPI32.lib
oldnames.lib winmm.lib
デモ用make.bat
ファイルでは、cl.exe
コンパイラの使用を想定しています。このコンパイラは、Microsoft .NET Framework Software Development Kit(SDK)に含まれ、無償で入手できます。
Windows XPでcl.exe
コンパイラのパスを設定するには、次の手順を実行します。
「スタート」メニュー→「設定」→「コントロール パネル」を選択します。
「システム」をダブルクリックします。
「システムのプロパティ」ダイアログ・ボックスで、「詳細」タブを選択し、「環境変数」をクリックします。
「システム環境変数」で変数のパスを選択し、「編集」をクリックします。
cl.exe
のパスを%PATH%
変数に追加し、「OK」をクリックします。
サンプル・プログラムをビルドし、実行します。そのためには、システム・プロンプトで次のコマンドを実行します。
cd $ORACLE_HOME/xdk/demo/c make
Microsoft Visual C/C++でプロジェクトを設定し、XDKに付属しているデモに使用できます。
プロジェクトのパスを設定するには、次の手順を実行します。
Visual C++で作業領域をオープンし、プロジェクト用の*.c
ファイルをインクルードします。
「Tools」メニューにナビゲートし、「Options」を選択します。
図16-1に示すとおり、「Directories」タブを選択し、インクルード・パスを%ORACLE_HOME%\xdk\include
に設定します。
プロジェクトのライブラリ・パスを設定するには、次の手順を実行します。
Visual C++で作業領域をオープンし、プロジェクト用の*.c
ファイルをインクルードします。
「Tools」メニューにナビゲートし、「Options」を選択します。
図16-2に示すとおり、「Directories」タブを選択し、ライブラリ・パスを%ORACLE_HOME%\lib
に設定します。
%ORACLE_HOME%\lib
内の静的ライブラリのパスを設定した後、Visual C++のコンパイル環境でライブラリ名を設定します。メニュー・バーで「Project」メニュー→「Settings」を選択します。
図16-3に示すとおり、「Link」タブを選択し、「Object/Library Modules」フィールドにXDK Cコンポーネントのライブラリの名前を入力します。
統合C APIは、XDKおよびOracle XML DBの両方で必要とされる機能を統合したプログラム・インタフェースです。このAPIは、主にXSLTおよびXMLスキーマで使用されます。
表16-4に示すように、統合C APIはxml.h
ヘッダー・ファイルで宣言します。表16-8に、C XDK APIの概要を示します。ドキュメントの詳細は、『Oracle XML APIリファレンス』を参照してください。
表16-8に、XDK C APIの概要を示します。
パッケージ | 用途 |
---|---|
コールバックAPI |
XMLコールバックの関数(または関数ポインタ)を宣言するマクロを定義します。 |
DOM API |
DOMを使用してXML文書を解析および操作します。このAPIはDOM 2.0仕様にできるだけ準拠していますが、オブジェクト指向のDOM仕様からフラットなCの名前空間へマッピングする際に、一部の名前を変更します。たとえば、オーバーロードされた |
範囲API |
|
SAX API |
SAXを使用したイベントベースのXML解析を有効にします。 |
スキーマAPI |
複数のXMLスキーマ文書から、特定のインスタンス・ドキュメントを検証するために使用できる単一のスキーマを作成します。 |
横断API |
DOMツリーの文書の検索とナビゲーションを有効にします。 |
XML API |
XMLデータの読取り方法およびアプリケーションに提供する必要がある情報について、XMLプロセッサを定義します。 |
XPath API |
XPathに関連するタイプおよびインタフェースを処理します。 |
XPointer API |
XML文書内のノードの場所を特定します。 |
XSLT API |
XSL処理を実行します。 |
XSLTVM API |
コンパイル済のXSLTコードを実行できる仮想マシンを実装します。 |
このAPIは、準拠するコンテキストによって関数の統合を実現します。最上位のXMLコンテキスト(xmlctx
)は、連動するXMLコンポーネント間で共通の情報を共有します。このテキストは次のような情報を定義します。
データ・エンコーディング
エラー・メッセージ言語
下位の割当てコールバック
アプリケーションでは、DOMまたはSAXインタフェースを使用して文書を解析し、プログラム・アクセスを提供する前に、この情報が必要です。
XDKおよびOracle XML DBのどちらにおいても、最上位コンテキストおよびサービス・コンテキストに対し、異なる起動およびメモリー解放関数が必要です。初期化関数は実装固有の引数を取り、準拠するコンテキストを戻します。
準拠するコンテキストを使用すると、統合が可能です。準拠するコンテキストとは、戻されたコンテキストがxmlctx
で始まる必要があることを意味します。この標準ヘッダーの後に、実装固有の追加部分が続く場合があります。
アプリケーションでは、xmlctx
を取得した後は、統合されたDOMコールを使用し、すべてのコールにおいてxmlctx
を最初の引数として使用します。
C XDKパーサーでは、300を超えるIANAキャラクタ・セットがサポートされています。サポートされているキャラクタ・セットには、「XDK for Cがサポートするキャラクタ・セット」に示したものが含まれます。キャラクタ・セットを使用する場合の注意事項を次に示します。
他のXMLパーサーとの相互運用性のために、IANAキャラクタ・セット名を使用することをお薦めします。
XMLパーサーでサポートが必須とされているのはUTF-8とUTF-16のみであるため、これらのキャラクタ・セットを使用することをお薦めします。
デフォルトの入力エンコーディング(インコーディング)はUTF-8です。入力文書のエンコーディングが(HTTPキャラクタ・セット、バイト・オーダー・マーク、XMLDeclなどによって)自明ではない場合は、デフォルトの入力エンコーディングが想定されます。シングルバイト・キャラクタ・セット(US-ASCII、ISO 8859キャラクタ・セットのいずれか)のみを使用している場合、明示的にデフォルトのエンコーディングを設定することをお薦めします。シングルバイト・キャラクタ・セットのパフォーマンスは最速です。フラグXML_FLAG_FORCE_INCODING
は、入力文書には常にデフォルトの入力エンコーディングを適用する必要があることを指定します。この場合、BOMまたはXMLDeclは無視されます。ただし、プロトコル宣言(HTTPキャラクタ・セットなど)は常にサポートされます。
DOMおよびSAXのデータ・エンコーディング(アウトコーディング)は、慎重に選択してください。シングルバイト・エンコーディングは最速ですが、表示できるキャラクタのセットは非常に限られています。次に高速なのはUnicode(UTF-16)で、最も遅いのは、UTF-8などのマルチバイト・エンコーディングです。入力データのアウトコーディングへの変換によりデータが失われると、エラーが発生します。最大限の効用を得るには、Unicodeベースのアウトコーディングを使用してください。Unicodeはすべての文字を表現できます。アウトコーディングを指定しないと、デフォルトは、解析された最初の文書のインコーディングに設定されます。