レベル: 初級 David Mertz, Ph.D (mertz@gnosis.cx), Author, Gnosis Software, Inc.
2000年 10月 01日 連載コラムの今回は、便利なDocBookを使えば、さまざまに異なる文書形式を1つの 標準的なXML形式に変換できることについて説明を続けます。さらに、いくつかのDocBookタグをより詳しく調べて、基本的なDocBook文書の作成方法も示します。
みなさんの「文書書庫」が私の文書書庫と同じようなものであれば、Microsoft Word 3.3、HTML、Word Perfect 7、ASCIIテキストなど、いろいろな形式のファイルが混在していることでしょう。元の文書の作成に使ったソフトウェアをもはや使用できない、というケースもまれではありません。幸いにも、汎用技術文書を作成するためのDocBookのSGML版を使用することにより、さまざまなファイルを1つの標準的なXML形式に変換するのが容易になります。このコラムでは、既存の文書を変換するためにDocBook DTDのXMLバージョンを 使用する方法について説明します。
DocBookは、何百ものエレメントからなる、かなり複雑なDTDです。しかしDocBookを使いこなすためには、必ずしもすべてのエレメントについて学ぶ必要はありません。基本的なエレメントは論理的な順序で並んでいて、子エレメントのネストのパターンもほとんどのエレメントの間で 似ていることがおわかりいただけるでしょう。
コンテンツの作成 -- いくつかの方法
DocBookのタグ付けは間違いやすいものです。それで、コンテンツを作成するとき、頼りになる解説を手元に用意しておくことが大切です。私はO'Reilly社の優れた書籍を愛用していますが、これと同じ内容がオンラインでも利用できます (「参考文献」を参照)。解説書が手に入ったら、次の2つの方法のいずれかで、DocBookのコンテンツを作成することができます。
- 特殊なXMLエディターを使う
- 一般的なテキスト・エディターと別個の妥当性検証プログラムを使用する
DocBookはかなり複雑なので、DTDへの準拠を検査するには何らかの自動化ツールが必要でしょう。上記のいずれかの方法で、入力作業を始め、妥当性検証を行い、場合によっては不具合を修正することができます。
特殊なXMLエディターのほとんどは、エレメントや属性の入力を支援してくれます。多くのプログラムは、コンテキストに応じて、現在のDTD (たとえばDocBookのDTD) に含まれるタグのうち 入力できるタグ (またはタグ・リスト) を表示してくれます。ただし、特殊なエディターは優秀な汎用テキスト・エディターよりも 柔軟性の点で劣ることに注意してください。汎用テキスト・エディターの中には、複数のクリップボード、構文の強調表示、列マーキング、セクションや関数の走査検索をサポートするものもあります。
残念ながら、XMLツールの性能はまだ今一歩のようです。私自身、XMLの妥当性検証や変換を行うツールをいくつも試してみましたが、完璧に正確なコマンド行XML妥当性検証プログラムはまだ見付かっていません。結局、Win32環境でXML Spyを使用すると同時に、別のプラットフォームでJavaサポート付きのXeenaを 併用することにしました。どちらのツールも優秀な妥当性検証機能を持っていますが、使いやすさの点ではまだ満足できません。(XML Spy、Xeena、汎用テキスト・エディターに関しては、「参考文献」をご覧ください。)
DocBook DTDを作成する
XML DocBook文書作成の第一歩は、宣言の作成です。文書宣言の例として、リスト1をご覧ください。それぞれの部分について見ていきましょう。
リスト1. XML文書型宣言
<?xml version="1.0"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY Zizek "Žižek">
<!ENTITY Mocnik "Močnik">
]>
<?xml-stylesheet type="text/xsl" href="chapter.xsl"?>
<chapter>
<!-- The actual chapter contents are here -->
</chapter> |
XML宣言
最初にあるのは<?xml> 宣言です。これは、この文書がXMLであることを示します。次は<!DOCTYPE> タグ、つまり文書型宣言です。文書型宣言については、詳しく調べる必要があります。
DOCTYPEタグのエレメント
<!DOCTYPE> タグの中でまず注意すべき点は、文書の中で使われるルート・エレメントの名前 (chapter「章」) です。ルート・エレメントは文書の目的を (少なくとも大ざっぱに) 記述しますから、どのようなルート・エレメントにするかは重要な決定事項です。通常、ルート・エレメントは文書のおおまかなサイズを決定します。
最もおおまかなレベルでは、ルート・エレメントをset (セット) に指定して、複数のbooks (書籍) をその下に含めることができます (たとえば、参考資料一式)。この場合、すべてのものを必ずしも同じfile に含める必要はなく、前回の記事「XMLの論考: 第3回」で解説したように、組み込みを使うこともできます。しかし通常はbook を作成し、その中にはいくつかのparts (部) やchapters (章) を含めたり、部 / 章と同じ概念レベルでそれ以外のセクションを含めることができます。あるいはもっと小規模に、(リスト1 の例の ように)chapter (章) またはarticle (記事) から 作成する場合もあるでしょう。実際、chapter やarticle はDocBook文書の中で 最も小さなルート・エレメントです。
<!DOCTYPE> 宣言の中で 次に来るのはPUBLICおよびシステム識別子です。PUBLICの次の部分はSGMLの特徴であり、XML文書では本当は必ずしも必要ではありません。もしこれを含めるならば、DTDの表記どおり正確なスペルで入力しなければなりません。システム識別子の中で、DTDはURLで示されています。このURLには、すべてのDocBook宣言があります。DTDについて調べたい読者は、このURLからダウンロードすることができます。なお、このURLを正確なスペルで入力しないと、妥当性検証プログラムはDTDを検出することができません。
最後に、<!DOCTYPE> タグの大括弧 [ ] の中には 「内部サブセット」があります。これは、文書の特別な機能を宣言しているに過ぎません。この例の場合は、英語キーボードで入力しにくい名前の別名をいくつか作成しました。
処理命令
リスト1 では、文書型宣言タグに続いて、処理命令<?xml-stylesheet...>. があります。Extensible Stylesheet Language Transformations (XSLT) については、次回の「XMLの論考」で詳しく触れます。処理命令はHTML文書のCSS (Cascading Style Sheets) と同じようなものです。この例では、DocBook文書変換規則をいくつか 含んでいるXSL文書への参照を追加しました。CSSと同じように、この種の処理命令は、変換ツールを使用する場合であってもオプショナルです。ツールによっては、希望するXSLTを使って変換するよう指定できます。処理命令は、そのようにする方法の1つに過ぎません。
最後に、宣言のルート・エレメントのところで述べた<chapter> タグがあります。章の内容を、タグの内側に入力します。
章の作成
章、記事、前書き、参考文献などは、すべて文書の構成要素です。つまり、構成要素とは、そのトピックに関するやや詳しい特定情報です。多くの場合、エレメント名は、それが何であるかを英語で表したものです。
<chapter>、<appendix>、<preface> エレメントの構造はすべて同じです。<article> の構造もこの3つのエレメントの構造とほぼ同じですが、前付けを<artheader> エレメントで囲むことが多いです。<chapter> のような構成要素には、たとえば<title> のような前付けに続いて、セクションやブロック・エレメント (たとえば<p>) が来ます。
構成要素やセクションの前付けとして、通常、<title> (タイトル) エレメントが必要です。これ以外の前付けのほとんどはオプショナルで、著者について、要約、グラフィックスなど、構成要素そのものに含まれる というよりもむしろ、構成要素を説明する 情報を含めることができます。ここでリスト2を見てみましょう。これは妥当性検証済みの、かなり短く省略した章です (文書タイプ宣言は、リスト1 を想定しています)。
リスト2. DocBookの章のマークアップ
<chapter>
<title>Hegemony, and Other Passing Fads</title>
<epigraph>
<attribution>
Gould, 1987b, quoting Gunnar Myrdal,
<citetitle>An
American Dilemma</citetitle>
(1944)
</attribution>
<para>
But there must be still other countless errors of the
same sort that no living man can yet detect, because
of the fog within which our type of Western culture
envelops us. Cultural influences have set up the
assumptions about the mind, the body, and the
universe with which we begin; pose the questions we
ask; influence the facts we seek; determine the
interpretations we give these facts; and direct our
reaction to these interpretations and
conclusions.
</para>
</epigraph>
<sect1>
<title>Day-Care Devil Worshipers</title>
<!-- para's, sect2's, epigraph's, and other block elements -->
</sect1>
<sect1>
<!-- more blocks -->
</sect1>
</chapter>
|
上の例が示すように、長い章をセクション<sect1>. に 分けることができます。セクションの長さについて特定の決まりはありませんが、セクションの作成方法は2つあります。<sect1> から<sect5> までの階層にするか、または<section> エレメントを再帰的にネストします。哲学的散文を書くという私自身の目的に従い、この例では、セクション・レベルに明示的な番号を付けた方がよいと感じました。私はセクションの重要度について明確な方針 を持っていますから、セクションに番号を付けることはこの方針にかなっていたのです。しかし、テクニカル・リファレンスのようなものの場合は、さまざまな場所で、さまざまな深さにセクションをネストすることができるでしょう。たとえば、概要の部分で関数呼び出しについて述べ、章の後の部分のプログラミング例で再び述べることができます。この場合は<section> エレメントを使った方がよく、5レベルよりも深くネストすることができます。
セクションはブロック・エレメントよりも大きく、単に複数のブロックを並べただけのものです。短い構成要素の場合は、いきなりブロック・エレメントから始めることもできます。基本的に、ブロック・エレメントは段落 (パラグラフ) または段落と 同じ概念 / 階層レベルのエレメント (たとえばリスト、式、図など) です。それ以外にも特殊なタイプのブロックがありますが、ここに挙げたものが一般的です。
ブロック・エレメント「よりも小さな」唯一のエレメントは、インライン・エレメント です。通常、ブロック・エレメントを入力するときには、縦の空白、フレーム指示ボックスなどを使って他のブロックと区別します。インライン・エレメントの場合は対称的に、前後に単語を続けて入力します。インライン・エレメントの部分は異なるフォント、色、ハイパーリンクなどでマーク付けされます。今回のchapterの例では、題辞 (epigraph) は「典拠 (<attribution>)」および 「内容 (<para> )」の2つのブロックが 含まれる1つの短いセクションのようです。> 典拠には引用タイトル (<citetitle>) が含まれますが、引用は出力時にたとえばイタリックまたは下線付きのインラインで挿入するか、またはHTMLの場合は参考文献へのホット・リンクとして表示します。
次回を乞うご期待
今回説明したエレメントや構造だけを使って、読者も独自のDocBook文書を作成してみることができます。私が作成したDocBook文書の例、およびタグに関するより詳しい説明は、「参考文献」を参照してください。次回の記事では、DocBookのソース文書を他の形式に変換する方法を示すとともに、DocBookと並んで役立つXSL変換 (XSLT) について紹介します。
参考文献
著者について  | 
|  | David Mertz氏は多くの分野で活躍しています。ソフトウェア開発や、それについて著述もしています。その他、学術政策理念について分野を問わず、関係する雑誌に記事も書いています。かなり以前には、超限集合論、ロジック、モデル理論などを研究していました。その後、労働組合組織者として活動していました。そして、David Mertz氏自身は人生の半ばにもまだ達していないと思っているので、これから何かほかの仕事をするかもしれません。 |
記事の評価
|