IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  XML  >

XML での文書生成と情報の再利用: 第 2 回 XML 文書の情報再利用

文書を再利用して作業を減らし、有用性を高め、一貫性を強化する

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

議論する

原文はこちら

原文はこちら


レベル: 中級

William von Hagen, Systems Administrator, Writer, WordSmiths

2009年 5月 26日
更新 2009年 7月 07日

XML 文書の情報を再利用するための単純なソリューションとして、XInclude を使用して文書の特定の箇所に他の文書を組み込む方法と、XPointer を使用して他の文書から文書のほんの一部分あるいは XML フォーマットでの一部の情報プールを組み込む方法を学びましょう。また、情報を簡単に再利用できるような XML 文書の構造を作成するためのヒントや、規模の大きな文書に統合できるスタンドアロン文書を保持する方法についても学びましょう。

情報を再利用する

この連載の他の記事

連載の第 1 回で説明したように、XML の概念の由来となったのは SGML (Standard Generalized Markup Language) です。SGML の主な目標は、文書の内容 (コンテンツ: 文書に含まれる実際の語句やデータ) を表示 (プレゼンテーション: 特定の出力フォーマットや、特定の出力デバイスで表示する方法) とは切り離すことです。マークアップとして知られる特殊な表記を使って文書に含まれる情報の構造およびタイプを識別することにより、情報が最終的にどのように使用あるいは表示されるかを気にせずに、文書の内容そのものに専念することができます。XML では、このように構造化された情報を、それがどのように使用されているかに依存しない汎用フォーマットで提供することが一層重要となります。そしてこれは、文書を作成する場合に限ったことではありません。

よく使われる頭字語
  • DTD: Document Type Definition
  • W3C: World Wide Web Consortium
  • XML: Extensible Markup Language

文書を作成する場合に、構造化したテキスト・ベースのフォーマットで情報を保持することによる副次作用のなかで重要なものの 1 つは、XML での情報は特定のソフトウェア・パッケージに依存しないことです。XML 文書は、テキスト・エディターから高度なグラフィカル・ツールに至るまでのアプリケーションを使って操作することができます。しかし、それよりも重要な構造および論理マークアップの副次作用は、情報が構造的に有効なコンテキストであれば、あらゆるコンテキストで情報の一部を簡単に再利用できることです。

DITA

DITA (Darwin Information Typing Architecture) をはじめとする DocBook 以外の XML 文書作成用ソリューションも DocBook 同様の柔軟性をもたらし、XML 文書環境での情報の再利用を簡単に行えるように設計されています。DITA には作成および管理対象とする情報の相当なフラグメント化が必要になるため、スタッフやソフトウェアの要件によっては実行不可能であったり、管理できなかったりする場合もあります。しかし、この記事で説明する従来の DocBook を中心としたソリューションに代わる手段として検討する価値は間違いなくあります。

構造化文書はその定義によると、論理的に複数のサブコンポーネントで構成されます。book は複数の chapter からなり、chapter は複数の section からなり、そのすべてが特定の順序で現れます。モジュール・プログラミングなどのプログラミングの概念と同じく、文書を個別の論理情報ユニットの集まりであると考えると、作成している文書を構造化しやすくなります。また、それぞれの論理情報ユニットを別々に保管 (チャンキング) していて、これらのユニットを特定の順序でつなぎ合せることによって文書を組み立てることが可能な場合、この構造化文書のモデルは情報再利用のための確固たる基礎を提供します。

個別のサブ文書から大規模な文書を作成できるように、XML には外部の XML ファイルを XML 文書に組み込むための基本メカニズムがあります。XInclude として知られるこのメカニズムは、複数の文書や同じ文書内の複数の場所で個別に維持されている情報のチャンクを簡単に利用できるようにします。一方、次のセクションで説明するように、XML にはそれぞれの状況に合わせて他の XML 文書の適切な情報を再利用するためのメカニズムもいくつか用意されています。

XML 文書の内容を組み込むメカニズム

XML はその前身である SGML のように、当初は (XML では XML 外部エンティティーとして知られる) エンティティーを宣言することにより、文書を他の文書に組み込めるようにしていました。エンティティーでは、文書に組み込む特定のファイルの論理名を定義します。外部エンティティーの基本構文は以下のとおりです。

    <!ENTITY name [PUBLIC "public-identifier"]
	SYSTEM "system-identifier">

namesystem-identifier と関連付けるための単なる論理名であり、system-identifier はこのエンティティーを呼び出したときに文書に挿入する XML ファイルの URI (Uniform Resource Identifier) です。PUBLIC キーワードと public-identifier はオプションであり、システムが公開 ID をサポートする場合にこのオプションを使用すると、場所に依存しない柔軟な URI でエンティティーの場所を指定することができます。以下に示すのは、XML 外部エンティティー定義の見本となる例です。

    <!ENTITY chapter1 SYSTEM "chapter1.xml">

