パーザーMacSgmls


目次

はじめに ▼
SGMLパーザー ▼
Sgmls ▼
MacSgmlsの開発動機 ▼
MacSgmlsの操作 ▼
MacSgmlsの配布 ▼
問題への対処 ▼
MacSgmls ver.1.1.4 バグ情報 ▼

はじめに

 現在,SGMLの導入が各分野で始まっていますが,その検討に役立つと思われるSGMLパーザー(SGML構文解析系)のMacSgmlsを紹介します。今までのほとんどのSGMLパーザーはUNIXやDOSで動くものでありましたが,このMacSgmlsは私(岸 和孝)が開発したフリーウェアで,Macintoshで動くSGMLパーザーとしては初めてのものです。


SGMLパーザー

 SGMLパーザーとは,SGMLで書かれた文書デ一タについて,その文書型定義(DTD)が文法的に正しいかどうか,またDTDに基づく文書実現値のタグ付けが正しいかどうかを調べたり,さらに後処理が容易になるように文書実現値を要素構造情報集合(ESIS:Element Structure Information Setの略)の形式へ変換する応用プログラムで,構文解析系とも呼ばれます。このようなSGMLパーザーは,SGML文書処理のワークフローにおいて常時用いられる道具として重要な位置付けにあります。[図1を参照]

図1 SGML文書処理のワークフロー

▲図1 SGML文書処理のワークフロー


