XML::QLモジュール(日本語チョー訳)

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仕様との違いについても記述します。


メソッド

query( "query" )
このモジュールを使うために、唯一必要なメソッドです。この1つのメソッドがユーザが適正なXML-QL問い合わせをモジュールに渡すことを可能にしています。そして戻り値がその出力です。

XML-QL: 問い合わせ言語

基本的な文法は2つの部分で構成されます。検索するデータを記述するWHERE節と見つけたデータをどのように返すかを記述するCONSTRUCT節です。

WHERE
WHERE XML検索文字列 [ORDER-BY 変数 [DESCENDING] [, 変数 [DESCENDING]] ] IN 'ファイル名'

WHERE節はいくつかの部分に分けることが出来ます。最初は「検索文字列」、2番目はオプションでSQLでのORDER BYによく似た「ORDER-BY節」、そして最後に必須の「XMLドキュメントファイル名」です。それぞれの部分について以下で述べます。

XML検索文字列
検索文字列はXMLとして正しい文字列でなければなりません。これはこのモジュールが仕様とは違う点の1つです。検索文字列をXML::Parserモジュールで解析できるように、このような方法で実装されています。

問い合わせを作る最初のステップはドキュメントのなかで検索するタグを上げることです。例えば以下のような検索文字列を考えてみます。

        <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正規表現で使える能力の一部だけを許しています。このモジュールでは正規表現の全ての範囲を使用可能にしています。これは同時に、ピリオド(.)、括弧()、鍵括弧([])をエスケープしなければならないということも意味しています。タグ以外のものはすべて大文字小文字が無視されます。

 
TYPEのマッチについていえば、その値も取得したいとします。この例について考えてみて下さい:

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
ORDER-BY節は、その変数に取り出されるデータでソートすることを可能にします。複数の変数を指定することが出来ます。さらに逆方向のソートのためにDESCENDINGを指定することが出来ます。この節は必須ではありません。例えば:

ORDER-BY $type, $author DESCENDING

IN
IN 節はXMLファイルの名前を指定する必須の節です。これはLWPによってサポートされるURLのいずれかか、クォーテーションで囲まれた1つのファイル名が指定できます。このモジュールのこの後のバージョンでは、複数のファイル、ディレクトリをサポートするつもりです。以下のように指定できます:

IN 'REC-xml-19980210.xml'
IN 'file://othermachine/share/filename.xml'
IN 'http://www.example.com/file.xml'

CONSTRUCT
CONSTRUCT節で、出力のためのテンプレートを指定することが出来ます。テンプレートはCONSTRUCTという単語の後の最初のスペースからXML-QL問い合わせの最後までの文字に対応します。例えば:

$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.


ホーム Perlの小技

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