5 C++用のパーサーAPIパッケージ

パーサー・インタフェースには、Parserのデータ型、DOMParserメソッドGParserメソッド、ParserExceptionメソッド、SAXHandlerメソッド、SAXParserメソッドおよびSchemaValidatorメソッドが含まれます。

パーサーのデータ型

表5-1Parser パッケージのデータ型の概要を示します。

表5-1 データ型の概要: パーサー・パッケージ

データ型 説明

ParserExceptionCode

例外のパーサー実装です。

DOMParserIdType

パーサーの識別子を定義します。

SAXParserIdType

ノードの型を定義します。

SchValidatorIdType

バリデータの識別子を定義します。

ParserExceptionCode

例外のパーサー実装です。

定義

typedef enum ParserExceptionCode {
   PARSER_UNDEFINED_ERR = 0,
   PARSER_VALIDATION_ERR = 1, 
   PARSER_VALIDATOR_ERR = 2, 
   PARSER_BAD_ISOURCE_ERR = 3, 
   PARSER_CONTEXT_ERR = 4,
   PARSER_PARAMETER_ERR = 5, 
   PARSER_PARSE_ERR = 6, 
   PARSER_SAXHANDLER_SET_ERR = 7, 
   PARSER_VALIDATOR_SET_ERR = 8 } 
ParserExceptionCode;

DOMParserIdType

パーサーの識別子を定義します。

定義

typedef enum DOMParserIdType {      DOMParCXml         = 1    } DOMParserIdType;
ypedef enum CompareHowCode {
   START_TO_START = 0,
   START_TO_END = 1, 
   END_TO_END = 2, 
   END_TO_START = 3 }
CompareHowCode;

SAXParserIdType

パーサーの識別子を定義します。

定義

typedef enum SAXParserIdType {
   SAXParCXml = 1 } 
SAXParserIdType;

SchValidatorIdType

バリデータの識別子を定義します。これらの識別子は、特定のバリデータ・オブジェクトを作成する必要がある場合に、XMLツール・ファクトリのパラメータとして使用されます。

定義

typedef enum SchValidatorIdType {
   SchValCXml        = 1
} SchValidatorIdType;

DOMParserインタフェース

表5-2DOMParserインタフェースで使用できるメソッドの概要を示します。

表5-2 DOMParserメソッドの概要: パーサー・パッケージ

関数 概要

getContext()

パーサーのXMLコンテキスト(割当てとエンコーディング)を戻します。

getParserId()

パーサーIDを取得します。

parse()

文書を構文解析します。

parseDTD()

DTDドキュメントを解析します。

parseSchVal()

ドキュメントを解析し、検証します。

setValidator()

このパーサーのバリデータを設定します。

getContext()

各パーサー・オブジェクトは個別のOracle XMLコンテキスト内で割り当てられ、実行されます。このメンバー関数は、このコンテキストへのポインタを戻します。

構文

virtual Context* getContext() const = 0;

戻り値

(Context*) パーサーのコンテキストへのポインタ。

getParserId()

構文

virtual DOMParserIdType getParserId() const = 0;

戻り値

(DOMParserIdType)パーサーID

parse()

ドキュメントを解析し、ツリーのルート・ノードを戻します。

構文

virtual DocumentRef< Node>* parse(
   InputSource* isrc_ptr,
   boolean DTDvalidate = FALSE,
   DocumentTypeRef< Node>* dtd_ptr = NULL,
   boolean no_mod = FALSE,
   DOMImplementation< Node>* impl_ptr = NULL)
throw (ParserException) = 0;
パラメータ 説明
isrc_ptr

入力ソース

DTDvalidate

DTDで検証された場合はTRUE

dtd_ptr

DTD参照

no_mod

変更が許可されていない場合はTRUE

impl_ptr

オプションのDomImplementationポインタ

戻り値

(DocumentRef)ドキュメント・ツリー

parseDTD()

DTDドキュメントを解析します。

構文

virtual DocumentRef< Node>* parseDTD(
   InputSource* isrc_ptr,
   boolean no_mod = FALSE,
   DOMImplementation< Node>* impl_ptr = NULL)
throw (ParserException) = 0;
パラメータ 説明
isrc_ptr

入力ソース

no_mod

変更が許可されていない場合はTRUE

impl_ptr

オプションのDomImplementationポインタ

戻り値

(DocumentRef) DTDドキュメント・ツリー。

parseSchVal()

ドキュメントを解析し、検証します。対応するパラメータがNULL以外の場合、バリデータを設定します。

構文

