<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWiki" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head><a0:parameter name="page-icon"><a0:value>HTML</a0:value></a0:parameter><a0:parameter name="default-name"><a0:value>匿名アンカー</a0:value></a0:parameter></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end> <a0:anchor>HTML</a0:anchor> における<a0:anchor>終点アンカー</a0:anchor>名について。</p><section><h1>アンカー名をつける方法</h1><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end> HTML で特定の部分を終点アンカーとして名前をつけるには
2つの方法があります。<ul><li><a0:anchor>a</a0:anchor> 要素の <a0:anchor>name</a0:anchor> 属性を使う方法</li><li><a0:anchor>id</a0:anchor> 属性を使う方法</li></ul></p><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end> <code class="HTML">NAME</code> 属性を使う方法は古くから使われてきました。
古い <a0:anchor>UA</a0:anchor> はこちらの方法しか対応していません。
終点アンカーを <code class="HTML">A</code> 要素として<a0:anchor>マーク付け</a0:anchor>し、
更にその要素の <code class="HTML">NAME</code> 属性で名前を指定します。
例:<pre>  &lt;A NAME=&quot;anchor-name&quot;&gt;anchor text&lt;/A&gt;</pre></p><p><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end> もう一つの <code class="HTML">ID</code> 属性を使う方法は、
任意の要素を終点アンカーとするにあたって、
その名前を <code class="HTML">ID</code> 属性の値とします。
(<code class="HTML">ID</code> 属性の役割は終点アンカー名の指定だけではありません。
詳しくは <a0:anchor>id</a0:anchor> 属性の説明を参照。)</p><p>この方法は比較的新しいもので、つい最近まで互換性に難あり、
<code class="HTML">NAME</code> 属性と併用するのが望ましい、
とされてきました。現在ではほとんどの <a0:anchor>UA</a0:anchor>
が対応しており、単独で用いても問題ないでしょう。</p><p>例:<pre>  &lt;p id=&quot;anchor-name&quot;&gt;Paragraph text&lt;/p&gt;</pre></p><a0:form ref="comment"></a0:form></section><section><h1>アンカー名の文字列</h1><p><a0:anchor-end a0:anchor="5">[5]</a0:anchor-end> アンカー名には使える文字に制限があります。
<code class="HTML">NAME</code> 属性にはほとんどの文字が使えますが、
<code class="HTML">ID</code> 属性では制限があります。</p><p>まず、 SGML (<a0:anchor>DTD</a0:anchor>) 的にみると、 <a0:anchor>HTML4</a0:anchor>
では <code class="HTML">NAME</code> は <code class="SGML">CDATA</code>,
<code class="HTML">ID</code> は <code class="SGML">ID</code> とされています。</p><p>歴史的には、 <code class="HTML">NAME</code> 属性も <a0:anchor>SGML</a0:anchor>
の <a0:anchor>ID</a0:anchor> か <a0:anchor>NMTOKEN</a0:anchor> くらいにしたかったようなのですが、
広まってしまった実装と用例のために現状追認せざるを得なかったようです。</p><p><code class="SGML">CDATA</code> である <code class="HTML">NAME</code> では、
<a0:anchor>文書文字集合</a0:anchor>に存在する全ての文字が使えます。
(<a0:anchor>HTML2.0</a0:anchor> と <a0:anchor>HTML3.0</a0:anchor> draft では <a0:anchor>ISO/IEC8859</a0:anchor>-1,
<a0:anchor>HTML2.x</a0:anchor> と <a0:anchor>HTML4</a0:anchor> と <a0:anchor>XHTML</a0:anchor> では
<a0:anchor>ISO/IEC10646</a0:anchor> の <code>U+10FFFF</code> 以下の文字。
明示 <a0:anchor>SGML宣言</a0:anchor>のない <a0:anchor>HTML</a0:anchor> 
(<a0:anchor>不思議マーク付け</a0:anchor>文書を含む。)
では文書の<a0:anchor>符号化文字集合</a0:anchor>で表現可能な全ての文字。)
引用符で囲んで記述する時には<a0:anchor>実体参照</a0:anchor>を使って表現することもできます。
例:<pre>  &lt;A NAME=&quot;&amp;lt;anchor name&amp;gt;&quot;&gt;anchor text&lt;/A&gt;
  &lt;!-- 終点アンカー名は「&lt;anchor name&gt;」 --&gt;</pre></p><p>一方、 <code class="SGML">ID</code> である <code class="HTML">ID</code>
