KMMR Online Tools

XPath 2.0+ Planning

XPath Tester

XMLとXPath式、名前空間マッピングを分けて扱う専用ページです。XPath 2.0+ の実行基盤は比較を完了し、現在は公開UIとサンプルケースを先に固めています。

XPath入力

ノード列とスカラー値の両方を見やすく出す前提で設計します。

名前空間対応

prefix 行を明示して default namespace や複数prefix XML を扱います。

実装状況

今回は UI と比較結果までを公開し、実行エンジンは次段階で載せます。

XPath実行は次段階です

今回のパッチでは、xml-formatter を先に実装し、xpath-tester は UI、固定サンプル、評価方式の比較結果までを公開します。実際の XPath 2.0+ 実行は次の導入ステップで有効化します。

先にXMLを整えたい場合

整形や構文確認が先なら、 XMLフォーマッター / バリデーター

入力セット

XML、XPath、名前空間行を分けて入力します。

結果エリア

評価UIの先行公開版

XPath 2.0+ 実行はまだ有効化していません

このページでは、入力フォーム、サンプルケース、名前空間の指定方法、結果表示の設計を先に公開しています。エンジン導入が終わり次第、ここに実行結果を表示します。

採用候補

SaxonJS を第一候補として比較を完了しました。

v1で出す範囲

  • ブラウザ内だけで動く XML貼り付け、XPath入力、名前空間マッピング、固定サンプルケース。
  • ノード列とスカラー値を分けた結果表示。
  • XML保存なし、XML→JSON変換なし、サーバー側XPath実行なし。

固定XPathサンプル

属性抽出、複数一致、文字列・数値・真偽値、名前空間付き問い合わせを固定ケースとして使います。

固定XMLサンプル

比較と受け入れ確認で使うXMLはこの4種類に固定します。

整形式XML

整形、検証、スカラーXPathの確認に使えるシンプルな請求書XMLです。

壊れたXML

閉じタグを崩してあり、構文エラーと位置表示の確認に使えます。

デフォルト名前空間

XPathで要素を取る前に prefix の割り当てが必要なXMLです。

複数prefix

SOAP風の複数名前空間XMLで、prefix指定のXPath確認に使えます。

方式比較スパイク

SaxonJS と Saxon/C を同じ評価軸で比較した結果です。

採用候補の結論

XPath 2.0+ の第一候補は SaxonJS にします。ブラウザ完結の方針と相性がよく、ユーザーのXMLをサーバーに送らずに済み、現行のPHPページへ載せやすいためです。

不採用理由

Saxon/C も技術的には有力ですが、PHP拡張とネイティブ実行環境の配備が必要になり、この軽量なPHPサイトには運用負荷が重めです。

比較軸 SaxonJS Saxon/C
XPath 2.0+ 対応範囲 公式資料上で XPath 3.1 とブラウザ向け直接APIが示されています。 PHP の XPathProcessor API から XPath 3.1 を扱えます。
名前空間の扱いやすさ ブラウザ側で静的コンテキストと prefix マッピングを明示できます。 PHP統合側で明示的な名前空間APIが揃っています。
このPHPサイトへの組み込みやすさ 既存のブラウザ主体ツール群と相性がよく、XMLをサーバーに送らずに済みます。 ページ公開前にサーバー側連携と拡張管理が必要です。
デプロイ難易度 JSランタイムを配信し、対象ページだけで読み込めば足ります。 Saxon/C本体とPHPバインディングの配備・保守が必要です。
ライセンス確認事項 無償ですがオープンソースではなく、Saxonica Public License を確認する必要があります。 Saxon/C HE は MPL 2.0 のオープンソースで、PE/EE は商用です。
応答性能 貼り付けXMLの対話用途なら十分です。 大きなサーバー側処理では有利そうですが、v1の要件に対しては重めです。

導入手順の概略

  • SaxonJS のブラウザ向けパッケージを取得し、public 配下のバージョン付きアセットとして配信します。
  • xpath-tester ページだけでランタイムを読み込み、貼り付けXMLのDOMに対してブラウザ内でXPathを評価します。
  • prefix=https://example.com/ns 形式の名前空間行を解析し、評価コンテキストへ渡します。
  • ノード列、文字列、数値、真偽値を結果種別ごとに描画し、XML本体はサーバーへ送信しません。

現環境での前提

  • 現環境の PHP 8.3 では dom、SimpleXML、xmlreader、xmlwriter が利用できます。
  • 一方で Node.js は未導入なので、ビルド前提よりブラウザ配信のランタイム導入のほうが着手しやすい状態です。

このツールが便利だと思ったら、SNSでシェアしていただけると嬉しいです!