外部エンティティーによって参照したいファイルが XML ファイルではない場合、システム ID の後にそのファイルのフォーマットも指定する必要があります。以下は、PNG ファイルの場合の例です。

    <!ENTITY figure1 SYSTEM "figure1.png" PNG>

表記 ID は、その表記に関連付けられたファイルのタイプを XML 処理システムや XML フォーマット設定システムが処理するためのヘルパー・アプリケーションを容易に特定できるようにするためのものです。

外部エンティティーは重宝するものの、いくつかの制約があります。情報の再利用という点で、とりわけ大きな影響を与える制約には以下のものがあります。

  • 外部エンティティーが識別する XML ファイルに含められるのは、文書のフラグメントのみです。DOCTYPE 宣言やスタンドアロン XML 宣言を含めることはできません。つまり、外部エンティティーは他の外部エンティティーを参照できないため、include メカニズムとしての外部エンティティーの粒度は制限されます。
  • 外部エンティティーが識別する XML ファイルの一部だけを組み込むことはできません。したがって、複数の文書や文書内の複数の場所で再利用可能にしたいあらゆる情報をチャンキングする必要があります。

上記のような制約があることから提案されたのが、より柔軟な汎用 XML 組み込みメカニズム (XML Inclusions、または通称 XInclude) です。この提案は 1999年に IBM® および Microsoft® によって W3C に提出された後、W3C によって認可され、2004年に勧告として公開されました。現在の最新版は 2 回目の改訂版で、2006年に勧告として公開されたものです。

XInclude 勧告では、外部情報の組み込み方法として多少異なる 2 つの方法を指定しています。

  • 丸ごと組み込みたい外部リソースの場所 (URI) を識別します。この XInclude 文は、概して簡易 XInclude 文と呼ばれたりもします。
  • XML 情報として外部リソースに含まれ、そのリソースから別の XML 文書に組み込み可能な XML 情報のチャンクを一意に識別します。それには XInclude 文で、組み込む情報のチャンクが含まれる外部リソースの URI 情報を示す特定の属性や、ターゲット URI が指しているのは構文解析可能な XML 文書であることを示す属性、そして該当するリソース内の組み込みたい XML リソースを識別する xpointer 文などを使用します。この方法はよく、XML ファイルに含まれる情報の識別方法に関する仕様である XPath 仕様の拡張機能の名前をとって、単に XPointer と呼ばれます。

情報を組み込んで再利用するこの 2 つの方法のうち、最初の方法は一般的に、スタンドアロン文書と組み込み文書の両方として保持する大きな情報のチャンクで使用されます。一方、2 番目の方法は、文書から比較的小さな情報のチャンクを抽出するのに極めて便利です。

外部リソース全体を組み込むのか、あるいは外部リソースから情報のチャンクを抽出するのかは、管理している情報チャンクの編成方法、そして再利用する情報のタイプによって決まります。

この後、XInclude と XPath (したがって XPointer) をサポートするオープンソース・ソフトウェアの入手方法を紹介し、記事の残りの部分では XInclude および XInclude/XPointer を使用して外部情報を組み込む方法を説明し、それぞれの方法が最も役立つシナリオのタイプについて検討します。

必要なソフトウェアを入手してインストールする

すべてではないにしても XML 文書作成用ソフトウェアのほとんどは XPath と XInclude をサポートしますが、この記事ではこれらの仕様をサポートするオープンソースの XML ソリューションに焦点を絞ります。最もよく知られたオープンソースの XML 処理パッケージ、xsltproc は、本質的に XPath 処理をサポートするだけでなく、--xinclude コマンドライン・オプションを指定すると XInclude 処理もサポートします。xsltproc パッケージの入手先については、「参考文献」を参照してください。

Linux® システムを使用している場合 (または連載第 1 回の手順に従って XML 文書処理環境をセットアップした場合)、システムにはすでに xsltproc ユーティリティーがインストールされているはずです。インストールされていないとしても、リポジトリーあるいはディストリビューションのインストール・メディアから入手することができます。

xsltproc がシステムにインストールされていることを確認するには、以下のコマンドを実行してください。

    xsltproc --version

システムに xsltproc アプリケーションが適切にインストールされていて実行パスに含まれていれば、実行しているコマンドのバージョンに関する情報が表示されます。

XInclude を使用して外部情報を組み込む

XInclude 勧告の中核となっているのは、include 文です。この文により、最も単純な形の XInclude 文で任意の文書に他の XML 文書を組み込むことができます。

    <xi:include href="../common/tutorial1.xml" />

href 属性には、組み込むリソースの URI を示す任意の値を指定します。

