[13]
[DFN@en[[ABBR[XBL]]]]
([DFN[XML [RUBY[束縛言語] [そくばくげんご] @en[binding language]]]]) は、
[[DOM]] [[要素]]に[[スタイルシート]]、[[スクリプト]]、
仮想的な[[内容]] ([DFN[[[影木]]]]) などを結びつける
([DFN[[[束縛]]する]]) ための[[マーク付け言語]][[語彙]]でした。

[43] [[XBL]] は[[表現と構造の分離]]、あるいは [[MVC]]
モデルの実現に有効と考えられています。

最も分かりやすいと思われるのが [[HTML]] の[[ファイルうp]]
[[制御子]]で、 [[HTML]] [[文書]]内では [CODE(HTMLe)@en[[[input]]]]
[[要素]]1つで表されますが、多くの 
[[Webブラウザ]]は[[ファイル名]]のための[[テキスト入力]][[制御子]]と、
視覚的に[[ファイル]]を選択するための[[押しボタン]][[制御子]]
[WEAK[(など)]] の組合せで[[レンダリング]]されます。
[[Gecko]] では、実際にこの[Q[意味的には1つのもの]]と[Q[実際上は複数組合わさった複雑なもの]]の[Q[[[束縛]]]]のために
[[XBL]] を使っています。

* 3つの XBL

[14] [[XBL]] と呼ばれているものには3種類ありました。
[FIG(list)[
- [DFN[[[XBL 1]]]]: [[Gecko]] 
[WEAK[([[Mozilla Suite]], [[Mozilla Firefox]] など)]]
が実装しています。
- [DFN[[[XBL 2.0]]]]: [[Mozilla財団]]が中心となって開発していた、
[[XBL 1.0]] の後継仕様です。
-- 最終版 [[XBL 2.0]]: 当初案の [[XBL 2.0]] を [[HTML]] に移植して簡潔化したものです。
- [DFN[[[sXBL]]]]: [[W3C]] が開発していた、 [[SVG 1.2]]
で使うための仕様です。
]FIG]

[27] 3つの [[XBL]] 仕様は設計思想が似ていますが、互換性はありませんでした。

[26] [[XBL 2.0]] と [[sXBL]] は実装されることなく破棄されました。

[34] [[XBL 2.0]] は結局実装されることはありませんでしたが、
その反省から改めて設計されたのが [[Web Components]] です。

;; [33] 詳細は各項を参照。

;;
[46] がんばれば[[チトー化]]できそうだな「3つのXBL」ってw

* XML と HTML と XBL

[36] 00年代は [[HTML]] から [[XML]] へ移行するのが[[政治的に正しい]]と考えられており、
[[XBL]] は [[XML]] ベースの新たな[[マーク付け言語]]として設計され、
[[XML文書]]に対して適用されるものとして規定されていました。

[37] [[XBL 1.0]]、[[RCC]]、[[W3C]] [[XBL 2.0]]、[[sXBL]]、[[Mozilla]] [[XBL 2.0]]
はいずれも [[XML]] ベースで設計されていました。

;; [38] ただし [[Gecko]] の実装では [[HTML文書]]の [[HTML要素]]でも
[[XBL 1.0]] を使うことはできました。

[39] 00年代後半には [[XML]] の失敗が明確になってきて、[[束縛]]もむしろ 
[[HTML文書]]に適用することが考えられるようになりました。[[束縛]]の記述方式は [[XML]]
よりも [[HTML]] により統合された形が望ましいと思われるようになりました。

[40] [[XBL 2.0]] 最終版は旧 [[XBL 2.0]] 案の [[XML]] [[要素]]を [[HTML]] 
に移植した形となっています。

[41] [[Web Components]] は [[HTML]] が前提となった設計になっています。

;; [42] [[XBL 2.0]] 最終版や [[Web Components]] の時代には [[HTML]]
は [[DOM]] ベースで規定されるのが前提となっていますから、 [[HTML]]
が基本とはいえ、 [[XML]] でも利用することは可能な形になってはいます。

* 歴史

