* [CODE(HTMLe)@en[object]] 要素 [CODE(HTMLa)@en[declare]] 属性 (HTML, XHTML 1)

[1] [[HTML]] の [CODE(HTMLe)[[[object]]]] 要素の
[DFN[[CODE(HTMLa)[declare]] 属性]]は、
その [CODE(HTMLe)[object]] が宣言のみであることを示します。

物体は、この宣言を参照する後の [CODE(HTMLe)[object]]
で実現値化しなければなりません。

:状態:[[W3C]] [[勧告]]
:[[名前空間URI]]:([[[CODE@en[null]]名前空間]])
:[[局所名]]:[CODE(HTMLa)@en[[[declare]]]] ([Q@en[declare]]
([Q[宣言]]) より)
:[[属性型]]:([[真偽値属性]])
:[[既定値]]:([[偽]])

[4] [CODE(HTMLe)[object]] 宣言を使うと、
- 一つの物体から複数個の[[実現値]]を生成できます。
- しかし UA がデータを取りに行くのは1度で済みます。
- 物体の宣言以外の場所、例えば[[連結]]から物体を実現値化できます。
- [CODE(HTMLe)[[[param]]]] 要素を使った実行時引数として他の物体に引き渡せます。

[2] 仕様書:
- [[HTML 4]]
-- [CODE(HTMLe)[object]] 要素 [CODE(HTMLa)[declare]] 属性
<IW:HTML4:"struct/objects.html#adef-declare">
-- [CITE[13.3.4 Object declarations and instantiations]]
<IW:HTML4:"struct/objects.html#object-declare">
-- [CITE[17.13.2 Successful controls]]
<IW:HTML4:"interact/forms.html#successful-controls">

実装仕様:
- [MSDN]
[CITE@en[DECLARE Attribute | declare Property (OBJECT) (Internet Explorer)]] 
<http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/declare.asp>


