この文書について

この文書はDocBook V5.0: The Transition Guideの翻訳です。元の文書は更新される可能性があ ります。最新の情報はそちらを参照してください。

DocBook V5.0

移行ガイド

2005年12月28日

著者:

Jirka Kosek
Norman Walsh

日本語訳:

Yoshihiro Toda

目次

イントロダクション
待望の名前空間
DocBookでリラクシング
なぜDocBook V5.0に乗り換えるのか
スキーマ地獄
ツールチェーン
DocBook V5.0の編集
DocBook V5.0の妥当性検証
DocBook V5.0の処理
マークアップの変更点
相互参照やリンクの改善
要素名の変更
要素の除去
DocBook V4.x文書をDocBook V5.0に変換する
実体はどうすれば?
DocBook V5.0のカスタマイズ
FAQ
参考文献

この文書はDocBook V4.0xからDocBook V5.0への乗り換えを検討しているDocBookユー ザーを対象にしています。まずDocBook V4.xとV5.0の相違点を説明し、次にDocBook V5.0 文書の編集や処理方法をいくつか紹介します。また、既存のDocBook V4.x文書をDocBook V5.0に変換する方法も説明します。

イントロダクション

DocBook V4.xとV5.0はいくつかの点でまったく別のものですが、DocBookの背景にあ る根本的な考え方は変わっていません。要素名もほぼ全てが同じものです。このため、以 前のバージョンのDocBookを使用したことがある方なら、DocBook V5.0にはすぐ慣れるでしょ う。全ての変更点は[DB5SPEC]で見ることができますが、ここでは代 表的な変更のみ解説します。

待望の名前空間

DocBook V5.0の要素は、全て名前空間http://docbook.org/ns/docbook に属します。XML名前空間は 複数の要素セットを識別するためのもので、ここ数年で登場したXML文法のほとんどは独自 の名前空間を使用しています。名前空間のおかげで、複数のXMLボキャブラリからなる要素 を含んだ文書も簡単に作成することができます。DocBook V5.0はこうしたデザインルール に従っています。名前空間の使用はとても簡単です。DocBook V4.5でマークアップされた 次のような単純なarticleを考えてみましょう:

<article>
  <title>Sample article</title>
  <para>This is a really short article.</para>
</article>

これに対応するDocBook V5.0のarticleはそれほど変わりません:

<article xmlns="http://docbook.org/ns/docbook" …>
  <title>Sample article</title>
  <para>This is a really short article.</para>
</article>

デフォルト名前空間の宣言 (xmlns="http://docbook.org/ns/docbook")がルート要素に追加されてい ことが唯一の違いです。この宣言による名前空間は、ルート要素とそこからネストしてい る全ての要素に適用され、各要素はローカル名と名前空間によって一意に区別されます。

注意

http://docbook.org/ns/docbookという名前空間は識別子として働いて いるだけです。このリソースはDocBook文書の処理中に取得されるわけではありませんので、 インターネットに接続しなくても処理は可能です。ブラウザでこの名前空間URIにアクセス すると、この名前空間の簡単な説明を見ることができます。ここに置かれる文書は(いず れかのバージョンの)RDDLに準拠したものになり、関連リソースへのポインタを提供する 予定です。

DocBookでリラクシング

10年以上に渡って、DocBookのスキーマはDTDで定義されていました。DTDには重大 な制限があるので、DocBook V5.0はRELAX NGという強力なスキーマ言語で定義しています。 RELAX NGのおかげでDocBookのカスタム版が簡単に作れるようになり、いくつかのコンテ ントモデルはすっきりと、かつ正確になりました。

RELAX NGを使った文書は冒頭部分が従来とは異なります。次の例は典型的な DocBook V4.x文書の始まりです。DocBook DTDのバージョン(この場合は4.5です)は、そ のバージョンのDTDを指す文書型宣言(!DOCTYPE)で示されています。

例 1. DocBook V4.5文書

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.5//EN'
                         'http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd'>
<article lang="en">
  <title>Sample article</title>
  <para>This is really very short article.</para>
</article>

これとは対照的に、DocBook V5.0はDTDを使用していません。つまり文書型宣言 は存在せず、DocBookのバージョンはversion属性で示さ れます。

例 2. DocBook V5.0文書

<?xml version="1.0" encoding="utf-8"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="en">
  <title>Sample article</title>
  <para>This is really very short article.</para>
</article>

見るとわかりますが、DocBook V5.0はXMLの標準技術をできるだけ使用しています。 lang属性は標準のxml:lang属性に置き換えられています。

