[13] [DFN[XML [RUBY[束縛言語][そくばくげんご]@en[binding language]]]] ([DFN@en[[ABBR[XBL]]]]) は、 [[XML]] [[要素]]に[[スタイル・シート]]、[[スクリプト]]、 仮想的な[[内容]] ([DFN[[[影木]]]]) などを結びつける ([DFN[[[束縛]]する]]) ための[[マーク付け言語]]です。 [17] [[XBL]] は[[表現と構造の分離]]、あるいは [[MVC]] モデルの実現に有効と考えられています。 最も分かりやすいと思われるのが [[HTML]] の[[ファイルうp]] [[制御子]]で、 [[HTML]] [[文書]]内では [CODE(HTMLe)@en[[[input]]]] [[要素]]1つで表されますが、多くの [[Webブラウザ]]は[[ファイル名]]のための[[テキスト入力]][[制御子]]と、 視覚的に[[ファイル]]を選択するための[[押しボタン]][[制御子]] [WEAK[(など)]] の組合せで[[レンダリング]]されます。 [[Gecko]] では、実際にこの[Q[意味的には1つのもの]]と[Q[実際上は複数組合わさった複雑なもの]]の[Q[[[束縛]]]]のために [[XBL]] を使っています。 [14] '''3つの XBL''': 現在 [DFN[XBL]] と呼ばれているものには3種類あります。 - [DFN[[[XBL 1]]]]: [[Gecko]] [WEAK[([[Mozilla Suite]], [[Mozilla Firefox]] など)]] が実装しています。 - [DFN[[[XBL 2.0]]]]: [[Mozilla財団]]が中心となって開発中の、 [[XBL 1.0]] の後継仕様です。 - [DFN[[[sXBL]]]]: [[W3C]] が開発中の、 [[SVG 1.2]] で使うための仕様です。 [[Mozilla]] [[XBL 2.0]] と [[sXBL]] はまだ仕様が完成しておらず、 実装もありません。 3つの [[XBL]] 仕様は設計思想が似ていますが、互換性はありません。 * 歴史 [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]] -[XBL 1.0 NOTE] [CITE[XBL - XML Binding Language]] [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]] [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]] [[#comment]] * メモ - [1] ''XulPlanet.com -'' : [[Visual]] な XBL editor。 - [2] ''XBL - XML Binding Language'' - [3] ''Surfin' Safari'' : XBL と [[XSLT]] の比較。 XBL と XSLT は全然違うものだけど、 XBL で出来ることは一見 XSLT でもできて、 XBL は不要なようにも思える。そんな意見を斬っている。 - [4] >>3 - [5] >>3 [WEAK[もちろんそれの著者は分かっているんだけど、]] XBL と XSLT は対立するものじゃなくて、用途に応じて使い分けるものだよね。 XSLT と [[CSS]] が対立するものではないように。だから、 XSLT + CSS + XBL という使い方も十分ありえるわけ。 [6] ''SVG's XML Binding Language (sXBL)'' 汎用の XBL 2.0 が W3C SVG WG で準備中だそうです。。。 ([[名無しさん]] [WEAK[2004-09-07 03:36:07 +00:00]]) [7] ''XBL (Extensible Binding Language) 1.0'' 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]] ([[名無しさん]] [WEAK[2005-03-09 08:15:50 +00:00]]) [11] [CITE[Index of /specs/xbl]] ([[名無しさん]]) [12] >>8 2年位前までの Gecko は文書順だったような。 最近のはむしろ積極的に逆文書順にしているようにも見える。 ([[名無しさん]] [sage] [WEAK[2005-04-17 03:05:04 +00:00]])