NetBeans 6について
ちょうど「第3回:情報システムの仕様をXMLで記述する!」 の記事を書いた後で、日本語に対応したNetBeans 6.0.1がリリースされた。XMLに関連した編集環境が、5.5.1と比べると格段によくなっている。例えば、XMLスキーマをグラフィカルに、つまり 木構造を見ながら設計することができる。また、XMLスキーマに応じたXML文書のテンプレートを作ることが可能だ。
これでXMLに関連した作業が楽になる。スキーマを基に読み込みや編集のJavaプログラムを生成してくれるとさらに嬉しいが、そこまで楽をさせてはくれない。楽をしたら技術の進歩は無いとあきらめよう。

(画像をクリックすると別ウィンドウに拡大図を表示します)
文書に出力する「HTML」
さて、情報システム仕様書がXML文書としてできたら、次は出力環境の整備である。XMLスキーマとXML文書は、XMLの閉じた世界に収 まっている。しかし、表示は既存の方法との交渉である。つまり、ここから先は「表示」という、XMLにとって外部の世界との繋ぎを作ることとなる。これが すこしやっかいだ。しかし、仕様作成を共同作業で進めるのであれば、早めにHTMLへの出力環境を準備する必要がある。
XML文書を読める形の文書に素直に変換する標準的な方法は、XSL(eXtensible Stylesheet Language)である。XSLはXPath(XML Path Language)を使って、XMLの要素に応じて、出力を制御する言語だ。XSL自体がXMLであるので、適当な道具を使えばXML文書としての整合性 を確認することができる。
XSLの基本的構造は、ある要素、例えばがあらわれたとき、行う印刷処理を書くことで構成する(リスト1)。
また、XSLではループ構造や条件分岐をあらわすことができる。例えば、要素を考える。その中の要 素の内容をHTMLの<h2>タグで表示して、下層の要素<Section>をforループを使って 順に処理する。この場合には、リスト2のようなXSLを書くことになる。</p>
<p>XML文書をHTML文書に変換する、あるいはWebサイトにおいて直接見せるためには、出力形式がHTMLであることを示す出力指定(リスト3)をXSLに加える。この行を加えることで、HTML4.01に対応したHTMLのヘッダ部が自動的に作成できる。</p>
<p>XML文書からHTML文書への変換は、Apacheプロジェクトのxalanや、xmlsoftのxsltprocがよく使われる。また、XML文書の先頭でXSLファイルを指定することで、Webブラウザから直接見ることもできる。</p>
<!--pagebreak-->
<h2>LaTeX出力その他</h2>
<p>出力様式をhtmlからtextにすれば、XML文書からLaTeXソースファイルを生成することが可能である。XSLの出力形式は、 「<xsl:output method="text" encoding="EUC-JP" indent="no"/>」のようになる。</p>
<p>「<a href="http://thinkit.co.jp/article/21/2/" target="_blank">第2回:情報システムにXMLが求められる背景</a>」 で仕様作成は共同作業であると述べた。しかし、仕様の中身が担当者によって書かれていれば、それを組版して印刷するのは1人で行う作業となる。つまり、自 分がやりやすい環境だけ考えれば十分なのである。組版機能としては、LaTeXの方が柔軟に設定できるだろう。あまりXSLの部分で試行錯誤する必要はな いかもしれない。</p>
<p>ここまで書いたのはXSLのXSLT(XSL Transformations)という機能である。XSLにはもう1つXSL-FO(XSL Formatting Objects)という機能がある。これを使うとXML文書からPDF文書へと直接変換することもできる。</p>
<div align="center" class="caption"><img alt="Image" border="0" class="image lazyload-auto lazyload-processed" src="http://thinkit.co.jp/images/article/21/4/2142.gif" loading="lazy" decoding="async"></div>
<br>
<h2>効率化・有効活用</h2>
<p>これまでシステムの仕様書など、構造が明確でかつその構造に正確に記述しなければならない文書をXMLで作成することの利点をみてきた。XMLはHTMLとの親和性が強いので、Webを使った共同作業なども容易になる。</p>
<p>実際に作業をしていると、もっと効率的にできるはずと思えるところが出てくる。例えば、「<a href="http://thinkit.co.jp/article/21/3/" target="_blank">第3回:情報システムの仕様をXMLで記述する!</a>」に出てきたハードウェアやソフトウェアの部材の仕様をマクロ化したタグ<Desc>は効率化の指向から出てきたものだ。</p>
<p>システムを構成する際には、既存の部品を組み合わせることが多い。大規模なアプリケーションの部品は、既存の動作の確認されたツールやモ ジュールを再利用する。システムやアプリケーションの仕様書や設計書も、部品の仕様を再利用することで効率が上がる(図1)。また、同じものは同じ記述と いう原則を徹底できる。</p>
<p>XML文書、およびHTML文書として見ている範囲では、図中の矢印はハイパーリンクであってかまわない。印刷形式にする際に、文書内に他 の文書を展開するようにXSLを書けばよいからだ。印刷形式をLaTeXで作るならば、LaTeXのincludeを使えばよいであろう。</p>
<!--pagebreak-->
<h2>データの活用</h2>
<p>XMLはJavaと親和性が強い。JavaでXML文書を扱う方法として、SAX(Simple API for XML)とDOM(Document Object Model)がある。SAX はXML文書を先頭から読み、その内容をイベントとしてプログラムを駆動する枠組みである。XML文書の妥当性チェックやXSLによる他の形式の文書への 出力で使われる。例としては、ApacheプロジェクトのXercesのSaxCounterがある。</p>
<p>また、SAXを使えば複数のXML文書に対して、文書中の項目一覧や特定の条件に一致する項目の一覧などを作成することができる。データベースへ格納するSQL分を作るなどの作業に利用できよう。</p>
<p>一方のDOMはXML文書の木構造をメモリ上にすべて取り込む。取り込んだ後、木構造の根から要素をたぐって、編集などの操作ができる。最後に、木構造をXML文書としてファイルへ書き込むことも可能だ。</p>
<p>DOMでは、XML文書全体がクラスorg.w3c.dom.Documentのインスタンスとして、読み込まれる。タグに対応した要素は クラスorg.w3c.dom.Nodeのインスタンスとなっている。そう、XML文書全体がオブジェクト指向文書になっていて、それをオブジェクト指向 プログラミング言語で扱っているだけなのだ。DOMを使うことで、専用エディタを作ることも可能である。また、データベースと連携して、項目入力を支援す ることもできる。</p>
<p>XMLとデータベースの連携、特にデータベースシステムが直接XML文書を扱うことは、XML登場の当初から期待されてきたことである。 XMLとデータベースの連携には、2つの考え方が混ざっている。第1はXML文書そのものを本当にデータベース的に検索するというものである。タグに対応 した要素を検索対象とする。</p>
<p>現実的ソリューションが提示されいるものは、第2のXMLとデータベースの連携である。こちらは、XML文書のデータから、スキーマを用い て選択的に要素の内容を選び、そのデータをSQLデータベースに格納するものである。検索では、ヒットしたら、元のXML文書を引っ張り出すというもの だ。</p>
<div align="center" class="caption"><img alt="Image" border="0" class="image lazyload-auto lazyload-processed" src="http://thinkit.co.jp/images/article/21/4/2143.gif" loading="lazy" decoding="async"></div>
<br>
<h2>知らないところで使われているXML文書</h2>
<p>今回は、情報システムの仕様策定を例にとって、開発ドキュメントをXMLで書くということを論じてきた。最後に、文書作成という観点でXMLの状況を見ていこう。</p>
<p>実は、技術文書をXMLで書こうというプロジェクトは、XMLの当初から存在している。DocBook(<a href="http://www.oasis-open.org/docbook/" target="_blank">http://www.oasis-open.org/docbook/</a>) である。DocBookは一般的技術文書全体をカバーしようと、スキーマを定めている。従って、LaTeXでjarticle.clsを使って文書を書く のと同様である。多様な技術文書に対応できるため、自由度が大きい。仕様書のような場合には、Wordで書くのと同じで、自由すぎるだろう。</p>
<p>世の中では「オープンソフトウェア」という言葉が飛び交っている。公開された規格に則ったソフトウェアという意味である。規格が公開されて いるので、互換性が保証される。そうすることで、ソフトウェアの囲い込みを防ぎ、使いやすさや効率で競争を促進し、結果として質の向上をはかろうというこ とである。</p>
<p>文書作成や表計算などのオフィス統合環境にも「オープンソフトウェア」の流れが押し寄せている。ODF(Open Document Format)である。少し大きな組織であれば、組織内のコンピュータOSが単一ではないケースが多い。少なくともOSのバージョンの幅がある。つまり、 使っているオフィス統合環境が異なっており、同じであってもバージョンの異なるものが混じってしまう。そのような状況の中で、文書を交換しなければならな いのである。そこで、登場したのがOpenOfficeだ。OpenOfficeはODFに対応したオフィス環境である。</p>
<p>OpenOfficeは文書形式の仕様が公開されている。OpenOfficeで作成した文書ファイルは、拡張子がodtとなっている。 fileコマンドでこのファイルタイプを見ると「ZIPアーカイブ」と表示されており、その実体はjarファイルであることがわかる。また、ファイルの中 から文書本体に対応したXMLファイルが出てくる。となると、Javaから直接、触ることも難しくないということだ。</p>
<p>また、Office 2003ではデータがバイナリ形式で、それに対応してApacheではMicrosoftの文書や表計算をJavaから触るプロジェクトがある。 MicrosoftのOffice 2007はODFに対応ではないが、やはりXML形式を使っているようである。</p>
<p>さらに、ODFにしてもMicrosoft Officeにしても、Javaなどからデータを触るSDK(Software Development Kit)がある。現状をみていくとXML文書の最終の出力形式をODFやMicrosoft Officeの文書形式に出すことも可能であろう。</p>
<p>このように、身近なところにもXML形式のものがあり、知らず知らずのうちに浸透していくと考えられる。今後もXML形式の文書の広がりは注目していきたい。</p>
<div class="next_page_link" id="next_page_link_auto"><a href="/node/3398?page=1" class="btn --next-prev next_page_link_auto_bancho_common">XMLの出力環境</a></div>