SAXはイベントベースのXML解析用の標準インタフェースで、XML-DEVメーリング・リストのメンバーが共同開発したものです。SAXを使用するには、関数ポインタを使用してxmlsaxcb
構造を初期化し、XmlLoadSax
コールのいずれかに渡します。ユーザー定義のコンテキスト構造に対するポインタも提供されており、各SAX関数に渡されます。
イベントベースのスキーマ検証のAPIについては、第4章「C用のイベントAPIパッケージ」を参照してください。
この章の内容は次のとおりです。
関連項目:
|
表7-1に、SAX
インタフェースで使用できるメソッドの概要を示します。
表7-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
が存在する場合、これが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]
。