パーサは、作成したSGML文書が正しい構造になっているかどうかを検証するツールです。
SGMLパーサは以下の基本的機能を持っています。
- DTDがSGML規格に適合しているかを検証する
- 作成した文書がDTDに従っているかを検証する
SPはフリーウェアであり、以下の場所からダウンロードできます。
http://www.jclark.com/sp/howtoget.htm
http://www.sgmlu.com/resources.html?entry=3<-404 notfound
使用環境: Windows95, WindowsNT, MS−DOS, OS/2,
各種のUNIX(Solaris(i386, sparc),OSF/1 V3.2(DEC Alpha), Linux(i386)など
C++ソースコードとバイナリの両方があります。インストール方法は、それぞれに付属しているドキュメントを参照してください。
SPに含まれている主なツールは、
- nsgmls(SGMLパーサ)
- sgmlnorm
- spam(SGML文書の正規化ツール)
の3つです。
(a) nsgmls(New SGMLS)
SGML文書を解析し、規格に適合しているか、DTDに従っているかを検証します。検証した後、解析結果をESIS形式で出力します。
ESIS(Element Structure Information Set:要素構造情報集合)とは、SGMLデータの表現形式の一つです。SGML文書を解析・検証して、後処理(フォーマットなど)しやすい形にしたものです。
Nsgmlsの基本的な使い方(Unixの場合)
<コマンド>
% nsgmls SGMLファイル名 > ESISファイル名
SGML文書を解析・検証し、生成したESISを指定したファイルに出力します。
ESISファイル名を指定しなければ、ESISは標準出力に表示されます。
DTD入力の注意
入力するSGML文書は、DTDとインスタンスが1つのファイルに入っているもの、または、インスタンスが外部のDTDファイルを指定しているもののどちらかです。
DTDファイルを指定するオプションはないので、SGML文書にDTDの情報を付属させておく必要があります。
<オプション>
-f エラーメッセージファイル名
エラーメッセージが指定したファイルに出力されます。指定しない場合は標準出力に表示されます。
-b エンコーディング名
文字コードを変換して出力します。(unicode、euc−jp、sjis、 shift−jisなど)
-B
複数のファイル名を指定し、バッチ処理を行います。このオプションを使わずに複数のファイル名を指定すると、それらが1つのインスタンスとして扱われます。
-c カタログファイル名
カタログファイルとして使うファイル名を指定します。
-s
ESIS出力はせず、パース(解析)のみを行います。出力されるのはエラーメッセージだけです。
-D ファイルのパス名
カレントディレクトリ以外にあるファイルをパースする場合に、パス名を指定します。
-E 最大エラー数
指定した数以上のエラーが発生した場合、パースを中止します。(デフォルトは200)
-g
エラーメッセージと共に、ルートの要素名からエラー発生箇所の要素名までを出力します。
-o 出力オプション名(出力のしかたを指定する)
- -o line: 出力結果に行番号、ファイル名を付加する
- -o included: 入れ子になった副要素を出力せずにiという記号のみを出力?
- -o empty: 終了タグを持たない要素の内容が空の場合に、eという文字を出力する
-w 警告オプション名
- -w underfined:DTDで定義しているにも関わらず、文書に出現しない要素名を出力します。
- -w unclosed: 開始タグ、終了タグの閉じかっこがない場合に警告します。
- -w empty:タグの<>の中にタグ名がない場合に警告します。
- -w unused-param:DTDで定義しているのに文書で使われていないパラメタ実体を示します。
<nsgmls使用例>
% nsgmls −f error example.sgm > example.esis
SGML文書(example.sgm)を解析・検証し、ESIS形式(example.esis)で出力します。
エラーメッセージはエラーファイル(error)に出力されます。
(b) sgmlnorm (SGML NORMalizer)
SGML文書を解析・検証し、正規化して出力します。
sgmlnormの基本的な使い方(Unixの場合)
<コマンド>
% sgmlnorm SGMLファイル名 > 出力先ファイル名
出力先ファイル名を指定しなければ、処理結果が標準出力に表示されます。
<正規化の内容>
- 入力文書中のDTDとDOCTYPE宣言を削除する
- 省略されたタグを表示する
- 終了タグと開始タグの間の余分な空白を除く
- タグ名を大文字にする
- 横に連続したタグを改行して2行にする
<オプション>
−b (エンコーディング)、−c (カタログファイル)、−D (ディレクトリのパス)、−w (警告オプション)などはnsgmlsと同じ使い方です。
-d
入力文書の内部にDTDがない場合、DTDの外部ファイル名を示すDOCTYPE宣言を表示します。
-n
入力文書インスタンス中のコメントも出力します。
-r
入力文書中の改行を除き、1行にして出力します。
<sgmlnorm使用例>
% sgmlnorm example.sgm > exampleN.sgm
SGML文書(example.sgm)を解析・検証し、正規化した結果(exampleN.sgm)を出力します。
(c) spam( SP Add Markup )
sgmlnormより洗練された正規化機能を持ちます。
spamの基本的な使い方(Unixの場合)
<コマンド>
% spam SGMLファイル名 > 出力先ファイル名
<正規化の内容>
- 入力文書中のDTDとDOCTYPE宣言を削除する
- 空白は元の文書と同じに残す
- タグ名の大文字・小文字は変えずに出力する
<オプション>
−b (エンコーディング)、−c (カタログファイル)、−D (ディレクトリのパス)、−w (警告オプション)などはnsgmlsと同じ使い方です。
-m マークアップオプション名
- -m omittag: 省略されたタグを表示します
- -m emptytag: タグの<>の中にタグ名がない場合に、タグ名を入れます
- -m attspec: タグの<>の中にタグ名がない場合に、タグ名を入れます
<spamの使用例>
% spam _m omittag example.sgm > exampleN.sgm
SGML文書(example.sgm)を解析し、検証した上で、省略されたタグを表示して、正規化した結果(exampleN.sgm)を出力します。