virtual DocumentRef< Node>* parseSchVal(
   InputSource* src_par,
   boolean no_mod = FALSE,
   DOMImplementation< Node>* impl_ptr = NULL,
   SchemaValidator< Node>* tor_ptr = NULL)
throw (ParserException) = 0;
パラメータ 説明
isrc_ptr

入力ソース

no_mod

変更が許可されていない場合はTRUE

impl_ptr

オプションのDomImplementationポインタ

tor_ptr

スキーマ・バリデータ

戻り値

(DocumentRef)ドキュメント・ツリー

setValidator()

parseSchValで別のバリデータが指定されている場合を除き、すべての検証についてバリデータを設定します。

構文

virtual void setValidator(
SchemaValidator< Node>* tor_ptr) = 0;
パラメータ 説明
tor_ptr

スキーマ・バリデータ

GParserインタフェース

表5-3GParserインタフェースで使用できるメソッドの概要を示します。

表5-3 GParserメソッドの概要: パーサー・パッケージ

関数 概要

SetWarnDuplicateEntity()

複数のエンティティ宣言がある場合に警告を発生させるかどうかを指定します。

getBaseURI()

ドキュメントのベースURIを戻します。

getDiscardWhitespaces()

要素間の空白が破棄されているかどうかを確認します。

getExpandCharRefs()

文字参照が展開されているかどうかを確認します。

getSchemaLocation()

このドキュメントのスキーマの位置を取得します。

getStopOnWarning()

警告の発生時にドキュメント処理が停止されるかどうかを取得します。

getWarnDuplicateEntity()

複数のエンティティ宣言がある場合に警告が発生するかどうかを取得します。

setBaseURI()

ドキュメントのベースURIを設定します。

setDiscardWhitespaces()

書式を整えるための空白を破棄するかどうかを設定します。

setExpandCharRefs()

文字参照を展開するかどうかを設定します。

setSchemaLocation()

ドキュメントのスキーマの位置を設定します。

setStopOnWarning()

警告の発生時にドキュメント処理を停止させるかどうかを設定します。

SetWarnDuplicateEntity()

エンティティが2回以上宣言されている場合に警告を発生させるかどうかを指定します。

構文

void setWarnDuplicateEntity(
   boolean par_bool);
パラメータ 説明
par_bool

エンティティ宣言が複数ある場合に警告を発生させる場合はTRUE

getBaseURI()

ドキュメントのベースURIを戻します。通常は、URIからロードされたドキュメントにのみ、ベースURIが自動的に設定されます。他のソース(stdin、バッファなど)からロードされたドキュメントには通常、ベースURIは設定されていませんが、相対URIを解決するために、setBaseURIを使用してベースURIが設定されている場合もあります。

構文

oratext* getBaseURI() const;

戻り値

(oratext*) 現在のドキュメントのベースURI(またはNULL)。

getDiscardWhitespaces()

入力ドキュメントの改行やインデントなど、要素間にある、書式を整えるための空白が破棄されているかどうかを確認します。デフォルトでは、すべての入力文字が維持されます。

構文

boolean getDiscardWhitespaces() const;

戻り値

(boolean) 要素間の空白が破棄されている場合はTRUE

getExpandCharRefs()

DOMデータで文字参照が展開されているかどうかを確認します。デフォルトでは、文字参照は参照が表す文字に置き換えられます。ただし、ドキュメントが保存されると、それらの文字エンティティは再度表示されません。ロードと保存の後も状態を維持するには、文字参照を展開しないようにします。

構文

boolean getExpandCharRefs() const;

戻り値

(boolean) 文字参照が展開されている場合はTRUE

getSchemaLocation()

ドキュメントのスキーマの位置を取得します。データベースにドキュメントをロードするときに、最適なレイアウトを判断するために使用します。

構文

oratext* getSchemaLocation() const;

戻り値

(oratext*)スキーマの位置

getStopOnWarning()

TRUEが戻される場合、警告はエラーと同様に処理され、解析、検証などは即時停止します。デフォルトでは、警告が発行されても処理は続けられます。

構文

boolean getStopOnWarning() const;

戻り値

(boolean) 警告の発生時にドキュメント処理を停止させる場合はTRUE

getWarnDuplicateEntity()

エンティティが2回以上宣言されている場合に警告が発生するかどうかを取得します。

構文

boolean getWarnDuplicateEntity() const;

戻り値

(boolean) エンティティ宣言が複数ある場合に警告を発生させる場合はTRUE

setBaseURI()

