[1]
[DFN[E4X]] ([DFN[ECMAScript for XML]]) は
[[XML]] の native support を追加した [[ECMAScript]] を拡張した言語です。

* 仕様書

[REFS[
- [2] [[ECMA‐357]] [CITE[ECMAScript for XML (E4X) Specification]]
1[SUP[st]] Edition (June 2004)
-- [CITE[Standard ECMA-357]] <http://www.ecma-international.org/publications/standards/Ecma-357.htm>
]REFS]

*

[3]
[CITE[mozilla/js/rhino/examples/E4X/e4x_example.js]] <http://lxr.mozilla.org/mozilla/source/js/rhino/examples/E4X/e4x_example.js>
([[名無しさん]])

[4]
なんかしらないけど [[E4X]] が微妙に流行ってる?
([[名無しさん]] [WEAK[2005-09-23 17:11:21 +00:00]])

[5]
[CITE[E4X - MDC]] <http://developer.mozilla.org/en/docs/E4X>
([[名無しさん]])

[6]
[[E4X]] は [[JavaScript 1.6]] 
[WEAK[([[Gecko 1.8]] / [[Firefox 1.5]] 以降で対応)]]
に取り込まれました。
([[名無しさん]])

[7]
[[E4X]] を [[HTML]] に埋め込む時は、
[PRE(HTML example code)[
<script type="text/javascript; '''e4x=1'''"
    src="js-with-e4x.js"></script>
]PRE]

のようにします。

[[JavaScript 1.6]] な環境では [CODE(MIME)@en[[[e4x]]=1]]
引数が無くても [[E4X]] が有効になるようですが、
後方互換性のためには明記しておいた方が良いでしょう。

;; 特に [[HTML]] の[[注釈宣言]] [WEAK[(のようなもの)]]
の取り扱いで予期せぬ誤りのもとになります。

([[名無しさん]] [WEAK[2005-11-19 01:24:16 +00:00]])

[8]
[CITE[Kazuho@Cybozu Labs: E4X-XSS 脆弱性について]] ([CODE[2007-01-11 09:01:03 +09:00]] 版) <http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/e4x-xss.php>
([[名無しさん]] [WEAK[2007-01-11 00:11:46 +00:00]])

[9]
[CITE[Collection & Copy - ヒアドキュメント、E4X]] ([CODE[2007-04-23 08:44:54 +09:00]] 版) <http://d.hatena.ne.jp/brazil/20060512/1147427737>
([[名無しさん]])

[10]
[CITE[Latest topics - outsider reflex]] ([[Piro(SHIMODA Hiroshi)]] 著, [CODE[2007-04-23 09:22:51 +09:00]] 版) <http://piro.sakura.ne.jp/latest/blosxom/event/2007-04-22_mozillapartyjp8.0.htm>
([[名無しさん]] [WEAK[2007-04-23 00:25:25 +00:00]])

[11]
[CITE@ja[E4X in Firefox 発表資料: Days on the Moon]] ([CODE[2007-04-23 09:52:13 +09:00]] 版) <http://nanto.asablo.jp/blog/2007/04/22/1459018>
([[名無しさん]] [WEAK[2007-04-23 00:52:32 +00:00]])

[12]
[CITE@ja[Mar 25 2007 :: Shibuya.js Shibuya.es / nulog, NULL::something : out of the washer]] ([CODE[2007-04-23 10:01:42 +09:00]] 版) <http://lowreal.net/blog/2007/03/25/1>
([[名無しさん]] [WEAK[2007-04-23 01:04:54 +00:00]])

[13]
[CITE[Hatena::agenda]] ([CODE[2007-06-04 13:05:55 +09:00]] 版) <http://d.hatena.ne.jp/jintrick/20070604>
([[名無しさん]] [WEAK[2007-06-04 10:55:36 +00:00]])