もうひとつの大きな変更に、使用しているスキーマが直接示されていない点があり ます。文書の妥当性検証に使用するスキーマを指定する方法はこの文書のあとの部分で解 説します。

注意

DocBook V5.0はRELAX NGスキーマを使用することが推奨されていますが、RELAX NG をまだサポートしていないツールのためにDTDやW3CXML Schema版のスキーマもあります (「スキーマの入手場所」という項を参照してください)。

なぜDocBook V5.0に乗り換えるのか

簡単な答えは「DocBook V5.0こそが未来だから」。こんな宣伝文句では なく、技術的な理由もあります:

  • DocBook V4.xは機能凍結されているから。本稿を執筆している時点 では、DocBook V4.5がV4.xシリーズでは最後のバージョンのDocBookです。新しい要素の追 加など、これからのDocBookの開発は全てDocBook V5.0に対して行われます。DocBook V5.0に便利な新要素が追加されるのは時間の問題ですが、それがDocBook V4.xにバックポー トされることは少ないでしょう。DocBook V4.xはメンテナンスモードで開発され、必要に 応じてエラッタが提供されます。

  • DocBook V5.0は新機能を提供するから。現時点のDocBook V5.0で さえ、注釈用の汎用なマークアップ、リンクのための柔軟な新しい仕組みなどDocBook V4.0に対して大幅な改善を行なっています。

  • DocBook V5.0はより拡張可能であるから。DocBook V5.0が名前空 間を持つことで、DocBookをSVGやMathML、XHTML、さらにはFooBarMLといったXMLベースの 言語と簡単に組み合せることができます。

  • DocBook V5.0はカスタマイズが容易であるから。RELAX NGは既 存のDocBookスキーマを簡単にカスタマイズできるような強力な構文を備えています。以 前のDTDベースのスキーマと比べて、カスタム版DocBookの作成がずっと楽になりました。

スキーマ地獄

DocBook V5.0のスキーマはhttp://www.oasis-open.org/docbook/xml/5.0b1/(もしくはミラーhttp://docbook.org/xml/5.0b1/)から、数種類のフォーマットで手に入りま す。RELAX NGスキーマを標準として他のスキーマ言語より優先しますが、便宜上DTD、W3C XML Schema版のDocBook V5.0も提供します。ただ、DTDやXML SchemaがDocBook V5.0の制約 を全て補うことはできないことに注意してください。つまり、DTDやXML Schemaで妥当とさ れた文書が必ずしもRELAX NGスキーマで妥当であるとは言えない、つまり妥当なDocBook V5.0文書とは言えないということです。

DocBook V5.0文法のDTD、W3C XML Schema版は、RELAX NGをサポートしない古いツー ルでDocBook V5.0を使用したいユーザーのために提供されます。DocBook文書の作成者は早 急なRELAX NGベースのツールへの乗り換えが推奨されます。少なくとも、文書の処理前に はRELAX NGスキーマで妥当性を検証すべきです。

スキーマの入手場所

最新版のスキーマは以下の場所で入手できます:

以上のスキーマはhttp://docbook.org/xml/5.0b1/でもミラー されています。

DocBookに関する文献

DocBook V5.0の各要素の詳しい仕様はDocBook: The Definitive Guideのリファレンス部で解説されています。

注意

この書籍のリファレンス部以外はDocBook V5.0の変更点をまだ反映していません。混同 しないようにしてください。

ツールチェーン

DocBook V5.0文書に対応しているツールに関しては多くの質問を受けます。この節 ではDocBook V5.0形式で作成された内容の編集、処理に適しているツールとその使い方を 簡単に説明します。

DocBook V5.0の編集

DocBookはXMLベースのフォーマットであり、XMLはテキストフォーマットの一種です から、どんなテキストエディタでもDocBook V5.0文書を作成、編集できます。とはいえ、 Notepadのような「クソ」エディタを使ったのでは、あまり生産的とは言えま せん。XMLをサポートしているエディタなら、もっと快適に作業ができます。DocBook V5.0にはDTDやW3C XML Schemaが用意されているので、お気に入りのエディタにこれらの形 式のスキーマを使用するように設定することができます。ただ、先にも説明しましたが DocBook V5.0にはRELAX NG文法を使用することが推奨されています。この節の残りの部分 では、RELAX NGスキーマを使用した入力補完をサポートしているXMLエディタを(アルファ ベット順で)紹介します。

Emacs上のnXML

nXML modeGNU Emacsテキストエディタ用のアドオンです。nXMLをインストールすることで、 Emacsが入力補完、XML文書の妥当性検証機能付きという、とても強力なXMLエディタになり ます。

