5 C++用のパーサーAPIパッケージ
パーサー・インタフェースには、
Parser
のデータ型、DOMParser
メソッドGParser
メソッド、ParserException
メソッド、SAXHandler
メソッド、SAXParser
メソッドおよびSchemaValidator
メソッドが含まれます。
パーサーのデータ型
表5-1にParser
パッケージのデータ型の概要を示します。
表5-1 データ型の概要: パーサー・パッケージ
データ型 | 説明 |
---|---|
例外のパーサー実装です。 |
|
パーサーの識別子を定義します。 |
|
ノードの型を定義します。 |
|
バリデータの識別子を定義します。 |
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;
DOMParserインタフェース
表5-2にDOMParser
インタフェースで使用できるメソッドの概要を示します。
表5-2 DOMParserメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
パーサーのXMLコンテキスト(割当てとエンコーディング)を戻します。 |
|
パーサーIDを取得します。 |
|
文書を構文解析します。 |
|
DTDドキュメントを解析します。 |
|
ドキュメントを解析し、検証します。 |
|
このパーサーのバリデータを設定します。 |
getContext()
各パーサー・オブジェクトは個別のOracle XMLコンテキスト内で割り当てられ、実行されます。このメンバー関数は、このコンテキストへのポインタを戻します。
構文
virtual Context* getContext() const = 0;
戻り値
(Context*)
パーサーのコンテキストへのポインタ。
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で検証された場合は |
dtd_ptr |
DTD参照 |
no_mod |
変更が許可されていない場合は |
impl_ptr |
オプションの |
戻り値
(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 |
変更が許可されていない場合は |
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 |
変更が許可されていない場合は |
impl_ptr |
オプションのDomImplementationポインタ |
tor_ptr |
スキーマ・バリデータ |
戻り値
(DocumentRef)
ドキュメント・ツリー
GParserインタフェース
表5-3にGParser
インタフェースで使用できるメソッドの概要を示します。
表5-3 GParserメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
複数のエンティティ宣言がある場合に警告を発生させるかどうかを指定します。 |
|
ドキュメントのベースURIを戻します。 |
|
要素間の空白が破棄されているかどうかを確認します。 |
|
文字参照が展開されているかどうかを確認します。 |
|
このドキュメントのスキーマの位置を取得します。 |
|
警告の発生時にドキュメント処理が停止されるかどうかを取得します。 |
|
複数のエンティティ宣言がある場合に警告が発生するかどうかを取得します。 |
|
ドキュメントのベースURIを設定します。 |
|
書式を整えるための空白を破棄するかどうかを設定します。 |
|
文字参照を展開するかどうかを設定します。 |
|
ドキュメントのスキーマの位置を設定します。 |
|
警告の発生時にドキュメント処理を停止させるかどうかを設定します。 |
SetWarnDuplicateEntity()
エンティティが2回以上宣言されている場合に警告を発生させるかどうかを指定します。
構文
void setWarnDuplicateEntity( boolean par_bool);
パラメータ | 説明 |
---|---|
par_bool |
エンティティ宣言が複数ある場合に警告を発生させる場合は |
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 |
空白を破棄する場合は |
setExpandCharRefs()
DOMデータで文字参照を展開するかどうかを設定します。通常、文字参照は参照が表す文字に置き換えられます。ただし、ドキュメントが保存されると、それらの文字エンティティは再度表示されません。ロードと保存の後も状態を維持するには、文字参照を展開しないようにします。
構文
void setExpandCharRefs( boolean par_bool);
パラメータ | 説明 |
---|---|
par_bool |
文字参照を破棄する場合は |
setSchemaLocation()
ドキュメントのスキーマの位置を設定します。データベースにドキュメントをロードするときに、最適なレイアウトを判断するために使用します。
構文
void setSchemaLocation( oratext* par);
パラメータ | 説明 |
---|---|
par |
スキーマの位置 |
ParserExceptionインタフェース
表5-4にParserException
インタフェースで使用できるメソッドの概要を示します。
表5-4 ParserExceptionメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
例外に埋め込まれたOracle XMLエラー・コードを取得します。 |
|
エラー・メッセージの現在の言語(エンコーディング)を取得します。 |
|
Oracle XMLエラー・メッセージを取得します。 |
|
例外に埋め込まれたパーサー例外コードを取得します。 |
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 *)
エラー・メッセージ
SAXHandlerインタフェース
表5-5にSAXHandler
インタフェースで使用できるメソッドの概要を示します。
表5-5 SAXHandlerメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
CDATAの通知を受け取ります。 |
|
XML宣言の通知を受け取ります。 |
|
属性の宣言の通知を受け取ります。 |
|
文字データの通知を受け取ります。 |
|
コメントの通知を受け取ります。 |
|
要素の宣言の通知を受け取ります。 |
|
文書の終了通知を受け取ります。 |
|
要素の終わりの通知を受け取ります。 |
|
表記法宣言の通知を受け取ります。 |
|
解析対象エンティティ宣言の通知を受け取ります。 |
|
処理命令の通知を受け取ります。 |
|
ドキュメントの始まりの通知を受け取ります。 |
|
要素の始まりの通知を受け取ります。 |
|
要素の始まりの通知を受け取ります(名前空間を認識)。 |
|
解析対象外エンティティ宣言の通知を受け取ります。 |
|
空白文字の通知を受け取ります。 |
CDATA()
このイベントはCDATAをTextと異なるものとして処理します。データがデータ・エンコーディングに追加され、長さがバイトではなく文字数で戻されます。これはOracleの拡張機能です。
構文
virtual void CDATA( oratext* data, ub4 size) = 0;
パラメータ | 説明 |
---|---|
data |
CDATAへのポインタ |
size |
CDATAのサイズ |
XMLDecl()
このイベントはXML宣言(XMLDecl
)をマークします。startDocument
イベントが常に最初に処理され、このイベントは2番目のイベントになります。エンコーディング・フラグにより、エンコーディングが指定されているかどうかが示されます。スタンドアロン・フラグの場合、指定されていない場合は-1が戻され、それ以外の場合はFALSE
の場合は0
、TRUE
の場合は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 |
要素の内容 |
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 |
汎用エンティティかどうか(パラメータ・エンティティの場合は |
processingInstruction()
このイベントは処理命令をマークします。PIのターゲットとデータはデータ・エンコーディングに含まれます。ターゲットは必須ですが、データはNULL
でもかまいません。
構文
virtual void processingInstruction( oratext* target, oratext* data) = 0;
パラメータ | 説明 |
---|---|
target |
PIのターゲット |
data |
PIのデータ |
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 |
要素の属性の |
unparsedEntityDecl()
DTDの解析対象外エンティティ宣言をマークします。解析対象外のエンティティ名、公開識別子、システム識別子および表記法名はすべてデータ・エンコーディングに含まれます。
構文
virtual void unparsedEntityDecl( oratext* name, oratext* public_id, oratext* system_id, oratext* notation_name) = 0; };
パラメータ | 説明 |
---|---|
name |
エンティティ名 |
public_id |
エンティティの公開識別子 |
sysem_id |
エンティティのシステム識別子 |
notation_name |
エンティティの表記法名 |
SAXParserインタフェース
表5-6にSAXParser
インタフェースで使用できるメソッドの概要を示します。
表5-6 SAXParserメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
パーサーのXMLコンテキスト(割当てとエンコーディング)を戻します。 |
|
パーサーIDを戻します。 |
|
文書を構文解析します。 |
|
DTDを解析します。 |
|
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で検証する場合は |
hdlr_ptr |
SAXハンドラ・ポインタ |
parseDTD()
DTDを解析します。
構文
virtual void parseDTD( InputSource* src_ptr, SAXHandlerRoot* hdlr_ptr = NULL) throw (ParserException) = 0;
パラメータ | 説明 |
---|---|
src_ptr |
入力ソース |
hdlr_ptr |
SAXハンドラ・ポインタ |
SchemaValidatorインタフェース
表5-7にSchemaValidator
インタフェースで使用できるメソッドの概要を示します。
表5-7 SchemaValidatorメソッドの概要: パーサー・パッケージ
関数 | 概要 |
---|---|
スキーマ・リストを戻します。 |
|
バリデータ識別子を取得します。 |
|
スキーマ・ドキュメントをロードします。 |
|
スキーマ・ドキュメントをアンロードします。 |
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_URI
をNULL
に設定します。エラーの場合は、例外をスローします。
構文
virtual void unloadSchema( oratext* schema_URI) throw (ParserException) = 0;
パラメータ | 説明 |
---|---|
schema_URI |
スキーマ・ドキュメントのURL。コンパイラ・エンコーディング |