13 オブジェクト、画像、アプレットについて(Objects, Images, and Applets

この章の目次

  1. オブジェクト、画像、アプレットについての概説(Introduction to objects, images, and applets)
  2. 画像を埋め込む(Including an image): IMG要素
  3. 汎用の入れ物(Generic inclusion): OBJECT要素
    1. オブジェクト表示の原則(Rules for rendering objects)
    2. オブジェクトの初期化(Object initialization): PARAM要素
    3. オブジェクト名の記し方(Global naming schemes for objects)
    4. オブジェクトの宣言と実体化(Object declarations and instantiations)
  4. アプレットを組み込む(Including an applet): APPLET要素
  5. 外部文書の埋め込みに関する注意(Notes on embedded documents)
  6. イメージマップ(Image maps)
    1. クライアント側イメージマップ(Client-side image maps): MAP 要素とAREA要素
    2. サーバ側イメージマップ(Server-side image maps)
  7. 画像、オブジェクト、アプレットの視覚的表現(Visual presentation of images, objects, and applets)
    1. 幅と高さ(Width and height)
    2. 画像やオブジェクトの周囲の余白(White space around images and objects)
    3. 枠線(Borders)
    4. 配置(Alignment)
  8. 代替テキストの記し方(How to specify alternate text)

Introduction to objects, images, and applets

HTML 4.0のマルチメディア機能は、画像、アプレット(読み手のWWWブラウザに読み込まれて実行されるプログラム)、動画、当該ページ以外のHTML文書、などを現在の文書に埋め込むことを可能にします。

例えば、PNG画像を文書に埋め込むには、次のように記します。

<BODY>
<P>グランドキャニオンのクローズアップ写真です:
<OBJECT data="canyon.png" type="image/png">
グランドキャニオンの <EM>クローズアップ</EM> です。
</OBJECT>
</BODY>

以前の版のHTMLでは(IMG要素として)画像を、また(APPLET要素として)アプレットを扱えました。けれども、この両要素には幾つか限界があります。

これらの問題を打開するため、HTML 4.0ではOBJECT要素を用意しました。あらゆる目的に適う、オブジェクト一般の扱い方を規定するためのものです。OBJECT要素を使うと、ユーザエージェントでオブジェクトを表示させるために必要な全てのこと、すなわちソースコード、パラメータの初期値、動作時のデータ、を記すことができます。この仕様書では、「オブジェクト」という語を、HTML文書中に埋め込みたいと考えられるような全てのモノを指し示すための語として記します。そのようなモノを指し示す語としては、アプレット、プラグイン、メディアハンドラ、等が一般に通用しています。

したがって、新登場のOBJECT要素は、既存の要素の機能を足し合わせて引き継いだものとなっています。各々の機能を下にまとめました。

埋め込みたいモノ 専用の要素 汎用の要素
画像 IMG OBJECT
アプレット 非推奨) OBJECT
自身以外のHTML文書 IFRAME OBJECT

上の表は、埋め込みたいモノが、専用の要素としても汎用の要素としても文書中に埋め込めるということを示しています。汎用のOBJECT要素は更に、将来登場するであろうMIME$B%?%$%W$GI=$5$l$k%b%N$K$bBP1~$7$F$$$^$9!#

画像の埋め込みには、OBJECT 要素とIMG要素のどちらを使っても構いません。

アプレットを埋め込む場合は、非推奨APPLET要素ではなく、OBJECT要素を使って下さい。

自身以外のHTML文書を埋め込む場合は、新登場のIFRAME$BMWAG$HOBJECT要素のどちらを使っても構いません。どちらの場合でも、埋め込まれた文書は本体の文書から独立した存在のままです。視覚系のユーザエージェントは埋め込み文書を独立した表示窓に表示するでしょう。両要素の機能的な比較対照について、詳しくは本章5節、外部文書の埋め込みに関する注意をご覧下さい。

画像その他の埋め込みオブジェクトは、通常のリンク機構イメージマップ方式のどちらによっても、それと結びついたハイパーリンク機構を実現させ得ます。イメージマップは、埋め込みオブジェクトを、リンク元機能を持った複数の区画に分割するモノです。ある区画がアクティブにされると、次の文書が読み込まれたり、プログラムが起動されたり、等のリンク結果が発生します。

以下では、色々なモノの埋め込み方法や、埋め込んだモノにイメージマップを設定する方法について、様々な手法を解説します。

Including an image): IMG要素

<!--テキスト表示のみのユーザエージェントでも画像内容が判るようにし、また非グラフィック環境でも操作可能にするため、必ず「ALT」属性の値を記して下さい。また、サーバーサイドのイメージマップ機能は使わないようにして下さい。-->

<!-- To avoid problems with text-only UAs as well as 
   to make image content understandable and navigable 
   to users of non-visual UAs, you need to provide
   a description with ALT, and avoid server-side image maps -->
<!ELEMENT IMG - O EMPTY                -- Embedded image -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  %URI;          #REQUIRED -- URI of image to embed --
  %Text;         #REQUIRED -- short description --
  %URI;          #IMPLIED  -- link to long description
                                          (complements alt) --
  %Length;       #IMPLIED  -- override height --
  %Length;       #IMPLIED  -- override width --
  %URI;          #IMPLIED  -- use client-side image map --
  ismap       (ismap)        #IMPLIED  -- use server-side image map --
  >

開始タグ: 必要、終了タグ: なし

属性の定義

src = uri [CT]
画像リソースの所在を示します。広く用いられている画像ファイル形式には、GIF、JPEG、PNGがあります。
longdesc = uri [CT]
当該画像に関する補足説明を行っている文書へのリンクを示します。この説明文はalt属性で記す代替テキストの内容を補う文章になっている必要があります。当該画像にイメージマップが設定されている場合、この属性はイメージマップの設定内容を表す情報を示すために使うべきです。特にサーバ側イメージマップを利用する場合に重要な属性です。

他に使用可能な属性

文書中の、画像を埋め込みたい場所にIMG要素を配置することで、画像を埋め込むことができます。 IMG要素には内容はありません。この要素は通常は行の中でsrc属性で指定された画像によって置き換えられます。例外はalign属性でrightまたはleftに位置指定された時です。この場合、画像は「フロート」し、行の外に出ます。