図 1. Emacs上のnXML modeでは入力補完や妥当性検証ができる

Emacs上のnXML modeでは入力補完や妥当性検証ができる

nXMLは、スキーマとXML文書を関連付けるために shcemas.xmlという特殊な設定ファイルを使用します。通常このファ イルはEmacsのインストールディレクトリ下の site-lisp/nxml/schemaというディレクトリにあります。設定ファ イルに以下の行を加えることでDocBook V5.0の要素を適切なスキーマと関連付けることが できます:

<namespace ns="http://docbook.org/docbook-ng" uri="/path/to/docbook.rnc"/>

注意

nXMLにはdocbook.rncというファイルが付属しています。こ のファイルはDocBook V4.x用のRELAX NG文法です。DocBook V5.0名前空間には、対応する DocBook V5.0 文法を割り当てるようにしてください。

もしシステム全体のschemas.xmlを編集することができなく ても、対象になる文書と同じディレクトリにファイルを作成すれば大丈夫です。nXMLはこ の方法でも関連付けの情報を知ることができます。この場合には設定ファイル全体を以下 のように作成します:

<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
  <namespace ns="http://docbook.org/docbook-ng" uri="/path/to/docbook.rnc"/>
</locatingRules>

oXygen

oXygenは機能 が豊富なXMLエディタです。RELAX NGを含め、数多くのスキーマ言語をサポートしています。 DocBook 5.0文書を快適に編集、検証するには、DocBookの名前空間を対応するスキーマに 関連付ける必要があります。メニューから OptionsPreferences… EditorDefault Schema Associationsを選択し、Newボタン をクリックして関連付けを新規作成してください。DocBook名前空間、RELAX NG短縮構文ス キーマのある場所を入力、適切なスキーマの種類を選択したら OKを押して確認してください。

図 2. oXygenでのスキーマ関連付けの新規作成

oXygenでのスキーマ関連付けの新規作成

oXygenにはDocBook V4.x向けの関連付けがあらかじめ設定されているので、新しく 作成した関連付けをリストのいちばん上に移動させます(Upボ タンを使います)。ここまでするとoXygenでDocBook V4.xとDocBook V5.0の両方を使用す ることができるようになります。

図 3. DocBook V5.0の関連付けはDocBook V4.xの関連付けより優先させる

DocBook V5.0の関連付けはDocBook V4.xの関連付けより優先させる

終わったらOKボタンを押して設定画面を閉じてください。

図 4. oXygenでDocBook V5.0文書を開いたところ

oXygenでDocBook V5.0文書を開いたところ

XML Mind XML editor

XML Mind XML editor(XXE)はワープロのようなインターフェイスで、妥当性 が見た目でわかるXMLエディタです。Standard版とProfessional版があり、Standard版は 無料ですがDocBook V5.0文書を編集するために必要な機能がすべて備わっています。

図 5. XML Mind XML Editor—MS Wordのようだが、きちんとDocBook V5.0のマーク アップが作成される

XML Mind XML Editor—MS Wordのようだが、きちんとDocBook V5.0のマーク アップが作成される

バージョン2.11から、XXEにはDocBook V5.0用の設定が付いてきます。ただ、この設 定は標準では有効になっていません。有効化するには XXE_install_dir/doc/rnsupport/config/docbook5/ の内容を XXE_install_dir/addon/config/docbook5/ にコピーします。XXEを再起動させれば、DocBook V5.0文書を作成(article用のテンプレー トが用意されています)、編集できます。

XXEに付いているRELAX NGスキーマが最新のものではないことがあります。XXEを最 新のスキーマで使うには、新しいdocbook.rngを手に入れた上で XXE_install_dir/addon/config/docbook5/docbook.rng にコピーしてください。

DocBook V5.0の妥当性検証

文書の作成にRELAX NGベースの妥当性検証機能付きエディタを使用していない限り、 文書の処理前に妥当性を検証することが強く推奨されます。検証が成功して初めてその文 書が本物のDocBook V5.0であり、処理ツールが正しく処理できることが保証されます。

RELAX NGバリデータのリストがhttp://relaxng.org/#validatorsにあります。RELAX NGスキーマ内で Schematronのルールの埋め込みをサポートしたバリデータの使用した方が良いでしょう。 Schematronはルール中心の妥当性検証言語で、DocBook文書に追加の制約を課します。 Schematronは純粋なRELAX NGでは表現できないような微妙な条件まで確認することができ ます。

