MAGIC V10解析(2)
前回は、開発中のアプリケーションを管理しているXMLファイルからプログラムの一覧を取得するためのスタイルシートを作成しました。「ProgramHeaders.xml」というファイルを見ることにより、プログラムの一覧が取得できることがお分かり頂けたと思います。
プログラム関連のファイルには、「ProgramHeaders.xml」というファイル以外にもいくつかあるようです。これらをまとめると下表のようになります。
| No. | ファイル名 | 主な目的 |
|---|---|---|
| 1 | ProgramHeaders.xml | プログラムをID順に列挙し、プログラム名や更新時刻を記述 |
| 2 | Progs.xml | 開発画面のプログラムリポジトリの表示並び順を管理 また、フォルダの情報と、そのプログラムリポジトリ画面内の位置を管理 |
| 3 | Prg_####.xml | 実際のプログラム毎の内容を記述。 「####」はプログラムのidで、登録順に連番が振られる。画面の表示番号とは必ずしも一致しない。 |
さて、ここで話は変わります。V10になって、リポジトリ出力の形式もすべてのタイプについてXMLとなっているようです。
「リポジトリ入出力」で、「タイプ」を「E=プロジェクト全体」として指定すると、アプリケーション全てを1個のXMLファイル(ファイル名初期値:「Project.xml」)に出力するようです。
これをieで開くと下記のような構造になりました(ルート配下のみ表示)。
V9までのリポジトリファイルをご存知の方はよく分かると思いますが、構造的にはほぼ同一で、順番も似ています(HelpRepositoryの位置はだいぶ前に移動などしていますが・・・)。
それでは、このプロジェクトリポジトリのXMLファイルの中で、プログラムの関連はどのように記述されるのでしょうか?
メインプログラムに相当する部分を、プロジェクトリポジトリで表示すると下図のようになります。
同じメインプログラムのリポジトリファイル(Prg_1.xml)を表示すると下図のようになります。

結論的には「Prg_####.xml」を、(ID順ではなく)プログラムリポジトリ画面表示順に出力したものとなっています。ProgramHeaders.xmlや、Progs.xmlに記載されていた内容はありません。これらの2つのファイルは、プログラムの追加や削除などの更新による表示順を管理しているだけで、最終的な段階では吸収されるものと考えることができます。
前回作成したファイル(prg01.html、prg01.xsl)をそれぞれコピーして「prg02.html」、「prg02.xsl」を作成します。それぞれのソースを下記のように修正して下さい。
prg02.htmlの9行目と、12行目を下記のように修正します。(2つの読み込むファイルを変えるだけです。)9行目: objDoc.load("Export/Project.xml");12行目: objStl.load("prg02.xsl");prg02.xmlは下記のソースをコピペします。
<?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="ProgramsRepository" />
</xsl:template>
<xsl:template match="ProgramsRepository">
<xsl:apply-templates select="Programs" />
</xsl:template>
<xsl:template match="Programs">
<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="Task">
<tr>
<td align="right" valign="top" ><xsl:value-of select="position()"/>
</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>
前回は、プログラムのIDを「Application/ProgramsRepositoryHeaders/Program/Header/@id」で取得しましたが、今回の場合は、
プログラム番号を「Application/ProgramsRepository/Programs/Task/position()」で記述の順番から取得しています。(position関数を使用)
比較してみて頂ければお分かりかと思いますが、前回とほとんど似たようなソースとなっていますが、微妙にノードが変わっています。
それでは、プロジェクトリポジトリをスタイルシートで表示させてみます。
前回とほぼ同様の結果が得られることが分かりました。
プロジェクトファイルともなると、膨大な、サイズのファイルになる場合も多いかと思いますが、このような簡単なスタイルシートを作成しておくことにより、その全体像を知ることが可能です。これもXMLならではのことですね。
- Category(s)
- dbMAGIC
