12 リンク

12.1 リンク及びアンカへの導入

HTMLは,豊富なテキスト及び構造化された文書について,従来の出版上の慣用句を多く提供するが,他のほとんどのマーク付け言語とHTMLとを区別しているのは,ハイパテキスト及び対話的文書のための機能である。12.では基本的なハイパテキスト構成要素であるリンク,すなわち,ハイパリンク又はウェブリンクを導入する。リンクはあるウェブ資源から別のウェブ資源への接続とする。単純な概念だが,リンクはウェブの成功を推進する基本的な原動力の一つとなっている。

リンクには,アンカと呼ぶ二つの端点及び方向がある。リンクは,"リンク元"アンカで開始し,"リンク先"アンカを指し示す。リンク先アンカは,画像,ビデオクリップ,サウンドクリップ,プログラム,HTML文書,HTML文書内の要素などのあらゆるウェブ資源であってよい。

12.1.1 リンク付けられた資源へのたどり

リンクに関連するデフォルトの振る舞いは別のウェブ資源の検索とする。この振る舞いは,共通的及び暗黙的に,クリック,キーボード入力などでリンクを選択することによって得られる。

次の例は,二つのリンクを含む。一つは,そのリンク先アンカが"chapter2.html"と命名されたHTML文書であって,もう一つは,そのリンク先アンカがファイル"forest.gif"のGIF画像となっている。

<BODY>
...some text...
<P>You'll find a lot more in  <A href="chapter2.html">chapter two</A>. 
See also this <A href="../images/forest.gif">map of the enchanted forest.</A>
</BODY>

マウスでのクリック,キーボード入力,音声コマンドなどを使用して,これらのリンクを活性化することによって,利用者は,これらの資源をたどる。各リンク元アンカのhref属性がリンク先アンカのアドレスをURIで指定する点に注意すること。

リンクのリンク先アンカは,HTML文書内の要素であってもよい。リンク先アンカはアンカ名を与えられなければならないが,このアンカのアドレスを与えるURIは,URIの素片識別子としてそのアンカ名を含まなければならない。

HTML文書のリンク先アンカは,(そのリンク先アンカにname属性で名前を与えている)A要素又は(id属性で名前を与えている)その他のあらゆる要素のいずれかによって指定されてよい。

そのため,例えば, 文書作成者は,同じ文書のヘッダ要素H2H3などにリンクするエントリをもつ目次を生成するかもしれない。A要素を使用してリンク先アンカを生成する例を次に示す。

<H1>Table of Contents</H1>
<P><A href="#section1">Introduction</A><BR>
<A href="#section2">Some background</A><BR>
<A href="#section2.1">On a more personal note</A><BR>
...the rest of the table of contents...
...the document body...
<H2><A name="section1">Introduction</A></H2>
...section 1...
<H2><A name="section2">Some background</A></H2>
...section 2...
<H3><A name="section2.1">On a more personal note</A></H3>
...section 2.1...

ヘッダ要素それ自体をアンカとすることによって,同じ効果を得てもよい。

<H1>Table of Contents</H1>
<P><A href="#section1">Introduction</A><BR>
<A href="#section2">Some background</A><BR>
<A href="#section2.1">On a more personal note</A><BR>
...the rest of the table of contents...
...the document body...
<H2 id="section1">Introduction</H2>
...section 1...
<H2 id="section2">Some background</H2>
...section 2...
<H3 id="section2.1">On a more personal note</H3>
...section 2.1...

12.1.2 他のリンク関係

リンクの最も共通的な 使用 は,12.1.1の例で示したとおり,別のウェブ資源を検索することにある。しかし,文書作成者は,単に"このリンクを活性化して関係する資源をたどる"のではなく,資源間の他の関係を表現する文書にリンクを挿入してもよい。関係の他の型を表現するリンクには,リンク元アンカで指定されるリンク型が一つ以上存在する。

