この章では、Oracle XML Developer's Kit (XDK) for Cを使用するための準備について説明します。
内容は次のとおりです。
XDK for Cコンポーネントは、Extensible Markup Language (XML)の読取り、操作、変換および検証を行うための基本コンポーネントです。
XDK for Cコンポーネントは、Oracle Databaseに付属しています。この章では、Oracle DatabaseとともにXDKをインストールし、Oracle Database Examplesメディアのデモ・プログラムもインストールしたと想定します。インストールの手順およびXDKディレクトリ構造の説明は、「XDKのインストールについて」を参照してください。
次の一連の例は、XDKデモとXDKコンポーネントで使用されるライブラリのUNIXディレクトリ構造を示しています。サブディレクトリには、XDK for Cコンポーネントのサンプル・プログラムとデータ・ファイルが入っています。
例18-1に、CのOracleホーム・ディレクトリの下のメイン・ディレクトリを示します。
このメイン・ディレクトリの下に、各サブディレクトリの内容が個別に表示されます。
bin
ディレクトリには、次のコンポーネントが含まれます。
schema xml xmlcg xsl xvm
lib
ディレクトリには、次のコンポーネントが含まれます。
libcore11.a libcoresh11.so libnls11.a libunls11.a libxml11.a libxmlsh10.a
xdk
ディレクトリには、次のdemo
サブディレクトリが含まれます。
| demo/ | - c/ | - dom/ | - parser/ | - sax/ | - schema/ | - webdav/ | - xslt/ | - xsltvm/
/xdk/demo/c
サブディレクトリには、XDK for Cコンポーネントのサンプル・プログラムとデータ・ファイルが含まれます。「Oracle XML Developer's Kit for C」では、これらのプログラムを使用して最も重要なC言語の機能を理解する方法について説明します。
xdk
ディレクトリには、次のinclude
サブディレクトリも含まれます。
| 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
「UNIXでのXDK Cコンパイル時環境の設定とテスト」の表18-4に、Cのヘッダー・ファイルを示しています。
関連項目:
XDK for Cコンポーネントのリストは、「XDKの概要」を参照してください
例18-1 Oracle XML Developer's Kit for Cのライブラリ、ヘッダー・ファイル、ユーティリティおよびデモ
- $ORACLE_HOME | - bin/ | - lib/ | - xdk/
内容は次のとおりです。
この項で説明するCライブラリは、$ORACLE_HOME/lib
にあります。XDK for CおよびXDK for C++コンポーネントは、次のライブラリに含まれます。
libxml11.a
このライブラリに含まれるXKDコンポーネントは次のとおりです。
XMLパーサー: XML文書が整形式であるか、Document Type Definition (DTD)またはXML Schemaに対して妥当であるかどうか(オプション)を確認します。プログラム・アクセス用のDocument Object Model (DOM)およびSimple API for XML (SAX)インタフェースをサポートします。
Extensible Stylesheet Language Transformation (XSLT)プロセッサ: XML文書を別のXML文書に変換します。
XSLTコンパイラ: XSLTスタイルシートをコンパイルしてバイト・コードを生成します。生成したコードはXSLT Virtual Machine (XSLT VM)によって使用されます。
XSLTVM: XSLT変換エンジンです。
XMLスキーマ・プロセッサ: XMLファイルをXMLスキーマに対して検証します。
表18-1に、XDK for Cコンポーネント(UNIX)が依存するCommon Oracle Runtime Environment (CORE)ライブラリおよびGlobalization Supportライブラリを示します。
表18-1 Oracle XML Developer's Kit for Cコンポーネントの依存ライブラリ(UNIX)
コンポーネント | ライブラリ | 説明 |
---|---|---|
COREライブラリ |
|
複数プラットフォームにわたる移植性を実現するCランタイム関数を含みます。 |
CORE動的リンク・ライブラリ |
|
UNIXプラットフォームでの動的リンクをサポートするCランタイム・ライブラリ。 |
Globalization Support共通ライブラリ |
|
8ビット・エンコーディングのUnicode (UTF-8)、16ビット・エンコーディングのUnicode (UTF-16)およびISO-8859-1キャラクタ・セットがサポートされます。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルの場所を特定する際に環境に依存します。 |
Unicode用のGlobalization Supportライブラリ |
|
『Oracle Databaseグローバリゼーション・サポート・ガイド』で説明しているキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルの場所を特定する際に環境に依存します。 |
表18-2 に、XDK for Cコンポーネントを使用するときに必要なUNIX環境変数を示します。
表18-2 Oracle XML Developer's Kit for CコンポーネントのUNIXでの環境設定
変数 | 説明 | 設定 |
---|---|---|
|
グローバリゼーション・サポート・キャラクタ・エンコーディング定義ファイルの場所を設定します。エンコーディング・ファイルは、Oracle Databaseで使用可能なキャラクタ・セットのサブセットを表します。 |
グローバリゼーション・サポート・データ・ファイルの場所を設定します。次のように変数を設定します。 setenv ORA_NLS10 $ORACLE_HOME/nls/data |
|
XMLエラー・メッセージ・ファイルの場所を設定します。 |
setenv ORA_XML_MESG $ORACLE_HOME/xdk/mesg |
|
XDK for C実行可能ファイルの場所を設定します。 |
次のように setenv PATH ${PATH}:${ORACLE_HOME}/bin |
表18-3に示すいずれかのユーティリティを実行して、UNIX実行時環境でXDK for Cをテストできます。
表18-3 Oracle XML Developer's Kit for C/C++ユーティリティ(UNIX)
実行可能ファイル | ディレクトリ | 説明 |
---|---|---|
|
|
C XMLスキーマ・バリデータ |
|
|
C XMLパーサー |
|
|
C++ Class Generator |
|
|
C XVMプロセッサ |
オプションを付けないでこれらのユーティリティを実行すると、使用方法のヘルプが表示されます。詳細な使用方法の情報を表示するには、-hh
フラグを付けてユーティリティを実行します。
表18-4 に、XDK for Cコンポーネントのコンパイルに必要なヘッダー・ファイルを示します。これらのファイルは、$ORACLE_HOME/xdk/include
にあります。コードをコンパイルする前に、実行時環境を設定する必要があります。
表18-4 Oracle XML Developer's Kit for Cコンパイル時環境のヘッダー・ファイル
ヘッダー・ファイル | 説明 |
---|---|
|
Oracle Cプライベート・データ型をインクルードします。 |
|
Oracle9i XML Open Reporting Application (ORA)データ型および |
|
C++ Class Generator用のC APIをインクルードします(下位互換性のみを目的としています)。 |
|
Oracle9i XMLスキーマ定義(XSD)バリデータのデータ型およびアプリケーション・プログラミング・インタフェース(API)をインクルードします(下位互換性のみを目的としています)。 |
|
Oracle Call Interface (OCI)経由で使用するか単独で使用するかにかかわらず、統合されたDOM APIを透過的に処理します。非推奨となった |
|
XMLエラーとエラーの番号をインクルードします。 |
|
単独でコンパイルするか、OCIを使用するかに応じて、その他のヘッダーをインクルードします。 |
|
|
|
Oracle XSDバリデータのパブリックAPIをインクルードします。 |
|
現在はマニュアルでの説明もサポートもされていない、XPointerのデータ型とAPIをインクルードします。 |
|
XSLTプロセッサのデータ型とパブリックAPIをインクルードします。 |
|
XSLTコンパイラとVMのデータ型とパブリックAPIをインクルードします。 |
コンパイル時環境でXDK for Cをテストする最も簡単な方法は、Oracle Database CDではなくExamplesメディアにあるサンプル・プログラムに対して、make
ユーティリティを実行することです。デモをインストールすると、$ORACLE_HOME/xdk/demo/c
に配置されます。同じディレクトリにあるREADME
に、コンパイルの手順と使用上の注意が示されています。
サンプル・プログラムをビルドし、実行します。そのためには、システム・プロンプトで次のコマンドを実行します。
cd $ORACLE_HOME/xdk/demo/c make
内容は次のとおりです。
この項で説明するCライブラリは、%ORACLE_HOME%/lib
にあります。XDK for Cコンポーネントは、次のライブラリに含まれます。
libxml11.dll
このライブラリに含まれるXDKコンポーネントは次のとおりです。
XMLパーサー
XSLTプロセッサ
XSLTコンパイラ
XSLT VM
XML Schema Processor
表18-5に、XDK for Cコンポーネント(Windows)が依存するOracleのCOREライブラリおよびGlobalization Supportライブラリを示します。
表18-5 Oracle XML Developer's Kit for Cコンポーネントの依存ライブラリ(Windows)
コンポーネント | ライブラリ | 説明 |
---|---|---|
COREライブラリ |
|
複数プラットフォームにわたる移植性を実現するランタイム関数を含みます。 |
Globalization Support共通ライブラリ |
|
UTF-8、UTF-16およびISO-8859-1のキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルを見つける際に環境に依存します。 |
Unicode用のGlobalization Supportライブラリ |
|
『Oracle Databaseグローバリゼーション・サポート・ガイド』で説明しているキャラクタ・セットをサポートします。このライブラリは、エンコーディング・ファイルおよびメッセージ・ファイルを見つける際に環境に依存します。 |
表18-6 に、XDK for Cコンポーネントを使用するときに必要なWindows環境変数を示します。
表18-6 Oracle XML Developer's Kit for CコンポーネントのWindowsでの環境設定
変数 | 説明 | 設定 |
---|---|---|
|
グローバリゼーション・サポート・キャラクタ・エンコーディング定義ファイルの場所を設定します。エンコーディング・ファイルは、Oracle Databaseで使用可能なキャラクタ・セットのサブセットを表します。 |
この変数には、グローバリゼーション・サポート・データ・ファイルの場所を設定します。次のように変数を設定します。 set ORA_NLS10=%ORACLE_HOME%\nls\data |
|
XMLエラー・メッセージ・ファイルの場所を設定します。 |
set ORA_XML_MESG=%ORACLE_HOME%\xdk\mesg |
|
XDK for Cのデータ定義言語(DLL)および実行可能ファイルの場所を設定します。 |
次のように path %path%;%ORACLE_HOME%\bin |
表18-7に示すいずれかのユーティリティを実行して、Windows実行時環境でXDKをテストできます。
例18-7 Oracle XML Developer's Kit for C/C++ユーティリティ(Windows)
実行可能ファイル | ディレクトリ | 説明 |
---|---|---|
|
|
C XMLスキーマ・バリデータ |
|
|
C XMLパーサー |
|
|
C++ Class Generator |
|
|
C XVMプロセッサ |
オプションを付けないでこれらのユーティリティを実行すると、使用方法のヘルプが表示されます。詳細な使用方法の情報を表示するには、-hh
フラグを付けてユーティリティを実行します。
「UNIXでのXDK Cコンパイル時環境の設定とテスト」の表18-4に、WindowsでのCコンポーネントのコンパイルに必要なヘッダー・ファイルを示しています。UNIXのインストールとWindowsのインストールの両方で、相対ファイル名は同じです。
Windowsでは、ヘッダー・ファイルは%ORACLE_HOME%\xdk\include
にあります。コードをコンパイルする前に、実行時環境を設定する必要があります。
デモ・プログラムをコンパイルすることによって、コンパイル時環境でXDK for Cをテストできます。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
セクションのパスは編集する必要がありません。例18-2のMake.bat
ファイルのセクションでは、追加する必要があるパスを太字のテキストで示しています。
例18-2 Oracle XML Developer's Kit for Cの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
統合C APIは、XDK for CおよびOracle XML DBの両方で必要とされる機能を統合したプログラム・インタフェースです。このAPIは、主にXSLTおよびXMLスキーマで使用されます。
表18-4に示すように、統合C APIはxml.h
ヘッダー・ファイルで宣言します。表18-8に、XDK for C APIの概要を示します。ドキュメントの詳細は、『Oracle Database XML C APIリファレンス』を参照してください。
表18-8 Oracle XML Developer's Kit for 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 for CおよびOracle XML DBのどちらにおいても、最上位コンテキストおよびサービス・コンテキストに対し、異なる起動およびメモリー解放関数が必要です。初期化関数は実装固有の引数を取り、準拠するコンテキストを戻します。
準拠するコンテキストを使用すると、統合が可能です。準拠するコンテキストとは、戻されたコンテキストがxmlctx
で始まる必要があることを意味します。この標準ヘッダーの後に、実装固有の追加部分が続く場合があります。
アプリケーションでは、xmlctx
を取得した後は、統合されたDOMの起動を使用し、すべての起動においてxmlctx
を最初の引数として使用します。
XDK for C Parserでは、300を超えるIANAキャラクタ・セットがサポートされています。サポートされているキャラクタ・セットには、「XDK for Cがサポートするキャラクタ・セット」に示したものが含まれます。
キャラクタ・セットを使用する場合の考慮事項を次に示します。
他のXMLパーサーとの相互運用性を考慮し、Internet Assigned Numbers Authority (IANA)キャラクタ・セット名を使用することをお薦めします。
XMLパーサーでサポートが必須とされているのはUTF-8とUTF-16のみであるため、これらのキャラクタ・セットを使用することをお薦めします。
デフォルトの入力エンコーディング(インコーディング)はUTF-8です。入力文書のエンコーディングが(HTTPキャラクタ・セット、バイト・オーダー・マーク(BOM)、XMLDeclなどによって)自明ではない場合は、デフォルトの入力エンコーディングが想定されます。シングルバイト文字セット(US-ASCII、ISO 8859文字セットのいずれか)のみを使用している場合、シングルバイトのパフォーマンスが最もよいため、明示的にデフォルトのエンコーディングを設定することをお薦めします。フラグXML_FLAG_FORCE_INCODING
は、入力文書には常にデフォルトの入力エンコーディングを適用することを指定します。この場合、BOMまたはXMLDeclは無視されます。ただし、プロトコル宣言(HTTP文字セットなど)は常にサポートされます。
DOMおよびSAXのデータ・エンコーディング(アウトコーディング)は、慎重に選択してください。シングルバイト・エンコーディングは最速ですが、表示できる文字のセットは非常に限られています。次に高速なのはUnicode (UTF-16)で、最も遅いのは、UTF-8などのマルチバイト・エンコーディングです。入力データのアウトコーディングへの変換によりデータが失われると、エラーが発生します。最大限の効用を得るには、Unicodeベースのアウトコーディングを使用してください。アウトコーディングを指定しないと、デフォルトは、解析された最初のドキュメントのインコーディングに設定されます。