AnyData-0.05 > AnyData::Format::XML

名前

 AnyData::Format::XML - XMLへのtieされたハッシュとDBIによるアクセス

概要

 # 多次元のtieされたハッシュを介してXMLデータにアクセス
 # 完全な詳細はAnyData.podをご覧ください
 #
 use AnyData;
 my $table = adTie( 'XML', $file, $mode, $flags );

 または

 # データをXMLから、そしてXMLへ変換する
 # 完全な詳細はAnyData.podをご覧ください
 #
 use AnyData;
 adConvert( 'XML', $file1, $any_other_format, $file2, $flags );
 adConvert( $any_other_format, $file1, 'XML', $file2, $flags );

 または

 #  DBIとSQLを介してアクセス
 # 完全な詳細はDBD::AnyData.podをご覧ください
 #
 use DBI;
 my $dbh = DBI->connect( 'dbi:AnyData' );
 $dbh->func('mytable','XML',$file,$flags,'ad_catalog');

こられの例のすべてに適合するオプションのフラグについての下記の説明を ご覧ください。

説明

このモジュールは別のデータベース・ファイル実際には作成することなく、 データベースとして扱うことにより、XMLデータそしてファイルを作成し、 検索し、変更そして/あるいは変換することを可能にします。データは AnyData.pmを使って多次元のtieされたハッシュを通して、あるいは DBD::AnyData.pmを使ってDBIとSQLコマンドを通してアクセスすることができます。 使い方の完全な詳細については、それらのモジュールをご覧ください。

このモジュールはMichel Rodriguezの素晴らしいXML::Twigの上に構築されています。 つまりAnyDataインターフェースが、これによりDBDからの情報を含むことができ、 データ構造を類推する点においてより賢くなることができ、巨大なファイルについて メモリ消費を減らすことができるということを意味します。

インポートのオプションはほとんどあらゆる長さや複雑さのXMLを インポート/アクセス/変更することを可能にします。これには異なるサブツリーを 別のあるいはジョインされたデータベースとしてアクセスするという能力も 含まれます。

エクスポートと変換のオプションは、ほとんど全てのソースから(perlの配列、 DBIデータベースのすべてなど)データを取得し、XMLファイルとして 出力することを可能にします。ネストしたタグでリストにするDTDと どのカラムが属性として出力されるかを与えることにより、 結果として出力されるXMLの書式を制御することができます。そして/あるいは 6個の簡潔さや空白の異なるレベルを生成するためにXML::Twig pretty_print 設定を使うことができます。

以下のドキュメントは、両方のインターフェースでXMLがどのように扱われるかを チューンするために使うことが出来る特別なフラグについての概要を説明しています。

以下に上がられているフラグはXMLドキュメントでのタグと属性と結果としての データベースでのカラムとの関係を定義します。多くの場合、デフォルトを 受入ることができ、データベースは自動的に構築されます。しかし、 どのダグと属性にあなたが興味を持っているかとそれらとデータベースのカラムとの 関係を指定することにより、データベースの生成をファイン・チューンする こともできます。

使用法

必要なもの

tieされたハッシュ・インターフェースを使うためには以下のものが必要です

 AnyData
 XML::Twig
 XML::Parser

DBI/SQLインターフェースを使うためには、上記のほかに以下のものも必要です

 DBI
 DBD::AnyData

必要なフラグ ( なし )

何もフラグが指定されなければ、モジュールはファイルやデータそのものを 検査し、もしあればDTDを利用しながら、そうでなければXMLツルーの先頭の 子供を構造の情報のために調査しながら、データベース構造を判定します。

オプションのフラグ

 デフォルトの動きで十分でなければ、カラム名を定義するために使われる
 "レコード・タグ(record tag)"を指定するか、完全なタグ-カラム マッピングを
 定義することができます。

簡単なXMLでは、何もフラグは必要ありません:

 <table>
    <row row_id="1"><name>Joe</name><location>Seattle</location></row>
    <row row_id="2"><name>Sue</name><location>Portland</location></row>
 </table>

レコード・タグはデフォルトでは"row"という最初の子供になります。 カラム名はレコードタグの属性とレコード・タグの下に入っている全てのタグから 生成されます。そのためこの例でのカラム名は"row_id"、"name"、"location"になります。

もしレコード・タグが最初の子供でなければ、指定する必要があります。例えば:

 <db>
   <table table_id="1">
     <row row_id="1"><name>Joe</name><location>Seattle</location></row>
     <row row_id="2"><name>Sue</name><location>Portland</location></row>
   </table>
   <table table_id="2">
     <row row_id="1"><name>Bob</name><location>Boise</location></row>
     <row row_id="2"><name>Bev</name><location>Billings</location></row>
   </table>
 </db>

この場合、それがツリーの最初の子供ではないので、"row"をレコード・タグとして 指定する必要があります。カラム名は(その親がルートでなければ)rowの親の属性、rowの属性、 サブのタグから作られます。 つまり"table_id"、"row_id"、"name"、"location"になります。

場合によっては特定の完全なタグ−カラムのマッピングを指定する必要があります。 例えばXMLで使われているものとは違う名前をデータベース・カラムに使いたい (特にXMLタグが適切なSQLカラム名でない場合)など。XMLツリー内で異なる場所で同じ名前を 持つ2つのタグがある場合にもマッピングを指定する必要があります。

カラム・マッピングはカラム定義の配列へのリファレンスです。カラム定義は簡単なタグの名前か、 XMLタグの完全なパスが入ったキー、値は希望するカラム名のエイリアスが入ったハッシュへの リファレンスです。

例えば:

  col_map => [ 'part_id', 'part_name', 'availability' ];

これはこれらの名前をもつ最初の3つのタグを見つけ、タグと同じ名前を使ってデータベースを作ります

あるいは:

  col_map => [
               { '/parts/shop/id'        => 'shop_id'},
               { '/parts/shop/part/id'   => 'part_id'},
               { '/parts/shop/part/name' => 'part_name'},
             ];

これは左で参照される3つのタグを見つけ、右側で参照されるこれら3つのカラム名を持った データベースを作成します。

XMLに出力するとき、出力を制御するためDTDを指定することができます。例えばCSVまたは 配列(Array)からテーブルをインポートする場合、XMLとして出力し、 そのカラムがタグになり、どれが属性となるかを、タグのネストもDTDで指定することができます。

XMLフォーマット・パーサーは、それ自身はXML::Parserをベースとしている、 Michel RodriguezのXML::Twigの上に構築されています。これらのモジュールのパラメータは、 adTie()や他のコマンドのためのフラグで渡すことができます。これにはXMLをどのように 出力するかを指定するための"prettyPrint"フラグや同様のProtocolEncodingも含まれます。 ProtocolEncodingのデフォルトは'ISO-8859-1'で、他のすべてのフラグはXML::Twigと XML::Parserのデフォルトが保たれています。詳細についてはそれらのモジュールの ドキュメントをご覧ください;

 注意:他のフォーマットとは違い、XMLフォーマットは変更をそれが入った時点では保存せず、
 adExport()コマンドで明示的に保存するよう要求したときにのみ変更が保存されます。

作者と著作権(=AUTHOR & COPYRIGHT)

copyright 2000, Jeff Zucker <jeff@vpservices.com> all rights reserved

翻訳者

川合孝典(GCD00051@nifty.ne.jp)