A又はLINKで定義されるリンクの 役割 は,rel属性及びrev属性によって指定される。

例えば,LINK要素によって定義されたリンクが,一連の文書内の文書の位置を記述してもよい。次の例では,"Chapter 5"と題名がつけられた文書内のリンクが,前の章及び次の章を示している。

<HEAD>
...other head information...
<TITLE>Chapter 5</TITLE>
<LINK rel="prev" href="chapter4.html">
<LINK rel="next" href="chapter6.html">
</HEAD>

最初のリンクのリンク型は"prev"であって,2番目のリンクのリンク型は"next"である。これらは,複数ある認識済みのリンク型のうちの二つとなっている。LINKで指定されたリンクは,利用者エージェントがナビゲーションツールなど他の方法でレンダリングしてもよいが,文書の内容をともなってレンダリングされない

ナビゲーションのために使用されなくとも,これらのリンクは興味深い方法で解釈できる。例えば,一連のHTML文書を単一の文書として印刷する利用者エージェントは,このリンク情報を一貫性のある線形文書を形成する基礎として使用してもよい。更なる情報については,以降の検索エンジンの利点のためのリンクの使用を参照すること。

12.1.3 アンカ及びリンクの指定

IMG要素,FORM要素など,複数のHTML要素及び属性が他資源へのリンクを生成するが,12.1.3では,LINK要素及びA要素によって生成されるリンク及びアンカを規定する。LINK要素は文書のヘッド部にだけ現われてよい。A要素はボディ部にだけ現われてよい。

A要素のhref属性が設定される場合,要素は,ウェブ資源検索のために利用者が活性化するかもしれないリンクのためにリンク元アンカを定義する。リンク元アンカは,Aインスタンスの位置であって,リンク先アンカはウェブ資源とする。

利用者エージェントは検索資源を幾つかの方法で処理してよい。例えば,同じ利用者エージェントのウィンドウの中で新しいHTML文書を開く,異なるウィンドウの中で新しいHTML文書を開く,資源を処理する新しいプログラムを開始するなどがある。A要素は,テキスト,画像などの内容をもつので,利用者エージェントは,内容に下線を引くなど,リンクの存在を示す方法でこの内容をレンダリングしてよい。

A要素のname属性又はid属性が設定される場合,要素は,他リンクのリンク先となるかもしれないアンカを定義する。

文書作成者は,name属性及びhref属性を同じAインスタンスで同時に設定してもよい。

LINK要素は,現文書と他の資源との間の関係を定義する。LINKは内容をもたないが,それが定義する関係は,幾つかの利用者エージェントによってレンダリングされてもよい。

12.1.4 リンクの題名

title属性は,A及びLINKの両方に対して設定してよく,リンクの性質に関する情報を付加する。この情報は,利用者エージェントによって音声化されたり,ツールの参考情報としてレンダリングされたり,カーソル画像の変更を引き起こしたりしてよい。

そこで,各リンクに題名を与えることによって,12.1.1の最初の例を次のとおりに強化できる。

<BODY>
...some text...
<P>You'll find a lot more in <A href="chapter2.html"
       title="Go to chapter two">chapter two</A>.
<A href="./chapter2.html"
       title="Get chapter two.">chapter two</A>. 
See also this <A href="../images/forest.gif"
       title="GIF image of enchanted forest">map of
the enchanted forest.</A>
</BODY>

12.1.5 国際化及びリンク

リンクは様々な文字符号化で符号化された文書を指し示すので,A要素及びLINK要素は,charset属性をサポートする。この属性によって,文書作成者は,リンクの他の端点にある利用者エージェントにデータの符号化について助言することができる。

hreflang属性は,利用者エージェントの端点における資源の言語に関する情報を提供する。これは,lang属性が要素の内容又は属性値の言語に関する情報を提供するのと同じとする。