Sgmls

 商用のSGMLパーザーあるいはSGMLパーザーを組み込んだエディターが販売されていますが,やや高価であり,事前の研究用として,とりわけ個人が使うには難があります。そうしたことからフリーウェアのSGMLパーザーが注目されるわけです。

 フリーウェアのSGMLパーザーとしてはJames Clark氏が開発したSgmlsが有名です。現在,UNIX(Linux,Solaris,SunOS,DEC/OSF,MachTen),Win32,DOS,OS/2に移植されたものが配布されています。[ftp://ftp.jclark.com/] これらはいずれもUNIX風のコマンド操作で動かすものです。

 私は社団法人日本印刷技術協会(JAGAT)で1996年以来「五日間でわかるSGMLとPerl」のセミナーを担当しています。その実習では当初DOS版のSgmlsをWindows95のDOS互換ボックスで使っていましたが,その操作はひいき目にも容易ではありませんでした。そこでSgmlsのGUI(グラフィカル・ユーザー・インターフェース)を設計し,まずMacintoshへ移植した次第です。

 ところで,SgmlsのMachTen版はMacintosh版とは呼べなくはありませんが,それらしいGUI操作はできません。また,SgmlsのWin32版でもWindows風のGUI操作はできません。また,MacintoshでSoftWindowsを介してWin32版を使うにしても同じことです。SgmlsのOS/2版もUNIXエミュレーターのemxによるもので,やはりGUI操作はできません。

 このようにフリーウェアのSgmlsがUNIXの枠を出ないことや,DTPでは極めて優位にあるMacintosh環境にSGML応用プログラムがないことには,UNIXの方がテキスト処理の歴史が長いという理由以外の,私の知らない事情があるのかもしれません。


MacSgmlsの開発動機

 そうした事情はともかく,SgmlsのMacintosh版は,Sgmlsのソースコード(sgmls-1.1-J0.2)に基づいて開発しました。最初のARCSGMLはCharles F. Goldfarb氏によって開発され,その後,そのソースコードを元に,SgmlsがJames Clark氏によって翻案されました。このSgmlsが前述のように様々なプラットフォームへ移植されています。DOS版のSgmls-Jは,そのSgmlsを土屋哲氏がシフトJISコードを扱えるように翻案したものです。

 SgmlsのソースコードはC言語で記述され,全体で約8万行あり,TeXアプリケーションのソースコードの4倍ほどになる労作です。この場を借りて先輩たちへ謝意を表します。

 私はMacintosh版のSgmlsをMacSgmls(バージョンl.1)と名付けました。MacSgmlsの構造はちょうどモナカのようなもので,おいしいアンコに相当するSgmlsをMacintoshのGUIという引き立て役のカワで包んでいると思って下さい。従って,私の開発部分はGUI関連のモジュールに過ぎず,MacSgmlsの構文解析の機能はSgmlsとほとんど同じです。


MacSgmlsの操作

 MacSgmlsはメニューやメッセ一ジをもちろん日本語で表示しますが,それらを英語で表示するようにも簡単に切り換えられます。その機能はソフトウェア輸入偏重の昨今,MacSgmlsが欧米でも使えるようにお返しのつもりで組み込んだものです。

 SGMLパーザーの操作で最も難しいところは条件設定です。Sgmlsでは環境変数を設定したり,非常に長いコマンド行を打たなければなりません。MacSgmlsでは条件設定を分かりやすいダイアログにしました。[図2を参照]

図2 MacSgmlsの条件設定

▲図2 MacSgmlsの条件設定

 MacSgmlsでは,指定した文書フォルダーの中の幾つかの関連する文書データ(文書型定義,データ実体,一般文実体など)をファイル名テンプレートによって自動的に識別するように設定できます。とりわけ,公的公開識別子による文書実体の識別は複難であり,運用を分かりやすくするための工夫をしました。[図3を参照]

図3 MacSgmlsのファイル名テンプレート

▲図3 MacSgmlsのファイル名テンプレート

 MacSgmlsでは,シフトJISコードか拡張UNIXコードで表わされた文書データを扱うことができます。

 一般に,Macintoshはインタラクティブ(対話型)処理が中心で,バッチ(一括型)処理が弱いとされていますが,MacSgmlsでは条件設定と構文解析処理を分けており,ドラッグ・アンド・ドロップによってバッチ処理もできます。つまり,MacSgmlsのアイコンに対して幾つかの文書データをまとめて移動すれば,次々に構文解析し,その結果はファイルへ次々に出力されます。出力されるESIS形式のデータは要素構造を扱うSGML準拠応用プログラム(例えば,SgmlForm)で処理できます。

 MacSgmlsは,ESIS形式のデータ以外に,エラーリストや容量状況リストを出力することもありますので,それらにそれぞれ,例えば,‘.esi’,‘.err’,‘.cap’といった「拡張子」を付けて区別しています。

 MacSgmlsの説明書はオンラインマニュアルにしてあり,操作中に随時参照できます。また,その説明書の内容はSGML(HTML)形式で保存出力されますので,SGMLの演習に応用できるでしょう。

 MacSgmlsは,文書データを入力・編集したり,さらにタグを色分けで強調できる簡単なエディターを備えています。これは元のSgmlsにはない機能です。


MacSgmlsの配布

 ここで紹介したMacSgmlsの配布は,パソコン通信とインターネットで行います。現在,パソコン通信ではニフティサーブのFPRINTのデータライブラリ(No.6)で配布しています。また,インターネットでは“http://hyperarchive.lcs.mit.edu/HyperArchive/Archive/text/sgml-tool.hqx”で配布しています。今後,最新版はそれらのサイトから入手して下さい。


問題への対処

 MacSgmlsにはまだ幾つかの問題(欠陥や不具合点)が潜んでいると思われます。Sgmlsそのものにも幾つかの問題もあるようです。私の環境や能力だけでは十分に検査できませんので,是非多くの方々からのご指摘やご指導をお願いします。

MacSgmls ver.1.1.4 バグ情報 

  1. オンラインヘルプの表示においてSave(保存出力)ボタンを押した瞬間にフリーズすることがあります。この原因は,よく分かっておりません。
  2. エラー検出時に“scratchnnnn”(nnnnは数字列)というファイルが生じることがあります。この原因はMacSgmlsの後始末が悪いためです。実害はありませんので,もし生じましたらゴミ箱へ捨てて下さい。
  3. 条件設定において,存在しないSGML宣言又は文書型定義を指定した場合に,フリーズすることがあります。これは,条件設定した後に,それらのファイルを別の場所に移したのを忘れて,構文解析するような操作をすると生じます。この原因は分かっていますが,直す時期は未定です。

(1997年9月記)


(c)1998 JAGAT