by Hippo2000(1999/8/24)
XML::QLモジュールなのです。といってもほとんどがXML-QLの説明になっています。
なおこのドキュメントはXML::QLモジュールをインストールしたときに一緒にはいるQl.htmlを日本語に訳そうとしたものです。わかりにくい部分は本物を見てください。(^^;;
原本の著作権はMatt Sergeant氏、Robert Hanson氏がお持ちです。
Matt Sergeant さんにはメールで了解をいただきました。なお内容等が間違っていたら修正します。ご連絡ください。
XML::QL - XML問い合わせ言語
0.07
$ql = 'WHERE <head>$head</head> ORDER-BY
$head IN "file:REC-xml-19980210.xml"
CONSTRUCT $head';
print XML::QL->query($sql);
このモジュールは、W3Cにより発行された「XML-QL:A Query Language for XML(XMLのための問い合わせ言語)」という記事の早期の実装です。XML-QLはユーザに、まるでデータベースのようなXMLドキュメントへの問い合わせと、出力の組立をに可能にします。 今のところ、このモジュールは仕様で記述されている機能の一部しか提供していません、また使いやすいようにその一部分を変更しています。本書では、このモジュールの機能とともにXML-QL仕様との違いについても記述します。
基本的な文法は2つの部分で構成されます。検索するデータを記述するWHERE節と見つけたデータをどのように返すかを記述するCONSTRUCT節です。
WHERE節はいくつかの部分に分けることが出来ます。最初は「検索文字列」、2番目はオプションでSQLでのORDER BYによく似た「ORDER-BY節」、そして最後に必須の「XMLドキュメントファイル名」です。それぞれの部分について以下で述べます。
問い合わせを作る最初のステップはドキュメントのなかで検索するタグを上げることです。例えば以下のような検索文字列を考えてみます。
<BOOK>
<AUTHOR></AUTHOR>
</BOOK>
この検索文字列はBOOKタグのなかにネストしたAUTHORタグを検索します。しかし取り出すための情報が何も選択されていないことに注意して下さい。以下の例で、実際にある情報を取ってきます:
<BOOK>
<AUTHOR>$author</AUTHOR>
</BOOK>
変数名$authorはこのタグの中で見つかった情報を取ってきます。そしてその情報を問い合わせのCONSTRUCT節で使えるようにします。変数名がドル記号($)で始まっていることに気が付いたかもしれませんが、これは仕様で要求されています。Perlでは、問い合わせがもしダブル・クォーテーションで囲まれていたら、このドル記号はエスケープしなければいけないということになります。
以下の例では、さらに進んで、'non-fiction'の本を検索します:
<BOOK TYPE='non-fiction'>
<AUTHOR>$author</AUTHOR>
</BOOK>
同様にこれを正規表現で表すことが出来ます:
<BOOK TYPE='non-.*'>
<AUTHOR>$author</AUTHOR>
</BOOK>
ここも、このモジュールが仕様とは違う領域です。仕様の中で定義されている正規表現の能力は単にPerl正規表現で使える能力の一部だけを許しています。このモジュールでは正規表現の全ての範囲を使用可能にしています。これは同時に、ピリオド(.)、括弧()、鍵括弧([])をエスケープしなければならないということも意味しています。タグ以外のものはすべて大文字小文字が無視されます。
Now lets say that besides matching the TYPE, we also wanted to grab the value. Consider this example:
<BOOK TYPE='non-.* AS_ELEMENT $type'>
<AUTHOR>$author</AUTHOR>
</BOOK>
AS_ELEMENTキーワードは、問い合わせでのCONSTRUCT部分で使えるように、マッチする値を保存できるようにします。
ORDER-BY
$type, $author DESCENDING
IN
'REC-xml-19980210.xml'
IN 'file://othermachine/share/filename.xml'
IN 'http://www.example.com/file.xml'
$ql
= $ql = '(where節..)
CONSTRUCT
Type: $type
Author: $author';
この出力は、改行、タブ、"Type:"、$typeの内容、改行、タブ、"Author:"、$authroの内容になります。この構造は見つかった分だけ繰り返され、1つの文字列として返されます。
(訳者注:実際にはCONSTRUCTから次の空白以外の文字までは無視されるようです)
Robert Hanson - 初期バージョン rhanson@blast.net
Matt Sergeant - できる限りの小さな修正のみ msergeant@ndirect.co.uk, sergeant@geocities.com
Robert's Original licence was: I hereby reserve NO rights to this module, except for maybe a little recognition if you decide to rewrite it and redistribute as your own. Beyond that, you can do whatever you want with this. I would just appreciate a copy of any improvements to this module.
However that only stands for version 0.01 of the module. All versions above that are released under the same terms as perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。