この付加的な知識を備えることによって,利用者エージェントは,利用者に対して"ごみ(garbage)"を表示するのを回避できることが望ましい。代わりに,利用者エージェントは,文書の正確な表示に必要な資源を位置決めしてよいが,資源を位置決めできない場合は,少なくとも利用者に文書が読めないことを警告し,その原因を説明するほうがよい。

12.2 A 要素

<!ELEMENT A - - (%inline;)* -(A)       -- anchor -->
<!ATTLIST A
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  name        CDATA          #IMPLIED  -- named link end --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  accesskey   %Character;    #IMPLIED  -- accessibility key character --
  shape       %Shape;        rect      -- for use with client-side image maps --
  coords      %Coords;       #IMPLIED  -- for use with client-side image maps --
  tabindex    NUMBER         #IMPLIED  -- position in tabbing order --
  onfocus     %Script;       #IMPLIED  -- the element got the focus --
  onblur      %Script;       #IMPLIED  -- the element lost the focus --
  >

開始タグ: 必す(須), 終了タグ: 必す(須)

属性定義

name = cdata [CS]
この属性は,別のリンクのリンク先となるかもしれない現アンカに名前を与える。この属性の値は,固有のアンカ名でなければならない。この名前の有効範囲は,現文書とする。この属性は,id属性と同じ名前空間を共有することに注意。
href = uri [CT]
この属性は,ウェブ資源の位置を指定し,現要素(リンク元アンカ)とこの属性によって定義されるリンク先アンカとの間のリンクを定義する。
hreflang = langcode [CI]
この属性は,hrefによって指定された資源の基本言語を指定し,hrefが指定される場合にだけ使用してよい。
type = content-type [CI]
存在する場合は,この属性は,例えばURIを参照解除した結果である内容の断片の内容型を指定する。内容型は,[MIMETYPES]で定義する。
rel = link-types [CI]
この属性は,現文書からhref属性によって指定されるアンカまでの関係を示す。この属性の値は,スペースで区切られたリンク型のリストとする。
rev = link-types [CI]
この属性は,href 属性によって指定されるアンカから現文書までの逆方向リンクを示すために使用する。この属性の値は,スペースで区切られたリンク型のリストとする。
charset = charset [CI]
この属性は,リンクによって指定される資源の文字符号化を指定する。詳細については,文字符号化を参照すること。

他の箇所で定義される属性

A要素は,アンカを定義する。

  1. A要素の内容は,アンカの位置を定義する。
  2. name属性は,ゼロ以上のリンクのリンク先となるかもしれないアンカに名前を与える。(idをもつアンカも参照すること。)
  3. href属性は,このアンカをただ一つのリンクのリンク元アンカとする。

文書作成者は,アンカを指定しない A 要素,すなわち,href, name又はidを指定しないA要素,も生成してよい。これらの属性に対するは,スクリプトを用いて後に設定してもよい。

次の例では, A要素はリンクを定義する。リンク元アンカはテキスト"W3C Web site"であって,リンク先アンカは"http://www.w3.org/"である。

For more information about W3C, please consult the 
<A href="http://www.w3.org/">W3C Web site</A>. 

このリンクは,World Wide Web Consortiumのホームページを指定する。利用者が利用者エージェントにおいてこのリンクを活性化する場合,利用者エージェントは,資源,この場合はHTML文書,を検索する。

利用者エージェントは,一般に,下線,逆方向ビデオなど,利用者に明らかな方法でリンクをレンダリングする。レンダリングの詳細は,利用者エージェントに依存する。レンダリングは,利用者が既にリンクをたどったかどうかによって変化してもよい。先の例におけるリンクの視覚的に可能なレンダリングは,次のようになるかもしれない。

For more information about W3C, please consult the W3C Web site.
                                                   ~~~~~~~~~~~~

リンク先ページの文字符号化が何であるかを明示的に利用者エージェントに知らせるためには,charset属性を設定する。

