ECMAScript for XML

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ECMAScript for XMLE4X)は、ECMAScriptActionScriptDMDScriptJavaScriptJScript を含む)にネイティブのXMLサポートを追加するプログラミング言語拡張である。その目的は、DOMインタフェースの代替として、単純な構文でXML文書にアクセスできるインタフェースを提供することである。E4Xがリリースされるまで、XMLへのアクセスには常にオブジェクトレベルが関与していた。E4XではXMLを文字や整数と同様のプリミティブ型として扱う。そのため、アクセスが高速化され、サポートが容易になり、プログラムの構成要素(データ構造)としても扱いやすくなる。

E4XはEcmaインターナショナルECMA-357 standard として標準化した。初版は2004年6月に公表され、第2版が2005年12月に公表された。

[編集]

var sales = <sales vendor="John">
    <item type="peas" price="4" quantity="6"/>
    <item type="carrot" price="3" quantity="10"/>
    <item type="chips" price="5" quantity="3"/>
  </sales>;
 
alert( sales.item.(@type == "carrot").@quantity );
alert( sales.@vendor );
for each( var price in sales..@price ) {
  alert( price );
}

実装[編集]

最初の実装は Terry Lucas と John Schneider が設計したもので、2002年2月にリリースされたBEAシステムズの Weblogic Workshop 7.0 に含まれていた。BEAの実装は Rhino に基づくもので、E4X の標準化が完了する以前にリリースされている。リリース時、John Schneider は BEA の XML 拡張について記事を書いた。E4X言語以前のリファレンス文書が現在も公開されている[1]

E4Xは、SpiderMonkeyGeckoのJavaScriptエンジン)や Rhino(同じくMozilla用にJavaで書かれたJavaScriptエンジン)で実装されている。

Mozilla Firefox は Gecko ベースなので、E4X を使ったスクリプトを実行可能であった(バージョン1.5以降)が、Firefox 17から段階的に無効化され、同21で削除される予定である。[1]。なお、Firefox 1.5 で正しくスクリプトを実行するには、スクリプトの type 属性の最後に "; e4x=1" を追加する必要がある(例えば、<script type="application/javascript; e4x=1">)。

アドビの ActionScript 3 でも E4X を完全サポートしている。これが公式にリリースされたのは、2006年の Adobe Flex 2.0 と Flash Player 9 の一部としてである。他に、Flash CS3、Adobe AIRAdobe Acrobat/Reader(8.0以降)でもサポートされている。

Aptanaの Jaxer Ajax アプリケーションサーバは、Mozilla のエンジンをサーバ側で使っているため、E4X に対応している。

CMSAlfresco Community Edition 2.9B でも E4X をサポートしている。

批判[編集]

多くのE4X実装は、DOMノードとE4Xモデルの間で、インポート/エクスポートする手段を提供していない。

競合規格[編集]

JSON[編集]

JSONは XML の代替となる可能性がある。JSON は XML に似たオブジェクト指向のデータ記述言語である。JSON はECMAScript標準の一部であり、全ての標準に準拠した JavaScript エンジンで使える。E4X に比較するとクエリ機能が若干貧弱と言われている。これは、E4Xが1つのオブジェクトに複数のインデックスを付けられるのに対して、JSONでは1つのインデックスしか付けられないためである。

上掲の例を JSON を使った場合、次のようになる。

var sales = {"vendor":"John","items":[
  {"type":"peas","price":"4","quantity":"6"},
  {"type":"carrot","price":"3","quantity":"10"},
  {"type":"chips","price":"5","quantity":"3"} ]};
 
for( var i in sales.items) { if (sales.items[i].type=="carrot") alert( sales.items[i].quantity ); }
alert( sales.vendor );
for( var i in sales.items ) { alert( sales.items[i].price ); }

脚注[編集]

  1. ^ E4X | MDN

外部リンク[編集]