では、最初の文字は<a0:anchor>名前開始文字</a0:anchor>, それ以降の文字は<a0:anchor>名前文字</a0:anchor>から選ぶ必要があります。
また、実体参照で表現することは出来ません。</p><p><a0:anchor-end a0:anchor="8">[8]</a0:anchor-end> さて、 <a0:anchor-external a0:resParameter="HTML4:&quot;struct/links.html#idx-anchor-7&quot;" a0:resScheme="IW">IW:HTML4:&quot;struct/links.html#idx-anchor-7&quot;</a0:anchor-external>
は、 HTML 4 のアンカー名は <a0:anchor>US-ASCII</a0:anchor> 
の文字で構成しないといけないとしています。
ですから <samp class="HTML">アンカー名</samp> というアンカー名は HTML 4
では不正となります。</p><p>一方で、 <a0:anchor-external a0:resParameter="HTML4:&quot;struct/links.html#anchors-with-id&quot;" a0:resScheme="IW">IW:HTML4:&quot;struct/links.html#anchors-with-id&quot;</a0:anchor-external>
には US-ASCII にない文字を使ったアンカー名の例示があります。</p><p>実際の世界では非 ASCII 文字のアンカー名はよく使われます。
例えば用語集で用語を終点アンカーとするときに、
アンカー文字列をそのままアンカー名にすることはよく行われます。</p><p>非 ASCII 文字などの扱いに関して<a0:anchor>断片</a0:anchor>つき <a0:anchor>URI</a0:anchor> と<a0:anchor>アンカー名</a0:anchor>を比較して終点アンカーを決定する際の注意が
<a0:anchor-external a0:resParameter="HTML4:&quot;appendix/notes.html#non-ascii-chars&quot;" a0:resScheme="IW">IW:HTML4:&quot;appendix/notes.html#non-ascii-chars&quot;</a0:anchor-external>
にあります。</p><a0:form ref="comment"></a0:form><section><h1>大文字と小文字</h1><p><a0:anchor-end a0:anchor="7">[7]</a0:anchor-end> <a0:anchor-external a0:resParameter="HTML4:&quot;struct/links.html#idx-anchor-5&quot;" a0:resScheme="IW">IW:HTML4:&quot;struct/links.html#idx-anchor-5&quot;</a0:anchor-external>
によれば、アンカー名で大文字と小文字は区別されます。</p><p>しかしながら、 <a0:anchor-external a0:resParameter="HTML4:&quot;struct/links.html#idx-anchor-4&quot;" a0:resScheme="IW">IW:HTML4:&quot;struct/links.html#idx-anchor-4&quot;</a0:anchor-external>
では、アンカー名の名前空間において大文字と小文字の差しかない2つのアンカーは存在できないことが述べられています。</p><p>すぐ後の例で大文字と小文字を区別しない UA
があるという話が述べられていますから、
その対策としてこのような規定になったのだと思われます。</p><a0:form ref="comment"></a0:form></section></section><section><h1>アンカー名の名前空間</h1><p><a0:anchor-end a0:anchor="6">[6]</a0:anchor-end> 終点アンカー名は、当該文書中で一意である必要があります。
<a0:anchor>HTML4</a0:anchor> によると、 <code class="HTML">id</code> 属性によるアンカー名と
<code class="HTML">name</code> 属性によるアンカー名は同じ名前空間です。
つまり、同じ名前で別の要素を終点アンカーとすることは出来ません。
違う属性を使ってもです。
(<a0:anchor-external a0:resParameter="HTML4:&quot;struct/links.html#idx-anchor-4&quot;" a0:resScheme="IW">IW:HTML4:&quot;struct/links.html#idx-anchor-4&quot;</a0:anchor-external>)
悪い例:<pre>  &lt;a name=&quot;anchorName&quot;&gt;Foo&lt;/a&gt;...
  &lt;span id=&quot;anchorName&quot;&gt;Bar&lt;/span&gt;</pre></p><p>HTML 4 によれば、同じ要素に二つの属性で同じ名前をつけることは構いません。
かつて <code class="HTML">id</code> 属性がそれ程普及していなかった頃には、
互換性を保つ技法として重宝されました。
例:<pre>  &lt;a name=&quot;anchorName&quot; id=&quot;anchorName&quot;&gt;anchor&lt;/a&gt;</pre></p><p>次の例は、 HTML 4 の説明を厳密に解釈すれば間違いでしょうが、
さして問題はないと思われます。<pre>  &lt;h2 id=&quot;intro&quot;&gt;&lt;a name=&quot;intro&quot;&gt;Introduction&lt;/a&gt;&lt;/h2&gt;</pre></p><a0:form ref="comment"></a0:form></section><section><h1>メモ</h1></section></body></html>