前に出てきた [第12章の] 例文で、家族写真へのリンクを設けたものがありました。今回は、その写真を直接文書中に埋め込んでみましょう。

<BODY>
<P>休暇から戻ったところです! 湖畔で撮った家族写真です:
<IMG src="/www.somecompany.com/People/Ian/vacation/family.png"
     alt="家族写真:湖畔にて">
</BODY>

これはOBJECT要素を使って次のように書くこともできます。

<BODY>
<P>休暇から戻ったところです! 湖畔で撮った家族写真です:
<OBJECT data="http://www.somecompany.com/People/Ian/vacation/family.png"
        type="image/png">
家族写真:湖畔にて
</OBJECT>
</BODY>

alt属性は画像表示がされない場合に当該画像の代役を果たす文章を記すためのものです(代替テキストの記し方については本章8節で説明します)。画像を含む文書を読み込んだユーザエージェントは、そもそも画像を表示できなかったり、当該画像ファイル形式に対応していなかったり、画像を読み込まないよう設定されていたりした場合には、この代替テキストを表示する必要があります。

次にlongdesc属性を使った補足説明文書へのリンクの記し方を示します。

<BODY>
<P>
<IMG src="sitemap.gif"
     alt="HP Labs Site Map"
     longdesc="sitemap.html">
</BODY>

alt属性は当該画像の代役を果たす短い文を表示します。その代替テキスト内容を見て、読み手は、更にlongdesc属性が指し示す補完文書(この場合は「sitemap.html」)まで読み進むべきかどうかを判断できることとなります。

視覚系のメディアにおける、画像の大きさ、全体の配置、枠線などの表し方については、本章7節「画像、オブジェクト、アプレットの視覚的表現」をご覧下さい。

Generic inclusion):OBJECT要素

<!ELEMENT %flow;)*
 -- generic embedded object -->
<!ATTLIST OBJECT
  %attrs;                              -- %coreattrs, %i18n, %events --
  declare     (declare)      #IMPLIED  -- declare but don't instantiate flag --
  %URI;          #IMPLIED  -- identifies an implementation --
  %URI;          #IMPLIED  -- base URI for classid, data, archive--
  %URI;          #IMPLIED  -- reference to object's data --
  %ContentType;  #IMPLIED  -- content type for data --
  %ContentType;  #IMPLIED  -- content type for code --
  %URI;          #IMPLIED  -- space separated archive list --
  %Text;         #IMPLIED  -- message to show while loading --
  %Length;       #IMPLIED  -- override height --
  %Length;       #IMPLIED  -- override width --
  %URI;          #IMPLIED  -- use client-side image map --
  name        CDATA          #IMPLIED  -- submit as part of form --
  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
  >

開始タグ: 必要、終了タグ: 必要

属性の定義

classid = uri [CT]
ダウンロードすべき、オブジェクト表示環境の所在をURI形式で指定します。このclassid属性は、当該オブジェクトの種類によって、data属性と併用されたり、data属性とどちらか一方が用いられれたりします。
codebase = uri [CT]
これは、classid属性、 data属性、そしてarchive属性において記される相対URIを解釈する際の基準URIを記すものです。もしこの属性が設定されていない場合は、当該HTML文書自体の基準URIが各属性の基準URIとして利用されます。
codetype = content-type [CI]
これは、classid属性によってダウンロードを指定された表示環境のMIMEタイプが何であるかを記すものです。この属性は省略可能なものではありますが、classid属性を設定する場合にはこちらも設定することを勧めます。この属性の値を確認すれば、ユーザエージェントは、自分が扱えるデータ形式かどうかがダウンロード前に判るからです。この属性の値が設定されていない場合、type属性の値が既定値として利用されます。
data = uri [CT]
これは、表示環境に扱わせるデータの所在を記すものです。例えば、画像を扱うプログラムの場合における画像データなど。より一般的には、直列化されていて原形に復元できる状態のオブジェクト、と言えます。相対URI形式で記されている場合、codebase属性で指定した基準URIを参照します。
type = content-type [CI]
これは、data属性が指定するデータのMIMEタイプを記すものです。この属性は省略可能なものではありますが、設定するよう勧めます。この属性の値を確認すれば、ユーザエージェントは、自分が扱えるデータ形式かどうかがダウンロード前に判るからです。
archive = uri list [CT]
この属性の値には、当該オブジェクトに関連づけられているリソースを所蔵しているアーカイブの所在を示すURIを、空白文字区切り形式で列記できます。その中にはclassid$BB0@-$ddata属性が指し示しているリソース自体が含まれていても構いません。アーカイブの事前読み込みを行うと、概して、オブジェクト全体のダウンロード時間を短縮できます。アーカイブの所在が相対URI形式で記されている場合は、codebase属性に記した基準URIを参照します。
declare [CI]
この論理型属性を設定した場合、文書内で定義されている当該OBJECT要素は、存在が宣言されているだけの状態になります。このオブジェクトが実体化されるのは、他のOBJECT要素がこのオブジェクトを参照した場合に限られます。
standby = text [CS]
ユーザエージェントがオブジェクトの表示環境とデータをダウンロードしている最中の待ち時間に表示させておきたいメッセージを記します。

他に使用可能な属性

ほとんどのユーザエージェントには、テキスト、GIF画像、色指定、フォント指定、その他いくつかのグラフィック要素、などのWWW上で一般化している形式のデータを扱う機能が組み込まれています。表示を要求されたモノのデータ形式をサポートしていない場合は、外部アプリケーションを連動させて取り扱うこととなっているでしょう。OBJECT要素を使うと、当該データをユーザエージェントから独立して扱うか、または何らかのプログラムを指定してユーザエージェントの内部に表現させるかを設定することができます。

非常に一般的に言うと、この場合HTML文書の書き手は次の3つの情報を記しておく必要があるでしょう。

OBJECT要素の場合、書き手は上記3点を全て設定できますけれど、3つ全てを記す必要はない場合があります。例えば、表示用データを外部から与える必要がないオブジェクト(ちょっとしたアニメーションを表示するアプレットなど表示データが既にアプレット自体に組み込まれているもの)などを扱う場合です。動作時の値に関する特段の指定を必要としないモノもあるでしょうし、ユーザエージェント自身が表示能力を持っているために表示環境の指定を必要としないモノもあるでしょう(例えばGIF画像など)。