For more information about W3C, please consult the 
<A href="http://www.w3.org/" charset="ISO-8859-1">W3C Web site</A> 

ファイル"one.html"で"anchor-one"と命名されたアンカを指定すると仮定する。

...text before the anchor...
<A name="anchor-one">This is the location of anchor one.</A>
...text after the anchor...

これは,テキスト"This is the location of anchor one."の回りのアンカを生成する。通常,Aの内容は,Aがアンカだけを定義する場合,特別な方法ではレンダリングされない。

アンカを定義した場合,同じ文書又は他の文書からそのアンカにリンクしてもよい。アンカを指定するURIは,"#"文字とそれに続くアンカ名(素片識別子)とを含む。これらURIの例を次に示す。

そこで,"one.html"があるディレクトリと同じディレクトリの中のファイル"two.html"で定義されたリンクは,次のとおりに,(先の例のファイル"one.html"での"anchor-one"の)アンカを参照する。

...text before the link...
For more information, please consult <A href="./one.html#anchor-one"> anchor one</A>.
...text after the link...

次の例のA要素は,hrefをもつリンクを指定し,同時にnameをもつ名前を付けられたアンカを生成する。

I just returned from vacation! Here's a
<A name="anchor-two" 
   href="http://www.somecompany.com/People/Ian/vacation/family.png">
photo of my family at the lake.</A>.

この例は,異なる型のウェブ資源(PNG画像)へのリンクを含む。リンクを活性化することによって,ウェブからの画像資源の検索が生じることが望ましい。さらに,システムが表示するものとして構成されている場合は,表示される可能性もある。

備考  利用者エージェントは,空の A 要素によって生成されたアンカを発見できるほうがよいが,発見できないこともある。例えば,次のHTML素片の"empty-anchor"を発見しない利用者エージェントもあるかもしれない。

<A name="empty-anchor"></A>
<EM>...some HTML...</EM>
<A href="#empty-anchor">Link to empty anchor</A>

12.2.1 アンカ名の構文

アンカ名は,アンカの文脈で使用される場合,name属性又はid属性のいずれかの値とする。アンカ名は,次の規則を守らなければならない。

そこで,次の例は文字列の一致に関しては正しく,利用者エージェントは,一致としなければならない。

<P><A href="#xxx">...</A>
...more document...
<P><A name="xxx">...</A>

不正な例
次の例では,二つの名前の相違は,大文字・小文字の区別だけのため,一意性に関して不正とする。

<P><A name="xxx">...</A>
<P><A name="XXX">...</A>

次の例は正しいHTMLだが,利用者エージェントの振る舞いは定義されていない。これを(正しくないが)一致しているとする利用者エージェントも,一致していないとする利用者エージェントも存在してよい。

<P><A href="#xxx">...</A>
...more document...
<P><A name="XXX">...</A>

アンカ名は,ASCII文字に制限するほうがよい。URI属性値の非ASCII文字に関するより多くの情報については,附属書BのB.2.1を参照すること。

12.2.2 不正な入れ子リンク

A要素によって定義されたリンク及びアンカは,入れ子にしてはならない。すなわち,A要素は他のA要素を含んではならない。

DTDは,LINK 要素を空と定義するので,LINK要素も入れ子にはできない。

12.2.3 id属性をもつアンカ

id属性は,(A要素を含む)あらゆる要素の開始タグで,アンカを生成するために使用してよい。

次に,H2要素のアンカの位置決めをするためにid属性を使用する例を示す。アンカは,A要素を介してリンクされる。

You may read more about this in <A href="#section2">Section Two</A>.
...later in the document
<H2 id="section2">Section Two</H2>
...later in the document
<P>Please refer to <A href="#section2">Section Two</A> above
for more details.

次の例では,id属性をもつリンク先アンカに名前を与えている。

I just returned from vacation! Here's a
<A id="anchor-two">photo of my family at the lake.</A>.

