この章の内容は次のとおりです。
Oracle XDK C/C++コンポーネントは、W3C勧告に基づいて構築されています。リリース10.1でサポートされる標準は次のとおりです。
XML 1.0(Second Edition)
DOMレベル2.0仕様
DOMレベル2.0 Core
DOMレベル2.0 Traversal and Range
SAX 2.0およびSAX Extensions
XSLT/XPath仕様
XSL Transformation(XSLT)1.0
XML Path Language(XPath)1.0
XML Schema仕様
XML Schema Part 0: Primer
XML Schema Part 1: Structures
XML Schema Part 2: Datatypes
XDK Cコンポーネントは、XML文書の読取り、操作、変換および検証を行うための基本コンポーネントです。Oracle XDK Cコンポーネントの構成は次のとおりです。
XML Parser for C: XML文書が整形式であるかどうか、およびDTDに対して妥当であるかどうか(オプション)を確認します。このパーサーは、DOMインタフェースを介してアクセス可能なオブジェクト・ツリーを構築するか、SAXインタフェースを介して順次操作します。
XSLT Processor for C: パーサーに付属するスタイルシートに従って、XML文書をフォーマットする機能を提供します。
XVM: 高機能なXSLT変換エンジンです。
XML Schema Processor for C: XMLスキーマ定義ファイルに対するXMLファイルの解析および検証をサポートします。
Oracle DatabaseまたはOracle Application Serverをインストールすると、すでにXDK Cコンポーネントがインストールされています。次の手順を実行して、OTNからXDK Cコンポーネントの最新バージョンをダウンロードすることもできます。
右側のバーにある「ソフトウェア」のリンクをクリックします。
OTNのユーザー名とパスワードでログオンします(アカウントをお持ちでない場合、登録は無料で行えます)。
WindowsバージョンのダウンロードまたはUNIXバージョンのダウンロードを選択します。
ライセンス契約のすべての条件を受諾します。
該当する*.tar.gz
または*.zip
ファイルをクリックします。
配布パッケージのファイルを解凍します。
xdkディレクトリとサブディレクトリを置くディレクトリを選択します。
そのディレクトリに移動し、次を使用してXDKダウンロード・アーカイブ・ファイルを抽出します。
UNIX: tar xvfz xdk_xxx.tar.gz Windows: use WinZip visual archive extraction tool
UNIXバージョンのXDKをインストールすると、ディレクトリ構造は次のようになります。
-$XDK_HOME | - bin: executable files | - lib: library files | - nls/data: Globalization Support data files(*.nlb) | - xdk | - demo/c: demonstration code | - doc/c: documentation | - public: header files | - mesg: message files (*.msb)
次に、UNIXバージョンのXDK Cコンポーネントに付属するすべてのライブラリを示します。
表13-1 XDK Cコンポーネントのライブラリ
コンポーネント | ライブラリ | 説明 |
---|---|---|
XML Parser XSLT Processor XML Schema Processor |
libxml10.a |
DOM、SAXおよびXSLTのAPIを含むXML Parser for C XML Schema Processor for C |
XDK Cコンポーネント(UNIX)は、次の表に示すOracleのCOREライブラリおよびGlobalization Supportライブラリに依存します。
パーサーは、bin/xmlを起動することによって、次のオプションを持つ実行可能ファイルとしてコールできます。
表13-3 パーサーのコマンドライン・オプション
オプション | 意味 |
---|---|
|
準拠の確認のみ。検証は行いません。 |
|
デフォルトの入力ファイルのエンコーディング(インコーディング)を指定します。 |
|
DOM/SAXのエンコーディング(アウトコーディング)を指定します。 |
|
ファイル - URIではなくfilespecとして解析します。 |
|
ヘルプ - 使用方法のヘルプおよびフラグの全リストを表示します。 |
|
XSLTプロセスを繰り返す回数。 |
|
エラーを報告する言語。 |
|
DOMを全検索し、要素の数を報告します。 |
|
XSLTプロセッサの出力ファイルを指定します。 |
|
解析後、文書を出力します。 |
|
XSLTプロセスの |
|
スタイルシート - XSLスタイルシートを指定します。 |
|
バージョン - パーサーのバージョンを表示し、終了します。 |
|
CXSLTの最上位の変数をテストします。 |
|
空白 - すべての空白を保持します。 |
|
警告 - 警告の後で解析を停止します。 |
|
SAX - SAXインタフェースを実行し、文書を出力します。 |
環境変数ORA_NLS10
がグローバリゼーション・サポート・データ・ファイルの場所を指すように設定されているかどうかを確認します。Oracleデータベースをインストールすると、この変数を次のように設定できます。
setenv ORA_NLS10 ${ORACLE_HOME}/nls/data
Oracleデータベースをインストールしていない場合、次のように設定してXDKリリースに付属するグローバリゼーション・サポート・データ・ファイルを使用できます。
setenv ORA_NLS10 ${XDK_HOME}/nls/data
エラー・メッセージ・ファイルは、mesg
サブディレクトリにあります。.msb
で終わるファイルは、マシンで読取り可能な形式で、実行時に必要とされます。.msg
で終わるファイルは、ユーザーが読取り可能な形式で、各エラーの原因および処理に関する説明が含まれます。このメッセージ・ファイルは、$ORACLE_HOME/xdk/mesg
ディレクトリにもあります。
ORACLE_HOMEが存在しない場合、環境変数ORA_XML_MESG
がmesgディレクトリへの絶対パスを指すように設定されているかどうかを確認します。Oracleデータベースをインストールすると、ORA_XML_MESG
を設定できます。ただし、これは必須ではありません。
setenv ORA_XML_MESG ${ORACLE_HOME}/xdk/mesg
Oracleデータベースをインストールしていない場合、mesg
サブディレクトリへの絶対パスを指すように環境変数ORA_XML_MESG
を設定する必要があります。
setenv ORA_XML_MESG ${XDK_HOME}/xdk/mesg
パーサーは、提供されるAPIを使用するようにコードを記述することで起動することもできます。このコードは、include
サブディレクトリにあるヘッダーを使用してコンパイルし、lib
サブディレクトリにあるライブラリにリンクする必要があります。プログラムを構築する方法の詳細は、demo
サブディレクトリにあるMakefile
を参照してください。
UNIXで使用するXDKバージョンの取得の手順:
strings libxml10.a | grep -i Version
次に、XDK Cコンポーネントに付属するWindowsライブラリを示します。
表13-4 XDK Cコンポーネントのライブラリ(Windows)
コンポーネント | ライブラリ | 説明 |
---|---|---|
XML Parser XSL Processor XML Schema Processor |
oraxml10.lib oraxml10.dll |
DOM、SAXおよびXSLTのAPIを含むXML Parser for C XML Schema Processor for C |
XDK Cコンポーネント(Windows)は、次の表に示すOracleのCOREライブラリおよびGlobalization Supportライブラリに依存します。
表13-5 XDK Cコンポーネントの依存ライブラリ(Windows)
コンポーネント | ライブラリ | 説明 |
---|---|---|
COREライブラリ |
oracore10.dll |
Oracle COREライブラリ |
Globalization Supportライブラリ |
oranls10.dll |
Oracle Globalization Support共通ライブラリ
|
Globalization Supportライブラリ |
oraunls10.dll |
Unicodeサポート用のOracle Globalization Supportライブラリ |
パーサーとスキーマ・バリデータのオプションについては、表13-3「パーサーのコマンドライン・オプション」を参照してください。
環境変数ORA_NLS10
がグローバリゼーション・サポート・エンコーディング定義ファイルの場所を指すように設定されているかどうかを確認します。この変数は、次のように設定できます。
setenv ORA_NLS10 %ORACLE_HOME%\nls\data
Oracleデータベースをインストールしていない場合、XDKリリース(Oracleデータベース内のサブセット)に付属するグローバリゼーション・サポート・エンコーディング定義ファイルを使用できます。
set ORA_NLS10 =%XDK_HOME%\nls\data
エラー・メッセージ・ファイルは、mesg
サブディレクトリにあります。.msb
で終わるファイルは、マシンで読取り可能な形式で、実行時に必要とされます。.msg
で終わるファイルは、ユーザーが読取り可能な形式で、各エラーの原因および処理に関する説明が含まれます。このメッセージ・ファイルは、$ORACLE_HOME/xdk/mesg
ディレクトリにもあります。
Oracleデータベースをインストールすると、ORA_XML_MESG
を設定できます。ただし、これは必須ではありません。
set ORA_XML_MESG =%ORACLE_HOME%\xdk\mesg
Oracleデータベースをインストールしていない場合、mesg
サブディレクトリへの絶対パスを指すように環境変数ORA_XML_MESG
を設定する必要があります。
set ORA_XML_MESG =%XDK_HOME%\xdk\mesg
サンプル・コードをコンパイルするには、cl
コンパイラのパスを設定します。
「スタート」メニューから、「設定」→「コントロール パネル」を選択します。「コントロール パネル」のポップアップ・ウィンドウで、「システム」アイコンを選択してタブルクリックします。「システムのプロパティ」という名前のウィンドウがポップアップ表示されます。「環境」タブを選択して、図13-1「Windowsでのclコンパイラのパスの設定」に示すように、cl.exe
のパスをPATH変数に入力します。
次のMake.bat
ファイルの例に示すように、ライブラリとヘッダー・ファイルのパスをCOMPILEおよびLINKコマンドに追加してMake.bat
を更新する必要があります。
: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 - ID:\Progra~1\Micros~1\VC98\Include %filename%.c goto :EOF :LINK set filename=%1 link %link_dbg% /out:..\..\..\..\bin\%filename%.exe /libpath:%ORACLE_HOME%\lib /libpath:D:\Progra~1\Micros~1\VC98\lib /libpath:..\..\..\..\lib %filename%.obj oraxml10.lib oracore10.lib oranls10.lib oraunls10.lib user32.lib kernel32.lib msvcrt.lib ADVAPI32.lib oldnames.lib winmm.lib :EOF
この場合、次のようになります。
D:\Progra~1\Micros~1\VC98\Include
がヘッダー・ファイルのパス、D:\Progra~1\Micros~1\VC98\lib
がライブラリ・ファイルのパスです。
Microsoft Visual C++コンパイラを使用する場合、次のようにします。
環境変数ORA_NLS10
がグローバリゼーション・サポート・データ・ファイルの場所を指すように設定されているかどうかを確認します。
Visual C++を使用するには、Windowsのシステム設定を使用して環境変数を定義する必要があります。
「スタート」メニューから、「設定」→「コントロール パネル」を選択します。「コントロール パネル」のポップアップ・ウィンドウで、「システム」アイコンを選択してタブルクリックします。「システムのプロパティ」という名前のウィンドウがポップアップ表示されます。「環境」タブを選択して、図13-2に示すように、ORA_NLS10
と、その値d:\xdk\nls\data
を入力します。
環境変数ORA_XML_MESG
がmesg
ディレクトリへの絶対パスを指すように設定されているかどうかを確認します。
Visual C++で環境変数を使用するには、Windowsのシステム設定を使用して環境変数を定義する必要があります。
「スタート」メニューから、「設定」→「コントロール パネル」を選択します。「コントロール パネル」のポップアップ・ウィンドウで、「システム」アイコンを選択してタブルクリックします。「システムのプロパティ」という名前のウィンドウがポップアップ表示されます。「環境」タブを選択して、図13-3(この図は以前のリリースの画面を示しています)に示すように、ORA_XML_MESG
を入力します。
図13-4に、DLLのPATHの設定を示します。
Visual C++でワークスペースをオープンして、プロジェクト用の*.c
ファイルをインクルードした後、プロジェクトのパスを設定する必要があります。「Tools」メニューに移動し、「Options」を選択します。ウィンドウがポップアップ表示されます。図13-5に示すように、「Directories」タブを選択して、インクルード・パスを設定します。
図13-6に示すように、ライブラリ・パスを設定します。
%XDK_HOME%\lib
内の静的ライブラリのパスを設定した後、Visual C++のコンパイル環境でライブラリ名も設定する必要があります。
メニュー・バーで「Project」メニュー→「Settings」を選択します。ウィンドウがポップアップ表示されます。図13-7に示すように、「Object/Library Modules」フィールドで「Link」タブを選択し、XDK Cコンポーネントのライブラリの名前を入力します。
デモ・プログラムをコンパイルして、実行します(オプション)。これでC XDKコンポーネントを使用できます。
このパーサーでは、300を超えるIANAキャラクタ・セットがサポートされています。サポートされているキャラクタ・セットには、次のものがあります。
UTF-8、UTF-16、UTF16-BE、UTF16-LE、US-ASCII、ISO-10646-UCS-2、ISO-8859-{1-9、13-15}、EUC-JP、SHIFT_JIS、BIG5、GB2312、GB_2312-80、HZ-GB-2312、KOI8-R、KSC5601、EUC-KR、ISO-2022-CN、ISO-2022-JP、ISO-2022-KR、WINDOWS-{1250-1258}、EBCDIC-CP-{US、CA、NL、WT、DK、NO、FI、SE、IT、ES、GB、FR、HE、BE、CH、ROECE、YU、IS、AR1}、IBM{037、273、277、278、280、284、285、297、420、424、437、500、775、850、852、855、857、00858、860、861、863、865、866、869、870、871、1026、01140、01141、01142、01143、01144、01145、01146、01147、01148}
前述のキャラクタ・セットの別名も使用できます。また、『Oracle Databaseグローバリゼーション・サポート・ガイド』の付録A「キャラクタ・セット」に指定されたキャラクタ・セットは、IW7IS960を除いて使用できます。
ただし、他のXMLパーサーとの相互運用性のために、IANAキャラクタ・セット名を使用することをお薦めします。また、XMLパーサーでサポートが必須とされているのはUTF-8とUTF-16のみであるため、これらのキャラクタ・セットを使用することをお薦めします。
これらのエンコーディングを使用できるようにするには、ORACLE_HOME環境変数を設定して、Oracleインストールの場所を指すようにする必要があります。この設定により、サポートされるすべてのエンコーディングのデータを含むグローバリゼーション・サポート・データ・ファイルを使用できます。UNIXシステムの場合、これらのファイルは通常$ORACLE_HOME/nls/data
にあります。Windowsの場合、通常%ORACLE_HOME%\nls\data
にあります。OTNからダウンロードしたCおよびC++ XDKリリースには、nls/data
サブディレクトリが含まれます。Oracleをインストールしていない場合、環境変数ORA_NLS10をnls/data
サブディレクトリへの絶対パスに設定する必要があります。
デフォルトの入力エンコーディング(インコーディング)はUTF-8です。入力文書のエンコーディングが(HTTPキャラクタ・セット、バイト・オーダー・マーク、XMLDeclなどによって)自明ではない場合は、デフォルトの入力エンコーディングが想定されます。シングルバイト・キャラクタ・セット(US-ASCII、ISO 8859キャラクタ・セットのいずれか)のみを使用している場合、明示的にデフォルトのエンコーディングを設定することをお薦めします。シングルバイトが圧倒的に速いです。フラグXML_FLAG_FORCE_INCODING
は、入力文書には常にデフォルトの入力エンコーディングを適用する必要があることを指定します。この場合、BOMまたはXMLDeclは無視されます。ただし、プロトコル宣言(HTTPキャラクタ・セットなど)は常にサポートされます。
DOMおよびSAXのデータ・エンコーディング(アウトコーディング)は、慎重に選択する必要があります。シングルバイト・エンコーディングは最速ですが、表示できるキャラクタ・セットは非常に限られています。次に高速なのはUnicode(UTF-16)で、最も遅いのは、UTF-8などのマルチバイト・エンコーディングです。入力データのアウトコーディングへの変換によりデータが失われると、エラーが発生します。そのため、最大限の効用を得るには、Unicodeベースのアウトコーディングを使用してください。Unicodeはすべての文字を表現できます。アウトコーディングを指定しないと、デフォルトでは、解析された最初の文書のインコーディングに設定されます。