表示環境や表示データの所在についてはOBJECT要素によって記しますが、表示環境の動作に必要な値を記すにはPARAM要素を利用します。これについてはオブジェクトの初期化に関する項で説明します。

OBJECT要素はHEAD要素内にも記せます。HEAD要素の内容は基本的にユーザエージェントの画面に表示されませんから、内容の表示が必要になるようなOBJECT要素をHEAD要素内に記してはなりません。HEAD要素内にOBJECT要素を記す場合の注意点については、フレーム文書のデータ共有に関する項もご覧下さい。

またフォーム内でOBJECT要素を使う場合の注意点については、第17章、フォームのコントロールについて記した節もご覧下さい。

13.3.1 オブジェクト表示の原則Rules for rendering objects

ユーザエージェントは、次の優先順位に従ってOBJECT要素を取り扱う必要があります。

  1. 最初は必ずオブジェクトの表現を試みること。最初はOBJECT要素の内容を表示してはいけない。しかし内容確認は必ず行うこと。当該OBJECT要素の子要素としてPARAM要素(初期化の項目を参照のこと)やMAP要素(本章6節のクライアント側イメージマップの項目を参照のこと)がある場合に備えるためである。
  2. 何らかの理由でオブジェクトを表示できない場合(ユーザによって非表示の設定が施されていたり、指定されたリソースがサーバに存在しなかったり、書き手の設計が間違っていたり、等の場合)、OBJECT要素の内容を表示する。

HEAD要素内にOBJECT要素を記す場合は、内容を 含めないようにすべきです

次の例では、OBJECT要素によってアナログ時計アプレットがHTML文書中に埋め込まれています。このアプレットは、Python言語によって書かれており、動作時の値を別途必要としません。classid属性が、このアプレットの所在を示しています。

    
<P><OBJECT classid="http://www.miamachina.it/analogclock.py">
</OBJECT>

ユーザエージェントが当該OBJECTの宣言を読み込んで解釈を終えた時点で即座にアプレットが表示され始めるということにご注意下さい。最初の「OBJECT」宣言の記し方によって、表示開始時点を遅らせることも可能です。(その方法はまた後で。)

OBJECT要素には、次のように、内容として代替テキストを記して下さい。ユーザエージェントが時計アプレットを表示できない場合に備えるためです。

    
<P><OBJECT classid="http://www.miamachina.it/analogclock.py">
アニメーション時計
</OBJECT>

HTML 4.0のOBJECT要素には、 重要な機能として、代替オブジェクト表示機能が施されています。入れ子にした各OBJECT宣言で、異なるMIMEタイプのモノを扱うことも可能です。最も外側のOBJECT要素が示すオブジェクトを表示できなかったユーザエージェントは、その内容を表示しようとしますが、それが [代替テキストではなく] 別のOBJECT要素であっても構わないというわけです。

次の例文では、この代替表示機構を説明するため、複数のOBJECT宣言を入れ子にしてあります。このOBJECT要素を扱うユーザエージェントは、次の順序で自分が表示できるものかどうかを判定していきます。 (1) Pyton言語で書かれている地球アプレット、(2) 地球のMPEG動画、(3) 地球のGIF画像、(4) 代替テキスト。

<P>                 <!-- できればPython appletを動かして欲しい -->
<OBJECT title="宇宙から見た地球の姿" 
        classid="http://www.observer.mars/TheEarth.py">
                    <!-- だめならMPEG videoを見て欲しい -->
  <OBJECT data="TheEarth.mpeg" type="application/mpeg">
                    <!-- それもだめならGIF画像を -->
    <OBJECT data="TheEarth.gif" type="image/gif">
                    <!-- 全くダメなら次の文章を読んでください -->
     宇宙から見た<STRONG>地球</STRONG>の姿。
    </OBJECT>
  </OBJECT>
</OBJECT>

最も外側の「OBJECT」宣言は、表示データや初期値の設定が不要なアプレットを表しています。2番目の「OBJECT」宣言はMPEG動画を表していて、MPEG動画再生環境の所在が設定されていないため、ユーザエージェントが単独で再生できるかどうかによって表示される/されないが決まります。2番目の「OBJECT」宣言にはtype属性の設定があるため、ユーザエージェントは当該オブジェクトがMPEG動画データであることが理解でき、「TheEarth.mpeg」ファイルをダウンロードすべきかそうでないかを判断可能です。3番目の「OBJECT」宣言はGIF画像の所在を示しており、また以上の何れも表示されなかった場合に利用される代替テキストを内容として含んでいます。

行内データと外部データの比較について。 表示させたいデータは、行内データ、あるいは外部データの2通りのやり方で供給できます。行内データの方が概して表示は素早いですが、大量のデータを扱うには不便です。

次の例文は、行内データがOBJECT要素に与えられている状態を示したものです。

<P>
<OBJECT id="clock1"
        classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
        data="data:application/x-oleobject;base64, ...base64形式のデータ...">
    時計
</OBJECT>

オブジェクトの大きさ、配置、枠線の有無などについては、本章7節「画像、オブジェクト、アプレットの視覚的表現」をご覧下さい。

13.3.2 オブジェクトの初期化Object initialization): PARAM要素

<!ELEMENT PARAM - O EMPTY              -- named property value -->
<!ATTLIST PARAM
  ID             #IMPLIED  -- document-wide unique id --
  CDATA          #REQUIRED -- property name --
  CDATA          #IMPLIED  -- property value --
  valuetype   (DATA|REF|OBJECT) DATA   -- How to interpret value --
  %ContentType;  #IMPLIED  -- content type for value
                                          when valuetype=ref --
  >

開始タグ: 必要、終了タグ: なし

属性の定義