id属性及びname属性は,同じ名前空間を共有する。これは,両者とも同じ文書の中で同じ名前をもつアンカを定義できないことを意味する。

不正な例
次の例は,これらの属性が同じ文書で2度同じ名前を宣言しているので,不正なHTMLである。

<A href="#a1">...</A>
...
<H1 id="a1">
...pages and pages...
<A name="a1"></A>

HTML DTDの規定のために,name属性は,文字参照を含んでもよい。そこで,値 D&#xfc;rstは,D&uuml;rstと同じに妥当なname属性値となる。一方で,id 属性は文字参照を含んではならない。

idを使用するかnameを使用するかについて。文書作成者は,アンカ名にidを使用するかnameを使用するかを決定する場合,次の点を考慮するほうがよい。

12.2.4 利用不可能な資源及び識別不可能な資源

利用不可能な資源又は識別不可能な資源の参照は, エラーとする。このエラーの処理方法は,利用者エージェントで変わってもよいが,次の振る舞いが望ましい。

12.3文書の関係付け(LINK要素)

<!ELEMENT LINK - O EMPTY               -- a media-independent link -->
<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
  >

開始タグ: 必す(須), 終了タグ: 禁止

他の箇所で定義される属性

この要素は,リンクを定義する。Aとは異なり,文書のHEAD部にだけ現われてよい。ただし,何回出現してもよい。LINKは内容をもたないが,リンクのドロップダウンメニューをもつツールバーなど,多様な方法で利用者エージェントがレンダリングしてよい関係情報を伝達する。

LINK定義が,どのようにして文書のHEAD部に複数回現われるかを次に例示する。現文書を"Chapter2.html"とする。rel属性は現文書とリンクされた文書との関係を指定する。値"Index", "Next"及び"Prev"は,リンク型で示す。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
   "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
<HEAD>
  <TITLE>Chapter 2</TITLE>
  <LINK rel="Index" href="../index.html">
  <LINK rel="Next"  href="Chapter3.html">
  <LINK rel="Prev"  href="Chapter1.html">
</HEAD>
...the rest of the document...

12.3.1 順方向リンク及び逆方向リンク

rel属性及びrev属性は,補足的な役割を果たす。すなわち,rel属性は順方向リンクを指定し,rev 属性は逆方向リンクを指定する。

例として,文書A及び文書Bの二つを考慮える。

Document A:       <LINK href="docB" rel="foo">

Document B:       <LINK href="docA" rev="foo">

これらは,全く同じ意味をもつ。

両属性は,同時に指定してもよい。

12.3.2 リンク及び外部スタイルシート

LINK要素が外部スタイルシートを文書にリンクする場合は,type属性がスタイルシート言語を指定し,media属性が意図するレンダリングメディアを指定する。利用者エージェントは,現装置に適用されるスタイルシートだけをネットワークから検索することによって,時間を節約してもよい。

メディア型の詳細は,スタイルシートに関する箇所で示す。

12.3.3 リンク及び検索エンジン

文書作成者は,LINK要素を使用して,検索エンジンに次を含む様々な情報を提供してもよい。

次の三つの例は,検索エンジンによって処理される文書を改善するために,言語情報,メディア型及びリンク型をどのように結合できるかを示す。

最初の例では,hreflang属性を使用して,一つの文書のオランダ語版,ポルトガル語版,アラビア語版及びフランス語版をどこで発見できるか検索エンジンに知らせる。アラビア語のマニュアルに対しては,dir属性及びcharset属性を使用し,フランス語のマニュアルを指定するLINK要素のtitle属性の値がフランス語であることを示すためには,lang属性を使用していることに注意すること。

<HEAD>
<TITLE>The manual in English</TITLE>
<LINK title="The manual in Dutch"
      type="text/html"
      rel="alternate"
      hreflang="nl" 
      href="http://someplace.com/manual/dutch.html">
