文書は様々な場面で用いられる。情報共有の要として、過去に行った作業の履歴として、文書という形式で情報を保持することは極めて重要である。
文書が作成および保持される媒体は変わりつつある。紙媒体で保持されることよりも計算機で作成され電子情報として保持されることが増えている。文書を電子情報として保持することは文書の可搬性の面で好ましい。
これら計算機で作成される文書は必要に応じ適した形式で記述される。処理系に依り文書の形式が変わることは妥当である。しかし個人作業結果の統合や情報共有の作業において、文書形式の違いは計算機を利用していることの有用性を下げ文書の可搬性を低下させることに繋がる。違った形式の文書は後々利用する段階で媒体や環境ごとに手を加えることになり作業にかかる費用が無視できなくなる。こうした問題に対応し計算機におけるより効率の良い文書の利用を行うため、多くの用途で利用できる簡単で拡張性の高い共通の文書形式が必要である。汎用論理構造文書はこうした問題を解決するべく作成された。汎用論理構造文書作成の直接の動機は版文の作成にある。版文については版文1を参照のこと。
汎用論理構造文書はXMLを用い記述される。XMLに従い記述された文書は表記が厳密でかつ拡張性に富み、プログラムからの制御が容易である。XML文書を制御するためライブラリやAPIは充実しXML文書に関連する技術の開発が活発に行われてきた。文書をXML文書として保持することは、XMLの優れた点に加えこれらの成果の恩恵を受けることができる。
様々な場面で利用できる文書形式を考えるには、文書の視覚的な表現を考えず、論理的な構造のみを表現することが重要であると考える。視覚的な表現はXMLのやり方に習いXSLやXSLT等別の機構を用いれば良い。ここでは視覚的な表現は処理系の問題として切り分けて考える。
ここでは、二つの基本的な規則を元にして多くの場合に適用できると考えられる文書形式を示す。この文書形式の定義は適材適所で利用できるよう拡張点が用意されている。実際に文書として利用するには、別途拡張点に対し機能を追加するモジュールを併用する必要がある。
汎用論理構造文書はモジュールを併用することで様々な文書に対応する。汎用論理文書はモジュールによって対応する文書形式を増やすことができるが、どの場合でも汎用論理構造文書として一意に扱うことができる。汎用論理構造文として作成された文書は利用しているモジュールの個数や種類の如何を問わず汎用論理構造文書として扱うことが可能である。
汎用論理構造文書は二つの基本的な規則を基に構成されている。基本規則を次に示す。
文書を構成する最小単位は段落またはそれに類する文字列とする。いくつかの段落が集まって一つの別のある文書のまとまりとなることができる。これらを満たすため、段落を表現するp要素と、文書のあるまとまりを表現するdocgroup要素の二つの基本となる要素が用意される。p要素は要素の内容として文字列を保持する。docgroup要素は要素の内容としてp要素かまたはdocgroup要素を保持する。docgroup要素は文書を集約する役目を負う。
図2.1 汎用論理構造文書 構造概念図
汎用論理構造文書は大きく分けて、docgroup要素のように要素を集約する要素と、p要素内の文字列自身を修飾する要素の二つの種類の要素を持っている。ここでは前者を構造要素、後者を非構造要素を呼ぶ。構造要素はdocgroup要素のように文書を保持するp要素やdocgroup要素をまとめる役目を持っている。構造要素は内容として要素のみを持ち文字列は保持しない。よって、構造要素内の改行空白は文書としての意味を持たない。構造要素内の空白改行はXML文書を記述する際の整形として利用することができる。一方、非構造要素は要素の内容として文字列を保持する。非構造要素内の空白改行は文書としての意味を持つ。非構造要素内の空白改行をXML文書を記述する際の整形として利用することはできない。非構造要素はp要素内の文字列を修飾するために利用される。
次に、汎用論理構造文書の構成要素定義を示す。表内のカンマ「,」は「かつ」、縦線「|」は「または」を表現する。
要素名 | 属性 | 子要素 | 要素内文字列 | 要素内空白改行 | 備考 |
---|---|---|---|---|---|
document | なし | docgroup | なし | 文書として扱われない | ルート要素 |
docgroup | id | docinfo,docgroup,p,[構造要素(拡張用)] | なし | 文書として扱われない | |
docinfo | なし | title,author,firstedition,lastmodified,[構造要素(拡張用)] | なし | 文書として扱われない | |
title | なし | p | なし | 文書として扱われない | |
author | なし | p | なし | 文書として扱われない | |
firstedition | なし | p | なし | 文書として扱われない | |
lastmodified | なし | p | なし | 文書として扱われない | |
p | なし | [非構造要素(拡張用)] | あり | 文書として扱われる | |
[構造要素(拡張用)] | docgroup,p,[構造要素(拡張用)] | なし | 文書として扱われない | 拡張用の構造要素 | |
[非構造要素(拡張用)] | 持たない | あり | 文書として扱われる | 拡張用の非構造要素 |
親要素 | 子要素 | 子要素の数 | 備考 |
---|---|---|---|
document | docgroup | 1 | |
docgroup | docinfo | 0以上1以下 | |
docgroup | docgroup | 0以上 | |
docgroup | p | 0以上 | |
docgroup | [構造要素(拡張用)] | 0以上 | |
docgroup | docinfo|docgroup|p|[構造要素(拡張用)] | 1以上 | |
docinfo | title | 0以上1以下 | |
docinfo | author | 0以上 | |
docinfo | firstedition | 0以上1以下 | |
docinfo | lastmodified | 0以上1以下 | |
docinfo | [構造要素(拡張用)] | 0以上 | |
docinfo | title|author|firstedition|lastmodified|[構造要素(拡張用)] | 1以上 | |
title | p | 1 | |
author | p | 1 | |
firstedition | p | 1 | |
lastmodified | p | 1 | |
p | [非構造要素(拡張用)] | 0以上 | |
[構造要素(拡張用)] | docgroup要素を内包可能 | 0以上 | モジュールで指定がなければ子要素として含まれない |
[構造要素(拡張用)] | p要素を内包可能 | 0以上 | モジュールで指定がなければ子要素として含まれない |
[構造要素(拡張用)] | [構造要素(拡張用)]を内包可能 | 0以上 | モジュールで指定がなければ子要素として含まれない |
[構造要素(拡張用)] | docgroup|p|[構造要素(拡張用)] | 1以上 | モジュールでの指定が優先 |
要素名 | 属性名 | 属性内容 | 用途 | 指定義務 | 備考 |
---|---|---|---|---|---|
docgroup | id | 文字列 | ラベル表現 | 任意 |
要素名 | 種類 | 備考 |
---|---|---|
document | 構造要素 | ルート要素 |
docgroup | 構造要素 | |
docinfo | 構造要素 | |
title | 構造要素 | |
author | 構造要素 | |
firstedition | 構造要素 | |
lastmodified | 構造要素 | |
p | 文書最小単位要素 | 子要素を持ち得るため非構造要素ではない。しかし構造要素よりも非構造要素に近い。 |
図2.6 汎用論理構造文書 要素クラス図
docgroup要素はp要素やdocgroup要素以外に文書のまとまり自体の情報を保持することができる。docgroup要素自身の情報はdocgroup要素内のdocinfo要素によって表現される。docinfo要素はdocgroup要素で表現される文書の著者や作成年月日、更新年月日等を保持することができる。
docgroup要素、docinfo要素、p要素は拡張された要素を保持することができる。ここではこの拡張点に要素を追加するための一連の要素定義のまとまりをモジュールと呼ぶ。汎用論理構造文書自体は文書を記述するための必要最低限の要素しか提供しない。実際に文書を記述して利用するには汎用論理構造文書にいくつかのモジュールを併用し利用することになる。定義されている要素がモジュール間で重複する時どちらの定義が優先されるかは処理系に依る。汎用論理構造文書では拡張用要素の定義を満たさない要素がモジュールで定義される要素となることは許されない。
汎用論理構造文書は英語表記でGeneral-purpose Logical Structured Documentと表す。英語略表記はGLSDとする。
汎用論理構造文書のルート要素。document要素はdocgroup要素を一つだけ子要素として持つ。document要素内の空白改行は文書としての意味を持たない。document要素内の空白改行はXML文書記述整形に用いることができる。
docgroup要素およびp要素をまとめるための構造要素。p要素が文書の最小単位であることに対し、docgroup要素は意味を持った文書の単位となる。docgroup要素がdocgroup要素自身を保持できるため文書の入れ子構造を表現することができる。docgroup要素はdocgroup要素およびp要素を保持するだけでなく、docgroup要素で表現される文書に関する情報を保持するdocinfo要素と、モジュールによって拡張される構造要素を保持することができる。
docgroup要素は任意の属性としてid属性を持つ。id属性で指定される文字列はdocgroup要素を特定する際に利用される。汎用論理構造文書では、文書の最小単位は段落に相当するp要素で表現するが、意味のあるまとまりとしてはdocgroup要素で表現される文書が単位となる。文書へのアクセスはdocgroup要素のid属性を指定し行うことになる。
docgroup要素内の空白改行は文書としての意味を持たない。docgroup要素内の空白改行はXML文書記述整形に用いることができる。
docgroup要素で表現される文書に関する情報を保持する。docinfo要素は任意の子要素なので、docgroup要素に必須ではない。しかし複数保持することはできない。docgroup要素が保持できるdocinfo要素は一つまでである。
docinfo要素は子要素としてtitle要素、author要素、firstedition要素、lastmodified要素、[構造要素(拡張用)]を持つ。docinfo要素には拡張点が用意されているため、モジュールでdocinfo要素内にdocgroup要素で表現される文書の情報を表現するための構造要素を追加することができる。
docinfo要素内の空白改行は文書としての意味を持たない。docinfo要素内の空白改行はXML文書記述整形に用いることができる。
docgroup要素で表現される文書の題名を表現する。title要素を複数記述することはできない。docinfo要素が保持できるtitle要素は一つまでである。
title要素内の空白改行は文書としての意味を持たない。title要素内の空白改行はXML文書記述整形に用いることができる。
docgrouop要素で表現される文書の著者を表現する。author要素は複数記述することができる。一つの要素に著者を一人記述する。複数著者がいる場合、その数だけauthor要素を記述する。
author要素内の空白改行は文書としての意味を持たない。author要素内の空白改行はXML文書記述整形に用いることができる。
docgrouop要素で表現される文書の作成年月日を表現する。firstedition要素を複数記述することはできない。docinfo要素が保持できるfirstedition要素は一つまでである。
firstedition要素内の空白改行は文書としての意味を持たない。firstedition要素内の空白改行はXML文書記述整形に用いることができる。
docgrouop要素で表現される文書の更新年月日を表現する。lastmodified要素を複数記述することはできない。docinfo要素が保持できるlastmodified要素は一つまでである。
汎用論理構造文書はlastmodified要素で最新の更新年月日を保持できる以外に更新管理のための機能を提供していない。更新管理を行いたい場合は、別途モジュールを用意し併用するか、処理系の更新管理機能を用いることを推奨する。
lastmodified要素内の空白改行は文書としての意味を持たない。lastmodified要素内の空白改行はXML文書記述整形に用いることができる。
段落またはそれに類する文字列を表現する要素。汎用論理構造文書において文書の最小単位を表現する。
p要素は拡張点が用意されており、モジュールで定義される非構造要素を利用することができる。非構造要素はp要素内の文字列を修飾するために利用される。
p要素内の空白改行は文書として扱われる。p要素内の空白改行はそのまま文書として扱われるため、空白改行をXML文書記述整形に用いることはできない。
要素内に文書を保持せず子要素のみを持ち、それら子要素またはそれら子要素間の関係に意味を与える要素を構造要素と呼ぶ。
構造要素は非構造要素を直接子要素として保持することはできない。非構造要素を保持できる要素はp要素のみである。構造要素はp要素を直接子要素として保持することができる。
構造要素内の空白改行は文書としての意味を持たない。構造要素内の空白改行はXML文書記述整形に用いることができる。
要素内に子要素を持たず文字列または空文字を持ち、文字列自体を修飾するための要素を非構造要素と呼ぶ。
非構造要素は直接構造要素の子要素になることはできない。非構造要素はp要素の直接の子要素としてのみ存在できる。
非構造要素内の空白改行は文書として扱われる。非拡張要素内の空白改行はそのまま文書として扱われるため、空白改行をXML文書記述整形に用いることはできない。
汎用論理構造文書ではdocgroup要素、docinfo要素、p要素にそれぞれ拡張点を設けている。汎用論理構造文書は最も基礎となる要素だけを規定しているため、実際に利用するにはその都度適したモジュールを併用する必要がある。たとえば汎用論理構造文書は列挙や枚挙といった要素や外部資源を指定する要素は提供していない。これら要素は別途まとめられモジュールとして提供され、モジュールの組合わせで実際に利用される。
docgroup要素は構造要素を追加することを許している。たとえば列挙や枚挙を表現する要素は構造要素としてここで定義されることが考えられる。例えば列挙や枚挙は文書のあるまとまりそれぞれについて対等または順序という意味付けを与える文書集約要素であると考える。構造要素は子要素としてdocgroup要素、構造要素、p要素を保持することができる。
docinfo要素では構造要素を追加することを許している。これはdocgroup要素で表現される文書自身を表現する情報を追加することを意味している。たとえば、汎用論理構造文書ではdocgroup要素で表現される文書に対してハッシュ値や著者認証、通し番号の表現などは提供していない。必要に応じてこうした情報を表現するための要素を追加することができる。ここで追加できる要素は構造要素であり、非構造要素を追加することはできない。
p要素では非構造要素を追加することを許している。ここで追加される非構造要素は、p要素で表現される文書全体またはその一部を修飾するために用いられる。例えば振り仮名を指定する要素を追加する、また例えば索引を作成するためにkeywordといった要素を追加する、といった使い方をする。
参考文献
[1] Extensible Markup Language (XML)
[2] 後藤 大地, 版文1. 版文, ONGS Inc., 2002年4月
[3] 後藤 大地, 版文3. 汎用論理構造文書 文書モジュール, ONGS Inc., 2002年4月
[4] 後藤 大地, 版文4. 汎用論理構造文書 版文モジュール, ONGS Inc., 2002年4月