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]
。