上記の例を見るとわかるように、include 文はその独自の名前空間 (xi) のなかにあります。文書作成用ツールでエラーや警告を生成することなく文書で include 文を使うには、xi 名前空間を宣言してください。その方法は、作成している文書のタイプのルート・ノードに、名前空間を定義する属性を追加するというものです。

    <?xml version='1.0'?>
    <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">

    <book xmlns:xi="http://www.w3.org/2003/XInclude" 
	  id="product-usersguide">

上記の宣言と 1 つ以上の xi:include 文を追加すると、文書作成用ツールを使ってメインの文書を処理し、指定したファイルを指定した箇所に挿入できるようになります。

多くの文書作成用ツールは、文書の組み込みに失敗しても致命的エラーとはみなさないため、組み込みに失敗した結果、極めて短い文書が生成されることがあります。失敗した xi:include 文を検出する方法として、XInclude 仕様では fallback 文を提供しています。この文は xi:include 文のなかでのみ有効で、組み込みに失敗した場合に xi:include 文を置き換えるテキストを包含します。以下は、xi:fallback 文を使用した単純な xi:include 文の例です。

    <xi:include href="../common/tutorial1.xml">
      <xi:fallback>FATAL ERROR - BROKEN INCLUDE!</xi:fallback>
    </xi:include>

この例に従うと、XML 出力には FATAL ERROR - BROKEN INCLUDE! というストリングが組み込まれます。このストリングは直接出力で探すことも、このようなストリングの有無をプログラムによってチェックして、見つかった場合には文書処理を停止するスクリプトを作成することもできます。

XPointer を使用して外部情報のサブセットを組み込む

前述したとおり、XPointer は XPath 仕様のサブセットであり、XInclude 仕様でサポートされています。include 文で xpointer 属性を使用することにより、外部 XML リソースを部分的に抽出し、別の文書の現行の場所に挿入することができます。別のファイルに含まれる小さな情報のチャンクを抽出して再利用する場合には、XInclude 文のなかで XPointer を使用するのが最も一般的です。この方法は、すべての組み込み可能な情報をスタンドアロンの外部リソースとして保持する代わりの手段となり、使用するのも簡単です。

xpointer 属性を使用した include 文の基本構文は以下のとおりです。

    <xi:include href="../common/glossary.xml" parse="xml" 
      xpointer="element(para)xpointer(//glossentry[@id='caching']/glossdef/*)"
      />

上記の例が抽出するのは、//glossentry[@id='caching']/glossdef/ という XPath 文が指すパラグラフ (para) 要素です。この要素が caching という ID を持つ用語集エントリーの glossdef 要素の内容となります。

用語集は、多数の異なる情報ユニットを 1 つのファイル・リソースで管理しながらも、その情報を部分的に抽出して文書の別の場所や他の文書で再利用できるようにしなければならない場合の例として最も一般的なものの 1 つです。

再利用に向けて XML 文書を編成する

外部 XML リソースを別の文書に組み込むときに考慮しなければならない最も重要なことは、外部 XML リソースを組み込んだ箇所でそのリソースが構文的に妥当でなければならないという点です。そのためには、XML データを作成する際、あるいは既存の XML データをリファクタリングする際にある程度の計画が必要になってきます。

簡単に組み込んで再利用するための 1 つの鍵は、組み込んで使用したい文書のフラグメントでは、できる限り一般的なマークアップを使うことです。例えば、DTD やスキーマ (DocBook など) は、文書のコンテキストから導き出される明示的な階層を持った section 要素を提供します。こうした section 要素の例には、<sect1> <sect2> があります。これに相当する汎用的な <section> は、<section> 自身が使用されるコンテキストから section 要素の階層を導き出します。<section> を使用すると、<section> は再利用可能な上に複数のレベルで妥当性があるため、情報を再利用するための一層柔軟なモデルが得られます。

組み込み用のリソースとして使用するだけでなく、スタンドアロン文書としても生成可能な外部リソースを再利用すると、多少複雑にはなりますが、自動化するのが簡単になります。このような外部リソースは、組み込み可能なフラグメントとして保持して book に配置することも、XML article 宣言とその基本フレームワークが含まれる単純なラッパー文書に配置することも、あるいはスタンドアロン文書として保持し、実際に組み込む前にその場で組み込み可能リソースに変換することもできます。

例えば、チュートリアルを article タイプのスタンドアロン DocBook 文書として保持すれば、スタンドアロン文書として出力し、自動的に目次を生成させることができます。そのチュートリアルを book などのさらに規模の大きな文書のなかに組み込めるようにしたい場合も考えられますが、article は book のコンテキストでは無効です。DocBook の article は、以下のように、その形式の宣言で始まります。

    <article xmlns:xi="http://www.w3.org/2003/XInclude"
	     id="tutorial1">
      <articleinfo>
	<title>
	  Tutorial: Using Emacs
	</title>
      </articleinfo>

