作者: 閑舎
日時: 2003/11/06(10:50)
 皆さん、こんにちは。

 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/