[15]
[DFN[[[XBL 1.0]]]] 仕様は、2000年11月に [[Netscape]] 
社により策定されました [SRC@en[[XBL 1.0] の履歴参照]]。
そして、2001年2月には、 [[W3C]] に[[提出]]されました
[SRC@en[XBL 1.0 NOTE]]。

- [XBL 1.0] [CITE@en[XBL (Extensible Binding Language) 1.0]] 
<http://www.mozilla.org/projects/xbl/xbl.html>
- [XBL 1.0 NOTE] [CITE[XBL - XML Binding Language]] 
<http://www.w3.org/TR/2001/NOTE-xbl-20010223/>

[16]
[[Gecko]] は [[XBL 1.0]] 仕様に基づいてこれを実装しましたが、
すべての部分で仕様通りとはなっておらず、また、
必要に応じて拡張が行われました。

[[Gecko]] の実装する [DFN[[[XBL 1]]]]
に関する正式な仕様書のようなものはありませんが、
[[XULPlanet]] の参照マニュアル [SRC@en[XULPlanet]]
(と [[Gecko]] の[[ソース・コード]]自体) 
が規範的なものと考えられています。

なお、2003年に [[Mozilla.org]] の公開している [[XBL 1.0]]
仕様書 [SRC@en[XBL 1.0]] は微妙に改訂されていますが、
依然、実際の [[Gecko]] の実装とは異なっています。

- [XULPlanet] [CITE@en[Element Reference]] 
<http://www.xulplanet.com/references/elemref/#xbl>

[17]
時は流れて2004年、 [[W3C]] [[SVG WG]] は [[SVG 1.2]]
の仕様策定を進めていましたが、 
[DFN@en[[ABBR[[[RCC]]] [Rendering Custom Content]]]]
という、丁度 [[XBL]] と同じような機能がありました。
[[W3C]] [[CSS WG]] は [[XBL 1.0]] の[[提出]] (>>15) 
[WEAK[(と、 [[Microsoft]] の [ABBR@en[[[HTC]]] [HTML Components]] など類似の提案)]] を受けて
[[CSS 3]] でこの機能を扱うことにしていましたので、
独自の [ABBR@en[[[RCC]]] [Rendering Custom Content]] は開発を中止し、 
[[W3C]] で開発する [[XBL 2.0]] を [[SVG]] でも採用することに決めました。