Sun Multi-Schema XML Validator(MSV)はXML文書をRELAX NGとSchematronに対して同時に検証す ることができます。MSVのインストール、使用方法は次の通りです:

  1. https://msv.dev.java.net/servlets/ProjectDocumentList?folderID=101か らrelames.zipをダウンロードします。

  2. ダウンロードしたファイルをお好きなディレクトリに展開します。

  3. 次のコマンドで文書の妥当性を検証します:

    java -Xss256K -jar /path/to/relames.jar /path/to/docbook.rng document.xml

    注意

    -Xss256Kオプションを付けるのは、Java仮想マシンのスタックサ イズを増やすためです。DocBookスキーマはかなり大きいのでこれは必須です。MSVでスタッ クオーバーフローになるようならこの値を上げてみてください。Sun以外のJava実装の場合、 スタックサイズをどのように増やせばいいのかは、お使いの仮想マシンのドキュメンテー ションを参照してください。

オンラインのDocBook V5.0バリデータもあります。このバリデータも妥当性検証にSchematronを埋め込ん だRELAX NGを使用しています。

DocBook V5.0の処理

DocBookがここまで成功した理由に、内容をHTMLやPDFなど様々なフォーマットに変 換できるフリーなツールの存在があります。DocBook XSL Stylesheetもそんな人気のある ツールの一つです。

DocBook XSL Stylesheet

DocBookスタイルシートは(3.1や4.2など)異なるバージョンで書かれた内容でも常 に処理できるような作りになっています。最近のスタイルシートは、多少の制限があるも ののDocBook V5.0を処理することもできます。

DocBook V4.x文書をDocBook XSL Stylesheetで処理するのとまったく同じ方法で DocBook V5.0文書を処理できます。新規に特別なソフトウェアは必要ありませんので、 Saxon、xsltproc、Xalanなどお好みのXSLTプロセッサを使いつづけることができます。

スタイルシートは文書の処理中にDocBook V5.0の名前空間を取り除いてDocBook V4.xのような状態にします。これは、XSLTでは異なる名前空間を持つ要素は厳密に区別さ れ、一つのテンプレートセットでそれらを処理するのは難しいからです。この処理はユー ザーがわかるようにされています。DocBook V5.0文書をスタイルシートで処理すると、次 のような補助的なメッセージが表示されます:

Stripping NS from DocBook 5/NG document.
Processing stripped document.

既存のスタイルシートでもDocBook V5.0をきちんと処理することができますが、多 少制限があります。DocBook V5.0の新機能のいくつかを対応させるためには、スタイルシー トをかなり複雑に書き換える必要があるため、新しいバージョンのスタイルシートはスク ラッチから作成しています。古いスタイルシートではサポートされていない機能の一部を 以下に示します:

  • 汎用的なアノテーション

  • 全要素内での汎用的なXLinkリンク

名前空間が取り除かれる過程で、文書のベースURIは失なわれます。このため、まれ に画像やプログラムリストなど相対的に参照しているリソースがうまく処理されないかも しれません。スタイルシートはこの問題を解決しようとはしますが、重箱の隅的な状況で 失敗することがあります。

XSLT 2.0ベースによる再実装

XSLT 1.0には重要な機能がいくつか欠けているため、現在のDocBook XSLスタイルシー トはその制限を克服するために実装独自の拡張をしています。幸い、XSLT 2.0の作者はこ うした制限を聞き入れてくれたので、XSLT 2.0には以前欠けていた機能が多く追加されま した。新しいXSLT 2.0版スタイルシートは新機能を利用してDocBook V5.0文書を処理でき るように実装中です。

スタイルシートの再実装とXSLT 2.0の改善によって、開発者はスタイルシートに多 くの新機能を取り込むことができました。その中でいくつかを次に挙げます:

  • 参考文献、用語集の外部化とともに、プロファイル(文書の条件分岐) のシームレスな統合

  • (ほとんどの)外部拡張が不要に

  • 索引の国際化

  • タイトルページ用テンプレートのカスタムが簡単に

XSLT 2.0ベースのスタイルシートの欠点として、それが未完成である点と、XSLT 2.0の実装がまだそれほど存在しない点があります。スタイルシートは現状としてHTMLと分 割HTMLによる出力しかサポートしていません。他のフォーマットによる出力も予定されて いますが、しばらくの間は期待できません。スタイルシート開発者に自由な時間があまり ないためです。

この新スタイルシートを試したいなら、もちろんできます。http://docbook.sourceforge.net/snapshots/docbook-xsl2-snapshot.zipか らスタイルシートの開発版スナップショットを手に入れて、どこかに展開します。さらに http://saxon.sf.netからSaxon 8をダウンロード、インストールしま す。

