レベル: 初級 David Mertz, Ph.D (mertz@gnosis.cx), Author, Gnosis Software, Inc.
2001年 1月 01日 この記事では、10以上の主要なXMLエディターについての最新評価をDavid Mertzが示します。とくに大量のテキストを含む一般的文章 (prose) のXML文書処理に関して、それぞれのエディターの安定度、弱点、および機能性を比較します。さらに、一般的文章のXML文書を作成、変更、保守するうえでの実際の問題にも答えます。
マークアップ付き文章を処理する
言うまでもありませんが、XML文書を扱うどのようなアプローチでも、まず最初に必要なのは、妥当な 文書が確実に生成されるようにすることです。DTD (つまりXMLスキーマ) を使用すると、文書は規則に従うことが要求されるので、この要件が満たされます。どんなツールを使用するにしても、作成プロセスや保守プロセスの一環として妥当性が検証されなければなりません。
今回ご紹介するツールや技法のほとんどは、よりデータ中心型のXML文書を扱う上でも便利な手段です。しかしこの記事では、あくまでマークアップの付いた一般的文章 (prose) の操作に焦点を絞ります。一般的文章XMLとデータ中心型XMLの間には、いくつかの違いがあります。XMLの派生語の中には、両者の中間にあたるものや、両者のどちらでもないものがあります (MathMLやベクトル・グラフィック形式は、通常、文章とデータのどちらのカテゴリーにも入りません)。通常、一般的文章のXMLフォーマットは、印刷されたページ (およびワード・プロセッサー) に要求される特徴を持つように設計されています。こうしたフォーマットのほとんどは、印刷上の特徴ではなく、意味上の特徴を表します (たとえば「イタリック」というフォント・スタイル ではなく、「外国語の単語」という概念) が、これらのフォーマットは従来から読み書きされてきた題材と深くかかわっています。一方、データ指向のXMLは、(リレーショナル) データベース形式の内容を、より反映したフォーマットになっています。データ指向XMLの内容はしばしば、レコード / 属性 (行 / 列) であり、同じデータ・フィールドが繰り返されます。
一般的文章のXMLには、mixed (混合) 内容がよく見られます。データ指向のXMLにはmixed 内容はほとんど、あるいはまったくありません。つまり、ほとんどの「データ」は、文字レベルのマークアップを多数含むテキストです。DTDに関して言えば、次の例のような要素をよく見かけます (IBMdeveloperWorks のチュートリアル用DTDから抜粋):
リスト1.developerWorks の例
<!--Contains a paragraph of text.-->
<!ELEMENT p (#PCDATA | code | img | br | i | b | a)* >
|
もちろん、ブロック・レベルのマークアップを使って全体を編成することもできます。しかし、一般文章XMLのフォーマットでは、データ指向XMLのフォーマットには見られないような形で、文字レベルのマークアップが重要な役割を果たします。私自身の経験からすると、マークアップ・レベルをこのように2つに分けていることが、XML編集ツールの軽快な操作性を妨げる最大の課題となっています。
さて、さまざまなツールや手法がこれらの要件をどのように満たすか見てみましょう。
テキスト・エディターと妥当性検証プログラム (バリデーター) を使用する
最初に検討するのは、XML文書変更の「ゼロ・ケース」(つまり科学でいう帰無仮説、あるいは哲学でいう第一義) のようなものです。結局のところ、XML文書はただのテキスト・ファイルですから、テキスト・ファイルを処理する完成度の高いツール、プログラマーにとってなじみのあるツールを使用するのはどうでしょうか。もし読者の考えが私と同じであれば、他にどんな好みのツールがあろうとも、テキスト・エディターを使用して実際の コンテンツがどうなっているか確かめたいと思う時があるものです。
XMLを処理しやすいテキスト・エディターには、あらゆるXML派生語で使用できる構文強調表示機能があるものです。さらに、派生語に特有の構成を行なうオプションも備えていることでしょう。柔軟な (おそらく正規表現ベースの) 検索および置換機能もあるでしょう。フォールディング (コード・ハイディングともいう) をサポートするテキスト・エディターであれば、とくに大きな文書を処理する場合にはかなり役立ちます。インデント / アウトデント、切り取り / コピー / 貼り付け、テンプレート化などのブロック単位操作が役立つことも明らかです。そして、プログラマーのお気に入りのテキスト・エディターは、現在の作業ファイルを入力とする外部プログラムの呼び出しを簡単に構成できるものでしょう。
強力なテキスト・エディターが手元にあれば、いくつかの指針に従うだけで、一般的文章のXMLを簡単に作業することができます。ほとんどの指針は常識であり、他のプログラム言語を見栄え良くコーディングする際にも当てはまるものばかりです。インデントや空白をうまく使用して、XML文書の各部分を、一見してそれと分かるように目立たせることが重要です。XMLそのものは空白を保持しますが、ほとんどのアプリケーションは、まず空白を正規化した後にさらに処理します。そこで、インデントや垂直方向の空白を追加することは機能的にはほとんど意味がなく、単にXML文書を見た目に分かりやすくするだけです。(そうした追加バイトが重要な意味を持つのであれば、そもそもXMLを選んだこと自体が間違いだったのかもしれません。XMLは他の形式に比べて冗長ですから。)一般的に言って、文字レベルの要素はインラインにするのが望ましく、ブロック・レベルの要素は新しい (階層的にインデントされた) 行にするのが適しています。ただし単純な規則を当てはめるよりも、判断力を働かせるべきであることは明白です。外見が整然としているかどうかを重視してください。
実際に妥当性検査するためには、テキスト・エディターの他にもツールが必要です。さまざまなプラットフォーム用の、優れたツールが多数あります。私自身は、Pythonのモジュールxmlproc をよく利用します。どの妥当性検証プログラム (バリデーター) を使うにしても、(エラーや警告の正確な場所などの) 具体的かつ十分な情報が提供されて、問題を簡単に検出して修正できるかどうかは大切です。たとえば、以下に示すのは、私が実際に実行した妥当性検査の一部です。
妥当性検査のサンプル
c:\xml-files\>python xvcmd.py test.xml
xmlproc version 0.62
Parsing 'test.xml'
E:test.xml:6:110: Attribute 'zip_file_comment' not declared
E:test.xml:45:152: '<' not allowed in attribute values
E:test.xml:55:34: '=' expected
E:test.xml:55:49: One of '>' or '/>' expected
E:test.xml:60:14: End tag for 'body' seen, but 'p' expected
E:test.xml:783:12: Premature document end, element 'p' not closed
[...]
Parse complete, 22 error(s) and 0 warning(s)
|
編集と妥当性検査は、ちょうどプログラム言語の編集 / コンパイル、または編集 / ユニット・テストのサイクルとよく似ています。頻繁に妥当性検査をしていれば、少しのエラーを取り除くことは比較的容易で、時間もかかりません。
機能拡張された基本的エディター
基本的なXML編集ツールは、汎用テキスト・エディターに以下の3つの機能を付け加えることによってXML編集用に調整したものです。
- 文書の妥当性検査の統合
- XML文書の階層 (ツリー) ビュー
- 変換後のXML文書 (通常はXSLTやCSS2を使って変換されたHTML) のプレビュー機能の統合
ツールによっては、これらの拡張機能のサブセットを提供するものもあります。私は、このカテゴリーに属する3つのツールを調べました (もちろん他にもあるでしょう)。
MicrosoftXML Notepad:
XML Notepad とは何か、名前からおおよそ推察できるでしょう。これはフリー・ツール (Win32版のみ) で、XML文書を構文解析して構造化したビューを提供する機能があります。さらにXML Notepad は、宣言されたDTDに照らして妥当性検査を行ないます (ただし、文書が開かれているときのみ)。XML Notepad の基本的インターフェースは、1つのペインにXML文書を縮小表示可能なツリー・ビューで表示し、もう1つのペインには要素の内容と属性を示す行が含まれています。要素および属性の編集は、テキスト・ブロックごとに厳密に1行のみです。つまり、段落の入力域の中で左右にスクロールする必要があります。全体的に言って、XML Notepad は一般文章のXMLよりもデータ指向のXML文書を処理するのに適しているでしょう。しかし、一般文章のXML文書をざっと見渡す場合や、最低限の変更を行なう場合であれば、このツールは悪くありません。なおXML Notepad には変換、プレビュー、ビジュアル・フォーマット設定などの機能は一切ありません。
Wattle SoftwareのXMLWriter:
XMLWriter はXML Notepad を一歩進めたもの (あるいは、特定方向に機能拡張したもの) です。これもまたWin32版のみの製品ですが、シェアウェアです。試行期間を過ぎると、$ 75オーストラリア・ドル (約 $ 40米ドル) を支払う必要があります。XMLWriter のインターフェースはXML Notepad よりもかなり豊富です。ただし、ナビゲート可能なツリー / 階層ビューだけは例外です。XMLWriter ではプレビューのみのツリー・ビューが可能ですが、そのビューで編集したり、そこからナビゲート可能なペインにジャンプすることはできません。また、この機能のベースとして、やや不安定なMSXML DLLに頼っていますから、常に動作するとは限りません。それでも、XMLWriter はXML文書を変更する環境としてはおおむね優れてます。
XMLWriter の基本的な考え方は、テキスト・エディターにXML固有の機能をいくつか追加したものに近いです。文書のビューはテキスト・ビューで、構文の強調表示、行番号表示 (オプション) その他の一般的なテキスト・エディターとしての機能を備えています。ただし一般的なプログラマー用エディターほど多機能ではありません。このテキスト編集機能に加えて、XMLWriter には妥当性検査、テキストが整形式かどうかの検査、XSLT変換、ブラウザー・プレビュー、「プロジェクト」の概念 (つまりXML、XSL、CSS、スキーマなど関連ファイルの集合) といったオプションがあります。XMLWriter は、依然として「拡張されたエディター」のカテゴリーに入るものの、XMLの作業をするうえで良好な環境を提供してくれます。
TIBCO ExtensibilityのXML Instance:
XML Instance はJavaベースのXMLエディターですから、Javaが動作するすべてのプラットフォームで使用できます。Java Virtual Machine (JVM) の質とスピードはさまざまに異なるので、あなたが実際にXML Instance に満足するかどうかはJVMにある程度依存します (私がいくつかのプラットフォームで使用した限りでは、IBM製が最も優れていました)。「拡張されたエディター」と私が呼ぶツールの中で、XML Instance は最も洗練されています。価格は100ドルと高めですが、それだけの機能を備えています。
いくつかの点で、XML Instance はXML Notepad をさらに高性能にしたようなものです。一般的なインターフェースは同じで、左側に縮小表示可能なツリー、右側に属性 / 要素内容のインラインです。しかしこれはほんの開始点に過ぎません。それぞれの要素を、副階層の形で、または生のマークアップそのままの形で表示することができます。文字レベルの要素を内包するブロック・レベルの要素を生のマークアップのまま表示することにより、それぞれの要素タイプをビジュアルにはっきり区別できます。さらに、要素は最初は1行で表示されますが、ビューを拡張して、要素ごとに複数行を表示させることもできます (スクロール・バーを使って何行でも可能)。このため、柔軟にナビゲートして編集することができます。
またXML Instance には、完ぺきではありませんが、妥当性検査およびXSL変換の優れた機能があります (XSLT文書の編集を含む)。XML Instance には副要素や属性の挿入を援助する初歩的な機能がありますが、この記事で紹介する他の一部のツールほど充実しているわけではなく、他の一部のツールのように妥当性を検証することもありません。
上記の一連の製品を使えば作業はずっと楽になりますが、これらのツール (および、これから紹介するもっと洗練されたツール) には、汎用テキスト・エディターの持つ強力かつ一般的な機能の多くが欠けています。ほとんどの場合、これらのツールは、日常的に使用するプログラマー用テキスト・エディターをまだ持っていないユーザーに向いています。
XML開発環境
基本的なエディターのほかに、XMLの「統合開発環境 (IDE)」とでも言えるようなツールがいくつかあります。XML Instance もこのカテゴリーに近いのですが、他のツールが持っているいくつかの機能がありません。このカテゴリーに入る資格を得るには、拡張エディターよりもさらに豊富な機能をいくつか備えていなければなりません。このカテゴリーに入るツールは、妥当なXMLの作成を援助する非常に豊富な機能を提供します。ほとんどのツールは妥当でないXMLを作成できないようにし、文書の特定の場所にどんな要素や属性を入れることができるか、直感的にわかる助言を与えてくれます。"XML IDE" の持つもう1つの機能は、XML文書のさまざまなビューを追加できることです。それぞれのビューを、特定の目的や文書タイプに応じて調整することができます。
Icon Information SystemsのXML Spy:
XML Spy もまたWin32版の商用ツールで、価格は約150ドルです。XML文書 (または他のファイル・タイプ) を編集するとき、XML Spy は基本的な2つのビューを表示します。1つはテキスト・エディターによく似たText View、もう1つは文書を構造化して図式表示するEnhanced Grid Viewです。そのほかBrowser Viewもありますが、これは単にInternet Explorer 5.5以降を起動するDDE呼び出しであり、Browser Viewでの編集はできません。
この2つの編集ビューのどちらにも、妥当なタグや属性を入力するためのプロンプト画面とショートカットが表示されます。DTDまたはスキーマを使用する場合、XML Spy はさらに役立ちます。情報ウィンドウに、現在のコンテキスト (要素と属性、モデル、現在の規則) が示されます。もう1つの「入力ヘルパー」ペインには、コンテキストでどんなサブタグ、属性、エンティティーを使用できるか表示され、必要な、または許容される要素の入力を援助してくれます。これらのヘルパー機能を利用すれば、DTDに準拠させたり、DTDを開発したりする作業が非常に簡単になります。
XML Spy に組み込まれている機能の中で、DTD / スキーマの自動生成機能はまるでマジックのようでした。XML Spy は、型のないXML文書の背景にあるDTDを見事に推察し、DTDの作成と付加をやってのけるのです。私の見たところ、この生成機能は完ぺきではありません。たとえば、単にCDATAの部分を列挙型と解釈したことがあります。しかし、この機能が侵すエラー (誤り) は、XML文書だけを作成してその背景の設計規則を何も作らない人々のエラーと同程度です。XML Spy の生成するDTDを整備またはカスタマイズする方が、DTDを一から書き始めるよりもずっと手早く済みます。
もう1つ、Enhanced Grid Viewのオプションにも優れたインターフェースがあります。ほとんどの場合、副タグは階層ツリーの形式で表示されます。しかしXML Spy は、データの一部をDatabase/Table Viewで一連の繰り返し要素として表示した方がよいかどうか自動的に判断します。また、2つのビューの間を手動で強制的に切り替えることもできます。基本的にテーブル形式のデータを最初から扱う場合、このビューを使用すればXML文書の入力が非常に簡単になり、理解度も高まります。
SoftQuadのXMetal:
XMetal もまたWin32版の商用製品で、価格は500ドルもしますが、他のツールよりもかなり機能が豊富です。XML Spy と同様、XMetal は文書の作業中に妥当性をチェックします (もちろんDTDやスキーマを使用している場合ですが)。XMetal のデフォルトの編集インターフェースは「ノーマル」ビューまたは「ワード・プロセッシング」ビューと呼ばれ、(とくにMicrosoft Wordユーザーにとっては) 一見してなじみのある外観です。最近の多くのツールと同じように、ツールバー・アイコン、メニュー・ショートカット、メニューなどはMS Officeを模倣しています。
XMetal には「ノーマル」ビューの他にもビューがあり、それらのビューの機能はSoftQuadの有名なHTMLエディターHotMetal HTMLからの借用です。「プレーン・テキスト」ビューで編集が可能です。このビューは、XMLの簡単な操作が可能なテキスト・エディターのようです。ここでは構文が強調表示され、行番号、Windows/CUAクリップボード操作、検索 / 置換操作 (基本的な正規表現を含む) ができます。残念ながら、XMetalの他の一部の機能は「プレーン・テキスト」ビューでは使用できません (その必要もありません)。そのような機能には、たとえば「構造ビュー」やコンテキスト依存型要素リストがあります。
私の知る限り、SoftQuadが最初に発明したビューは、「タグ・オン (tags on)」ビューです。このビューはとても興味深く、しかも役立ちます。文書内のそれぞれのタグ (開始タグおよび終了タグ) が、タグ名付きの矢印アイコンとして表示されます。タグの中身は「ノーマル」ビューのスタイル、つまりさまざまなフォント、重み、色などで表示されます。こうした組み合わせによって文書のマークアップ構造がはっきりと分かり、そのXML文書が最終的にレンダリングされる様子のおおまかな見当を付けることができます。あるXML文書が書籍 / 記事 / 資料のスタイルではなくデータベース・スタイルになっている場合、明らかに、レンダリング方法はそれほど重要ではありません (それでもXML内の情報のカテゴリーを視覚的に強調することはできます)。要素のレンダリングは、CSSを使って構成することができます。
もう1つのオプション・ビューは、別のペインで表示できます。この「構造ビュー (structure view)」は、メイン・ペインで編集中の文書を階層ツリーに表したものです。ナビゲーションは2つのペインの間で同期化されます。「プレーン・テキスト」ビューや「タグ・オン」ビューもタグ情報を示しますが、「構造ビュー」はそれをより明示的に示します。構造ビュー自体を、さまざまな外観に変えることができます。中にはかなり役立つ外観もありますが、一般的に言って、ネストされたインデントやアイコンに関して役立つオプションがあります。
XMetal に実質的に欠けている1つの機能は、組み込みXSLTサポートです。外部プログラムの呼び出しは可能であり、その呼び出しをメニューに入れることもできるのですが、500ドルという価格からすると、もっと多機能であることを期待します。SoftQuadのあら探しをもう1つするならば、他の多くのWin32版ツールと同じようにMSXML DLLに頼っていることです (私はこのベータ版DLLの問題にしばしば悩まされてきました)。
他にも注目すべきもの
このほかにも、一言触れる価値のあるツールがいくつかあります。記事の紙面の都合で詳細な説明を載せることはできませんが、読者の皆さんがさらに調べるだけの価値はあると思います。
Morphon は商用のJava XMLエディター兼IDEです。これを書いている時点では、まだフリーのベータ版ですが、最終リリース版の価格は150ドル前後と見込まれています。Morphon には多数のビューがあり、その多くはXMetal やXML Spy に似ています。XMetal と同様、Morphon はCSSを使用して、文書を印刷したときのレイアウトを視覚的に表示できます。ベータ版は少し不安定でしたが、そのほとんどはJVMの問題と関係があります。Morphon はJavaベースなので、Win32版のみの製品に比べてさまざまなプラットフォームでサポートされるでしょう。
Xeena もまたMorphon と同じJava XMLエディターですが、Xeena の優れた点は無償で (ただし、90日間ライセンス付きの試行版がフリーなだけですが)、IBMalphaWorks の豊富なツールの1つです。Xeena を使った編集は、高機能のIDEに比べていくらか制限があります。妥当性検査の施行、およびXML Notepad やXML Instance のような「階層ツリー・プラス行ビュー」の機能は良好です。しかし、Xeena は一般的文章のXML文書を扱うにはMorphon やXMetal ほど便利ではありません。それでも、IBMのJavaテクノロジーの大部分に共通するように、Xeena は安定度に優れ、高速です (これは、Javaアプリケーションのほとんどに当てはまります)。
Conglomerate は、GTK+ に基づくフリー・ソフトウェア・プロジェクトです。Linuxで簡単にコンパイルでき、原理的には、(GTKが使用できる) Windowsでもコンパイルできるはずです。このツールについては、良い点と悪い点があります。Conglomorate は、私が見た中では、一般文章のXML文書を作業するうえで明らかに 最も優れたインターフェース概念を持っています。CSSを使って文字レベルの要素をレンダリングしようとする代わりに、ラベルと色の付いた「下線」を使ってそのような要素を表します。ブロック・レベルの要素は、垂直の色付きブロックで同様にレンダリングされます。ホーム・ページで画面ショットをご覧ください。Conglomorate の欠点は、基本的にまだアルファ・レベルのソフトウェアだということです。よくクラッシュし、追加機能も必要です。それでも、私が見た中では、アルファ版段階としては最も有望なものの1つです。誰かが (もしかすると、これを読んでいる読者が) フリーかつ究極のXMLエディター / IDEとしてConglomorate の開発をさらに促進させることを期待します。
最後のツールも注目に値します。Corel WordPerfect 2000 は従来のWordPerfect バージョンのSGMLサポートに基づき、よく構造化されたXMLサポートおよび妥当性検査を提供します。これはおおむね強力なワード・プロセッサーで、これを使用すればXML文書開発にも同じツールを使用できます。
参考文献
著者について  | 
|  | David Mertz氏は多くの分野で活躍しています。ソフトウェア開発や、それについて著述もしています。その他、学術政策理念について分野を問わず、関係する雑誌に記事も書いています。かなり以前には、超限集合論、ロジック、モデル理論などを研究していました。その後、労働組合組織者として活動していました。そして、David Mertz氏自身は人生の半ばにもまだ達していないと思っているので、これから何かほかの仕事をするかもしれません。 |
記事の評価
|