<LINK title="The manual in Portuguese"
      type="text/html"
      rel="alternate"
      hreflang="pt" 
      href="http://someplace.com/manual/portuguese.html">
<LINK title="The manual in Arabic"
      dir="rtl"
      type="text/html"
      rel="alternate"
      charset="ISO-8859-6"
      hreflang="ar" 
      href="http://someplace.com/manual/arabic.html">
<LINK lang="fr" title="La documentation en Fran&ccedil;ais"
      type="text/html"
      rel="alternate"
      hreflang="fr"
      href="http://someplace.com/manual/french.html">
</HEAD>

次の例では,マニュアルの印刷版がどこで見つかるかを検索エンジンに知らせている。

<HEAD>
<TITLE>Reference manual</TITLE>
<LINK media="print" title="The manual in postscript"
      type="application/postscript"
      rel="alternate"
      href="http://someplace.com/manual/postscript.ps">
</HEAD>

次の例では,文書の集まりのトップページがどこで見つかるかを検索エンジンに知らせている。

<HEAD>
<TITLE>Reference manual -- Page 5</TITLE>
<LINK rel="Start" title="The first page of the manual"
      type="text/html"
      href="http://someplace.com/manual/start.html">
</HEAD>

更なる情報は,附属書Bの検索エンジンのウェブサイト索引付け支援に関する備考で示す。

12.4パス情報 (BASE要素)

<!ELEMENT BASE - O EMPTY               -- document base URI -->
<!ATTLIST BASE
  href        %URI;          #REQUIRED -- URI that acts as base URI --
  >

開始タグ: 必す(須), 終了タグ: 禁止

属性定義

href = uri [CT]
この属性は,相対URIを解決するための基底URIとして機能する絶対URIを指定する。

他の箇所で定義される属性

HTMLでは, 外部画像,アプレット,フォーム処理プログラム,スタイルシートなどへのリンク及び参照は,常にURIで指定する。相対URIは,様々な資源に由来する基底URIに従って解決されるBASE要素によって,文書作成者は,明示的に文書の基底URIを指定できる。

設定されている場合は,BASE要素は,外部資源を参照する要素の前の,HTML文書のHEAD部に現われなければならない。BASE要素によって指定されるパス情報は,そのBASE要素が現われる文書におけるURIにだけ影響する。

例えば,次のBASE宣言及びA宣言を考える。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
   "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
 <HEAD>
   <TITLE>Our Products</TITLE>
   <BASE href="http://www.aviary.com/products/intro.html">
 </HEAD>

 <BODY>
   <P>Have you seen our <A href="../cages/birds.gif">Bird Cages</A>?
 </BODY>
</HTML>

相対URI "../cages/birds.gif" は,次のとおりに解決される。

http://www.aviary.com/cages/birds.gif

12.4.1 相対URIの解決

利用者エージェントは,[RFC1808]の3.に従って,相対URIを解決するために基底URIを計算しなければならない。次に,[RFC1808]を特にHTMLに適用する方法を示す。

利用者エージェントは,次の,高いものから低いものへと並んでいる優先順位に従って,基底URIを計算しなければならない。

  1. 基底URIは,BASE要素によって設定される。
  2. 基底URIは,HTTPヘッダ([RFC2068]参照)など,プロトコル相互作用の間に見出されるメタデータによって与えられる。
  3. デフォルトとして,基底URIは,現文書の基底URIとする。すべてのHTML文書が基底URIをもつわけではない。例えば,妥当なHTML文書は電子メールに現われてもよいが,URIによって指定されてはならない。これらHTML文書は,それが相対URIを含みデフォルト基底URIに依存する場合には,誤っていると見なす。

さらに,OBJECT要素及び APPLET要素は,BASE要素によって設定される値に優先する属性を定義する。これらの要素に固有のURI問題に関する情報については,その定義を参照すること。

HTTPヘッダによって指定されるリンク要素は,文書で明示的に現われるLINK要素として処理される。