XML::Parser::Expatモジュール(日本語チョウ訳)

by Hippo2000(1999/4/20)

日本語チョウ訳 XMLの巻 XML::Parser::Expatモジュールなのです。

なおこのドキュメントはXML-Parserモジュールをインストールしたときに作成される(デフォルトで入ってくるとは思いますが)C:\Perl\html\lib\site\xml\parser\Expat.htmlではなく、pod2htmlを使って抽出した内容を、私が日本語に訳そうとしたものです。

これに持ち込むまでにはちょいとややこしい手が必要なので注意。

これもやっぱり、わかりにくい説明は本物を見てください。(^^;

原本の著作権は Lary Wall氏、Clark Cooper 氏がお持ちです(詳しくは著作権情報を見てください)。Clark Cooper氏にメールで、翻訳の許可をいただきました。

内容等が間違っていたら修正します。ご連絡ください。



名前

XML::Parser::Expat - James Clark氏のexpat XMLパーサへの下位レベルアクセス


概要

 use XML::Parser::Expat;
 $parser = new XML::Parser::Expat;
 $parser->setHandlers('Start' => \&sh, 'End'   => \&eh,
                      'Default' => \&dh, 'Char' => \&ch);
 open(FOO, 'info.xml') or die "Couldn't open";
 $parser->parse(*FOO);
 close(FOO);
 # $parser->parse('<foo id="me"> here <em>we</em> go </foo>');
 sub sh
 {
     my ($p, $el, %atts) = @_;
     if ($el eq 'special')
     {
         $p->setHandlers('Default' => \&spec);
         $p->default_current;
     }
     ...
 }
 sub spec
 {
     my ($p, $str) = @_;
     ...
     $p->setHandlers('Default' => \&dh);
 }

説明

このモジュールはJames Clark氏のXMLパーサであるexpatへのインターフェースを提供します。expatでは、1つのパーサのインスタンスだけが文書を解析できます。最初のparsestringの後は、呼び出すと指定されたインスタンスは死にます(die)。

Expat (そして XML::Parser::Expat) はイベントを基本としています。パーサが文書の部分を認識すると、(XML要素の開始または終了のこと)、そのタイプのイベントのために登録されているハンドラが適応するパラメータで呼び出されます。


メソッド

new
クラスメソッド。XML::Parser::Expatのためのコンストラクタ。オプションはキーワードと値の組合わせで渡します。指定できるオプションには以下のものがあります。:
setHandlers(TYPE, HANDLER [, TYPE, HANDLER [...]])
このメソッドは各種イベントのためのハンドラを登録します。もしなにもハンドラが登録されていなければ、parsestringまたはparsefileを呼び出すと対応するXML文書がウェル・フォームドかどうかを判定だけがおこなわれます(エラーなしに返ることによって)。パーサが開始された後、ハンドラからこれを呼び出すこともできます。

ハンドラを設定してそれがエラーだと判定され場合には、そのハンドラの設定ははずされます。

指定できるイベントとそれに対応するハンドラに渡されるパラメータは以下の通りです:

namespace(name)
名前が属している名前空間のURIを返します。名前がどこの名前空間にも属していなければ、undefが返されます。StartまたはEndハンドラを通じて1つの文書から、あるいはgenerate_ns_nameメソッドの呼び出しを通じて受け取った名前についてのみ、これは有効です。言い換えれば、XML::Parser::Expatの1つのインスタンスから生成された名前を他のイスタンスのものと一緒に使わないで下さい。
 
eq_name(name1, name2)
name1とname2が同じであればtrueを返します。(つまり同じ名前空間で同じ名前)。どちらの名前も1つの文書のStartもしくはEndハンドラから、あるいはgenerage_ns_nameメソッドを通じて取得されたときにのみ有効です。
generate_ns_name(name, namespace)
指定された名前空間に結びついていき、上記2つのメソッドで使うことが出来る名前を返します。
new_ns_prefixes
開始タグハンドラから呼ばれたとき、この開始タグで宣言された名前空間接頭語を返します。他の場所から(または名前空間接頭語が何も宣言されていないところ)、空リストを返します。デフォルトの名前空間を設定は接頭語として"#default"で示されます。
expand_ns_prefix(prefix)
指定された接頭語が現在結び付けられているURIを返します。接頭語が何も結び付けられていなければ、undefを返します。現在の結びついている (もしあれば)デフォルトの名前空間を知りたい場合には、'#default'を使ってください。
current_ns_prefixes
現在結び付けられている名前空間の接頭語のリストを返します。リストのなかの接頭語の順番に意味はありません。もしデフォルトの名前空間が結び付けられていると、リストに'#default'が入ります。
recognized_string
現在のハンドラを呼びすために理解された文字列を文書から返します。例えば、startハンドラから予備だされたら、開始タグ文字列を返します。文字列はUTF-8でエンコードされます。
original_string
現在のハンドラを呼びすために理解された文字列を文書にある通りの文字列を返します。文字列は元のドキュメントのエンコーディングになります。
default_current
ハンドラから呼ばれたとき、defaultハンドラに送られるイベントを発生させる文字並びを発生させます。
ハンドラから呼び出されたとき、(もし登録されていれば)defaultハンドラに送られる、対応するイベントを発生させた文字列を発生します。これはrecogized_stringメソッドの利点に反し、それはdefaultハンドラをインストールすることなしに使うことが出来ます。
xpcroak(message)
指定されたmessageにXML文書での現在の行番号、ErrContextで表わされるメッセージをつけます。そして、整形されたメッセージでcroak(メッセージを出して終了)します。
xpcarp(message)
指定されたmessageにXML文書での現在の行番号、ErrContextで表わされるメッセージをつけます。 そして、整形されたメッセージでcarp(メッセージの出力)します。
current_line
解析の現在の行番号を返します。
current_column
解析の現在の列番号を返します。
current_byte
解析の現在位置を返します。
base([NEWBASE]);
相対URIを解決するために使われる現在のベースの値。NEWBASEが指定されると、ベースをその値に変更します。
context
開いている要素を表す要素名のリストを返します。一番最初が一番内側のものになります。
current_element
現在開いている要素の名前を返します。
in_element(NAME)
NAMEが現在開いている最も内側の要素の名前と同じであればtrueを返します。
within_element(NAME)
文脈リストで指定された名前が出てきた回数を返します。名前空間処理が使われていて、その名前が名前空間で使われているかどうかをチェックしたいとき、NAME引数を作るためにgenerate_ns_nameメソッドを使ってください。
depth
文脈リストの大きさを返します。
position_in_context(LINES)
解析の現在位置を表す文字列を返します。LINESは0以上の整数値でなければなりません。現在解析している行の上下何行を戻りの文字列に入れるかを表します。
xml_escape(TEXT [, CHAR [, CHAR ...]])
マーク付け文字列をもったTEXTを文字エンティティに変えて返します。引数として指定される追加の文字列も、TEXTのなかで見つかったところで文字リファレンスに変えられます。
parse (SOURCE)
SOURCEパラメータはXML文書全体が入っている文字列もしくはオープンされているIO::Handlerでなければなりません。 1つのXML::Parser::Expatのインスタンスでは1つの文書だけが解析できます。そのためこのインスタンスで以前にこれが呼ばれているとエラーメッセージを出してPerlを終了します(croak)。
parsestring(XML_DOC_STRING)
XML文書として与えられた文字列を解析します。1つのXML::Parser::Expatのインスタンスでは1つの文書だけが解析できます。そのため、このインスタンスで前にpaserstringまたはparsefileが呼ばれていると、これは死にます。(die)
このメソッドはparseメソッドの利点に反しています。
parsefile(FILENAME)
指定されたファイルのXML文書を解析します。このインスタンスで前にpaserstringまたはparsefileが呼ばれていると、これは死にます。(die)
 
startハンドラを通じて受け取られる属性名を渡したとき、デフォルトとしてその属性が指定されていれば、trueを返します。
 
finish
すべてのハンドラの設定をはずします(途中で設定した内部のものも含めて)、しかしexpatはドキュメントの最後かエラーになるまで解析をつづけます。ハンドラ設定をした状態よりもかなり早く終わります。

関数

XML::Parser::Expat::load_encoding(ENCODING)
外部エンコーディングをロードします。ENCODINGはエンコードの名前か、ファイルの名前です。拡張子の前までは小文字に変換され、拡張子がなければ'.enc'が付けられます。そして、絶対パス(つまり'/'で始まる)でなければ、@Encoding_Pathパスリストが使われ、最初に見つかったファイルが使われます。

ファイルのなかのエンコーディングがロードされ、%Encoding_Tableに保管されます。同じ名前の先に指定されたエンコーディングは置き換えられます。

この関数は自動的に、知らないエンコーディングにぶつかったときにexpatによって呼び出されます。Expatは同じエンコーディング名のためにこの関数を2度も呼び出してはいけません。ユーザがこの関数を使うのだとすれば、@Encoding_Pathリストに含まれていないエンコーディングを明確にロードするためだけです。


作者

Larry Wall <larry@wall.org> wrote version 1.0.

Clark Cooper <coopercl@sch.ge.com> picked up support, changed the API for this version (2.x), provided documentation, and added some standard package features.


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。