この宣言を組み込み可能文書に変換するには、以下のように宣言を変換する多少のスクリプト、あるいは Makefile ルールのセットを作成します。


    <section xmlns:xi="http://www.w3.org/2003/XInclude"
	     id="tutorial1">
      <title>
	Tutorial: Using Emacs
      </title>

以下は、上記と同じことを行う Makefile に登録されている内容の例です。

    cat tutorial1.xml | grep -v articleinfo | \
        sed -e 's;<article;<section;' \
            -e 's;</article>;</section>;' > tutorial1-includable.xml

この文書をスタンドアロン article として生成するときには、tutorial1.xml ファイルを処理することができます。また、この文書を別の文書の section 要素として組み込みたい場合は、上記の例のような Makefile ルールを呼び出してから、<xi:include> 文を使って tutorial1-includable.xml ファイルを組み込めばよいわけです。

まとめ

この記事では、XML 文書の情報を再利用するための単純なソリューションと併せ、XInclude を使って外部文書を組み込む方法、そして XPointer を使って他の文書からのフラグメントを組み込む方法を説明しました。

現代の企業情報のニーズおよび製品に必要となる豊富な文書のセットは、同じ情報を異なるコンテキストで何度も使用します。複数の文書や、文書の複数のコンテキストで情報の個別のチャンクを使用できるということは、作成しなければならない情報の量が最小限に減ると同時に、同じ情報を複数の場所で保持する必要がなくなるということを意味します。文書の内容を一意に識別できる複数の情報ユニットに分割すると、管理および保持する必要のある文書ファイルの数が増えるのは確かです。けれどもほとんどの文書作成グループにとって、情報を作成する時間の節約、そして情報の精度と一貫性の向上は、(大量の文書セットを管理している場合はなおさらのこと) 多大なメリットをもたらすはずです。



参考文献

学ぶために
  • XML での文書生成と情報の再利用: 第 1 回 XML を使用した文書のパブリッシング」(William von Hagen 著、developerWorks、2009年3月): UNIX® または Linux システムで XML パブリッシング・システムを簡単にアセンブルしてください。無料のオープンソース・パッケージを XML と組み合わせることで効率的に情報を再利用し、1 つのソース文書のセットからさまざまなフォーマットの文書を生成できるようになります。

  • XML での文書生成と情報の再利用: 第 3 回 複数の出力フォーマットを持つ XML 文書の作成」(William von Hagen 著、developerWorks、2009年7月): この 3 回連載の第 3 回では、XML の属性を利用し、事前処理のステップを通じて、特定の対象読者または出力フォーマット用に文書をカスタマイズします。一例として DocBook を使用して、シェル・スクリプトおよび Makefile による完成文書の生成を単純化そして自動化します。

  • DocBook: The Definitive Guide: SGML と XML での DocBook マークアップについての情報を網羅しているガイドです。このガイドの全文はオンラインでも見られますが、DocBook でのパブリッシング作業に真剣に取り組むつもりであれば一冊購入する価値はあります。

  • XML Inclusions (XInclude) Version 1.0 (Second Edition): XInclude 仕様に関する決定的な情報については、W3C 勧告を参照してください。

  • XML Path Language (XPath): XPath 仕様に関する決定的な情報については、W3C 勧告を参照してください。

  • Entity Declarations, Attributes and Expansion」(Norman Walsh 著、XML.com、1998年8月): XML エンティティーの宣言および使用に関する情報を読んでください。

  • DITA Infocenter: DocBook に代わる魅力的で人気の高い XML 文書の作成およびパブリッシング手段である DITA に関する情報を調べてください。

  • IBM XML 認定: XML や関連技術の IBM 認定技術者になる方法について調べてください。

  • XML Technical library: 広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM Redbooks については、developerWorks XML ゾーンを参照してください。

  • developerWorks の Technical events and webcasts: これらのセッションで最新情報を入手してください。

  • developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。


製品や技術を入手するために
  • xsltproc: UNIX および Linux システム対応の最新バージョンをダウンロードしてください。

  • DocBook DTD: 最新バージョンをダウンロードして、早速使い始めてください。

  • DocBook XSL スタイルシート: 最新リリースをダウンロードしてください (DocBook Project site > file releases の順に進み、docbook-xsl を選択します)。

  • IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、IBM SOA Sandbox のオンライン試用版をダウンロードするか、検討してみてください。


議論するために


著者について

William von Hagen は、20 年以上の執筆活動および UNIX システム管理者としての経歴を積んでいます。1993年以来 Linux の支持者である彼は著者または共著者として、Ubuntu Linux、Xen 仮想化、GCC (GNU Compiler Collection)、SUSE Linux、Mac OS X、Linux ファイルシステム、 SGML などについての本を書いています。また、Linux および Mac OS X の出版物や Web サイトにも多数の記事を載せています。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