name = cdata
動作用パラメータの名前を設定します。これを扱うオブジェクトにパラメータを認識させるために使います。大文字小文字が区別されるかどうかは、対象となるオブジェクト表示環境によりけりです。
value = cdata
name属性で名づけられた動作用パラメータの値を設定します。この値はHTML的には意味を持たず、表示環境であるオブジェクトの要求においてのみ意味があります。
valuetype = data|ref|object [CI]
value属性が定める値のデータ型を設定します。可能な値は次の3種です。
  • data: 既定値です。表示環境に対し、そのままデータ文字列としてvalue属性値が送信されます。
  • ref: value属性値が、表示用データの所在を示すURIだということを表します。これによって、URIを解釈可能なツールに対し、URIをパラメータとして与えることができます。URIは変更抜きでそのまま、つまり相対URIとか絶対URIとかの確認抜きで、オブジェクトに渡されます。
  • object: value 属性値が、当該文書中の別のOBJECT宣言を参照する目印であることを表します。参照用の目印には、相手方OBJECT要素のid属性値を使う必要があります。
type = content-type [CI]
valuetype属性値が「ref」に設定されたvalue 属性に限り、「type」属性によって「value」属性値が指し示す外部リソースのMIMEタイプを指定します。この「type」属性を参照することで、ユーザエージェントは、指定のURIが指し示す値の種別を判断できます。

他に使用可能な属性

PARAM要素は、当該オブジェクトの動作時に与える必要があるようなパラメータ値を設定するものです。OBJECT要素あるいはAPPLET要素の内容として、幾つでも、またどんな順序でもPARAM要素を記せます。順序や個数は問われませんが、OBJECT要素あるいはAPPLET要素の開始タグの直後に記す必要があります。

「names」属性と「values」属性で設定した値は、オブジェクトの表示環境によって解釈されると想定されます。この仕様書では、各ユーザエージェントが実際にどのように「name名/value値」の組を判定するか、あるいはパラメータ名が2回現れた際にどのように解釈すべきかといったことについては定めません。

さて、PARAM要素の使い方を説明するために、再度時計の例文を使います。ここでは、時計アプレットは動作時のパラメータとして初期表示サイズの高さと幅の2つの値を扱えるものとします。この場合2つのPARAM要素によって例えば高さ40ピクセル、幅40ピクセルというパラメータ値を設定できます。

    
<P><OBJECT classid="http://www.miamachina.it/analogclock.py">
<PARAM name="height" value="40" valuetype="data">
<PARAM name="width" value="40" valuetype="data">
あなたのユーザエージェントは Python アプリケーション に対応していません。
</OBJECT>

次の例では、オブジェクトに与える動作時データとして「Init_values」と名づけられたパラメータが外部リソース(GIFファイル)となっています。そこでvaluetype属性の値は「ref」に設定され、「value」属性値でそのURIが記されています。

<P><OBJECT classid="http://www.gifstuff.com/gifappli"
       standby="エルヴィスを読み込み中です...">
<PARAM name="Init_values"
       value="elvis.gif">
       valuetype="ref">
</OBJECT>

同時にstandby属性を設定し、オブジェクト表示環境をダウンロードしている間に代替表示させるメッセージを記してあることにも注目して下さい。

OBJECT要素を表示する場合、ユーザエージェントは、必ず当該要素の直接の子要素であるPARAM要素の有無を確認し、その値をOBJECT要素に送る必要があります。

そこで、次の例文では、オブジェクト「obj1」を表示する場合、「param1」の値が「obj1」に送られます(そして「obj2」には送られません)。もし「obj1」の表示が不可能で「obj2」の表示を開始する場合には、「param1」は無視され「param2」が「obj2」に送られます。どちらのOBJECT要素も表示できない場合は、PARAM要素のパラメータ値も使われません。

<P>
<OBJECT id="obj1">
   <PARAM name="param1">
   <OBJECT id="obj2">
      <PARAM name="param2">
   </OBJECT>
</OBJECT>

13.3.3 オブジェクト名の記し方Global naming schemes for objects

オブジェクトの表示環境の所在は、URIによって記されます。第2章1節の、URIを概説した項で説明したように、絶対URIの最初の部分は、そのURIが示すデータへのアクセス手段を意味します。HTML文書の場合、これは大概「http」です。けれどもアプレットの中には別のスキームでのアクセスを要求するものがあります。例えば、Javaアプレットの場合、URIの冒頭は「java」、ActiveXアプレットの場合は「clsid」と記す必要があります。

この例では、HTML文書にJavaアプレットを組み込んでいます。

<P><OBJECT classid="java:program.start">
</OBJECT>

codetype属性を設定しておくと、読み手のユーザエージェントは、Javaで書かれたプログラムを自分が実行できるかどうかによって、当該Javaアプリケーションをダウンロードするかどうかを判断できます。

<OBJECT codetype="application/java-archive"
        classid="java:program.start">
</OBJECT>

オブジェクトによっては、どの表示環境で表示を行うべきかの指定と、その表示環境をどこで得られるかの追加指定を必要とするものもあります。この場合はcodebase属性によって所在に関する追加情報を設定できます。

<OBJECT codetype="application/java-archive"
        classid="java:program.start">
        codebase="http://foooo.bar.com/java/myimplementation/"
</OBJECT>

次の例は、スキーム名「clsid」から始まるActiveXオブジェクトのURIを、(「OBJECT」要素のclassid属性によって)記したものです。data属性が、表示用データ(時計)の所在を示しています。

<P><OBJECT classid="clsid:663C8FEF-1EF9-11CF-A3DB-080036F12502"
        data="http://www.acme.com/ole/clock.stm">
このアプリケーションはサポートされていません。
</OBJECT>

13.3.4 オブジェクトの宣言と実体化Object declarations and instantiations

ここまでの例では、単独で働くオブジェクトを定義する方法についてのみ記しました。もし同一文書内に1つのオブジェクトが複数の実体として含まれるような文書を作りたい場合、オブジェクトの宣言と、その実体化とを分離できます。宣言と実体化との分離には、次のような利点があります。

あるオブジェクトの宣言で、ユーザエージェントの読み込み時点で即実体化が開始されることを避けるためには、論理型属性declareを当該OBJECT要素に設定しておきます。この場合、同時に

このようなOBJECT要素の宣言は、HTML文書中で、当該OBJECT要素を最初に実体化する部分よりも前に記す必要があります。