DocBook V5.0文書を単一のHTMLページに変換するには、以下のコマンドを使用しま す:

java -jar /path/to/saxon8.jar -o output.html document.xml /path/to/docbook-xsl2-snapshot/html/docbook.xsl

DocBook V5.0文書を分割したHTMLページ群に変換するには、以下のコマンドを使用 します:

java -jar /path/to/saxon8.jar document.xml /path/to/docbook-xsl2-snapshot/html/chunk.xsl

マークアップの変更点

すべての変更点は[DB5SPEC]にリストがあります。この節は DocBook V4.xとDocBook V5.0との間で代表的なマークアップの変更部分を、例を使って説 明します。

相互参照やリンクの改善

DocBook V4.xでは、要素に一意の識別子を割り当てるにはid属性を使いました。[XMLID]に準拠する ため、DocBook V5.0ではこの属性がxml:idに変更されまし た。

また、xreflinkだけでなく、ほぼ全てのインライン要素 をリンク元として使えるようになりました。つまり、以下はDocBook V4.xに基づく内容で すが:

<section id="dir">
  <title>DIR command</title>
  <para>...</para>
</section>

<section id="ls">
  <title>LS command</title>
  <para>This command is synonymum for <link linkend="dir"><command>DIR</command></link> command.</para>
</section>

これがDocBook V5.0では次のようになります:

<section xml:id="dir">
  <title>DIR command</title>
  <para>...</para>
</section>

<section xml:id="ls">
  <title>LS command</title>
  <para>This command is synonymum for <command linkend="dir">DIR</command> command.</para>
</section>

XLink名前空間のhrefと共に、linkend属性がすべてのインライン要素に追加されました。これ により、どのインライン要素でもハイパーテキストのリンク元として使うことができます。 XLinkを使うにはXLink名前空間を宣言する必要があります(普通は文書のルート要素で行 います):

<article xmlns="http://docbook.org/ns/docbook" 
         xmlns:xl="http://www.w3.org/1999/xlink" version="5.0">
  <title>Test article</title>

  <para><application xl:href="http://www.gnu.org/software/emacs/emacs.html">Emacs</application> 
    is my favourite text editor.</para>
  …

XLinkが使えるため、DocBook V5.0においてulink要素 は完全になくなりました。DocBook V4.xのulink要素の代わ りに:

<ulink url="http://docbook.org">DocBook site</ulink>

linkを使うことができます。

<link xl:href="http://docbook.org">DocBook site</link>

XLinkのリンクではフラグメント識別子を持たせることもできるので、文書内の相 互参照でlinkend属性の代わりに使うこともできます:

<command xl:href="#dir">DIR</command>

妥当性の検証時にXLinkのリンクはチェックされませんが、xml:id/linkendのリンクはID とIDREFが一致するかチェックされます。必要に応じて使い分けてください。

XML ID/IDREFのリンクはXIncludeのリンク先に適用することができないので、 XLinkのフラグメント識別子はXIncludeを使うときには便利です。

要素名の変更

意味をより良く表したり、DocBook全体の要素数を減らす目的で、いくつかの要素は 名前が変更されました。

表 1. 名前の変更された要素

古い名前 新しい名前
sgmltag tag
bookinfo, articleinfo, chapterinfo, *info info
authorblurb personblurb
collabname, corpauthor, corpcredit, corpname orgname
isbn, issn, pubsnumber biblioid
lot, lotentry, tocback, tocchap, tocfront, toclevel1, toclevel2, toclevel3, toclevel4, toclevel5, tocpart tocdiv
graphic, graphicco, inlinegraphic, mediaobjectco mediaobjectinlinemediaobject
ulink link

要素の除去

次に挙げる要素は代替の要素が無いままDocBook V5.0では取り除かれました:action, beginpage, highlights, interface, invpartnumber, medialabel, modespec, structfield, structname.

DocBook V4.x文書をDocBook V5.0に変換する

DocBook V5.0スキーマには、妥当なDocBook V4.x文書を妥当なDocBook V5.0文書に 変換するXSLT 1.0スタイルシートが付属します。

お持ちの文書(例ではdoc.xmlとします)を変換するには、 次のようにします:

  1. DocBook V4.x文書の妥当性を検証します。変換ツールは入力する文書が妥当である と仮定しています。もしその文書にマークアップ上のエラーがあると、結果がどうなるか わかりません。

  2. 利用しようとしているDocBook V5.0の配布物にあるスタイルシート db4-upgrade.xslを使って、doc.xmlnewdoc.xmlに変換します。

  3. DocBook V5.0 RELAX NG文法でDocBook XML V5.0文書の妥当性を検証します。

