MAGIC V10解析(1)
MAGICのVersion 10(以下「V10」)のβ版が公開されてからしばらく経ちますが、正直、あまり評価のほうは進んでいない状態です。でも、そうも言ってられないので、少しいじりながら自分の備忘録のためにも、このブログですこしずつでもまとめていこうかと考えています。
さて、V10の目玉としては、今までアプリケーションのリポジトリ自体を開くのに、データベースエンジンが必要とされていましたが、それらのソースが全てXMLになったこととです。噂では実行版を動かすときも、暗号化されたXMLを解凍してそれを読み込んで動くらしいです。(ちょっとパフォーマンス的に心配なところもあるんですけど、大丈夫なんでしょう・・・)
XMLのリポジトリを解析する作業は、ちょっと個人的には楽しみにしているところでもあるんですけど、何しろこの数ヶ月は割ける時間が無さそうなので、地道にやろうと思っています(ライフワークが増えた?)。ちょっと見た目には、V9のリポジトリファイルよりはより理解し易い記述だと思います(当たり前ですね(^^;)。
まずはとっつきやすいところとして、プロジェクトフォルダの下にできる「Source」フォルダを見ると、「ProgramHeaders.xml」というファイルがあります。
これは、言わばプログラムの一覧を管理しているテーブルで、IDに対するプログラム名や、修正日付、パラメータ、コメント等の一覧を取得するには好都合のファイルです。
今回は、スタイルシートを使って、このXMLファイルからプログラム一覧表を作ってみようと思います。
まず、スタイルシートは、XML内に記述することも可能ですが、V10が作るXMLファイルを直接書き換える訳にはいかないので、DOMのオブジェクトを使い、スタイルシートとXMLをロードして表示させるHTMLファイルを作ることにします。プロジェクトフォルダに「prg01.htm」という名前で作りましょう。
<html>
<head>
<title>プログラム一覧</title>
<script language="JavaScript">
<!--
function disp(){
var objDoc=new ActiveXObject("Microsoft.XMLDOM");
objDoc.async=false;
objDoc.load("Source/ProgramHeaders.xml");
var objStl=new ActiveXObject("Microsoft.XMLDOM");
objStl.async=false;
objStl.load("prg01.xsl");
lst.innerHTML=objDoc.transformNode(objStl);
}
// -->
</script>
</head>
<body onload="disp()">
<div id="lst"></div>
</body>
</html>
更に、スタイルシート(prg01.xsl)を作成します。
取り敢えず、下記のソースをコピペしてください。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" version="4.0" encoding="Shift_JIS" />
<xsl:template match="/">
<html>
<head><title>プログラム一覧</title></head>
<body>
Version : <xsl:value-of
select="Application/Header/Version/@val" /><br/>
WithIsn : <xsl:value-of
select="Application/Header/WithIsn/@val" /><br/>
<xsl:apply-templates select="Application" />
</body>
</html>
</xsl:template>
<xsl:template match="Application">
<xsl:apply-templates select="ProgramsRepositoryHeaders" />
</xsl:template>
<xsl:template match="ProgramsRepositoryHeaders">
<table border="2" width="100%" align="center">
<tr bgcolor="#f0f0c0">
<td align="center" colspan="7">
<b>ProgramsRepositoryHeaders</b></td>
</tr>
<tr bgcolor="#c0f0f0">
<td width="6%" align="center" valign="middle" rowspan="2">
<nobr>id</nobr></td>
<td width="44%" align="center" valign="middle" rowspan="2">
<nobr>Description</nobr></td>
<td width="10%" align="center" valign="middle" colspan="2">
<nobr>Parameters</nobr></td>
<td width="10%" align="center" valign="middle" colspan="2">
<nobr>LastModified</nobr></td>
<td width="30%" align="center" valign="middle" rowspan="2">
<nobr>comment</nobr></td>
</tr>
<tr bgcolor="#c0f0f0">
<td width="5%" align="center" valign="middle">
<nobr>Count</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Attributes</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Date</nobr></td>
<td width="5%" align="center" valign="middle">
<nobr>Time</nobr></td>
</tr>
<xsl:for-each select="Program">
<tr>
<td align="right" valign="top" >
<xsl:value-of select="Header/@id" /></td>
<td align="left" valign="top" >
<xsl:value-of select="Header/@Description" /></td>
<td align="right" valign="top" >
<xsl:value-of select="Header/ReturnValue/ParametersCount/@val" /></td>
<td align="left" valign="top" >
<xsl:value-of
select="Header/ReturnValue/ParametersAttributes/@ParametersAttributes"/>
</td>
<td align="left" valign="top" ><xsl:value-of
select="Header/LastModified/@date" /></td>
<td align="left" valign="top" ><xsl:value-of
select="Header/LastModified/@time" /></td>
<td align="left" valign="top" ><xsl:value-of
select="Header/Comment/@val" /></td>
</tr>
</xsl:for-each>
</table>
<p />
</xsl:template>
</xsl:stylesheet>
以上で完成です。あとは、プロジェクトフォルダに置いた、「prg01.htm」をダブルクリック等で実行します。
この2つのファイルをプロジェクトフォルダにコピーすれば、取り敢えずどんなアプリケーションでも、プログラムの一覧は簡単に表示させることが可能と言うわけです。
今度は、V10を開いて、プログラムを修正してみます。「F12」キーでメインプログラムにコメントを入れてみます。
プログラムは書き換わったようですが、ブラウザの再表示を行っても変化がありません。
今度は、V10側でプロジェクトを閉じてみます。
再度、ブラウザの再表示を行うと今度は記載したコメントが表示されました。
タイミング的には、メモリ内に編集内容が保持されているのでしょうか。プロジェクトを閉じるときに実際のリポジトリであるXMLへの書き出しが行われているようです。
- Category(s)
- dbMAGIC