ドキュメントのベースURIを設定します。通常は、URIからロードされたドキュメントにのみ、ベースURIが自動的に設定されます。他のソース(stdin、バッファなど)からロードされたドキュメントには通常、ベースURIは設定されていませんが、相対URIを解決するために、setBaseURIを使用してベースURIが設定されている場合もあります。

構文

void setBaseURI( oratext* par);
パラメータ 説明
par

ベースURI

setDiscardWhitespaces()

入力ドキュメントの要素(改行とインデント)間にある、書式を整えるための空白を破棄するかどうかを設定します。デフォルトでは、すべての入力文字が維持されます。

構文

void setDiscardWhitespaces(
   boolean par_bool);
パラメータ 説明
par_bool

空白を破棄する場合はTRUE

setExpandCharRefs()

DOMデータで文字参照を展開するかどうかを設定します。通常、文字参照は参照が表す文字に置き換えられます。ただし、ドキュメントが保存されると、それらの文字エンティティは再度表示されません。ロードと保存の後も状態を維持するには、文字参照を展開しないようにします。

構文

void setExpandCharRefs( 
   boolean par_bool);
パラメータ 説明
par_bool

文字参照を破棄する場合はTRUE

setSchemaLocation()

ドキュメントのスキーマの位置を設定します。データベースにドキュメントをロードするときに、最適なレイアウトを判断するために使用します。

構文

 void setSchemaLocation(
   oratext* par);
パラメータ 説明
par

スキーマの位置

setStopOnWarning()

TRUEを設定すると、警告はエラーと同様に処理され、解析、検証などは即時停止します。デフォルトでは、警告が発行されても処理は続けられます。

構文

void setStopOnWarning( 
   boolean par_bool);
パラメータ 説明
par_bool

警告によりドキュメント処理を停止させる場合はTRUE

ParserExceptionインタフェース

表5-4ParserExceptionインタフェースで使用できるメソッドの概要を示します。

表5-4 ParserExceptionメソッドの概要: パーサー・パッケージ

関数 概要

getCode()

例外に埋め込まれたOracle XMLエラー・コードを取得します。

getMesLang()

エラー・メッセージの現在の言語(エンコーディング)を取得します。

getMessage()

Oracle XMLエラー・メッセージを取得します。

getParserCode()

例外に埋め込まれたパーサー例外コードを取得します。

getCode()

XmlExceptionから継承された仮想メンバー関数です。

構文

virtual unsigned getCode() const = 0;

戻り値

(unsigned) 数値のエラー・コード(正常に終了した場合は0)。

getMesLang()

XmlExceptionから継承された仮想メンバー関数です。

構文

virtual oratext* getMesLang() const = 0;

戻り値

(oratext*) エラー・メッセージの現在の言語(エンコーディング)。

getMessage()

XmlExceptionから継承された仮想メンバー関数です。

構文

virtual oratext* getMessage() const = 0;

戻り値

(oratext *)エラー・メッセージ

getParserCode()

これは実行時の例外状況の、ParserExceptionCodeで定義されたパーサーおよびバリデータの例外コードを戻す、実装で定義済のメンバー関数のプロトタイプを定義する仮想メンバー関数です。

構文

virtual ParserExceptionCode getParserCode() const = 0;

戻り値

(ParserExceptionCode)例外コード

SAXHandlerインタフェース

表5-5SAXHandlerインタフェースで使用できるメソッドの概要を示します。

表5-5 SAXHandlerメソッドの概要: パーサー・パッケージ

関数 概要

CDATA()

CDATAの通知を受け取ります。

XMLDecl()

XML宣言の通知を受け取ります。

attributeDecl()

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

characters()

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

comment()

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

elementDecl()

要素の宣言の通知を受け取ります。

endDocument()

文書の終了通知を受け取ります。

endElement()

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

notationDecl()

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

parsedEntityDecl()

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

processingInstruction()

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

startDocument()

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

startElement()

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

startElementNS()

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

unparsedEntityDecl()

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

whitespace()

空白文字の通知を受け取ります。

CDATA()

このイベントはCDATAをTextと異なるものとして処理します。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。これはOracleの拡張機能です。

構文

virtual void CDATA( 
   oratext* data,
   ub4 size) = 0;
パラメータ 説明
data

CDATAへのポインタ

size

CDATAのサイズ

XMLDecl()

このイベントはXML宣言(XMLDecl)をマークします。startDocumentイベントが常に最初に処理され、このイベントは2番目のイベントになります。エンコーディング・フラグにより、エンコーディングが指定されているかどうかが示されます。スタンドアロン・フラグの場合、指定されていない場合は-1が戻され、それ以外の場合はFALSEの場合は0TRUEの場合は1が戻されます。このメンバー関数は、Oracleの拡張機能です。