declare属性が設定されたオブジェクトは、(例えばそのオブジェクトへのリンクがアクティブになった時や、そのオブジェクトを参照するオブジェクトがアクティブになった時など)表示を要求される毎に実体化します。

次の例は、リンク目標になっているOBJECT要素を宣言したものです。このオブジェクトは、例えばリンク元になっている文がクリックされることで、実体化します。

<P><OBJECT declare
        id="earth.declaration" 
        data="TheEarth.mpeg" 
        type="application/mpeg">
   宇宙から見た<STRONG>地球</STRONG>の姿。
</OBJECT>
...中略...
<P>いかす<A href="#earth.declaration">地球のアニメーション !</A>

次の例文では、動作時の値として他のオブジェクトを使用する方法を示します。この例では、詩文を見るための臨時的表示環境に表示させたいテキスト(このケースでは詩文)を入力します。詩文表示環境は、動作時のパラメータとして「font」パラメータを参照します(詩文の表示に、とあるフォントを使用するわけです)。この動作時のパラメータ値(フォント)はそれ自体が独立したオブジェクトで、フォントオブジェクトを挿入する(けれども表示はしない)代物です。フォントオブジェクトと詩文表示環境の連携は、(1) フォントオブジェクトが宣言された際にid名「tribune」を与えられており、(2) 詩文表示オブジェクトのPARAM要素(のvaluetype属性とvalue属性)がそれを参照する 、という形で行われます。

<P><OBJECT declare
     id="tribune"
     type="application/x-webfont"
     data="tribune.gif">
</OBJECT>
...ここで [S. T. Coleridge の] KublaKhan.txt からの詩文を表示...
<P><OBJECT classid="http://foo.bar.com/poem_viewer" 
           data="KublaKhan.txt">
<PARAM name="font" valuetype="object" value="#tribune">
<P>このかっこいい詩文表現が見られないんですね ...
</OBJECT>

declare属性をサポートしていないユーザエージェントは、OBJECT宣言の内容を表示する必要があります。

Including an applet): APPLET要素

APPLET要素は(その全ての属性と共に)非推奨です。代わりにOBJECT要素で記して下さい。

正式な定義についてはTransitional DTDをご覧下さい。

属性の定義

codebase = uri [CT]
アプレットの所在を示す際の基準URIを指定するものです。この属性が設定されていない場合は、既定値として当該文書の基準URIが利用されます。この属性で指定できるURIは、当該文書が存在するディレクトリのサブディレクトリまでの範囲となります。
code = cdata [CS]
この属性は、当該アプレットの、コンパイル済のサブクラスを含むクラスファイル名、あるいはクラスファイル自身を含むクラスを取得するためのパス名の、どちらかを設定するものです。この名前は、当該アプレットのcodebase属性値を基準にして解釈されます。「APPLET」要素には、この「code」名か、後述する「object」名の、どちらか1つは設定しておかねばなりません。
name = cdata [CS]
ページに表示中の当該アプレット実体に、ページ内での呼び名を設定します。同一ページで複数のアプレットに互いを認識させ(そして連携させる)ことが可能になります。
archive = uri-list [CT]
各種クラスやその他のリソースを「先読み」するために、リソースを格納しているアーカイブの所在を示すURIを、コンマ区切りで列記します。各種クラスは、AppletClassLoader実体を用いて、codebase属性の基準URIを元に読み込まれます。リソースの先読みによって、アプレットの動作効率を非常に向上させることができます。
object = cdata [CS]
これは、直列化状態のアプレットを含むリソースの名前を設定するものです。リソース名は、codebase属性の基準URIを元に解釈されます。直列化されたデータにはアプレットのクラス名は含まれますが、表示環境は含まれません。クラス名は、クラスファイルあるいはアーカイブから表示環境を取得するために使われます。

アプレットが「復元」される時、「start()」メソッドは呼び出されますが、「init()」メソッドは呼び出されません。[現時点で当該要素に設定されている] 各属性は、元のオブジェクトが直列化される際に何の属性値も保持していない場合に限り、検証されます。当該APPLET実体に [直列化以前に] 設定されていた属性は、[復元後も] アプレットが利用できます。書き手は、この機能の利用に関して慎重過ぎるほどの注意が必要です。直列化を行う際にはアプレットの実行を終了させておいてください。

「APPLET」要素には、前述の「code名か、この「object」名のどちらか一方が必要です。もし両方が記されている場合は、両者が違うクラス名を扱おうとしてしまう場合に限り、エラーとなります。

width = length [CI]
アプレットを初期表示する領域の横幅を記します。(アプレットの動作によって生成されるウインドウやダイアログの表示に関する指定は含まれません。)
height = length [CI]
アプレットを初期表示する領域の高さを記します。(アプレットの動作によって生成されるウインドウやダイアログの表示に関する指定は含まれません。)

他に使用可能な属性

Java対応ユーザエージェント全てがサポートしているこの要素は、HTML文書中にJavaアプレットの埋め込みを可能にします。けれどもOBJECT要素の採用により、「APPLET」要素は非推奨となりました。

APPLET要素の内容は、APPLET要素に対応していないユーザエージェント、あるいはアプレットを動作させないように設定されたユーザエージェントで、代替的な情報として利用されます。それ以外の場合、ユーザエージェントは内容を無視する必要があります。

非推奨例(DEPRECATED EXAMPLE):
この例では、APPLET要素によってJavaアプレットがHTML文書中に埋め込まれます。codebase属性の設定がありませんから、当該文書が存在するディレクトリと同じディレクトリにアプレットが存在すると考えられます。

<APPLET code="Bubbles.class" width="500" height="500">
泡が動き回るJava appletアニメーション。
</APPLET>

上の例文はOBJECT要素で次のように書き換えることができます。

<P><OBJECT codetype="application/java"
        classid="java:Bubbles.class"
        width="500" height="500">
泡が動き回るJava appletアニメーション。
</OBJECT>

必要な初期値についてはPARAM要素によって与えます。

非推奨例(DEPRECATED EXAMPLE):
Javaアプレットを「APPLET」要素として記すこの方法は

<APPLET code="AudioItem" width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
歓迎の音楽を奏でるJava applet。
</APPLET>

OBJECT要素によって次のように書き換えることができます。

