XPath式エディタ2

これは何?

オンラインで利用可能な、XPath式の作成を補助するGUI型のエディタです。Microsoft Officeには数式エディタというものが付属していますが、それのXPath版みたいなものです。まあとりあえず使ってみてくださいな。

構成ファイルは以下の通りです。

Mozilla Suite/Mozilla Firefox、Netscape 7以降など、レンダリングにGeckoエンジンを使用するブラウザで利用できます。

XPathって何?

XPath邦訳)は、XSLTなどでXMLのノードを指定するためのパス表現を記述する言語です。DOM3 XPathと組み合わせると、効率よくXMLを処理する上で役立ちます

何の役に立つの? 何故使うの?

XPathの利用価値

例えば、「abbr要素とacronym要素でtitle属性が指定されているものに対して処理を行いたい」というニーズに対して、DOM Coreでは以下のように処理することになります。

var nodes = [
        document.getElementsByTagName('abbr'),
        document.getElementsByTagName('acronym')
    ];
for (var i = 0; i < nodes.length; i++)
    for (var j = 0; j < nodes[i].length; j++)
        if (nodes[i][j].hasAttribute('title'))
            doSomeOperation(nodes[i][j]);

これだと、二重ループを回さなくてはなりません。また、属性があるかどうかといったチェックも行う必要があります。

XPathを使うと、先の文はこう書けます。

var result = document.evaluate(
              '(/descendant::abbr[@title] | /descendant::acronym[@title])',
              document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
          );
for (var i = 0; i < result.snapshotLength; i++)
    doSomeOperation(result.snapshotItem(i));

こうすると、いきなり「条件を満たしているノードのリスト」を取得することができるため、二重ループも必要ありませんし、各ノードに対する条件判断も必要ありません。結果として、制御構造の部分をスッキリさせることができますので、メンテナンス性の向上などの作用が期待できます。

XPath式エディタの存在価値

  • 語彙を覚えていなくてもXPath式を作れる
  • 複雑な式でも、括弧の対応を間違えたりすることなく式を作れる

以上の二点が、このアプリケーションの一番の存在意義らしい特徴だと、僕は思っています。

前者は、このアプリケーションを作るにあたっての直接的な動機になっています。

XPathは、書き方を覚えなければ書けません。「書き方」とはすなわち、「構文」と「語彙」です。構文は比較的容易に覚えられるかとは思いますが、軸の指定やノードテスト、関数名などの語彙は、実際に使い始めてみなければなかなか覚えるのが大変なのではないでしょうか。というか僕は記憶力が無いので覚えられなくて挫折しかけました。

後者は、このアプリケーションの開発を継続する中で、XPath式を多用するようになって気付いたことです。

and/orなどの演算子や関数を多用した長い式を書こうと思うと、自然と括弧同士の入れ子が多くなり、うっかり閉じ括弧を忘れてしまっただとか、そのようなミスを犯してしまうことがあります。その点、機械生成なら、括弧の対応関係を間違えることはまずありません。

これらの点で困っていない人にとっては、このXPath式エディタは無意味だと思います。

前バージョンとの違い

XPath式エディタ(1.0)と比較して、以下の点で異なります。

  • 入力フィールドに入力されたXPath式を解析して、リアルタイムでエディタ画面に反映できる(XPath式→エディタへの逆変換)

どうやって使うの?

インストール・設置

ローカルで使用する場合、構成ファイル群をダウンロードしてすべて同じフォルダに置いて、xpath.xulをブラウザウィンドウにドラッグ&ドロップしてください。リモートで使用する場合、前述のファイル群をどこか適当なところにアップロードして、xpath.xulにアクセスしてください。

Mozilla/Firefoxのテーマによってはボタンが消えたりすることがあるようです。とりあえずFirefoxのデフォルトのテーマでは正しく動作することを確認済みです。

操作方法

ボタンをクリックしたり、アイテム上で右クリックしたり、アイテムをドラッグしたりしてみてください。Ctrl-クリック(またはShift-クリック)で複数アイテムを選択できます。

画面下のパレットから、アイテムを上のエディタ領域にドラッグ&ドロップすると、アイテムを追加できます。また、アクティブなアイテムの下に表示される「続きを入力」などのボタンからもアイテムを追加できます。

今後の予定・展望

  • XPath式からエディタへの逆変換が腐ってるのをなんとかする
  • もっとわかりやすいGUIにする
  • Shift+クリックによる一括選択
  • キーボードショートカット
  • 実際に式を評価してのエラーチェック
  • 不正なXPath式を書けないような仕組み
  • ツリー表現での図示(これは、僕にはちょっと荷が重い……)
  • 国際化対応
  • Firefoxの拡張機能にして、画面内でクリックした位置のノードに対応するXPath式を生成したりとか(候補になるXPath式を複数生成して列挙)

ライセンス

MPL 1.1とします。ライセンスの許容する範囲内で、改変・再配布等ご自由にどうぞ。