ほとんどの場合、生成された文書は妥当なものになり、変換処理は完成です。

もし文書が妥当にならなかったら、問題を報告してください。(うまくいかないケー スをまとめて、将来この文書に反映させる予定です。)

実体はどうすれば?

既存の文書をXSLTでDocBook V5.0に変換すると、一つの問題が起こり得ます。つま り、すべての実体参照が取り除かれてしまうのです。

実体を保存することが、あなたのプロダクションワークフローで重要な役割を持っ ている場合、保存は半手動で処理する必要があります。

  1. 既存の文書をお好きな編集ツールで開きます。ツールはXMLに対応してい ないもの、またはマークアップを“生”で編集できるものを使って ください。

  2. 残したいすべての実体参照を特定の文字列で置き換えます。たとえば、 “&Product;”という参照を残す場合、すべてを “[[[Product]]]”に置換します (“[[Product]]”という文字列が文書中の他の箇所に登場しないと仮定しま す)。

  3. 文書の文書型宣言をコピーして、どこかに保存します。文書型宣言は “<!DOCTYPE”で始まり “]>”で終わるまでの部分です。

  4. 「DocBook V4.x文書をDocBook V5.0に変換する」という項にある手順に従い、変換を行ないます。

  5. お好きな編集ツールで文書を新規作成します。そして実体参照を保存するために使 用した文字列をすべて対応する実体参照で置き換えます。

  6. 新しい文書の先頭に保存した文書型宣言をペーストします。

  7. 文書型宣言から外部識別子(PUBLICSYSTEMキーワードを使用した識別子です)を除去します。文書が次の ように始まっていても:

    <!DOCTYPE book [
    <!ENTITY someEntity "some replacement text">
    ]>

    (XMLとして)まったく整形です。DTDへの参照を取り除かないと、パーザは DocBook V4.0に対して妥当性を検証しようとします。参照を取り除く代わりにDocBook V5.0のDTDを参照することもできます。

ティップ

前述の手順のうち、2と5はMichael Smithによる参照隠蔽スクリプト で自動化することができます。

外部解析対象実体

文書の一部を別ファイルから取り込む実体である、外部解析対象実体は他の実体と は扱いが異なります。これはXIncludeで対応する要素に置き換えることができます。

DocBook V5.0の配布物に含まれているPerlスクリプト db4-entities.plがその置換を行ってくれます。このスクリプトを 使うには、次の手順に従ってください:

  1. 文書をdb4-entities.plで処理します。引数には一つのファ イル名を取り、標準出力にXInclude版の文書が表示されます。

  2. XInclude版の文書を「DocBook V4.x文書をDocBook V5.0に変換する」という項に従い処理します。

DocBook V5.0のカスタマイズ

TBD

FAQ

1. 作成
1.1. DocBook V5.0文書でDTDや!DOCTYPEを使わない場合、どうやってスキーマを割り当て ればいいんですか?
1.2. DocBook V5.0ではndashのような実体を使うことが できないんですか?
1.3. 文書のモジュール化はどうやるんですか?
2. スタイルシート
2.1. 新しくXSLT 2.0でDocBook XSLスタイルシートの実装が始まっても、現在のXSLT 1.0による実装の管理や改善は継続されるんですか?
3. スキーマのカスタマイズ
3.1. MathMLの要素を使ってDocBookスキーマを拡張するには?
3.2. SVGの要素を使ってDocBookスキーマを拡張するには?
3.3. 先述のMathMLとSVGのカスタマイズを同時に行うことはできますか?
4. ツール特有の問題
4.1. DocBook V5.0文書をW3C XML Schema(docbook.xsd)に対し て妥当性を検証する際にAltova XMLSpyを使っています。XMLSpyが未定義のxml:id属性に文句を言うんですけど?

1. 作成

1.1.

DocBook V5.0文書でDTDや!DOCTYPEを使わない場合、どうやってスキーマを割り当て ればいいんですか?

文書とRELAX NGスキーマを関連付ける標準的な方法というものはありません。ほと んどのツールでは何らかの方法で関連付けを行うことができます。お使いのアプリケーショ ンのドキュメンテーションを参照してください。ツールによっては、文書を編集したり処 理するごとに、手動でスキーマを指定する必要があります。

1.2.

DocBook V5.0では&ndash;のような実体を使うことが できないんですか?

新しいスキーマ言語(RELAX NGやW3C XML Schemaなど)には、特殊文字を簡単にタ イプする目的で実体を定義する方法がありません。必要な文字が選べる機能や専用のツー ルバーを使い、生のUnicode文字や数値文字参照を文書に挿入できるようなエディタもあり ます。

