皆さん、こんにちは。
XML をデータ形式の基本とする方向はいろいろなアプリケーション、業界など
で既成事実化されているようですが、その扱いは密接にからみあったライブラリ
やアプリケーション群を必要としたり、バージョンによる相違に気を配ったり、
面倒な感を免れないと思います。
特に個人で貯めるデータは、そのままではなかなか使えないのが現状です。と
いって、他フォーマットに Perl や Ruby で変換するのは、そういう環境を整え
るところから始めるので簡単でなく、タグ中心のフォーマットではないので、ス
クリプトの書き方に 2 倍気をつかわなければならないという面倒もあります。
そこで、タグ中心に動き、簡単な文法構造を持った変換器ができないか、と考
えました。原理は AWK 風で、
タグの特徴 {
if (/REGEXP/) {
$var = /REGEXP/;
s/REGEXP/STRINGs/;
}
}
というようなタグドリブンとでもいえる処理を目指します。そうして、
<?xml version="1.0" encoding="shift_jis"?>
<見積書>
<書式>
<書式名>B5Y</書式名>
</書式>
<表書>
<書類番号>03101901</書類番号>
<タイトル>パソコンセットアップ</タイトル>
<日付>2003/10/19</日付>
<依頼者>株式会社 テキスト工房</依頼者>
<敬称>御中</敬称>
<担当者>閑舎</担当者>
</表書>
<明細>
<行 num="1">
<名称>パソコン</名称>
<単位>式</単位>
<数量>1</数量>
<単価>125000</単価>
</行>
<行 num="2">
<名称>手数料</名称>
<単位>式</単位>
<数量>1</数量>
<単価>10000</単価>
</行>
</明細>
</見積書>
というような文書から例えば、
<?xml version="1.0" encoding="euc-jp"?>
<領収書>
<書類番号>03101901</書類番号>
<タイトル>パソコンセットアップ</タイトル>
<日付>2003/11/01</日付>
<依頼者>株式会社 テキスト工房</依頼者>
<敬称>御中</敬称>
<担当者>閑舎</担当者>
<単価合計>135000</単価合計>
<税込合計>141750</税込合計>
</領収書>
を作成したり(XML 形式を扱えるアプリ間でフォーマットを変換して使う)、
<html>
<head>
<title>領収控え</title>
</head>
<body>
<h1>領収控え</h1>
<hr>
<div align="right">2003/11/01</div>
<h2>パソコンセットアップ</h2>
<dl>
<dt>依頼者</dt><dd>株式会社 テキスト工房 御中</dt>
<dt>担当者</dt><dd>閑舎</dd>
<dt>単価合計</dt><dd>135000</dd>
<dt>税込合計</dt><dd>141750</dd>
</dl>
<div align="right">書類番号: 03101901</div>
</body>
</html>
というようなホームページを作成してブラウザで簡単に確認する。さらに、
\documentstyle[a4j]{jarticle}
\pagestyle{empty}
\begin{document}
\section*{領収控え}
\begin{flushright}2003/11/01\end{flushright}
\subsection*{パソコンセットアップ}
\begin{description}
\item[依頼者] 株式会社 テキスト工房 御中
\item[担当者] 閑舎
\item[単価合計] 135000
\item[税込合計] 141750
\end{description}
\begin{flushright}書類番号: 03101901\end{flushright}
\end{document}
というような LaTeX 文書に変換し、場合により、より細かい表示上の設定をし
て印刷する、など。
−*− −*− −*−
ここまで見てもらえばわかると思うのですが、xml2xml, xml2html, xml2latex
などの機能を持ち、これを自分でスクリプトを書いて実現しようというものです。
スクリプトは XML のタグ構造解析を言語側が受け持つため、かなり簡単に書け
ます。
軽く(数百 KB を目指します)、文字コードコンバータを内蔵し(jis, euc,
sjis, utf-8 の自動認識、相互変換部分はすでに作成済み)、正規表現による削
除、作成、コピー、そして演算機能を持った簡易言語なわけです。
さらに、UNIX、Windows などの OS を超えてコンパイル可能なので(今のとこ
ろ UNIX はソースを提供して make install してもらう。ただ、あまりライブラ
リに依存しないように作るつもり)。Windows は MingWin にて同一ソースがコン
パイルでき、プログラムのみで単独に動くように持っていく(文字コードコンバー
タは問題なく動いた。正規表現も regex-0.12.tar.gz で何とかなりそう)……と
いうところです。
つまり、スクリプトと数百 KB のプログラムを持っていけば、OS を超え、マ
シンを超えて、どこでも同じ作業ができ、XML からの変換に関し、そう難しくな
いことなら何でもできる、という寸法です。
ただ、作るのが、C にそれほど慣れているとはいえない私なので、まあ、あち
こち引っかかるとは思いますが。予想通りの機能が実現すれば XML で文書は作っ
たけれど……ということがなくなると思います。
--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/