<OBJECT codetype="application/java"
        classid="AudioItem" 
        width="15" height="15">
<PARAM name="snd" value="Hello.au|Welcome.au">
歓迎の音楽を奏でるJava applet。
</OBJECT>

Notes on embedded documents

時に、他の文書にIFRAME要素やIFRAME要素の方は、リンク先目標フレーム(第16章3節「リンクの目標となるフレーム枠に名前をつける」を参照のこと)となることもでき、また「印刷」や「ソースを見る」などの対象として読み手が当該フレームを「選択」することもできます。ユーザエージェントは、選択されたフレーム要素と選択されないものとを区別して表示します(例えば、選択されたフレームには縁取りをつけて表示するとか)。

埋め込まれた文書は、それを含む元文書とは完全に独立した存在として扱われます。例えば、埋め込まれた文書の内部に記されている相対URIは、その文書に設定されている基準URIに拠って解釈されるのであって、元文書の基準URIからの影響は受けません。埋め込まれた文書は、単に他の文書が表示されている画面の一部分(例えば子ウインドウの中)に表示されるというだけで、独立した別個の存在なのです。

例えば、次の例文は元文書 embed_me.html 中のOBJECT要素が、その embed_me.html 自身を埋め込もうとしているものです。

...中略...
<OBJECT data="embed_me.html">
警告: embed_me.html を埋め込むことはできません。
</OBJECT>
...後略...

OBJECT要素の内容は、オブジェクトのdata属性の指定物が表示できない場合に限って代替的に表示されるということを思い起こしてください。

当該文書それ自身を内部に埋め込もうとするようなHTML文書をユーザエージェントがどう扱うべきかについては、[この仕様書は] 何も定義しません。

13.6 イメージマップImage maps

イメージマップ機能を利用すると、書き手は、画像やオブジェクトを幾つかの区画に分割し、各区画毎に特定動作の引き金を設定できます(例えば、次の文書へリンクしたり、プログラムを起動させたり)。読み手がある区画をアクティブにすると、その区画に設定された動作が始まります。

イメージマップは、オブジェクトをまず用意し、そのオブジェクト上に反応可能領域の設定を行うことで、作成します。

イメージマップには次の2種類のものがあります。

クライアント側イメージマップの方が、サーバ側のものより、少なくとも次の2点で優れています。まず、非グラフィック系環境での読み手にも利用できること。そして、選択地点が有効な区画かどうかについて即座に反応が生じること。

Client-side image maps): MAP要素とAREA要素

<!ELEMENT %block;)+ | AREA+) -- client-side image map -->
<!ATTLIST MAP
  %attrs;                              -- %coreattrs, %i18n, %events --
  CDATA          #REQUIRED -- for reference by usemap --
  >

開始タグ: 必要、終了タグ: 必要

<!ELEMENT AREA - O EMPTY               -- client-side image map area -->
<!ATTLIST AREA
  %attrs;                              -- %coreattrs, %i18n, %events --
  %Shape;        rect      -- controls interpretation of coords --
  %Coords;       #IMPLIED  -- comma separated list of lengths --
  %URI;          #IMPLIED  -- URI for linked resource --
  nohref      (nohref)       #IMPLIED  -- this region has no action --
  %Text;         #REQUIRED -- short description --
  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
  accesskey   %Character;    #IMPLIED  -- accessibility key character --
  onfocus     %Script;       #IMPLIED  -- the element got the focus --
  onblur      %Script;       #IMPLIED  -- the element lost the focus --
  >

開始タグ: 必要、終了タグ: なし

MAP要素の属性

name = cdata [CI]
MAP要素によるイメージマップに名前をつけます。

AREA要素の属性

shape = default|rect|circle|poly [CI]
有効区画の形状を定めます。可能な値は次の4種です。
  • default: 全体を指定します。
  • rect: 四角形に区割りします。
  • circle: 円形に区割りします。
  • poly: 多角形に区割りします。
coords = coordinates [CN]
画面上に占める区画の座標位置を定めます。値の個数や順序は、指定する区画の形状により異なります。可能な値は次の通りです。
  • rect: left-x, top-y, right-x, bottom-y.(左上の座標と右下の座標)
  • circle: center-x, center-y, radius.(中心の座標と半径の大きさ)注。 半径の値がパーセント指定だった場合、ユーザエージェントは、オブジェクト自体の幅・高さから最終的な半径の値を計算する必要があります。半径の値はオブジェクトの大きさを越えてはいけません。
  • poly: x1, y1, x2, y2, ..., xN, yN.(頂点の座標)

座標位置は、オブジェクトの左上端から数えます。全ての値は大きさ<length>で指定します。各々の値はコンマ区切りで列記します。

nohref [CI]
この論理型属性が設定されていた場合は、当該区画からのリンクは無しということになります。

ある要素をイメージマップに関連づける属性

usemap = uri [CT]
この属性を設定した要素は、イメージマップに関連づけられます。連携相手となるイメージマップはMAP要素が定義します。usemap属性の値は、連携するMAP要素のname属性の値と一致している必要があります。

他に使用可能な属性

MAP要素は、他の1つ以上の要素と連携してクライアント側イメージマップを構成するものです(連係相手になれるのは、IMG要素、INPUT要素)。イメージマップは、相手要素のusemap属性によって、連携相手と結びつけられます。

OBJECT要素にusemap属性が設定されている場合、その「OBJECT」要素には画像が含まれていると推察されます。さらにまたOBJECT要素がクライアント側イメージマップと連携させられていた場合には、ユーザエージェントは、そのOBJECT要素のみを手がかりに、読み手の入力に対するイメージマップとしての反応を行うこととなります。これはすなわち、(例えば音声出力環境やサーチロボットなどでは)OBJECT要素を処理することなく(すなわちデータ形式の検定やオブジェクト本体のダウンロードを行わずに)イメージマップ機能を実現できるというこということを意味します。OBJECT要素を利用したイメージマップ機能を含むHTML文書を作る場合には、オブジェクト本体が全てのユーザエージェントで扱われるとは限らないということを覚えておいて下さい。

