7 XML C用のSAX APIパッケージ
SAXはイベントベースのXML解析用の標準インタフェースで、XML-DEVメーリング・リストのメンバーが共同開発したものです。SAXを使用するには、関数ポインタを使用してxmlsaxcb
構造を初期化し、XmlLoadSax
コールのいずれかに渡します。ユーザー定義のコンテキスト構造に対するポインタも提供されており、各SAX関数に渡されます。
イベントベースのスキーマ検証のAPIについては、「C用のイベントAPIパッケージ」を参照してください。
次の表にXML C APIのSAX
インタフェースで使用できるメソッドの概要を示します。
表7-1 XML C実装のSAXメソッドの概要
関数 | 概要 |
---|---|
属性の宣言のSAX通知を受け取ります。 |
|
|
|
文字データのSAX通知を受け取ります。 |
|
コメントのSAX通知を受け取ります。 |
|
要素の宣言のSAX通知を受け取ります。Oracle拡張機能。 |
|
ドキュメントの終わりのSAX通知を受け取ります。 |
|
要素の終わりのSAX通知を受け取ります。 |
|
表記法の宣言のSAX通知を受け取ります。 |
|
処理命令のSAX通知を受け取ります。 |
|
解析対象エンティティの宣言のSAX通知を受け取ります。Oracle拡張機能。 |
|
ドキュメントの始まりのSAX通知を受け取ります。 |
|
要素の始まりのSAX通知を受け取ります。 |
|
名前空間を認識する要素の始まりのSAX通知を受け取ります。 |
|
解析対象外のエンティティ宣言のSAX通知を受け取ります。 |
|
無視できる(空白)データのSAX通知を受け取ります。 |
|
XML宣言のSAX通知を受け取ります。Oracle拡張機能。 |
7.1 XmlSaxAttributeDecl()
このイベントは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]
。
関連項目:
7.2 XmlSaxBeginGen()
このコールは、指定されたXMLメタ・コンテキストからXML生成コンテキストを作成します。このコンテキストは、増分XMLドキュメントを生成するためにSAXコールによって使用されます。
構文
void *XmlSaxBeginGen( XmlCtx *xctx);
パラメータ | In/Out | 説明 |
---|---|---|
xctx |
IN |
XMLメタ・コンテキスト |
7.3 XmlSaxCDATA()
このイベントではCDATA
はText
と異なるものとして処理されます。XmlSaxCDATA
コールバックが指定されない場合、Textコールバックが呼び出されます。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。無視できる(空白形式の)文字データの通知を受け取る、XmlSaxWhitespace
も参照してください。
構文
xmlerr XmlSaxCDATA( void *ctx, oratext *ch, size_t len);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
ch |
IN |
|
len |
IN |
|
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.4 XmlSaxCharacters()
このイベントは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]
。
関連項目:
7.5 XmlSaxComment()
このイベントはXML文書のコメントをマークします。コメントのデータはデータ・エンコーディングに追加されます。SAX標準ではなく、Oracle拡張機能です。
構文
xmlerr XmlSaxComment( void *ctx, oratext *data);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
data |
IN |
コメントのデータ(データ・エンコーディング) |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
7.6 XmlSaxElementDecl()
このイベントはDTDの要素宣言をマークします。要素の名前と内容はデータ・エンコーディングに含まれます。
構文
xmlerr XmlSaxElementDecl( void *ctx, oratext *name, oratext *content);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
要素名 |
content |
IN |
要素のコンテキスト・モデル |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.7 XmlSaxEndDocument()
最後のSAXイベントで、ドキュメントごとに1回コールされ、ドキュメントの終わりを示します。対応するイベントはXmlSaxStartDocument
です。
構文
xmlerr XmlSaxEndDocument( void *ctx);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.8 XmlSaxEndElement()
このイベントは要素の終わりをマークしますXmlSaxStartElement
イベントまたはXmlSaxStartElementNS
イベントに対応します。名前は要素のtagName
(名前空間を認識する要素の場合は修飾名の場合があります)で、データ・エンコーディングに含まれます。
7.9 XmlSaxEndGen()
増分作成されるXMLドキュメントの生成を完了し、アプリケーションに戻します。
構文
orastream *XmlSaxEndGen( void *genCtx);
パラメータ | In/Out | 説明 |
---|---|---|
genCtx |
IN |
XMLドキュメントの作成に使用される生成コンテキスト。XmlSaxBeginGen()XmlSaxBeginGen()tを参照してください |
戻り値
(orastream*)
生成されたXMLドキュメントを含むストリーム
7.10 XmlSaxNotationDecl()
このイベントはDTDの表記法の宣言をマークします。表記法名、公開識別子、およびシステム識別子はすべてデータ・エンコーディングに含まれます。識別子はいずれもオプションで、NULL
でもかまいません。
7.11 XmlSaxPI()
このイベントはProcessingInstruction
をマークします。ProcessingInstruction
のターゲットとデータはデータ・エンコーディングに含まれます。ターゲットは必須ですが、データはNULL
でもかまいません。
構文
xmlerr XmlSaxPI( void *ctx, oratext *target, oratext *data);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
target |
IN |
PIのターゲット(データ・エンコーディング) |
data |
IN |
データ・エンコーディング時のPIのデータ、または |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
7.12 XmlSaxParsedEntityDecl()
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 |
データ・エンコーディングに含まれたエンティティの公開識別子、または |
sysId |
IN |
エンティティのシステム識別子(データ・エンコーディング) |
general |
IN |
汎用エンティティの場合は |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
7.13 XmlSaxStartDocument()
最初のSAXイベントで、ドキュメントごとに1回コールされ、ドキュメントの始まりを示します。対応するイベントはXmlSaxEndDocument
です。
構文
xmlerr XmlSaxStartDocument( void *ctx);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.14 XmlSaxStartElement()
このイベントは要素の先頭を示します。元の名前空間を認識しないバージョンの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 |
要素の属性の |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
7.15 XmlSaxStartElementNS()
このイベントは要素の先頭を示します。名前空間を認識するバージョンの新しい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 |
要素の属性の |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
7.16 XmlSaxUnparsedEntityDecl()
DTDの解析対象外のエンティティ宣言をマークします。解析対象エンティティについては、XmlSaxParsedEntityDecl
を参照してください。解析対象外のエンティティ名、公開識別子、システム識別子および表記法名はすべてデータ・エンコーディングに含まれます。
構文
xmlerr XmlSaxUnparsedEntityDecl( void *ctx, oratext *name, oratext *pubId, oratext *sysId, oratext *note);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
name |
IN |
エンティティ名(データ・エンコーディング) |
pubId |
IN |
データ・エンコーディングに含まれたエンティティの公開識別子、または |
sysId |
IN |
エンティティのシステム識別子(データ・エンコーディング) |
note |
IN |
エンティティの表記法名(データ・エンコーディング) |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.17 XmlSaxWhitespace()
このイベントは改行、行間のインデントなどの無視できる空白データをマークします。対応する関数は、通常の文字データの通知を受け取るXmlSaxCharacters
です。データはデータ・エンコーディングに含まれ、戻される長さはバイトではなく文字数です。
構文
xmlerr XmlSaxWhitespace( void *ctx, oratext *ch, size_t len);
パラメータ | In/Out | 説明 |
---|---|---|
ctx |
IN |
ユーザーのSAXコンテキスト |
ch |
IN |
データのポインタ(データ・エンコーディング) |
len |
IN |
データの長さ、文字数 |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。
関連項目:
7.18 XmlSaxXmlDecl()
このイベントは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 |
スタンドアロン・ドキュメントの値。指定されない場合は |
戻り値
(xmlerr)
エラー・コード。成功の場合はXMLERR_OK [0]
。