他にも、文書の冒頭で実体を定義する方法があります。実体定義ファイルは現在W3Cにより 管理されています。使おうとしている実体の定義がある定義ファイルを参照することで、 インポートした実体を参照することができます。例を挙げます:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article [
<!ENTITY % isopub SYSTEM "http://www.w3.org/2003/entities/iso8879/isopub.ent">
%isopub;
]>
<article xmlns="http://docbook.org/ns/docbook" version="5.0">
<title>DocBook V5.0 &ndash; the superb documentation format</title>
…
1.3.

文書のモジュール化はどうやるんですか?

XIncludeを使ってくだ さい。DocBook V5.0には、XIncludeの要素を使うことができる代替スキーマがあります。 このスキーマはいくつかのXMLエディタには必須です。こうしたスキーマの名前は末尾に 「xi」が付きます。たとえば、docbook.rncdocbookxi.rncになります。

2. スタイルシート

2.1.

新しくXSLT 2.0でDocBook XSLスタイルシートの実装が始まっても、現在のXSLT 1.0による実装の管理や改善は継続されるんですか?

されます。現在の(1.69.1などの)スタイルシートは広く使われており、既存の多 くのXSLTプロセッサが対応しているため、サポートや改善はこれからも続けます。

もちろん、いつの日か新規開発をすべてXSLT 2.0による実装のみに移行します。た だ、この移行は現在のスタイルシートの全機能が新しいスタイルシートで実装され、複数 のXSLT 2.0プロセッサが出揃ってからになります。

3. スキーマのカスタマイズ

3.1.

MathMLの要素を使ってDocBookスキーマを拡張するには?

標準のDocBookスキーマでは、equation要素の内部であればMathML名前 空間に属する要素の使用を許可しています。つまりDocBook+MathML文書の妥当性を検証す ることはできるのですが、その反面、検証中はMathMLの要素が無視されてしまいます。さ らに、MathMLの要素を編集する際には入力が補完されません。

MathMLを厳密に検証したり、入力補完機能が必要であれば、DocBookスキーマを MathMLスキーマで簡単に拡張することができます。

手順 1. MathMLスキーマを使ったDocBookスキーマの拡張

  1. MathMLのRELAX NGスキーマをhttp://yupotan.sppd.ne.jp/relax-ng/mml2.htmlからダウンロードして、ど こかに(たとえばmathmlサブディレクトリに)展開します。

  2. 短縮構文による簡易カスタムスキーマdbmathml.rncを作成し ます:

    namespace html = "http://www.w3.org/1999/xhtml"
    namespace mml = "http://www.w3.org/1998/Math/MathML"
    namespace db = "http://docbook.org/ns/docbook"
    
    include "/path/to/docbook.rnc" {
      db._any.mml = external "mathml/mathml2.rnc"
      db._any =
        element * - (db:* | html:* | mml:*) {
          (attribute * { text }
           | text
           | db._any)*
        }
    }

    もしくは、XML構文によるRELAX NGを使ったスキーマ dbmathml.rngでも構いません。

    <?xml version="1.0" encoding="UTF-8"?>
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
    
    <include href="/path/to/docbook.rng">
      <define name="db._any.mml">
        <externalRef href="mathml/mathml2.rng"/>
      </define>
    
      <define name="db._any">
        <element>
          <anyName>
            <except>
              <nsName ns="http://docbook.org/ns/docbook"/>
              <nsName ns="http://www.w3.org/1999/xhtml"/>
              <nsName ns="http://www.w3.org/1998/Math/MathML"/>
            </except>
          </anyName>
          <zeroOrMore>
            <choice>
              <attribute>
                <anyName/>
              </attribute>
              <text/>
              <ref name="db._any"/>
            </choice>
          </zeroOrMore>
        </element>
      </define>
    </include>
    
    </grammar>
  3. 元のDocBookスキーマの代わりに、カスタマイズしたスキーマ (dbmathml.rncまたはdbmathml.rng)を使 用します。

3.2.

SVGの要素を使ってDocBookスキーマを拡張するには?

DocBookによるSVGの扱いはMathMLと同じです。imageobject要素の中で あれば、SVG名前空間にある要素をすべて使うことができます。

