MAGIC V10解析(4)
はじめに
新年おめでとうございます。
今年も宜しくお願い致します。
さて、このCMSとして利用させて頂いているPloneですが、ちょっと内部的なデータがおかしくなってしまいまして(とあるデータが壊れた?)、この週末の休みを利用しデータを再構築しました。手順としては別なマシンにPloneをインストールし、それを同じようにカスタマイズし、最後に昨日までのこのサイトのデータを移し、全て同じように復元致しました。
入力するときは大変な労力を要したので、それと同じような作業量は最初から覚悟していたのですが、Ploneにはデータの入出力機能(Export, Inport)がありそれを使うことでとてもスムーズに作業を完結させることができました。例えば、「MAGIC Decrypter」とかタブが出ている単位でサブフォルダにデータが格納されているのですが、それを単位に一括してデータの移行ができるんです。それに気付き、とても重宝しました。
まずは、無事生き返りホッとしているところです。
えーと、話を戻します。前回はプログラムのソースのタスク構造をXMLスタイルシートを使って再帰的に取得することを行いました。でも、開発の場面でXMLスタイルシートを使うようなことはあまり無いかも知れませんね。私としては、XMLになったということの「恩恵」として、ひとつはこういうこともできるよ・・・ということが言いたかったんです。
さて、今日の本題は、V10で新しく機能が追加された「XML連携」に関することです。V10でMAGICは、標準のデータソースとしてXMLファイルを使用することができるようになりました。この機能は結構強力なので、いろいろなケースで威力を発揮するのではないかと思います。その反面、ちょっと「悩み」も増えてしまったんですが・・・。(このあたりはまたいつか話題にしたいと思います。)
何はともあれ、今回はこの機能を使ってスタイルシートで行ったようにプログラムの一覧を表示してみようと思います。
スキーマの定義
「XML連携」の機能を使う上で、XMLスキーマの定義は必須です。(MAGIC V10のスキーマも最初から提供してくれれば良いと思うけど・・・(^^;)
でも「XMLSPY」とかを使えば楽勝でしょう。(私もフリー版の「Home Edition」を使用しています。)
手順は慣れれば思ったより簡単です。XMLファイルのタグを階層的に連結させながら、階層構造図を描けばOKです。そのとき、属性値とかは省略せずに入力していきます。特にMAGIC V10のリポジトリの場合は、殆ど「属性」を使ってデータの値を定義している模様です。これを省略してしまうと、項目の値が取り出せませんし、数値にするか文字にするかなど、項目の型の判定にも影響が出ます。(なるべく数値らしきところは「integer」などを選択しましょう。)
ProgramHeaders.xmlのソースの先頭部分は次のようになっていると思います。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Application>
<Header>
<Version val="10001"/>
<WithIsn val="Y"/>
</Header>
この部分のXMLスキーマの入力手順は次のとおりです。
- XML SPYを起動
- 新規作成で、ドキュメントのタイプ=xsdを選択する
- 「ENTER_NAME_OF_ROOT_ELEMENT_HERE」と書かれているところに「Application」と入力
- 一番左にあるボタンをクリックし、画面を変える
- 「Application」ボックスを右クリックし、「Add Child」で「Sequence」を選択
- 追加された「Sequence」で右クリックし、「Add Child」」で「Element」を選択し「Header」を入力
- 追加された「Header」ボックスを右クリックし、「Add Child」で「Sequence」を選択
- 追加された「Sequence」で右クリックし、「Add Child」」で「Element」を選択し「Version」を入力、更にAttributes画面で「Attribute」を選択し、Nameに「val」を入力、Typeに「xs:integer」を選択
- 同じく「Sequence」で右クリックし、「Add Child」」で「Element」を選択し「WithIsn」を入力、更にAttributes画面で「Attribute」を選択し、Nameに「val」を入力、Typeに「xs:string」を選択
ここまでで、下図のような画面になると思います。

「Application/Header」の部分が終わりましたので、次は「Application/ProgramsRepositoryHeaders」からの入力を進めます。
スキーマの入力を完成させ、最後にファイルを保存します。(「ProgramHeaders.xsd」などの名前で登録します。)

データリポジトリの定義
さて、いよいよV10の登場です。
適当な名前の新規プロジェクトを作成します。このとき、下記の論理名を定義しておきましょう。
[MAGIC_LOGICAL_NAMES]
Project=(リポジトリの内容を検索させるプロジェクトのパス名)
Source=%Project%\Source
データリポジトリの画面を開き、下記のように定義します。
データリポジトリ名:ProgramHeaders
データソース名:%Source%\ProgramHeaders.xml
データベース:Default XML Database
プルダウンメニューの「オプション」から「定義取得」を実行し、作成したスキーマファイルのファイル名(ProgramHeaders.xsd)を入力します。
このとき、プロジェクトフォルダに格納しておくと、プロジェクトフォルダからの相対パス名で指定できるようです。

スキーマファイルを読み込む際に、ルートの要素を聞いてくるかもしれません。その時は「Application」を指定します。
正常に読み込まれると、ビューにツリーが表示されます。
次に、テーブルとして表示させる位置(MAGICでは「ビューのメイン要素」と呼ぶ模様)を指定します。
ノードの位置「/Application/ProgramsRepositoryHeaders/Program/Header」をクリックし、マウス右ボタンから「ビューに含める」を選択します。

初期値では、属性のタイプが「xs:string」のものは、文字タイプの書式「15」に、同じく「xs:integer」のものは数値の書式「N10」に設定されます。不適切なものは書式を修正しておきます。

インデックスを追加しておきましょう。タブの「インデックス」をクリックします。
例えば、「id」をインデックスとして作成しておきます。

これで、データ定義が終了しました。
実行結果
とりあえず、APGを使って実行してみましょう。「Ctrl+G」キーを押して実行させ、下記のような画面が表示されれば成功です。

MAGICに慣れた人なら、テーブル(現在はデータになったんですね)として定義さえできれば、あとは言わずもがなですね。
XMLファイルの場合は、同じファイルの中でもループする部分が幾つかあるので、その度毎に「ビューのメイン要素」を定義することになります。
なお、「ノードID」はどのようにして割り振られるのかは定かではありませんが、XMLファイルの全ノードに対してユニークな番号を割り当てるようです。親ノードを正しく指定すれば、この画面からレコードの追加(ノードの追加)もできるようです。
★参考ファイル
MAGIC V10解析(1)
Size
8339
-
File type
text/html
MAGIC V10解析(2)
Size
8904
-
File type
text/html
MAGIC V10解析(3)
Size
9714
-
File type
text/html
- Category(s)
- dbMAGIC