どのMAP要素にも、以下の要素を内容として記せます。

  1. 1つ以上のAREA要素。要素の内容はなく、イメージマップの区割り設定と、各区画に施すリンク設定を行います。「AREA」要素によるイメージマップを利用する場合には、MAP要素全体には表示できる内容が存在しなくなるということに注意してください。従って、AREA要素を用いる場合にはalt属性によって代替テキストを記す必要があります。(代替テキストの記し方については本章8節で述べます。)
  2. ブロックレベル要素。この場合、当該要素は更にイメージマップの区割りとリンク付けを設定するA要素を含んでいる必要があります。こちらの場合にはMAP要素の内容が表示できるということに注目してください。よりアクセスしやすい文書を作るためには、ブロックレベル要素を内容とした「MAP」要素の方を使うようにして下さい。

もし2つ以上の区画が重なり合っていた場合、先にその部分を含む区画を設定している要素の方が優先権を持ちます。(例えば読み手の入力に反応する等。)

画像データが不在だったり利用できなかったりする場合のために、ユーザエージェントも、当該文書の書き手も、文章で代用する仕掛けを用意しておく必要があります。例えば、画像によるイメージマップを代用するalt属性の代替テキストを用いたイメージマップ機能の実行など。この場合のリンクは様々な手法でアクティブにできます(キーボード入力、音声入力、など)。

注。 MAP要素は、HTML 2.0準拠のユーザエージェントへの後方互換性がありません。

Client-side image map examples

この例は、OBJECT要素を使ったイメージマップを表しています。OBJECT要素の画像が表示される限りは要素の内容を前面に出したくないので、MAP要素をOBJECT要素の内容として「隠す」形で記述してあります。言い換えると、MAP要素の内容は、OBJECT本体が表示できない場合にのみ表示されることになります。

<HTML>
   <HEAD>
      <TITLE>The cool site!</TITLE>
   </HEAD>
   <BODY>
     <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
     <MAP name="map1">
       <P>このサイトの構成:
       <A href="guide.html" shape="rect" coords="0,0,118,28">利用案内</A> |
       <A href="shortcut.html" shape="rect" coords="118,0,184,28">直行</A> |
       <A href="search.html" shape="circle" coords="184,200,60">検索</A> |
       <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,100,120">トップ10</A>
     </MAP>
     </OBJECT>
   </BODY>
</HTML>

読み手のユーザエージェントがOBJECT要素の画像を表示できる場合でもイメージマップの内容を表示したいという場合もあります。例えば、OBJECT要素 イメージマップを連動させつつ、当該ページの下端にテキスト表示によるナビゲーションバーを配置したい、といった場合。この場合には、次のようにMAP要素をOBJECT要素の外側に記します。

<HTML>
   <HEAD>
      <TITLE>クールなサイト!</TITLE>
   </HEAD>
   <BODY>
     <P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
     </OBJECT>

     ...その他このページに書かれる内容...

     <MAP name="map1">
       <P>このサイトの構成:
       <A href="guide.html" shape="rect" coords="0,0,118,28">利用案内</A> |
       <A href="shortcut.html" shape="rect" coords="118,0,184,28">直行</A> |
       <A href="search.html" shape="circle" coords="184,200,60">検索</A> |
       <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,100,120">トップ10</A>
     </MAP>
   </BODY>
</HTML>

上と同等のイメージマップを、今度はAREA要素によって表します。alt属性による代替テキストの記し方に注目して下さい。

<P><OBJECT data="navbar1.gif" type="image/gif" usemap="#map1">
   <P>ナビゲーションバー
   </OBJECT>

<MAP name="map1">
 <AREA href="guide.html" 
          alt="利用案内" 
          shape="rect" 
          coords="0,0,118,28">
 <AREA href="search.html" 
          alt="検索" 
          shape="rect" 
          coords="184,0,276,28">
 <AREA href="shortcut.html" 
          alt="直行" 
          shape="circle"
          coords="184,200,60">
 <AREA href="top10.html" 
          alt="トップ10" 
          shape="poly" 
          coords="276,0,373,28,50,50,100,120">
</MAP>

今度は、OBJECT要素の代わりにIMG要素を使って記したイメージマップ(同じMAP要素を利用するもの)です。

<P><IMG src="navbar1.gif" usemap="#map1" alt="ナビゲーションバー">

続けて、イメージマップ設定を複数のオブジェクトで共有する方法について説明します。

さて、入れ子にしたOBJECT要素は、表示させたいオブジェクトのデータ形式をサポートしていないユーザエージェントで読まれることを仮定した、段階的な代替手段を提供したいような場合に便利です。例えば次のように。

<P>
<OBJECT data="navbar.png" type="image/png">
  <OBJECT data="navbar.gif" type="image/gif">
    この画像を代用する文章...
  </OBJECT>
</OBJECT>

これを読み込んだユーザエージェントがPNG形式に対応していない場合、GIF画像の表示を試みることとなります。更に、GIF形式もサポートしていない(例えば音声出力などの)ユーザエージェントの場合は、内側のOBJECT要素の内容として記された文章を表示することになります。このように入れ子にしたOBJECT要素を含むHTML文書を作る場合、次のようにしてイメージマップ設定を共有することができます。

<P>
<OBJECT data="navbar.png" type="image/png" usemap="#map1">
  <OBJECT data="navbar.gif" type="image/gif" usemap="#map1">
     <MAP name="map1">
     <P>このサイトの構成:
      <A href="guide.html" shape="rect" coords="0,0,118,28">利用案内</a> |
      <A href="shortcut.html" shape="rect" coords="118,0,184,28">直行</A> |
      <A href="search.html" shape="circle" coords="184,200,60">検索</A> |
      <A href="top10.html" shape="poly" coords="276,0,373,28,50,50,100,120">トップ10</A>
     </MAP>
  </OBJECT>
</OBJECT>

次の例は、「A」要素を用いてイメージマップ中の反応不能区域を設定する方法を説明したものです。最初のアンカーは、反応不能の小さい円形区画を設定しています。2番目のアンカーは、反応可能となっている、最初の円と中心が等しく、より大きい円形区画を設定しています。この両者によって、中心部が反応不能で周辺部が反応可能となっているドーナツ状のリンク区域が作られています。大きい円を小さい円が上書きしなければ意味がないので、このアンカーの配置順が要点となります。