手順 2. SVGスキーマを使ったDocBookスキーマの拡張

  1. SVG RELAX NGスキーマをhttp://www.w3.org/Graphics/SVG/1.1/rng/rng.zipからダウンロードして、 どこかに(たとえばsvgサブディレクトリに)展開します。

  2. 短縮構文による簡易カスタムスキーマdbsvg.rncを作成しま す:

    namespace html = "http://www.w3.org/1999/xhtml"
    namespace db = "http://docbook.org/ns/docbook"
    namespace svg = "http://www.w3.org/2000/svg"
    
    include "/path/to/docbook.rnc" {
      db._any.svg = external "svg/svg11.rnc"
      db._any =
        element * - (db:* | html:* | svg:*) {
          (attribute * { text }
           | text
           | db._any)*
        }
    }

    もしくは、XML構文によるRELAX NGを使ったスキーマ dbsvg.rngでも構いません。

    <?xml version="1.0" encoding="UTF-8"?>
    <grammar xmlns="http://relaxng.org/ns/structure/1.0">
    
    <include href="/path/to/docbook.rng">
      <define name="db._any.svg">
        <externalRef href="svg/svg11.rng"/>
      </define>
    
      <define name="db._any">
        <element>
          <anyName>
            <except>
              <nsName ns="http://docbook.org/ns/docbook"/>
              <nsName ns="http://www.w3.org/1999/xhtml"/>
              <nsName ns="http://www.w3.org/2000/svg"/>
            </except>
          </anyName>
          <zeroOrMore>
            <choice>
              <attribute>
                <anyName/>
              </attribute>
              <text/>
              <ref name="db._any"/>
            </choice>
          </zeroOrMore>
        </element>
      </define>
    </include>
    
    </grammar>
  3. 元のDocBookスキーマの代わりに、カスタマイズしたスキーマ (dbsvg.rnc またはdbsvg.rng)を使用しま す。

3.3.

先述のMathMLとSVGのカスタマイズを同時に行うことはできますか?

できます。MathMLとSVGをDocBookスキーマに組み合わせるカスタムスキーマを作成 すればよいのです。短縮構文による両者を併合したスキーマはこのようになります:

namespace html = "http://www.w3.org/1999/xhtml"
namespace mml = "http://www.w3.org/1998/Math/MathML"
namespace db = "http://docbook.org/ns/docbook"
namespace svg = "http://www.w3.org/2000/svg"

include "/path/to/docbook.rnc" {
  db._any.mml = external "mahtml/mathml2.rnc"
  db._any.svg = external "svg/svg11.rnc"
  db._any =
    element * - (db:* | html:* | mml:* | svg:*) {
      (attribute * { text }
       | text
       | db._any)*
    }
}

RELAX NG構文では次のようになります:

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">

<include href="/path/to/docbook.rng">
  <define name="db._any.mml">
    <externalRef href="mathml/mathml2.rng"/>
  </define>

  <define name="db._any.svg">
    <externalRef href="svg/svg11.rng"/>
  </define>

  <define name="db._any">
    <element>
      <anyName>
        <except>
          <nsName ns="http://docbook.org/ns/docbook"/>
          <nsName ns="http://www.w3.org/1999/xhtml"/>
          <nsName ns="http://www.w3.org/1998/Math/MathML"/>
          <nsName ns="http://www.w3.org/2000/svg"/>
        </except>
      </anyName>
      <zeroOrMore>
        <choice>
          <attribute>
            <anyName/>
          </attribute>
          <text/>
          <ref name="db._any"/>
        </choice>
      </zeroOrMore>
    </element>
  </define>
</include>

</grammar>

4. ツール特有の問題

4.1.

DocBook V5.0文書をW3C XML Schema(docbook.xsd)に対し て妥当性を検証する際にAltova XMLSpyを使っています。XMLSpyが未定義のxml:id属性に文句を言うんですけど?

XMLSpyには自前のxml.xsdがバンドルされていますが、この スキーマにはxml:id属性が定義されていません。バンドル されたxml.xsdはプログラムに組み込まれており、別のバージョン と置き換えることはできません。この問題を解決するには、XMLSpyのバージョンを2006 SP1にアップグレードするしかありません。

参考文献

[RNCTUT] Clark, James – Cowan, John – MURATA, Makoto: RELAX NG Compact Syntax Tutorial. Working Draft, 26 March 2003. OASIS. http://relaxng.org/compact-tutorial-20030326.html

[XMLID] Marsh, Jonathan – Veillard, Daniel – Walsh, Norman: xml:id Version 1.0. W3C Recommendation, 9 September 2005. http://www.w3.org/TR/xml-id/

[DB5SPEC] Norman, Walsh: The DocBook Schema. Working Draft 5.0a1, OASIS, 29 June 2005. http://www.docbook.org/specs/wd-docbook-docbook-5.0a1.html