[[W3C]] [DFN@en[[[Binding Task Force]]]] は、まず [[SVG 1.2]]
で必要な機能を規定する
[DFN@en[[ABBR[[[sXBL]]] [SVG's XML Binding Language]]]] 仕様を完成させ、
後に [[SVG]] 以外にも適用できる [[W3C]] [DFN@en[[[XBL 2.0]]]]
仕様に発展させるという計画で、作業を進めています。

[18]
ところが2005年10月、 [[Mozilla財団]]は、 [[W3C]] における
[[XBL 2.0]] 標準化の方針の対立から、独自の [DFN@en[[[XBL 2.0]]]]
仕様案を公表し、開発を進めています [SRC@en[XBL 2.0]]。
[[W3C]] の [[XBL 2.0]] が未だ [[WD]] すら公開されていない状況で、
[[Mozilla]] の [[XBL 2.0]] は既に完成に近い状態で、
近い将来の [[Gecko]] の他、 [[Opera]] と [[Safari]]
も実装するのではないかと期待されています。

[[W3C]] と [[Mozilla]] の [[XBL 2.0]] に関する対立に関しては、
[[XBL 2.0]] の項をご覧下さい。

- [XBL 2.0] [CITE@en[XML Binding Language 2.0]] 
<http://www.mozilla.org/projects/xbl/xbl2.html>

[35] その後の動きは [[XBL 2.0]] の項を、更にその後の動きは
[[Web Components]] の項を参照してください。

* メモ

- [1] ''XulPlanet.com -'' <http://www.xulplanet.com/downloads/xabyl/>: [[Visual]] な XBL editor。
- [2] ''XBL - XML Binding Language'' <http://www.w3.org/TR/xbl/>

[44] [CITE@en[Re: XBL is (mostly) W3C redundant, and CSS is wrong W3C layer for  semantic behavior *markup*]] ([[Ian Hickson]] 著, [TIME[2002-12-31 02:50:58 +09:00]] 版) <https://lists.w3.org/Archives/Public/www-style/2002Dec/0221.html>

- [3] ''Surfin' Safari'' <http://www.mozillazine.org/weblogs/hyatt/archives/2003_05.html#003262>: XBL と [[XSLT]] の比較。 XBL と XSLT は全然違うものだけど、 XBL で出来ることは一見 XSLT でもできて、 XBL は不要なようにも思える。そんな意見を斬っている。

[4] [CITE[Surfin' Safari]] ([TIME[2017-09-19 13:50:03 +09:00]] 版) <https://web.archive.org/web/20030515080732/http://www.mozillazine.org/weblogs/hyatt/archives/2003_05.html>

- [5] >>3 [WEAK[もちろんそれの著者は分かっているんだけど、]] XBL と XSLT は対立するものじゃなくて、用途に応じて使い分けるものだよね。 XSLT と [[CSS]] が対立するものではないように。だから、 XSLT + CSS + XBL という使い方も十分ありえるわけ。

[6]
''SVG's XML Binding Language (sXBL)'' <http://www.w3.org/TR/sXBL/>

汎用の XBL 2.0 が W3C SVG WG で準備中だそうです。。。

([[名無しさん]] [WEAK[2004-09-07 03:36:07 +00:00]])

[7]
''XBL (Extensible Binding Language) 1.0'' <http://www.mozilla.org/projects/xbl/xbl.html>

Mozilla.org の XBL 1.0 の解説。
([[名無しさん]])

[8]
[[Gecko]] の [CODE(CSS)[[[-moz-binding]]]] で縛った XBL は[[文書順]]ないし表示した状態の上から順番に処理されていくわけじゃなくて、何かの順番 (無作為なのか、というよりもむしろレンダリング中の何かの作業をした順なのか)  で処理されていくっぽい。
ためしに連番を振らせてみるとわかる。

でももしかすると、実行開始は同時だけど並行処理の結果連番用の変数に access するところに到達するまでの順番が狂ってるのかもしれん。

ところでそうすると、安全を求めるならスクリプト内で [[lock]] とかせねばならぬということか? その辺どういう実装になってるんだ?
([[名無しさん]] [Firefox 0.9])

[9]
[[Gecko]] では[[フォーム]][[制御子]]は一部
[[XBL]] で実装されています。ですから、
それに何かを追加しようとして
[PRE(CSS example)[
[SAMP(HTMLe)[textarea]] {
  [[-moz-binding]]: url([VAR[foo]]#[VAR[bar]]);
}
]PRE]

なんてしちゃうと、本来の機能を殺してしまいます。
例えば [CODE(HTMLe)[textarea]] の場合は矢印鍵による文章内の移動ができなくなってしまいます。

これを回避するためには、
[CODE(XMLe)[[[binding]]]] 要素に
[CODE(XMLa)[[[extends]]]] 属性を指定して、
既存の XBL を継承するという形にしてやります。
[CODE(XMLa)[extends]] 属性の値は XBL
の [[URI参照]]か、 [[QName]]
だそうで、 QName の場合はその QName
の要素型の機能を継承するということらしいですが、
うまく動作しないという話もありますし、
実際動きませんでした。
[WEAK[(そもそも本質的に区別できない URI 参照と QName を同じ属性の値にするなというのもある。)]]

ということで、 [CODE(XMLa)[extends]]
にはブラウザの既定のスタイル・シートで指定された束縛の
URI 参照 [WEAK[([SAMP(URI)[[[resource]]:]] なんちゃら)]]
を指定することになります。
ただし、これが過去から将来までのすべての
Gecko 系ブラウザで機能するのかというと、
甚だ怪しい。しかも XBL
でエラーが発生すると何も言わずに束縛された要素が非表示になってしまうから困ります。

ちなみに、 [SAMP(HTMLe)[textarea]]
の場合、 [[Firefox]] では元々の XBL
束縛先は
[SAMP(URI)[resource://gre/res/builtin/platformHTMLBindings.xml#textAreas]]
でした。
しかし古い [[Mozilla Suite]]
(最近の Mozilla Suite は未調査)
ではこれは存在せず、
[SAMP(URI)[resource:///res/builtin/platformHTMLBindings.xml#textAreas]]
と指定すれば Mozilla Suite
でも Firefox でも動くようです。

([[名無しさん]] [WEAK[2005-03-09 08:11:36 +00:00]])

[10]
なお、 >>2 や >>7 の XBL 1.0 は古い文書で、
今の Gecko の実装とは違っているところが色々あります。
[[XUL Planet]] の tutorial や reference
を見た方が良いです。

[CITE[10.1 - Introduction to XBL]] <http://xulplanet.com/tutorials/xultu/introxbl.html>
([[名無しさん]] [WEAK[2005-03-09 08:15:50 +00:00]])

[11]
[CITE[Index of /specs/xbl]] <http://www.hixie.ch/specs/xbl/>
([[名無しさん]])

[12]
>>8 
2年位前までの Gecko は文書順だったような。
最近のはむしろ積極的に逆文書順にしているようにも見える。
([[名無しさん]] [sage] [WEAK[2005-04-17 03:05:04 +00:00]])

[19]
[CITE[XBL - MDC]] <http://developer.mozilla.org/en/docs/XBL>
([[名無しさん]])

[20]
[CITE[XTech 2005 Presentations:Extending Gecko with XBL and XTF - MDC]] <http://developer.mozilla.org/en/docs/XTech_2005_Presentations:Extending_Gecko_with_XBL_and_XTF>
([[名無しさん]])

[21]
[CITE[XUL Tutorial:Introduction to XBL - MDC]] <http://developer.mozilla.org/en/docs/XUL_Tutorial:Introduction_to_XBL>
([[名無しさん]])

[22]
実はこいつも対立規格だったりするのか??

[CITE[XML Handlers]] 
<http://hades.mn.aptest.com/htmlwg/WD-xml-handlers-20030609/>

[CITE[XHTML 2.0 - XHTML Handler Module]] 
<http://www.w3.org/TR/2005/WD-xhtml2-20050527/mod-handler.html>

([[名無しさん]] [sage])

[23]
>>22

[CITE[XML Events 2]] <http://hades.mn.aptest.com/htmlwg/xml-events/>

2004年12月

[28]
[CITE[XUL Apps > Tips > ホイールスクロールで普通のボックスの内容をスクロールする - outsider reflex]] ([[Piro(SHIMODA Hiroshi)]] 著, [TIME[2007-04-23 09:24:02 +09:00]] 版) <http://piro.sakura.ne.jp/xul/tips/x0030.html#path>

[29] [CITE[DOMRelations]] ([TIME[2012-05-29 04:07:41 +09:00]] 版) <https://alexvincent.us/DOMRelations/DOMRelations.xml>


[30] [CITE[Burning Chrome » DOMRelations: A new design for the Document Object Model’s Node objects]]
( ([TIME[2013-01-13 03:52:15 +09:00]] 版))
<https://alexvincent.us/blog/?p=715>

[31] [CITE[IRC logs: freenode / #whatwg / 20130703]]
( ([TIME[2013-07-05 21:10:54 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130703>

[32] [CITE@en[Re: Fallout of non-encapsulated shadow trees]]
( ([[Boris Zbarsky]] 著, [TIME[2014-07-02 13:17:12 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2014JulSep/0033.html>

[24] [CITE@en[Hixie's Natural Log: Why XBL?]]
([TIME[2009-08-22 22:35:09 +09:00]] 版)
<http://ln.hixie.ch/?start=1041369681&order=-1&count=1>

[25] [CITE[XBL]]
( ([TIME[2017-03-24 07:41:54 +09:00]]))
<https://www-archive.mozilla.org/projects/xbl/>

[45] [CITE[Are We XBL Still?]]
([TIME[2017-11-23 06:42:29 +09:00]])
<https://bgrins.github.io/xbl-analysis/>