SAXはイベントベースのXML解析用の標準インタフェースで、XML-DEVメーリング・リストのメンバーが共同開発したものです。SAXを使用するには、関数ポインタを使用してxmlsaxcb構造を初期化し、XmlLoadSaxコールのいずれかに渡します。ユーザー定義のコンテキスト構造に対するポインタを含めることもできます。そのコンテキスト・ポインタは、各SAX関数に渡されます。
イベントベースのスキーマ検証のAPIについては、第4章「C用のイベントAPIパッケージ」を参照してください。
この章の内容は次のとおりです。
|
関連項目:
|
表6-1に、SAXインタフェースで使用できるメソッドの概要を示します。
表6-1 SAXメソッドの概要
| 関数 | 概要 |
|---|---|
|
|
属性の宣言のSAX通知を受け取ります。 |
|
|
|
|
|
文字データのSAX通知を受け取ります。 |
|
|
コメントのSAX通知を受け取ります。 |
|
|
要素の宣言のSAX通知を受け取ります。Oracle拡張機能。 |
|
|
ドキュメントの終わりのSAX通知を受け取ります。 |
|
|
要素の終わりのSAX通知を受け取ります。 |
|
|
表記法の宣言のSAX通知を受け取ります。 |
|
|
処理命令のSAX通知を受け取ります。 |
|
|
解析対象エンティティの宣言のSAX通知を受け取ります。Oracle拡張機能。 |
|
|
ドキュメントの始まりのSAX通知を受け取ります。 |
|
|
要素の始まりのSAX通知を受け取ります。 |
|
|
名前空間を認識する要素の始まりのSAX通知を受け取ります。 |
|
|
解析対象外のエンティティ宣言のSAX通知を受け取ります。 |
|
|
無視できる(空白)データのSAX通知を受け取ります。 |
|
|
XML宣言のSAX通知を受け取ります。Oracle拡張機能。 |
このイベントはDTDの要素宣言をマークします。要素の名前と内容はデータ・エンコーディングに含まれます。属性は所属する要素の前に宣言できることに注意してください。
構文
xmlerr XmlSaxAttributeDecl( void *ctx, oratext *elem, oratext *attr, oratext *body);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
elem |
IN |
属性が宣言される要素(データ・エンコーディング) |
attr |
IN |
属性名(データ・エンコーディング) |
body |
IN |
属性宣言の本体 |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントではCDATAはTextと異なるものとして処理されます。XmlSaxCDATAコールバックが指定されない場合、Textコールバックが呼び出されます。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。無視できる(空白形式の)文字データの通知を受け取る、XmlSaxWhitespaceも参照してください。
構文
xmlerr XmlSaxCDATA( void *ctx, oratext *ch, size_t len);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
ch |
IN |
CDATAのポインタ(データ・エンコーディング) |
len |
IN |
CDATAの長さ、文字数 |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはTextかCDATAのいずれかの文字データをマークします。XmlSaxCDATAコールバックが指定されている場合、CDATAはそのコールバックに送られます。XmlSaxCDATAコールバックが指定されていない場合、TextとCDATAはいずれもXmlSaxCharactersコールバックに送られます。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。無視できる(空白形式の)文字データの通知を受け取る、XmlSaxWhitespaceも参照してください。
構文
xmlerr XmlSaxCharacters( void *ctx, oratext *ch, size_t len);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
ch |
IN |
データのポインタ(データ・エンコーディング) |
len |
IN |
データの長さ、文字数 |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはXML文書のコメントをマークします。コメントのデータはデータ・エンコーディングに追加されます。SAX標準ではなく、Oracle拡張機能です。
構文
xmlerr XmlSaxComment( void *ctx, oratext *data);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
data |
IN |
コメントのデータ(データ・エンコーディング) |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはDTDの要素宣言をマークします。要素の名前と内容はデータ・エンコーディングに含まれます。
構文
xmlerr XmlSaxElementDecl( void *ctx, oratext *name, oratext *content);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
要素名 |
content |
IN |
要素のコンテキスト・モデル |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
最後のSAXイベント。ドキュメントごとに1回コールされ、ドキュメントの終わりを示します。対応するイベントはXmlSaxStartDocumentです。
構文
xmlerr XmlSaxEndDocument( void *ctx);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントは要素の終わりをマークします。XmlSaxStartElementイベントまたはXmlSaxStartElementNSイベントに対応します。名前は要素のtagName(名前空間を認識する要素の場合は修飾名の場合があります)で、データ・エンコーディングに含まれます。
構文
xmlerr XmlSaxEndElement( void *ctx, oratext *name);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
要素の終わりの名前(データ・エンコーディング) |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはDTDの表記法の宣言をマークします。表記法名、公開識別子、およびシステム識別子はすべてデータ・エンコーディングに含まれます。識別子はいずれもオプションで、NULLでもかまいません。
構文
xmlerr XmlSaxNotationDecl( void *ctx, oratext *name, oratext *pubId, oratext *sysId);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
表記法名(データ・エンコーディング) |
pubId |
IN |
データ・エンコーディング時の表記の公開識別子、またはNULL |
sysId |
IN |
データ・エンコーディング時の表記法のシステム識別子、またはNULL |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはProcessingInstructionをマークします。ProcessingInstructionのターゲットとデータはデータ・エンコーディングに含まれます。ターゲットは必須ですが、データはNULLでもかまいません。
構文
xmlerr XmlSaxPI( void *ctx, oratext *target, oratext *data);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
target |
IN |
PIのターゲット(データ・エンコーディング) |
data |
IN |
データ・エンコーディング時のPIのデータ、またはNULL |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
DTDの解析対象エンティティの宣言をマークします。解析対象エンティティの名前、公開識別子、システム識別子および表記法名がすべてデータ・エンコーディングに追加されます。
構文
xmlerr XmlSaxParsedEntityDecl( void *ctx, oratext *name, oratext *value, oratext *pubId, oratext *sysId, boolean general);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
エンティティ名(データ・エンコーディング) |
value |
IN |
エンティティの値(データ・エンコーディング) |
pubId |
IN |
データ・エンコーディングに含まれたエンティティの公開識別子、またはNULL |
sysId |
IN |
エンティティのシステム識別子(データ・エンコーディング) |
general |
IN |
汎用エンティティの場合はTRUE、パラメータ・エンティティの場合はFALSE |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
最初のSAXイベント。ドキュメントごとに1回コールされ、ドキュメントの始まりを示します。対応するイベントはXmlSaxEndDocumentです。
構文
xmlerr XmlSaxStartDocument( void *ctx);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントは要素の先頭を示します。元の名前空間を認識しないバージョンのSAX 1であることに注意してください。XmlSaxStartElementNSが名前空間を認識するバージョンのSAX 2です。両方が登録されている場合、NSバージョンのみがコールされます。要素名はすべての属性パートと同様に、データ・エンコーディングに含まれます。属性のマッピングの操作については、NamedNodeMapインタフェースの関数を参照してください。対応する関数はXmlSaxEndElementです(この関数の名前空間を認識するバージョンはありません)。
構文
xmlerr XmlSaxStartElement( void *ctx, oratext *name, xmlnodelist *attrs);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
要素名(データ・エンコーディング) |
attrs |
IN |
要素の属性のNamedNodeMap |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントは要素の先頭を示します。名前空間を認識するバージョンの新しいSAX 2であることに注意してください。XmlSaxStartElementは名前空間を認識しないバージョンのSAX 1です。両方が登録されている場合、NSバージョンのみがコールされます。要素の修飾名、ローカル名、名前空間URIはすべての属性パートと同様に、データ・エンコーディングに含まれます。属性のマッピングの操作については、NamedNodeMapインタフェースの関数を参照してください。対応する関数はXmlSaxEndElementです(この関数の名前空間を認識するバージョンはありません)。
構文
xmlerr XmlSaxStartElementNS( void *ctx, oratext *qname, oratext *local, oratext *nsp, xmlnodelist *attrs);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
qname |
IN |
要素の修飾名(データ・エンコーディング) |
local |
IN |
要素の名前空間のローカル名(データ・エンコーディング) |
nsp |
IN |
要素の名前空間URI(データ・エンコーディング) |
attrs |
IN |
要素の属性のNodeList、またはNULL |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
DTDの解析対象外のエンティティ宣言をマークします。解析対象エンティティについては、XmlSaxParsedEntityDeclを参照してください。解析対象外のエンティティ名、公開識別子、システム識別子および表記法名はすべてデータ・エンコーディングに含まれます。
構文
xmlerr XmlSaxUnparsedEntityDecl( void *ctx, oratext *name, oratext *pubId, oratext *sysId, oratext *note);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
エンティティ名(データ・エンコーディング) |
pubId |
IN |
データ・エンコーディングに含まれたエンティティの公開識別子、またはNULL |
sysId |
IN |
エンティティのシステム識別子(データ・エンコーディング) |
note |
IN |
エンティティの表記法名(データ・エンコーディング) |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントは改行、行間のインデントなどの無視できる空白データをマークします。対応する関数は、通常の文字データの通知を受け取るXmlSaxCharactersです。データはデータ・エンコーディングに含まれ、戻される長さはバイトではなく文字数です。
構文
xmlerr XmlSaxWhitespace( void *ctx, oratext *ch, size_t len);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
ch |
IN |
データのポインタ(データ・エンコーディング) |
len |
IN |
データの長さ、文字数 |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。
このイベントはXML宣言をマークします。XmlSaxStartDocumentは常に最初のイベントです。このコールバックが登録されXMLDeclが存在する場合、XmlSaxXmlDeclが2番目のイベントになります。エンコーディング・フラグにより、エンコーディングが指定されているかどうかが示されます。ドキュメントのデフォルトのエンコーディング指定はオーバーライドされる(あるいは間違っている)場合があり、またなんらかの方式で入力がデータ・エンコーディングに変換されるため、ドキュメントで指定される実際のエンコーディングは指定されません。スタンドアロン・フラグの場合、フラグが指定されていない場合は-1が戻されます。それ以外の場合、FALSEは0、TRUEは1が戻されます。
構文
xmlerr XmlSaxXmlDecl( void *ctx, oratext *version, boolean encoding, sword standalone);
| パラメータ | IN/OUT | 説明 |
|---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
version |
IN |
XMLDeclのバージョン文字列(データ・エンコーディング) |
encoding |
IN |
エンコーディングが指定されているかどうか |
standalone |
IN |
スタンドアロン・ドキュメントの値。指定されない場合は< 0 |
戻り値
(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]。