[[#comment]]


** 属性値

[3] この属性は[[真偽値属性]]です。
指定すれば[[真]] (宣言のみである)、
省略すれば[[偽]] (宣言のみではない)
になります。

[[#comment]]


** 機能

[6] [CODE(HTMLa)[declare]] な [CODE(HTMLe)[object]]
は、 UA が読んだときに実行はされません。
後から実現値化されて実行されます。

実現値化は、その [CODE(HTMLe)[object]] を参照する要素をレンダリングする必要のある度に
(その [CODE(HTMLe)[object]] を参照する[[連結]]や [CODE(HTMLe)[object]]
などが[[活性化]]される度に) 行われます。 [SUP[ [HTML 4] ]]

[5] [CODE(HTMLa)[declare]] に対応していない UA
は、 [CODE(HTMLe)[object]] の内容をレンダリングしなければなりません
[SUP[ [HTML 4] ]]。

[11]
HTML 4 DTD の[[注釈]] (参考) には
[Q[declare but don't instantiate flag]]
と書かれています。

[[#comment]]

** 関連

[10] '''フォームの提出との関係'''
[CODE(HTMLa)@en[[[declare]]]] な [CODE(HTMLe)@en[[[object]]]] は、
[[フォーム]]の[[提出]]に際して[[成功]]とは見なさないべきです。
[SRC@en[HTML 4 17.13.2]]

[7] '''識別子'''
後から [CODE(HTMLe)[object]] を識別するために、
[CODE(HTMLa)[[[id]]]] 属性が必要です。
[SRC@en[HTML 4]]

[13] '''参照するものとの位置関係'''
[CODE(HTMLa)[declare]] な [CODE(HTMLe)[object]]
はその [CODE(HTMLe)[object]] の最初の実現値より前になければなりません。
[SRC@en[HTML 4]]

[[#comment]]


** 例

[8] 連結によって実現値化する例
[PRE(HTML)[
<P><OBJECT declare
        id="EARTH.DECLARATION" 
        data="TheEarth.mpeg" 
        type="video/mpeg">
   The <STRONG>Earth</STRONG> as seen from space.
</OBJECT>
...later in the document...
<P>A neat <A href="#EARTH.DECLARATION">animation of The Earth!</A>
]PRE]

[WEAK[(HTML 4 仕様書より、改)]]

この例では、 [Q[animation of The Earth!]]
というリンクによって地球の動画を活性化することができます。

[9] 物体の実行時引数として引き渡す例:
[PRE(HTML)[
<P><OBJECT declare
     id="TRIBUNE"
     type="application/x-webfont"
     data="tribune.png">
</OBJECT>
...view the poem in KublaKhan.txt here...
<P><OBJECT classid="http://foo.bar.example/poem_viewer" 
           data="KublaKhan.txt">
<PARAM name="font" valuetype="object" value="#TRIBUNE">
<P>Read <A href="KublaKhan.txt">KublaKhan</A>!
</OBJECT>
]PRE]

[WEAK[(HTML 4 仕様書より、改)]]

(この例では [CODE(HTMLa)[[[value]]]] 属性に [[URI参照]]のような値が使われています。
しかし、 HTML 4 の [CODE(HTMLa)[[[valuetype]]]] 属性の規定を読む限りでは、
[CODE(SGML)[[[IDREF]]]] のように [SAMP[TRIBUNE]] 
とだけ指定しなければならないはずです。)

[[#comment]]

** 歴史

[14]
[CODE(HTMLe)@en[[[object]]]] [[要素型]]がまだ [CODE(HTMLe)@en[[[insert]]]]
と呼ばれていた当初の仕様案では、 [CODE(HTMLe)@en[[[alias]]]]
[[要素型]]が定義されていました。この[[要素型]]の[[要素]]は、
[CODE(HTMLe)@en[[[insert]]]] と似ていますが、
実際に[[文書]]中に[[物体]]を[[挿入]]はせず、
[CODE(HTMLe)@en[[[param]]]] から参照して使用することとしていました。
[CODE(HTMLe)@en[[[param]]]] [[要素]]から[[物体]]を参照するための方法として用意されたようです。

;; [CITE@en[HTML3 Linking and Embedding Model]] 
[CSECTION@en[The ALIAS element]]
<http://www.w3.org/TR/WD-insert-951221.html#alias>

[15]
その後 [CODE(HTMLe)@en[[[insert]]]] から [CODE(HTMLe)@en[[[object]]]]
に[[要素型名]]が変更された際に、 [CODE(HTMLe)@en[[[alias]]]]
も統合されて、 [CODE(HTMLa)@en[[[declare]]]] 
[[真偽値属性]]が設けられました。機能的には前案 >>14
と同じで、 [CODE(HTMLe)@en[[[param]]]] から
[[物体]]を参照するためのものだったようです。

;; [CITE@en[HTML3 Linking and Embedding Model]] 
[CSECTION@en[More Information About OBJECT DECLARE]]
<http://www.w3.org/TR/WD-object-960226.html#alias>

[16]
更に、 [[URI]] が指定できる場所に[[物体]]を指定するためという用法が追加されます。

[CODE(HTMLe)@en[[[a]]]] [[要素]]の [CODE(HTMLa)@en[[[href]]]]
[[属性]]を [CODE(HTMLa)@en[[[declare]]]] された
[CODE(HTMLe)@en[[[object]]]] を指す[[同文書参照]]とすると、
その[[物体]]への[[リンク]]となります。
([[活性化]]すると現在の [[HTML]] [[文書]]の代わりに宣言された[[物体]]が
[[Webブラウザ]]画面に表示されます。)

[CODE(HTMLe)@en[[[body]]]] [[要素]]の [CODE(HTMLa)@en[[[background]]]]
[[属性]]に同様に指定すると、[[背景]]がその[[物体]]になります。
高度な[[アニメーション]]を[[背景]]にしたい時などに使えるのだそうです。
(この記述は3月25日案で消滅しています。)

;;
=1996年3月11日案 [CITE@en[Inserting objects into HTML]] 
=-[CSECTION@en[More Information About OBJECT DECLARE]]
<http://www.w3.org/TR/WD-object-960311.html#declare>
=-[CSECTION@en[Document Background]]
<http://www.w3.org/TR/WD-object-960311.html#background>
=1996年3月25日案 [CITE@en[Inserting objects into HTML]] 
<http://www.w3.org/TR/WD-object-960325.html#declare>

[17]
その後ほぼそのままの内容の仕様案が続きましたが、
1997年7月の [[HTML 4]] 仕様案に取り込まれるにあたって全体的に書きなおされました。

;;
[CITE@en[Inclusions in HTML documents]] 
<http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.1.2>

この時に、2つ目のリンク先を[[物体]]にするという用途について、
現在の頁の代わりにという記述はなくなっています。
しかも、
[PRE(HTML example code)[
<OBJECT declare
           id="earth_declaration" 
           data="TheEarth.mpeg" 
           type="application/mpeg">
  <OBJECT src="TheEarth.gif">
   The <STRONG>Earth</STRONG> as seen from space.
  </OBJECT>
</OBJECT>
...later in the document...
Click to see a neat <A href="#earth_declaration">
animation of The Earth!</A>
]PRE]
のような使用例がある位ですから、
[Q[現在のページの代わりに]]という仕様から、
宣言された場所に、と変更されたようです。

;; もっとも、以前の案から、
未対応で[[代替内容]]が[[レンダリング]]される時に[[リンク]]を[[活性化]]したらどうなるのかは明らかではありませんでしたが。

;; ただ、この例の[[代替内容]]としての [CODE(HTMLe)@en[[[object]]]]
は次の案で削除されて、 >>8 のようになっています。
<http://www.w3.org/TR/WD-html40-970917/struct/objects.html#h-14.2.4>

[[リンク]]の[[活性化]]の前後で][レンダリング]]がどう変化するべきなのかがよくわからない、
実装不能な仕様になってしまいました。仕様案のこの部分は、
[[HTML 4.01]] [[勧告]]までほとんど変わっていません。

[18]
[[WinIE]] や [[Gecko]] をはじめ、 [[HTML 4]] 以後の各種 [[Webブラウザ]]は、
[[DOM]] [[属性]]としての [CODE(DOMa)@en[[[declare]]]]
には対応していますが、 [[HTML 4]] で規定された
[CODE(HTMLa)@en[[[declare]]]] の機能は実装していません。
([[WinIE]] については [CITE@en[MSDN]]、[[Gecko]] については >>12 を参照。)

[19]
[[Ian Hickson]] は2005年9月に、 [[HTML 5]] には
[CODE(HTMLa)@en[[[declare]]]] [[属性]]を含めないつもりであると述べています
(>>12)。

[20]
[[デスクトップ]]環境の[[視覚ブラウザ]]で無視されてきた
[CODE(HTMLa)@en[[[declare]]]] [[属性]]ですが、
[[NTTドコモ]]の[[iモード対応HTML]] では、
Version 3.0 (2001年) で [CODE(HTMLe)@en[[[object]]]] 
[[要素型]]が追加されると同時に
[CODE(HTMLa)@en[[[declare]]]] [[属性]]が追加されています。

;;
[CITE[作ろうiモードコンテンツ | NTTドコモ]] 
<http://www.nttdocomo.co.jp/p_s/imode/tag/>

[[iモード]]における [CODE(HTMLa)@en[[[declare]]]]
[[属性]]は、旧仕様案の2つ目の用法 (>>16) と同じで、
[[iアプリ]]などの[[携帯電話]]端末上で動作するプログラムを、
現在の文書に埋め込むのではなく、それだけで表示させるための
[CODE(HTMLe)@en[[[a]]]] [[要素]]の[[リンク先]]として使われます。

;; ただし、 [[HTML 4]] の例とは異なり、
[CODE(HTMLa)@en[[[href]]]] [[属性]]ではなく [CODE(HTMLa)@en[[[ijam]]]]
[[属性]]などの[[媒体型]]に応じた[[属性]]で指定します。
未対応の[[利用者エージェント]]で[[華麗にスルー]]できるようにそうなっていると思われます。

現実の使用例では、 [CODE(HTMLe)@en[[[object]]]] [[要素]]は
[CODE(HTMLe)@en[[[head]]]] 内に入っていたり [CODE(HTMLe)@en[[[body]]]]
内におかれたりしますが、いずれも[[空要素]]とするようです。

[[#comment]]

** 実装

[12]
[CITE@en[Bug 164979 - Implement declare attribute for object tag]]
<https://bugzilla.mozilla.org/show_bug.cgi?id=164979>

[[#comment]]

** メモ


[[#comment]]


* メモ