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メソッドの概要

関数 概要

XmlSaxAttributeDecl()

属性の宣言のSAX通知を受け取ります。

XmlSaxCDATA()

CDATAのSAX通知を受け取ります。Oracle拡張機能。

XmlSaxCharacters()

文字データのSAX通知を受け取ります。

XmlSaxComment()

コメントのSAX通知を受け取ります。

XmlSaxElementDecl()

要素の宣言のSAX通知を受け取ります。Oracle拡張機能。

XmlSaxEndDocument()

ドキュメントの終わりのSAX通知を受け取ります。

XmlSaxEndElement()

要素の終わりのSAX通知を受け取ります。

XmlSaxNotationDecl()

表記法の宣言のSAX通知を受け取ります。

XmlSaxPI()

処理命令のSAX通知を受け取ります。

XmlSaxParsedEntityDecl()

解析対象エンティティの宣言のSAX通知を受け取ります。Oracle拡張機能。

XmlSaxStartDocument()

ドキュメントの始まりのSAX通知を受け取ります。

XmlSaxStartElement()

要素の始まりのSAX通知を受け取ります。

XmlSaxStartElementNS()

名前空間を認識する要素の始まりのSAX通知を受け取ります。

XmlSaxUnparsedEntityDecl()

解析対象外のエンティティ宣言のSAX通知を受け取ります。

XmlSaxWhitespace()

無視できる(空白)データのSAX通知を受け取ります。

XmlSaxXmlDecl()

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]

関連項目:

XmlSaxAttributeDecl()

7.2 XmlSaxBeginGen()

このコールは、指定されたXMLメタ・コンテキストからXML生成コンテキストを作成します。このコンテキストは、増分XMLドキュメントを生成するためにSAXコールによって使用されます。

構文

void *XmlSaxBeginGen(
   XmlCtx *xctx);
パラメータ In/Out 説明
xctx
IN

XMLメタ・コンテキスト

7.3 XmlSaxCDATA()

このイベントではCDATATextと異なるものとして処理されます。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]

関連項目:

XmlSaxWhitespace()

7.4 XmlSaxCharacters()

このイベントはTextまたはCDATAのいずれかの文字データをマークします。XmlSaxCDATAコールバックが指定されている場合、かわりにCDATAがそのコールバックに送られます。XmlSaxCDATAコールバックが指定されていない場合、TextCDATAはいずれもXmlSaxCharactersコールバックに送られます。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。無視できる(空白形式の)文字データの通知を受け取る、XmlSaxWhitespaceも参照してください。

構文

xmlerr XmlSaxCharacters(
   void *ctx, 
   oratext *ch, 
   size_t len);
パラメータ In/Out 説明
ctx
IN

ユーザーのSAXコンテキスト

ch
IN

データのポインタ(データ・エンコーディング)

len
IN

データの長さ、文字数

戻り値

(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]

関連項目:

XmlSaxWhitespace()

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]

関連項目:

XmlSaxAttributeDecl()

7.7 XmlSaxEndDocument()

最後のSAXイベントで、ドキュメントごとに1回コールされ、ドキュメントの終わりを示します。対応するイベントはXmlSaxStartDocumentです。

構文

xmlerr XmlSaxEndDocument(
   void *ctx);
パラメータ In/Out 説明
ctx
IN

ユーザーのSAXコンテキスト

戻り値

(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]

関連項目:

XmlSaxStartDocument()

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のデータ、またはNULL

戻り値

(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

データ・エンコーディングに含まれたエンティティの公開識別子、またはNULL

sysId
IN

エンティティのシステム識別子(データ・エンコーディング)

general
IN

汎用エンティティの場合はTRUE、パラメータ・エンティティの場合はFALSE

戻り値

(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]

7.13 XmlSaxStartDocument()

最初のSAXイベントで、ドキュメントごとに1回コールされ、ドキュメントの始まりを示します。対応するイベントはXmlSaxEndDocumentです。

構文

xmlerr XmlSaxStartDocument(
   void *ctx);
パラメータ In/Out 説明
ctx
IN

ユーザーのSAXコンテキスト

戻り値

(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]

関連項目:

XmlSaxEndDocument()

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

要素の属性のNamedNodeMap

戻り値

(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

要素の属性のNodeList、またはNULL

戻り値

(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

データ・エンコーディングに含まれたエンティティの公開識別子、またはNULL

sysId
IN

エンティティのシステム識別子(データ・エンコーディング)

note
IN

エンティティの表記法名(データ・エンコーディング)

戻り値

(xmlerr) エラー・コード。成功の場合はXMLERR_OK [0]

関連項目:

XmlSaxParsedEntityDecl()

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]

関連項目:

XmlSaxCharacters()

7.18 XmlSaxXmlDecl()

このイベントはXML宣言をマークします。XmlSaxStartDocumentは常に最初のイベントです。このコールバックが登録されXMLDeclが存在する場合、これが2番目のイベントになります。エンコーディング・フラグにより、エンコーディングが指定されているかどうかが示されます。ドキュメントのデフォルトのエンコーディング指定はオーバーライドされる(あるいは間違っている)場合があり、またなんらかの方式で入力がデータ・エンコーディングに変換されるため、ドキュメントで指定される実際のエンコーディングは指定されません。スタンドアロン・フラグの場合、フラグが指定されていない場合は-1が戻されます。それ以外の場合、FALSE0TRUEは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]