構文

virtual void XMLDecl( 
   oratext* version,
   boolean is_encoding,
   sword standalone) = 0;
パラメータ 説明
version

XMLDeclのバージョン文字列

is_encoding

エンコーディングが指定されているかどうか

standalone

スタンドアロン値フラグの値

attributeDecl()

このイベントはDTDの属性宣言をマークします。Oracle拡張機能であり、SAX標準ではありません。

構文

virtual void attributeDecl(
   oratext* attr_name,
   oratext *name, 
   oratext *content) = 0;
パラメータ 説明
attr_name

属性の名前

name

宣言の名前

content

属性宣言の本体

characters()

このイベントは文字データをマークします。

構文

virtual void characters(
   oratext* ch,
   ub4 size) = 0;
パラメータ 説明
ch

データへのポインタ

size

データの長さ

comment()

このイベントはXML文書のコメントをマークします。コメントのデータはデータ・エンコーディングに追加されます。Oracle拡張機能であり、SAX標準ではありません。

構文

virtual void comment(
   oratext* data) = 0;
パラメータ 説明
data

コメントのデータ

elementDecl()

このイベントはDTDの要素宣言をマークします。Oracle拡張機能であり、SAX標準ではありません。

構文

virtual void elementDecl( 
   oratext *name, 
   oratext *content) = 0;
パラメータ 説明
name

要素名

content

要素の内容

endDocument()

文書の終了通知を受け取ります。

構文

virtual void endDocument() = 0;

endElement()

このイベントは要素の終わりをマークします。名前は要素のtagName(名前空間を認識する要素の場合は修飾名の場合があります)で、データ・エンコーディングに含まれます。

構文

virtual void endElement( oratext* name) = 0;

notationDecl()

このイベントはDTDの表記法の宣言をマークします。表記法名、公開識別子、およびシステム識別子はすべてデータ・エンコーディングに含まれます。識別子はいずれもオプションで、NULLでもかまいません。

構文

virtual void notationDecl(
   oratext* name,
   oratext* public_id,
   oratext* system_id) = 0;
パラメータ 説明
name

表記法名

public_id

表記法の公開識別子

sysem_id

表記法のシステム識別子

parsedEntityDecl()

DTDの解析対象のエンティティ宣言をマークします。解析対象エンティティの名前、公開識別子、システム識別子および表記法名がすべてデータ・エンコーディングに追加されます。これはOracleの拡張機能です。

構文

virtual void parsedEntityDecl(
   oratext* name,
   oratext* value,
   oratext* public_id,
   oratext* system_id,
   boolean general) = 0;
パラメータ 説明
name

エンティティ名

value

内部エンティティの場合はエンティティの値

public_id

エンティティの公開識別子

sysem_id

エンティティのシステム識別子

general

汎用エンティティかどうか(パラメータ・エンティティの場合はFALSE)

processingInstruction()

このイベントは処理命令をマークします。PIのターゲットとデータはデータ・エンコーディングに含まれます。ターゲットは必須ですが、データはNULLでもかまいません。

構文

virtual void processingInstruction( 
   oratext* target,
   oratext* data) = 0;
パラメータ 説明
target

PIのターゲット

data

PIのデータ

startDocument()

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

構文

virtual void startDocument() = 0;

startElement()

このイベントは要素の先頭を示します。

構文

virtual void startElement( 
   oratext* name,
   NodeListRef< Node>* attrs_ptr) = 0;
パラメータ 説明
name

要素名

attrs_ptr

要素の属性のリスト

startElementNS()

このイベントは要素の先頭を示します。これは新しいSAX 2で、名前空間を認識することに注意してください。要素の修飾名、ローカル名、名前空間URIはすべての属性パートと同様に、データ・エンコーディングに含まれます。

構文

virtual void startElementNS(
   oratext* qname,
   oratext* local,
   oratext* ns_URI,
   NodeListRef< Node>* attrs_ptr) = 0;
パラメータ 説明
qname

要素の修飾名

local

要素の名前空間のローカル名

ns_URI

要素の名前空間URI

attrs_ref

要素の属性のNodeList

unparsedEntityDecl()

DTDの解析対象外エンティティ宣言をマークします。解析対象外のエンティティ名、公開識別子、システム識別子および表記法名はすべてデータ・エンコーディングに含まれます。

構文

virtual void unparsedEntityDecl(
   oratext* name,
   oratext* public_id,
   oratext* system_id,
   oratext* notation_name) = 0;
};
パラメータ 説明
name

エンティティ名

public_id

