ドキュメント作成用XMLスキーマ及びHTML変換用XSLTを設計してみる。
HTMLをベースに、文章の論理構造を記述できるXMLを設計する。
HTMLでは、要素の名称で階層構造を表すが、XMLでは、要素の入れ子によって、階層構造を表わす。
HTMLの、表の問題はヘッダセルとデータセルの関係が、要素の記述順によって関連付けされる点である。
データセルの位置に関係無く意味が分かるように、要素名にヘッダの値を指定する。
他の章や表を参照する時の、記述の重複を無くす。
章や表にidを付与し、idによって、章や表の見出しを引用する。
章番号や、図表の番号を自動的に付与する。
章・図表の追加によって、ずれてしまった他の章・図表の番号を修正する必要が無くなる。
ドキュメント用XMLを構成する要素の説明を記述する。
文章の階層を定義する。se要素のn属性の値は、目次に使用する。
階層は3段までとする。XSLTによる番号の自動付与では、「1」「1.1」「1.1.1」を各階層で使用する。
<se
id="識別子"
n="章見出し"
href="外部XMLファイルのURL">
<!-- 文章,章,節 -->
</se>
省略可能。ref要素で参照する場合、必須。
必須。
ドキュメント確認用XSLでは、外部のXMLファイルへリンクする。
正式XSLでは、文書を1つに結合し、href属性を削除する。
省略可能。
文章の階層を定義する。sse要素のn属性の値は、目次に使用しない。
階層は3段までとする。XSLTによる番号の自動付与では、「(1)」「 (a)」「 (i)」を各階層で使用する。
<sse
id="識別子"
n="ブロック見出し">
<!-- 文章,節 -->
</sse>
列見出しの定義(tdef)とデータ(tr)を定義する。
データの列の定義順と関係無く、列見出しの定義順に列を並べる。
<table id="識別子" n="表見出し">
<tdef>
<列名称 a="列属性">列見出し</列名称>
<!-- 繰返し -->
</tdef>
<tr>
<列名称><!-- 項目値 --></列名称>
<!-- 繰返し -->
</tr>
<!-- 繰返し -->
<com>
表直下の補足
</com>
</table>
表を記述する。
表の見出しを記述する。
タイトル行の各列の名称とデータ行の各列の属性を定義する。
table要素の内側に、1回だけ記述する。
データ行の値を記述する。
tdef要素内の「列名称」要素は、複数定義できる。
「列名称」には、XMLの要素名として許容されている任意の文字が指定できる。
tr要素内の「列名称」要素は、複数定義できる。「列名称」は、tdef内に定義された「列名称」から選択する。
列の属性を記述する。
num:数値
表の脚注を記述する。
JPEG,PNG,SVG等の画像データを表示する。
見出しに、「図1-1 図見出し」というように表示する。
文字だけも可能とする。
<figure
id="識別子"
n="図見出し"
href="図が存在するURL">
文字
</figure>
JPEGやPNG、SVG形式のデータを指定する。省略可能。
画像データを表示する。
見出しに、「写真1-1 写真見出し」というように表示する。
<photo
id="識別子"
n="写真見出し"
href="写真が存在するURL">
コメント
</photo>
画像データを表示する。
見出しに、「画面1-1 写真見出し」というように表示する。
<screen
id="識別子"
n="画面見出し"
href="画面イメージが存在するURL">
コメント
</screen>
他の章や図表のタイトルを引用する。章や図表に付与したidによって引用元を指定する。
<ref
rid="参照元識別子" />
ドキュメントのルート。
<doc
n="ドキュメントのタイトル"
index="目次生成の有無"
prvhref="親ドキュメントのURL"
prvrid="親ドキュメント内の参照元ID">
章など
</doc>
目次の生成を制御する。
no:目次を生成しない。
prvrid要素と組み合わせて、 自ドキュメントの章番号(先頭部分)を親ドキュメントから取得する。
prvhref要素と組み合わせて、 自ドキュメントの章番号(先頭部分)を親ドキュメントから取得する。
外部ドキュメント名(docのn要素)を展開する。WEBでは、リンクも生成する。
目次を自動生成せず、自分で目次を作成する場合などに使用する。
<refdoc
seno="章番号"
id="識別子"
href="外部XMLファイルのURL" />
外部のドキュメントXMLファイルを取りこむ。大規模ドキュメントを複数ファイルに分割する場合に使用する。
<inc
href="外部XMLファイルのURL" />
外部ファイルへのリンクを表示する。
<link
href="外部ファイルのURL" />
専用の編集ツールが必要である。
とりあえずの汎用品を次に示す。
http://www.xfytec.com/
作図には、diaが便利だが、svg対応はつけたしである。 svg編集ツールとしてはInkscapeがある。この文書中のSVGはInkscapeを使用している。 有償のツールであればもっとよいものがあるかもしれない。
文書の構造についてしらべてみると、「部」「章」「節」「項」「目」「段落」「小段落」というような分類をしているものがあった。 「小段落」ってなんだ。 「段落」は「段落」であって、大も小も無いと思うが。さらに調べてみると「段落」は、「形式段落」と「意味段落」に分類できるらしい。 「形式段落」は、1行目を字下げするおなじみのもの。「意味段落」は「形式段落」の集合。 「意味段落」は、明確な境界などなく、読めば分かるという説明もあった。 また、「項」を「小節」、「目」を「小々節」と表現するものもある。 「章節」「文節」などなど、きりがない。
西洋(?)の分類(chapter,section...)を、日本の言葉に無理に置き換えることで、混乱を生じさせているようにも見える。
辞書でざっくり引いてみると次のような説明が出てきた。
ここでは、「章」と「節」のみ使用する。「章」を目次に出すもの、「節」を目次に出さないもの、という意味として使う。
目次にするかしないかは、それをドキュメントの骨とみるか肉とみるかで判断してはどうだろう。 ざっと見て読みたい事が書いてあるかどうか分かれば良いのではないか。目次にすると五月蝿いなと思うものを「節」にするとか。
要は、最小の意味単位に向って、掘り下げていく為の、階層構造である。 自分の所属する組織のルールがあれば、それに合わせて、呼び名を読み替えていただきたい。
htmlやpdfへの変換の度に全ファイルを結合するのは、資源の無駄使いである。 通常は、自分が更新したファイルの確認が出来ればよい。 最後に、納入物を作成する時に結合すれば十分である。
よって、外部ファイルを結合するxslとpdf,htmlを編集するxslを分離する。
印刷していしまうpdfは、ひとつに結合してしまった方が、後の印刷作業が楽になる。 htmlは、結合状態だと大きすて、表示に時間がかかって使いづらい。 htmlは結合後に、章単位に分解すると扱いやすい場合がありそうだ。
変換用ファイルの構成を次に示す。
このドキュメントは、上記文法で作成している。