[15]
[CITE[Bug 311071 &#8211; treat <! as the start of a comment to end of line, unless e4x=1 (was: page keeps reloading)]] ([CODE[2008-04-07 08:23:25 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=311071>
([[名無しさん]])

[16]
[CITE[Bug 309242 &#8211; E4X should be on by default, while preserving the comment hiding hack]] ([CODE[2008-04-07 08:24:49 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=309242>
([[名無しさん]])


[17]
[CITE[Bug 311157 &#8211; Comment-hiding compromise left E4X parsing/scanning inconsistent]] ([TIME[2008-04-07 08:25:31 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=311157>

[18]
[CITE[E4Xのデフォルトnamespaceが... - hogehoge]] ([TIME[2009-03-31 08:27:06 +09:00]] 版) <http://d.hatena.ne.jp/teramako/20090325/p1>

[19]
[CITE[E4Xは確かに便利なんだけど... - hogehoge]] ([TIME[2009-03-31 08:28:21 +09:00]] 版) <http://d.hatena.ne.jp/teramako/20090323/p1>

[20]
[CITE@ja[FirefoxのE4XはXPathより便利? - bits and bytes]] ([[Kentaro Kumagai]] 著, [TIME[2009-03-31 08:29:39 +09:00]] 版) <http://labs.gmo.jp/blog/ku/2007/08/firefoxe4xxpath.html>

[21] [CITE[C++ で無理矢理 E4X のような XML 埋め込みを実現してみる - muddy brown thang]] ([TIME[2009-05-05 10:35:57 +09:00]] 版) <http://d.hatena.ne.jp/moriyoshi/20090422/1240406986>

* [CODE(MIME)@en[e4x]] 引数 ([CODE(MIME)@en[text/javascript]] 媒体型)

[22] [CODE(MIME)@en[[[text/javascript]]]] [[媒体型]]の
[DFN[[CODE(MIME)@en[e4x]] [[引数]]]]は、[[E4X]] が完全に有効であるかを表します。

[23] 
:[[媒体型]]:[CODE(MIME)@en[[[text/javascript]]]]
:[[引数名]]:[CODE(MIME)@en[[[e4x]]]] (「[[E4X]]」より)
:値:[CODE(MIME)@en[[[1]]]]
:[[既定値]]:[CODE(MIME)@en[[[version]]]] に依存
:状態:非標準

** 値と意味

[24] [CODE(MIME)@en[[[e4x]]=[[1]]]] とすると、 [[E4X]] が完全に有効となります。
指定がない場合、 [CODE(MIME)@en[[[version]]]] が 1.5 以下では一部が無効、
1.6 以降では完全に有効となります。 ([CODE(MIME)@en[[[version]]]] の[[既定値]]は最新版のようです。)

[25] [CITE@en-us[E4X - MDC]] ([TIME[2010-02-11 13:31:50 +09:00]] 版) <https://developer.mozilla.org/en/E4X>
によると、[CODE(MIME)@en[[[e4x]]]] が 1 の場合にはすべての [[E4X]] の機能が有効になりますが、
そうでない場合 (で 1.5 以下の場合) には[[注釈]]と[[CDATA区間]]が無効になるようです。

** 実装

[26] この機能は [[JavaScript 1.6]] の一部として [[Gecko]] が最初に実装しました。

[27] [[Web Applications 1.0]] は[[スクリプト]]の処理の規定の中で
[CODE(MIME)@en[[[text/javascript]]; [[e4x]]=[[1]]]]
を [[JavaScript]] + [[E4X]] を意味するとしています。

ただし [[Web Applications 1.0]] 自体が [CODE(MIME)@en[[[e4x]]]]
[[引数]]を規定しているわけでも、[[著者]]に対する要件を定めているわけでもないので、
この[[引数]]自体は依然標準化されていない状態が続いています。

* 関連

[32] [[E4X]] を参考にした改良案として [[E4H]] があります。

* 歴史

[28] [CITE[IRC logs: freenode / #whatwg / 20111019]]
( ([TIME[2011-10-21 08:20:36 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20111019#l-256>

[29] [CITE@en-US[E4X | Mozilla Developer Network]]
( ([TIME[2012-08-03 16:11:02 +09:00]] 版))
<https://developer.mozilla.org/en-US/docs/E4X>

[30] [CITE@en[Web Applications 1.0 r7625 Fly your flags at half mast for E4X.]]
( ([TIME[2012-12-31 14:05:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7624&to=7625>

[FIG(quote)[
[FIGCAPTION[
[14] [CITE@EN[State Chart XML (SCXML): State Machine Notation for Control Abstraction]]
([TIME[2015-09-01 05:30:17 +09:00]] 版)
<http://www.w3.org/TR/scxml/#ecma-profile>
]FIGCAPTION]

> Implementations may support JSON '''['''RFC 4627''']''' or ECMAScript for XML (E4X) '''['''E4X''']'''.

]FIG]


[31] [CITE@en[Give JavaScript MIME types a <dfn> to refer to · whatwg/html@8d7fe57]]
([TIME[2015-09-03 21:41:34 +09:00]] 版)
<https://github.com/whatwg/html/commit/8d7fe572bca136e1397ab8fae57db791fbf8ec13>