エンティティの公開識別子

sysem_id

エンティティのシステム識別子

notation_name

エンティティの表記法名

whitespace()

このイベントは改行、行間のインデントなどの無視できる空白データをマークします。

構文

virtual void whitespace(
   oratext* data,
   ub4 size) = 0;
パラメータ 説明
data

データへのポインタ

size

データの長さ

SAXParserインタフェース

表5-6SAXParserインタフェースで使用できるメソッドの概要を示します。

表5-6 SAXParserメソッドの概要: パーサー・パッケージ

関数 概要

getContext()

パーサーのXMLコンテキスト(割当てとエンコーディング)を戻します。

getParserId()

パーサーIDを戻します。

parse()

文書を構文解析します。

parseDTD()

DTDを解析します。

setSAXHandler()

SAXハンドラを設定します。

getContext()

各パーサー・オブジェクトは個別のOracle XMLコンテキスト内で割り当てられ、実行されます。このメンバー関数は、このコンテキストへのポインタを戻します。

構文

virtual Context* getContext() const = 0;

戻り値

(Context*) パーサーのコンテキストへのポインタ。

getParserId()

パーサーIDを戻します。

構文

virtual SAXParserIdType getParserId() const = 0;

戻り値

(SAXParserIdType)パーサーID

parse()

ドキュメントを解析します。

構文

virtual void parse( 
   InputSource* src_ptr,
   boolean DTDvalidate = FALSE,
   SAXHandlerRoot* hdlr_ptr = NULL)
throw (ParserException) = 0;
パラメータ 説明
src_ptr

入力ソース

DTDValidate

DTDで検証する場合はTRUE

hdlr_ptr

SAXハンドラ・ポインタ

parseDTD()

DTDを解析します。

構文

virtual void parseDTD( 
   InputSource* src_ptr,
   SAXHandlerRoot* hdlr_ptr = NULL)
throw (ParserException) = 0;
パラメータ 説明
src_ptr

入力ソース

hdlr_ptr

SAXハンドラ・ポインタ

setSAXHandler()

パーサー・コールで別のSAXハンドラが指定されている場合を除き、すべてのパーサー起動のSAXハンドラを設定します。

構文

virtual void setSAXHandler(
   SAXHandlerRoot* hdlr_ptr) = 0;
パラメータ 説明
hdlr_ptr

SAXハンドラ・ポインタ

SchemaValidatorインタフェース

表5-7SchemaValidatorインタフェースで使用できるメソッドの概要を示します。

表5-7 SchemaValidatorメソッドの概要: パーサー・パッケージ

関数 概要

getSchemaList()

スキーマ・リストを戻します。

getValidatorId()

バリデータ識別子を取得します。

loadSchema()

スキーマ・ドキュメントをロードします。

unloadSchema()

スキーマ・ドキュメントをアンロードします。

getSchemaList()

「list」がNULLの場合、ロードされたスキーマ・リスト・ドキュメントのサイズのみを戻します。「list」がNULL以外の場合、ユーザーが用意するポインタ・バッファにURLポインタのリストが戻されます。ユーザー側で、十分な大きさのバッファを用意する必要があります。

構文

virtual ub4 getSchemaList(
   oratext **list) const = 0;
パラメータ 説明
list

ポインタ・バッファのアドレス

戻り値

(ub4) リスト・サイズとロードされたスキーマのリスト(I/Oパラメータ)。

getValidatorId()

このバリデータ・オブジェクトの実装に対応するバリデータ識別子を取得します。

構文

virtual SchValidatorIdType getValidatorId() const = 0;

戻り値

(SchValidatorIdType)バリデータ識別子

loadSchema()

次の検証セッションで使用されるスキーマ・ドキュメントをロードします。エラーの場合は、例外をスローします。

構文

virtual void loadSchema( 
   oratext* schema_URI)
throw (ParserException) = 0;
パラメータ 説明
schema_URI

スキーマ・ドキュメントのURL。コンパイラ・エンコーディング

unloadSchema()

スキーマ・ドキュメントとその(バリデータからネスト方式でインクルードまたはインポートされた)すべての子孫をアンロードします。以前にロードされたすべてのスキーマ・ドキュメントは、アンロードされるまでロードされた状態です。ロードされたすべてのスキーマ・ドキュメントをアンロードするためには、schema_URINULLに設定します。エラーの場合は、例外をスローします。

構文

virtual void unloadSchema(
   oratext* schema_URI)
throw (ParserException) = 0;
パラメータ 説明
schema_URI

スキーマ・ドキュメントのURL。コンパイラ・エンコーディング