<MAP name="map1">
<P>
<A shape="circle" coords="100,200,50">使えません</A>
<A href="outer-ring-link.html" shape="circle" coords="100,200,250">使えます</A>
</MAP>

同様に、AREA要素のnohref属性は、当該区画には関連づけられるリンクが存在しないということを記すものです。

13.6.2 サーバ側イメージマップServer-side image maps

サーバ側イメージマップは、クライアント側イメージマップとして扱うには複雑すぎるようなものを扱う際に魅力的な表現手段と考えられるでしょう。

サーバ側イメージマップは、IMG要素かINPUT要素でのみ扱えます。IMG要素の場合は、IMG要素をA要素の内容として記し、論理型属性であるismap ([CI])を設定しておく必要があります。INPUT要素の場合は、「image」形式で記す必要があります。

画像がクリックされてイメージマップ中のリンク部分がアクティブになると、表示中のスクリーンの座標値がサーバに直接送信されます。この座標値はピクセル値で当該画像上の [クリックされた] 位置を表しています。ピクセルという語の定義とその数え方については、[CSS1]をご覧下さい。

次の例では、反応可能領域が、サーバ側のリンクとして設定されています。そこで、画像のどの部分がクリックされたかは、全てその座標値がサーバに送信されます。

<P><A href="http://www.acme.com/cgi-bin/competition">
        <IMG src="game.gif" ismap alt="リンク目標"></A>

クリック位置の情報は、次のようにしてサーバに渡されます。まずユーザエージェントは、A要素のhref属性に記されているURIを元に、「?」「x座標値」「,」「y座標値」の順に付加情報を記した新しいURIを書き出します。それから、この新しいURIに基づいてリンクを辿ろうとします。つまり、上の例で言うと、読み手が「x=10,y=27」の点をクリックしたとすれば、生成されるURIは「http://www.acme.com/cgi-bin/competition?10,27」というものになるというわけです。

読み手が座標値の選択手段を持てないようなユーザエージェント(例えばキーボード入力しか受けつけられない非GUI系のユーザエージェントや、音声出力環境など)は、リンクがアクティブにされた場合には座標値「0,0」という情報を送信して下さい。

13.7 画像、オブジェクト、アプレットの視覚的表現Visual presentation of images, objects, and applets

IMG要素とOBJECT要素の、配置など視覚的表現に関する全ての属性は非推奨であり、スタイルシートによって代用できます。

13.7.1 幅と高さWidth and height

属性の定義

width = length [CN]
この数値は画像やオブジェクトの実際の大きさを上書きします。
height = length [CN]
この数値は画像やオブジェクトの実際の大きさを上書きします。

width属性やheight属性は、もし設定されていた場合、ユーザエージェントに対し画像やオブジェクトの実際の大きさではなく、この属性の値に従った大きさにして表示するよう指示します。

オブジェクトが画像だった場合、拡大縮小されます。ユーザエージェントは、指定された値に合致するよう画像を拡大縮小させねばなりません。もし値の指定がパーセンテージだった場合、これは現在の表示画面に対する割合であって、画像、オブジェクト、アプレット等のそれ自体の大きさに対する拡大縮小率ではないということに注意して下さい。

height属性とwidth属性が設定されていると、ユーザエージェントに対し、表示すべきオブジェクトの大きさを [オブジェクトのデータが受け取られる前に] 予め知らせることができるので、画像データの到着を待つことなく文書全体の表示を継続させられます。

13.7.2 画像やオブジェクトの周囲の余白White space around images and objects

vspace属性とhspace属性は、IMG要素、APPLET要素、OBJECT要素などの周囲に取りたい、左右の余白(hspace)と上下の余白(vspace)を設定するものです。既定値は定義しませんが、概して、とても小さいけれどもゼロではない大きさです。どちらの属性も値の形式は大きさです。

13.7.3 枠線Borders

画像あるいはオブジェクトが枠線で囲まれる場合もあります。(例えば、枠線を表示するよう設定されていたり、画像がA要素の内容であった場合など。)

属性の定義

border = pixels
非推奨。 枠線の太さをピクセル数で記します。既定値は各ユーザエージェントによりけりです。

13.7.4 配置Alignment

align属性を使うと、IMG要素、 OBJECT要素、APPLET要素と周囲の文章との間に施したい配置関係を設定できます。

以下のalign属性値によって、オブジェクトと文章との配置関係を記します。

そして属性値leftrightは、画像を周囲の文章から切り離し、左または右にフロートさせます。これは第15章1節3項「フロート状態のオブジェクト」で説明します。

「align」の解釈が違うことについて。 各ユーザエージェントがalign属性をどう解釈・表現しているかを見ると、様々な違いがあります。当該オブジェクトの直前の文章との関係しか考慮しないユーザエージェントもあれば、当該オブジェクトの直前直後のどちらの文章との関係をも考慮するユーザエージェントもあります。

13.8 代替テキストの記し方How to specify alternate text

属性の定義

alt = text [CS]
この属性は、画像、フォーム、アプレットを表示できないユーザエージェントを利用する読み手のための、代替テキストを記すものです。代替テキストを記す言語についてはlang属性によって設定します。

文字表示を行うのではない要素(IMGAREAINPUT)を文書中で用いる場合は、それらが表示されない場合に代用とされる「代替テキスト」を用意する必要があります。代替テキストを用意しておくと、グラフィック系表示装置のない端末型ユーザエージェントの利用者、フォーム非対応ユーザエージェントの利用者、視覚障害を持つ人、音声出力環境の利用者、画像の自動表示設定を解除している人、等に対する文書内容の伝達が可能になります。

INPUT要素と APPLET要素においては省略可能です。

代替テキストは便利であるとはいえ、その扱いには注意が必要です。「alt」属性が必要なHTML文書を作る場合には次のガイドラインに従って下さい。

ユーザエージェントを作る場合には、附記B.9に記した、代替テキストが設定されていない場合にどうやって代替テキストを補完する文章を生成するかに関する注意を読んでおいて下さい。

注。 アクセシビリティが高いHTML文書を作成するための情報については、[WAIGUIDE]をご覧下さい。