
目次
はじめに ▼ ブックマーク方式 ▼ スタイル方式 ▼ 利用にあたって ▼ ブックマーク方式によるSGMLデータ入力 ▼ テンプレートの作り方 ▼ テンプレートを使った入力 ▼ 文書型定義 ▼ 保存された文書 ▼ スタイル方式によるSGMLデータ入力 ▼ 変換規則の骨組み生成 ▼ 変換規則 ▼ 文書実現値への変換 ▼ 変換された文書実現値 ▼ 文書型定義 ▼ RTFtoSGMLテストパッケージの配布 ▼
現在,SGMLデータの入力では専用のワープロやエディターが用いられていますが,それらの操作は今まで使い慣れたワープロやエディターと変わる場合が多いようで,使い勝手の面で導入には難があります。一番いいのは,現在使ってるワープロがSGMLに対応してくれることですが,そう都合よくはいきません。もっとも,SGMLの導入によって文書の様式が変わることがありますので,一概に操作面だけを問題にすることはないかもしれません。
ここで私(岸 和孝)が提案するのは,MS-Windows95やMacOSといったプラットフォームで動くポピュラーなMicrosoft Word(以下,MS-Wordと表わします)を用いて,SGMLデータを簡単に作成する方法です。MS-Wordを使う理由は,単にポピュラーであるということだけでなく,文書作成に有用な,テンプレート(「鋳型」の意味),ブックマーク(「しおり」の意味),スタイル指定,RTF(Rich Text Format)形式での入出力などの機能を備えているからです。
MS-WordにおけるSGMLデータの入力方法として,次の二つのアプローチを考えました。この二つを区別するために便宜上,ブックマーク方式とスタイル方式と呼びます。[表1を参照]
▼表1 MS-Wordによる入力方式
| 入力方法 | ブックマーク方式 | スタイル方式 |
|---|---|---|
| 適用に向いた文書 | 申込書,伝票など | 論文,手紙など |
| 文書型の指示 | ブックマーク | ブックマーク |
| SGMLタグへの対応 | ブックマーク | スタイル |
| スタイル | 固定 | 任意 |
| SGMLデータの出力 | SAVESGMLマクロ | RTFtoSGMLプログラム |
| 文書型の検証 | 不要 | 必要 |
ブックマーク方式では,文書型と同じ名前のブックマーク(ただ一つ)と,SGMLタグと同じ名前のブックマーク(複数)を付けたテンプレートを用意しておきます。このテンプレートを参照して執筆者は文書を入力します。
できあがった文書は,テンプレートのプルダウンメニューに用意されているSAVESGMLマクロによってSGMLデータとして保存出力されます。
このブックマーク方式は,申込書や伝票といった文書のレイアウトが固定している文書の入力に適しています。[表1を参照]
スタイル方式では,文書型と同じ名前のブックマーク(ただ一つ)と,文書作成に必要なスタイル(複数)を用意しておきます。そのスタイルは全く任意です。このテンプレートを参照して執筆者は文書を入力します。
できあがった文書は,RTF形式で一旦保存します。スタイル名とタグ名の対応を定義した変換規則に基づいて,このRTF文書はRTFtoSGMLプログラムによってSGMLデータへ変換されます。その変換では,タグ付けが文書型に合っているかどうかは検証されませんので,変換したSGMLデータをパーザー(構文解析プログラム)に通す必要があります。
このスタイル方式は,論文や手紙といった文書のレイアウトが可変の文書の入力に適しています。[表1を参照]
スタイル方式でも,ブックマーク方式のようにマクロによってSGMLデータ保存出力ができればいいのですが,そうしたマクロをBasicコードで記述するのは私にとっては困難です。どなたか試みていただけたら幸いです。
この二つの方式は文書の種類によって使い分ける必要がありますが,文書作成の操作は同じですから,エンドユーザーが方式の違いによって混乱することはないと思われます。
SAVESGMLマクロ(Basicコード)とRTFtoSGMLプログラム(Perlスクリプト)は,自由にご利用下さい。また,それらのコードの翻案は自由です。
今回配布するSAVESGMLマクロとRTFtoSGMLプログラムは,次の環境で動作確認しました。
| MS-Windows95 ver.4.00.950 | ThinkPad230Cs (Am5x86-P75) |
| Microsoft Word 97 SR-1 | |
| Perl ver.5.001 for Win32 Build 110 Japanization patch 4 | |
| MacOS ver.J1-7.5.5 | PowerBook4300cs |
| Microsoft Word 6.0 | |
| MacJPerl ver.5.1.5r4 J |
- 注1)SAVESGMLマクロについて
- MS-WordのバージョンによってBasicコードの文法は異なります。MS-Word 97ではVisual Basicですが,それ以前はWordBasicです。SAVESGMLマクロは,その二通りを用意してありますので,使い分けて下さい。
- 注2)MS-Word(RTF)文書の行末符号について
- MS-Word(RTF)文書の行末符号は,OSによって異なります。したがって,例えば,MacOSでのMS-Wordで作成したRTF文書をWindows95で処理する場合は,その行末符号を変更する必要があります。これはスクリプトでは対応していませんので,注意して下さい。
- 注3)RTF規格について
- Microsoft社のRTF規格は,安定した交換形式ではなく,MS-Wordのバージョンが上がると,変更が生じることがあります。そうした場合,このプログラムを変更しなければならないかもしれません。
なお,現在の版では画像データや表データの取り扱いはできませんので,注意して下さい。画像データや表データの取り扱い,解析検証機能の追加,二つの方式の併用などについては現在研究中です。
MS-Wordのブックマーク方式によるSGMLデータ入力で用いるテンプレートは,レイアウトが固定している文書において,エンドユーザーが入力しやすい様式に入力項目を割り付けたものです。
このテンプレート内の入力項目の一つ一つにブックマークを付けて項目の意味を表わします。それらのブックマークには,一つの文書内で重複のない名前を持たせますが,ディスプレイには表示されませんので,エンドユーザーが入力時に混乱することはありません。
文書型定義の仕組みとMS-Wordのテンプレートに関する,ある程度の知識があれば,プログラムを知らなくても簡単にSGML用テンプレートが作成できるでしょう。
ここで,誤解がないようにしておきたいことがあります。ブックマーク方式では,SAVESGMLマクロという「部品」を提供するだけで,具体的なテンプレート作成ツールを提供するわけではありません。言い換えれば,個々のSGML用テンプレートを制作することに付加価値が生じることになります。
テンプレートは次のような手順で作ります。
以上で,SGML用テンプレートは出来上がりです。
|
▲図1 SGML用テンプレート(矢印はブックマークを表わす)
|
▲図2 MS-Wordに追加されたSGML保存のためのメニュー
注)テストパッケージではSGMLメニューに「保存」の下に「読み取り」が表示されていますが,その機能はまだ実装されていません。
このSGML用テンプレートを使った入力は,次のような手順で行います。
|
▲図3 SGML用テンプレートの指定
|
▲図4 テンプレートに誘導される入力
|
▲図5 保存の開始
|
▲図6 保存完了の確認
この事例における文書型定義は,図7のとおりです。
<!DOCTYPE meishi [ <!ENTITY % fname "family, name"> <!ENTITY % cstatus "company, org?, div1?, div2?, status?"> <!ENTITY % adr "post, address, bil?"> <!ENTITY % tel "(telcity, telno)?"> <!ENTITY % fax "(faxcity, faxno)?"> <!ELEMENT meishi - - (%fname;, %cstatus;, %adr;, %tel;, %fax;, email?, type)> <!ELEMENT family - O (#PCDATA)> <!ELEMENT name - O (#PCDATA)> <!ELEMENT company - O (#PCDATA)> <!ELEMENT org - O (#PCDATA)> <!ELEMENT div1 - O (#PCDATA)> <!ELEMENT div2 - O (#PCDATA)> <!ELEMENT status - O (#PCDATA)> <!ELEMENT post - O (#PCDATA)> <!ELEMENT address - O (#PCDATA)> <!ELEMENT bil - O (#PCDATA)> <!ELEMENT telcity - O (#PCDATA)> <!ELEMENT telno - O (#PCDATA)> <!ELEMENT faxcity - O (#PCDATA)> <!ELEMENT faxno - O (#PCDATA)> <!ELEMENT email - O (#PCDATA)> <!ELEMENT type - O (#PCDATA)> ]>
▲図7 文書型定義
一枚の名刺データが一つの文書実現値となります。名刺(meishi)は,氏名(fname),所属(cstatus),住所(adr),電話番号(tel),FAX番号(fax),メールアドレス(email),区分(type)から構成されているものとします。ここでは,それらをパラメータ実体名として,それを更に細かい要素名で定義しています。例えば,氏名(fname)は姓(family)と名(name)に分けています。他も同様な定義になっています。
この事例においてSGML形式で保存出力されたデータ(文書実現値)は,図8のようになります。
<!DOCTYPE MEISHI SYSTEM []> <MEISHI> <FAMILY>岸 <NAME>和孝 <COMPANY> <ORG> <DIV1> <DIV2> <STATUS> <POST>966 <ADDRESS>喜多方市松山町鳥見山4608 <BIL> <TELCITY>0241 <TELNO>22-3981 <FAXCITY>0241 <FAXNO>21-1581 <EMAIL>NAG00251@niftyserve.or.jp <TYPE>団体関係 </MEISHI>
▲図8 保存されたSGML文書
MS-Wordのスタイル方式によるSGMLデータ入力で用いるプログラムは,RTF2SGMLとRTFSTYLEです。RTF2SGMLはRTF形式で表わされたMS-Word文書(RTF文書)を変換規則に従ってSGMLの文書実現値へ変換します。RTFSTYLEは変換規則を作るための骨組み生成を行います。[図9参照]
|
▲図9 スタイル方式によるSGMLデータ入力と変換
これらのプログラムはPerlスクリプトで,その実行には,Perlインタプリタが必要です。
プログラムの起動方法はOSによって少々異なります。
引き数なしでプログラムを起動すると,簡単な説明が表示されます。通常はファイル名を引き数としてプログラムを起動します。
| MS-Windows95における起動方法 |
|---|
| コマンドラインで“PERL スクリプト名 [ ファイル名 ] …”を指示すると, ファイル名 …の順に処理されます。 より簡単にするために, スクリプトを起動するための次のようなバッチファイルを作成して下さい。 例えば,“RTF2SGML.BAT”と“RTFSTYLE.BAT”という名前にしておきます。 CD ファイルの格納されたディレクトリへのパス PERL スクリプト名 %1 %2 %3 %4 %5 ここで,引き数の参照は,コマンドラインが長くなりすぎますので,5個程度にします。 そのバッチファイルのアイコンへファイル …をドラッグ・アンド・ドロップすると, ファイル名 …の順に処理されます。 |
| MacOSにおける起動方法 |
|---|
| Perlインタプリタを起動し,スクリプトをDroplet形式で保存します。 例えば,“RTF2SGML”と“RTFSTYLE”という名前にしておきます。 そのアプリケーションのアイコンへファイル …をドラッグ・アンド・ドロップすると, ファイル …の順に処理されます。 単なるラウンチでは引き数なしの起動となります。 ちなみに,ScriptメニューからRun Scriptでスクリプトを指示しても 「引き数なしの起動」となってしまいますので,注意して下さい。 |
以下の説明では,Windows95でのコマンドラインによる指示方法で説明します。
先ず,RTFSTYLEを使って変換規則の骨組みを生成します。処理対象となるRTF文書のファイル名には拡張子“RTF”が必要です。[図10参照]
|
▲図10 RTF文書の例(矢印はスタイルを表わす)
例えば,コマンドラインで“PERL RTFSTYLE.PL SAMPLE.RTF”を指示すると,図11のような処理経過が表示されます。
RTFSTYLE version : 1.0 RTF文書ファイル :MyDisk:MyFolder:SAMPLE.RTF 使用テンプレート:MyDisk:MicrosoftWord:Templates:LETTER.DOT 変換規則ファイル:MyDisk:MyFolder:LETTER.R2S 文書型名:LETTER 処理が完了しました。
▲図11 RTFSTYLEの処理経過表示
生成される変換規則ファイル(骨組み)は,RTF文書に含まれているブックマーク“DTD”で指定された文字列(文書型名)に拡張子“R2S”を付けて表わされます。例えば,“SAMPLE.DOT”というテンプレートには,“LETTER”のブックマークがあらかじめ含まれています。そのテンプレートを使って作成した“SAMPLE.RTF”というRTF文書ファイルをRTFSTYLEで処理すると,“LETTER.R2S”という名の変換規則ファイルが生成されます。
RTFSTYLEによって生成される変換規則の骨組みは,図12のような内容です。
# RTFtoSGMLのための変換規則 # 次の行の右辺を各スタイル名に対応する適切な要素名(タグ名)を定義して下さい。 heading 1 heading 1 heading 2 heading 2 heading 3 heading 3 (略)
▲図12 変換規則の骨組み
この変換規則において,“#”の行は注釈です。定義の行は,“スタイル名 タブ タグ名 改行”の形式です。文書型定義に従って,各行の右辺を具体的なタグ名に書き換えます。
例えば,“LETTER.R2S”という名の変換規則ファイルは,図13のように書き換えます。
# RTFtoSGMLのための変換規則 # 文書型名:LETTER 本文 TEXT 挨拶文 GREETING 会社名 COMPANY 結び CLOSING 署名 SIGN 署名 部署 SIGNDIV 日付 DATE 返送先 RETURN 本文宛先 ADDRESS 要件 TITLE
▲図13 書き換えた変換規則
次に,RTF2SGMLを使ってRTF文書から文書実現値へ変換します。
例えば,コマンドラインで“PERL RTF2SGML.PL SAMPLE.RTF”を指示すると,図14のように処理経過が表示されます。
RTF2SGML version : 1.0 RTF文書ファイル :MyDisk:MyFolder:SAMPLE.RTF SGML文書実現値 :MyDisk:MyFolder:SAMPLE.SGM 使用テンプレート:MyDisk:MicrosoftWord:Templates:LETTER.DOT 変換規則ファイル:MyDisk:MyFolder:LETTER.R2S 処理が完了しました。
▲図14 RTF2SGMLの処理経過表示
変換された文書実現値ファイル名は,そのファイル名に拡張子“SGM”が付きます。変換規則ファイルは,RTF文書のブックマーク“DTD”で指定された文字列(文書型名)に拡張子“R2S”を付けたファイルとしてRTF文書と同じディレクトリー内に格納されているものとします。
例えば,“SAMPLE.RTF”というRTF文書ファイルをRTF2SGMLで処理すると,“LETTER.R2S”という変換規則ファイルの参照によって,図15のような“SAMPLE.SGM”という文書実現値ファイルが出力されます。
<!DOCTYPE LETTER SYSTEM []> <LETTER> <COMPANY> 飯豊山書林 <RETURN>喜多方市松山町鳥見山字下堰下4608 0241-22-3981 0241-21-1581 <DATE>1997年11月25日 <ADDRESS>各位 <SIGNDIV>飯豊山書林 <note>編集長 <SIGN>岸 和孝 <TITLE> <note> No.2発刊のご案内 <GREETING>拝啓 <TEXT>時下ますますご清栄のこととお慶び申し上げます。 さて この度<note> No.2を発行致しましたので,ご案内申し上げます。今回は,SGMLデータの入力を特集しました。SGMLデータの入力は,エンドユーザーとSGMLシステムとの接点に当たり,多くの難しい問題を抱えておりますが,実現可能な幾つかの解決法を<note> No.2で発表しました。 つきましては,是非ご購読賜わりたくお願い申し上げる次第です。 <CLOSING>敬具 </LETTER>
▲図15 変換出力された文書実現値
この事例における文書型定義は,図16のとおりです。
<!DOCTYPE letter [ <!ENTITY % heading "company, return"> <!ENTITY % signature "signdiv, sign"> <!ENTITY % body "greeting, text, closing"> <!ELEMENT letter - - (%heading;, date, address, %signature;, title, %body;)> <!ELEMENT company - O (#PCDATA)> <!ELEMENT return - O (#PCDATA)> <!ELEMENT date - O (#PCDATA)> <!ELEMENT address - O (#PCDATA)> <!ELEMENT signdiv - O (#PCDATA)> <!ELEMENT sign - O (#PCDATA)> <!ELEMENT title - O (#PCDATA)> <!ELEMENT greeting - O (#PCDATA)> <!ELEMENT text - O (#PCDATA)> <!ELEMENT closing - O (#PCDATA)> ]>
▲図16 文書型定義
一通の手紙が一つの文書実現値となります。手紙(letter)は,頭書き(heading),日付(date),本文宛先(address),署名(signature),要件(title),本文(body)から構成されているものとします。ここでは,それらをパラメータ実体名として,それを更に細かい要素名で定義しています。例えば,頭書き(heading)は会社名(company)と返送先(return)に分けています。他も同様な定義になっています。
スタイル方式では,執筆者は文書の文書型を意識しながらスタイルを指定しなければなりませんので,それが負担にならないように,テンプレート内にガイドとなるスタイル名,例えば,“[表題]”とか“[要約]”といった文字列を含めておく工夫が必要です。MS-Wordのテンプレート集にある各種のサンプルのガイドを参考にするといいでしょう。
“RTFtoSGMLテストパッケージ”を次のパッケージで配布します。不都合がありましたら,ご一報下さい。
パッケージには,次のデータが収録されています。
| MANUAL | マニュアル(この文書) |
| RTF2SGML.PL | RTFからSGMLへの変換プログラム |
| RTFSTYLE.PL | 変換規則の骨組み生成プログラム |
| RTF2SGML | RTF2SGML.PLのDroplet(MacOS用) |
| RTFSTYLE | RTFSTYLE.PLのDroplet(MacOS用) |
| SAVESGML.1 | SAVESGMLマクロ(WordBasic用) |
| SAVESGML.2 | SAVESGMLマクロ(Visual Basic用) |
| TEGAMI.DOC | LETTER.DTDに基づくMS-Word文書の例 |
| LETTER.DOT | LETTER.DTDに基づくテンプレート |
| LETTER.R2S | LETTER.DTDに基づく変換規則 |
| LETTER.DTD | LETTERの文書型定義 |
| WATASHI.DOC | LETTER.DTDに基づくMS-Word文書の例 |
| MEISHI.DOT | MEISHI.DTDに基づくテンプレート |
| MEISHI.DTD | MEISHIの文書型定義 |
(1997年11月記,1998年9月改訂)