XML プラグインは、これまでも数多く開発されてきましたし、今でも次から次に新しいものが登場しています。この記事で主に取り上げるのは XMLBuddy というプラグインです。このプラグインの多彩な機能セットには、XML 文書開発に必要なほとんどの機能が用意されているからです。ただし、タスクの種類によっては、その他のプラグインのほうが豊富なユーザー・オプションを提供している場合もあるので、それらのプラグインについても少し触れておきます。もちろん、この記事では基本的な XML 編集機能について説明しますが、Eclipse は、この XML 機能に限らず、無数のツールや機能を手軽に利用するためのダイナミックなフレームセットであることをまず強調しておきたいと思います。
Eclipse にはすでに、XML 構文を強調表示するだけの簡単な XML エディターのソース・コードが用意されています。org.eclipse.ui.editors パッケージは、Eclipse Platform 用の標準的なテキスト・エディターとファイル・ベースの文書プロバイダーを提供しており、そのパッケージに含まれているクラスを拡張したのがこの XML エディターです。この簡単な XML エディターをサンプル・コードとして利用し、独自の Eclipse XML プラグインを開発することもできます。ソース・コードの生成には、Eclipse プロジェクト・ウィザードを活用しなければなりません。また、そのソース・コードを自分でコンパイルする必要もあります。では、その方法をこれから見ていきましょう。
この簡単な XML エディターを構築するには、「File」=>「New」を選択してから、「Project」を選択します。プロジェクト・ウィザードが表示されたら、「Plug-in Development」=>「Plug-in Project」を選択します。
Eclipse Platform Runtime Binary にプラグイン開発環境が含まれていないと、「Plug-in Development」オプションが表示されません。その場合は、eclipse.org のダウンロード・ページから Eclipse Platform Plug-in SDK をダウンロードしてください (記事の末尾の参考文献にそのページのリンクがあります)。
「Next」をクリックします。プロジェクト名 (たとえば org.my.eclipse.xmleditor) を指定してから、「Next」をクリックします。「Plug-in Project Structure」画面ではデフォルト値をそのまま受け入れます。次に、「Create a plug-in project using a code generation wizard」オプションと、「Plug-in with an editor」オプションを選択します。これで、XML エディターのソース・コードが自動的に生成されます。
今度はそのソース・コードをコンパイルします。「Next」をクリックしてから、次の「Simple Plug-in Content」画面で「Finish」オプションをクリックします。「Project」メニューから「Rebuild All」を選択してプロジェクトを構築してください。
次に、「File」=>「Export」を選択して、editor.jar ファイルを作成します。Eclipse を終了して、org.my.eclipse.xmleditor plugin ディレクトリー全体をコピーします。Eclipse を再び起動して、プロジェクトに XML ファイルを追加すれば、XML 構文が強調表示される様子を確認できます (図 1 を参照)。ただし、この簡単な XML エディターでは、妥当性の検証や構文のチェックはできません。
図 1. Eclipse の XML エディターに用意されている簡単な構文強調表示機能
Eclipse 用の最も有名で最も先進的な XML エディター・プラグインは、Bocaloco Software が開発した XMLBuddy です (参考文献にリンクがあります)。XMLBuddy は、Eclipse に XML 編集機能を追加するフリーウェア・プラグインで、ユーザー設定が可能な構文色分け機能、DTD 対応のコード・アシスト機能、妥当性検証機能、同期アウトライン・ビュー機能などを搭載しています。また、Workspace に XML パースペクティブを追加するという役割を果たしますし、XML 文書と DTD のための新しいプロジェクト・テンプレートも用意しています。XMLBuddy のインストール方法は、その他の Eclipse 用プラグインのインストール方法と同じであり、プラグイン・アーカイブを Eclipse のメイン・インストール・ディレクトリーの直下にある\eclipse\plugins サブディレクトリーに unzip するだけで済みます。ただし、Eclipse の再起動が必要です。図 2 は XMLBuddy の実行中の画面です。
図 2. 実行中の XMLBuddy: メイン・エディター・ウィンドウ (XML アウトライン・ビュー)
XML はメタ・マークアップ言語です。XML の要素は、開始タグと終了タグ、それにその両者に挟まれているデータから成っているため、構文強調表示機能だけでなく、いろいろな編集機能を必要とします。XMLBuddy (現行バージョンは 0.2) は、Eclipse に以下のような XML 編集機能を追加します。
- 書式設定機能。XML 文書の全体または一部を選択して書式を設定できます。
- 先進的な構文色分け機能。「Window」=>「Preferences」=>「XML」=>「Colors」メニューで、XML コードの色分けを設定できます。色分けの設定は、通常の XML 文書、DTD (内部サブセットと外部サブセットの両方)、JSP ファイルに適用されます。図 3 は、構文強調表示機能のデフォルト設定を変更する画面です。
図 3. XML 構文強調表示機能のデフォルト設定の変更
- XML コード・アシスト機能。文書の DTD に基づいて、要素名や他のタグ名、属性名、属性値などを指定するためのアシスト機能です。
- 拡張文字符号化サポート機能。XMLBuddy は、XML 1.0 仕様に準拠した
<?xmlという文書符号化宣言を自動検出し、見つかればそれを尊重します。また、すべての XML 文書についても、1 つのファイルについても、デフォルトの符号化を指定できます (このあとの XML コードの妥当性検証と文字符号化を参照)。 - アウトライン・ビュー機能。アウトライン・ビュー・ウィンドウには、文書内の要素構造が表示されます。デフォルトでは、編集作業と同時にアウトラインが自動的に更新されていきます。文書のロジックをざっと見渡したいときに便利な機能です。
- DTD 生成機能。文書の内容から DTD を自動生成できます。また、XMLBuddy はインターネット・ベースの DTD をローカル・マシンにキャッシュするので、DTD と関連文書を 1 度ダウンロードするだけで何度でも使用できます。
XML 文書で一番難しいのは、文書内部の妥当性 (文書ロジックの一貫性) のチェックです。まず必要なのは、すべてのタグや定義の配列や名前が正しいかどうかをチェックするための構文検証です。構文検証に合格してはじめて、XML 文書は整形式であることが確認され、文書の論理構造の検証に入ることができるようになります。そのような XML 文書の妥当性を検証するプログラムを XML パーサーといいます。
これから取り上げる Eclipse 用の XML プラグインはすべて、XML の妥当性検証を実行し、コード内の問題点やエラーを検出する機能を備えています。たとえば、XML 文書を開く時点で、XML パーサーによってエラーが表示されることがあります。その場合は、正確なエラー・コード、エラー・テキスト、さらにはエラーの原因箇所についての確認ができます。また、必要なときに XML 文書の妥当性を検証することや、文書保存時の自動検証を設定しておくことも可能です。その逆に、妥当性検証エラー・タスクを全体としてオフにすることもできます。XMLBuddy プラグインは、システム提供の XML パーサーを使用しますが、Eclipse Platform には、Xerces (XML4J) という最高クラスの XML パーサーが用意されていることも忘れないでください (ダウンロード情報については、参考文献を参照)。もちろん、Xerces やシステム・パーサー以外は使えないということではありません。「Run」=>「External Tools」=>「Configure」を使って、他の XML パーサーを指定することもできます。
XMLBuddy のもう 1 つの重要な機能は、さまざまな文字符号化のサポートです。たとえば、別々の言語 (ポーランド語と英語など) で書かれた XML ポータブル文書を処理する場合に役立つのがこの機能です。ポーランド語の文字符号化には主に 3 つの方法があることを考えれば、これは簡単な作業ではありません。第 1 に Windows 9x/2000 で使用する Windows Latin-2 (CP1250)、第 2 にインターネットや UNIX 系のシステム (Linux など) で使用する ISO Latin-2 (ISO8859-2)、第 3 に MacOS と MacOS X があります。これらはすべて別々のポーランド語文字符号化標準を使用しています。
基本的に、XMLBuddy では文字符号化の問題に 2 つの方法で対応しています。つまり、XML 文書のファイル内容に基づいて符号化宣言を自動検出するか、文書にデフォルトの符号化を設定するかのいずれかです。デフォルトの符号化は、ワークスペース単位でもリソース単位でも設定できます。XML 符号化設定を開くには、「Window」=>「Preferences」=>「XML」=>「Encoding」を選択します。
しかし、このような文字符号化対応については 1 つの問題が残ります。要するに、XML の場合、ワークベンチ単位の 1 つの符号化ですべてに対応することは不可能だということです。XML 文書は世界中のさまざまな場所から送られてくる可能性があります。先方から送られてくる文書の符号化をこちらで指定することは不可能な場合が多いですし、符号化の違いに基づいて作業の仕分けをすることもまず無理でしょう。1 つの符号化設定が、たとえば Java ソース・ファイルにも XML 文書にも適しているというケースはあまり考えられません。このように、1 つのグローバル設定で対応しきれない場合のために、XMLBuddy には文書単位のプロパティーが用意されています。もちろん、プロジェクト内の各ファイルのプロパティーをいちいち設定するというのは、容易なことではありませんが、自動検出できない特殊な符号化を使っている文書や、符号化宣言のない文書が送られてきた場合には、プロパティーを設定する以外に方法はありません。ファイルの符号化プロパティーを開くには、そのファイルを右クリックしてから、「Properties」=>「XML」=>「Encoding」を選択します。図 4 は、そのようにしてグローバルな文字符号化を設定する画面です。
図 4. Eclipse で XML 文書のグローバルな文字符号化を設定する画面
XML Schema とは XML スキーマ定義言語の仕様であり、XML 1.0 に準拠した文書の構造記述と内容制御のための方法を定めています。XML の名前空間機能の利用に関する規定もあります。このスキーマ言語は、それ自体 XML 1.0 で記述するものであり、名前空間も利用します。XML 1.0 の DTD の機能を実質的に再構築し、大幅に拡張したものが、この XML Schema です。ここでは、DTD に数多くの制限があることを押さえておきましょう。
- 要件が複雑な場合に内容モデルを使いにくい。
- 名前空間のサポートがない。
- モジュール性と再利用のためのサポートが限られている。
- 拡張や宣言継承のサポートがない。
- DTD のサイズが大きくなると、書くのも読むのも更新するのも難しく、関連スキーマのセットを定義するのも難しい。
- 自己記述のための構造的なしくみが組み込まれていない (唯一存在するのは
<!-- comments -->だけ)。 - 属性や要素の文脈に基づく内容宣言や属性宣言ができない (XML ベースの多くの言語はその機能を用意しているが、DTD では「適用範囲」を絞り込めない)。
- ID 属性に関するしくみが初歩的である (つまり、一意性に関する有効範囲が存在しない)。
ところが、XML Schema にもやはり欠点があります。
- XML Schema は複雑なので、たまに XML を使うといった程度のプログラマーにとっては難解すぎる。
- XML Schema ではルート要素になれる要素が 1 つに限定されていない (したがって、ごく簡単な文書の妥当性検証にも余分の情報が必要になる)。
- 混合内容を書くときに文字データに関する制約を設定できない。
- 属性や要素の文脈に基づく内容宣言や属性宣言ができない (これは DTD の大きな欠点でもある)。
- 宣言から切り離した形でデフォルトを指定できない。
- 要素のデフォルトは文字データに限定される (マークアップを組み込めない)。
XMLBuddy は DTD と XML Schema の両方をほどよくサポートしていますが、XML Schema の十分なサポートが必要な場合は、XSD-XML Infoset Browser for Java プラグインを使用してください (参考文献にリンクがあります)。このプラグインは、W3C XML Schema 仕様で定められている XML Schema Infoset Model を実装した Java リファレンス・ライブラリーであり、XML Schema のチェック、作成、修正のためのコードを書くときに非常に便利です。XML Schema の各コンポーネントを操作するための API のほかに、XML Schema の DOM 対応表現を一連の XML 文書として操作するための API も用意しています。特に複数の開発者による Java と XML の併用を可能にしているという点で、XML ベースのスキーマを識別したり作成したりするための標準的な方法を提供していると言えます。
図 5. IBM XML SQC のインストール後に可能になる XML Schema の妥当性検証
この XML Infoset Browser を補足する意味で必要なのが、IBM XML Schema Quality Checker (略して SQC) です (図 5 を参照。参考文献にリンクがあります)。この SQC は、W3C の XML Schema 言語で書かれたスキーマを入力として受け取り、Schema 言語の不正な使用を検出するための Java プログラムです。最新の XML Schema 仕様に準拠したスキーマを読み込み、XML Schema のさまざまな制約に適合しているかどうか (妥当であるかどうか) を検証します。適合していない要素を検出すると、診断メッセージを出します。そのメッセージには、問題の解決方法が書かれている場合もあります。<include>、<import>、<redefine> のいずれかの要素情報項目によって多数の Schema 文書を結合した形のスキーマについては、そのスキーマ全体のチェックを実行します。また、複数の単体 XML Schema を 1 回の実行でチェックするバッチ・モードもあります。
便利な XML プラグインとしては、ほかにも Transclipse や Eclipse Tidy があります (参考文献にリンクがあります)。まず、Transclipse は XML 変換用のプラグインです。JAXP 準拠の XSL スタイルシート・プロセッサーによって XSLT ベースの XML 文書変換を実行し、Apache の Formatting Objects Processor (FOP) によって XSL-FO 文書を処理します。j2h (Java to HTML) プラグインの一部として組み込まれているわけですが、そもそもこのプラグインは、Java ソース・コードを HTML、XHTML、LaTeX に変換するもので、構文強調表示機能も付いています。一方、Eclipse Tidy プロジェクトは、XML/HTML 文書の書式設定と印刷のためのプラグインを提供しています。その他の情報については、Eclipse 用プラグイン・レジストリーの各カテゴリーをご覧ください (参考文献を参照)。
- Eclipse Platform コミュニティーへの参加や、Eclipse Platform のダウンロードについては、eclipse.org にアクセスしてください。Eclipse Platform のソース・コードのライセンス形式は Common Public License です。eclipse.org では、用語集、Eclipse プロジェクトの解説、技術的な記事やニュースグループなども用意しています。Eclipse Platform の白書には、Eclipse の主要なコンポーネントと機能の詳しい解説があります。
- Eclipse Platform Plug-in SDK のダウンロードについては、Eclipse プロジェクト・ダウンロード・ページをご覧ください。
- Apache の XML プロジェクト (Xerces パーサーなど) については、Apache.org にアクセスしてください。
- XSD-XML Infoset Browser for Java のダウンロードについては、eclipse.org にアクセスしてください。
- XML Schema Quality Checker のダウンロードについては、IBM の alphaWorks サイトをご覧ください。
- Eclipse Platform の機能に関する入門記事を読みたい方は、Greg Adams 氏と Marc Erickson 氏による developerWorks 記事、「Eclipse Platform の利用」をご覧ください。
- Eclipse Platform によるアプリケーション開発の入門記事を読みたい方は、David Gallardo 氏による developerWorks 記事、「Eclipse Platform 入門」をご覧ください。
- 独自の Eclipse プラグインの作成に興味がある方は、David Gallardo 氏による developerWorks 記事、「Eclipse プラグインの開発」をご覧ください。
- 1 人の開発者が XM (XML と XSLT に基づく簡単なコンテンツ管理公開ソリューション) と Eclipse を統合した方法を調べてみたい方は、Benoit Marchal 氏による developerWorks 記事、「XM と Eclipse の統合」をご覧ください。
- XML に関する豊富な参考文献が W3C コンソーシアムの Web サイトにあります。
- Transclipse プラグインのダウンロードについては、SourceForge.net にアクセスしてください。
- Eclipse Tidy プロジェクトの入手についても、SourceForge.net にアクセスしてください。
- j2h (Java to HTML) プラグインについてお調べください。
- Eclipse 用プラグイン・レジストリーを閲覧できます。
- Eclipse ユーザー と XML 開発者 のための豊富な参考文献が developerWorks にあります。
Studio B の製作者である Pawel Leszek 氏は、独立ソフトウェア・コンサルタントであると同時に、Linux/Win/Mac OS のシステム・アーキテクチャーと管理を専門としています。彼は多数のオペレーティング・システム、プログラミング言語、ネットワーク・プロトコルの経験者で、特に Lotus Domino と DB2 に深い知識があります。また、Pawel は、LinuxWorld のシリーズ記事の著者であるとともに、ポーランド版 PC World の Linux 関連コラムニストでもあります。Pawel は、ワルシャワで妻とかわいい娘と一緒に暮らしています。質問やコメントを是非お寄せください。