目的別利用方法

リファレンスはできるだけ直感的に解るようにしたつもりですが、用語で躓く事もあるかも知れないので、もっと噛み砕いた(時に不適切な)表現で手引きを書いてみます。

1. タグの詳細情報が知りたい

多分、あなたは要素 (Element)タグ (Tag)を混同しています。開始タグ、終了タグは要素の範囲を示すものでしかありません。XHTML 1.1 Referenceの基礎知識 - 要素や、The Web KANZAKI - ごく簡単なHTMLの説明 - 文書の骨格となる基本要素 - 要素とタグなどを参照して下さい。

あぁ、勿論、要素の一覧は要素目次で見られますよ。

2. ブラウザのサポート状況はどこにあるのか

ありません(調べてません)。IE、Firefox、Opera、Safari、lynx、w3m、IBM ホームページ・リーダーなど、世に存在するあらゆるユーザーエージェントのサポート状況なんて、個人で調べるには量が多すぎます。よって、参考文献に挙げてある仕様書に基づいて書いています。その他に、個別に気付いた点について書いてある事もありますが、いつ古くなるか知れないので過信しないで下さい。

3. a要素の中身には何を書いていいのか

要素の内容(仕様書ではコンテントモデル (Content Model)と呼ばれています)は、基本情報に書いてあります。a要素の場合はPCDATAとInline-aを内容に持てます。それぞれリンクが張られているので、詳細はリンク先で確認します。a要素の場合、PCDATA(普通のテキスト)とInline-aコンテントセットに含まれる要素全てを子に持つ事ができる事が判ります。

4. 内容の書式がよく解らない

正規表現 (Regular Expression)という、非常に便利な表現方法を使って書かれています。簡単に使われている規則を紹介しましょう。

a

aは1回現れる。現れなかったり、2回以上現れる場合は含まない。

a?

aは0回または1回現れる。つまり、現れなくとも良いが、現れる場合は1回までしか含まれない。

a*

aは0回以上現れる。つまり、現れなくてもいいし、現れる回数に上限はない。

a+

aは1回以上現れる。つまり、必ず1つは現れなければならないが、現れる回数に上限はない。

a, b

aとbが、この順番で1回ずつ現れる。一般的な正規表現の規則ではない(ここでは区切りを明示する為に使われているが、普通の正規表現は文字列を対象にするので必要が無いのである)。

( a )

パーレン(括弧)で囲まれた部分を一つの単位として扱う。例えば、( a, b )?の場合、aとbがこの順番で1回ずつ現れる場合、あるいは両方とも現れない場合は含まれるが、順番が違ったり、片方しか現れない場合は含まない。

( a | b )

aまたはbが1回現れる。aもbも現れたり、aもbも現れない場合は含まない。

勿論、要素名やPCDATAも一つの単位として捉えます。簡単な内容を持つ要素を例にとって考えてみましょう。

html要素の内容の書式はhead, bodyです。よって、次のケースは許されません。

  • head - body要素が無い
  • body, head - 順番が逆
  • head, style, body - style要素などは書けない; head要素の中に入れる

a要素の内容の書式は( PCDATA | Inline-a )*です。よって、次の場合は許されます。

  • PCDATA
  • PCDATA, ruby, PCDATA
  • img, PCDATA, q, cite, PCDATA
  •   (空っぽ)

一方、次のようなケースはエラーになります。

  • PCDATA, a - Inline-aにはa要素は含まれない
  • div - div要素はBlockには含まれるが、Inline-aには無い
  • link, PCDATA - link要素はInline-aには入っていない(head要素の子にしかなれない)

もっと複雑な要素の場合を考えてみます。例えばtable要素は、caption?, ( colgroup* | col* ), ( ( thead?, tfoot?, tbody+ ) | ( tr+ ) )を内容に持ちます。従って、次のような記述は許されます。

  • col, col, col, tr, tr, tr, tr, tr
  • caption, colgroup, colgroup, tr
  • tfoot, tbody, tbody

しかし、こんな場合は駄目です。

  • col, col, caption, tr, tr - caption要素の位置が違う
  • col, colgroup, tr, tr - col要素とcolgroup要素は同時に子になれない; col要素をcolgroup要素の子にしなければならない
  • thead, tbody, tbody, tbody, tfoot - tfoot要素の位置が違う
  • caption, colgroup, colgroup, thead, tfoot, tr, tr, tr - 行グループを子にした場合tr要素は子にはなれない; tbody要素の子にするべき

ruby要素もそれなりに複雑です。ruby要素の内容の書式は( ( rb, ( rt | ( rp, rt, rp ) ) ) | ( rbc, rtc, rtc? ) )なので、次の記述は問題ありません(ちなみにruby要素の内容として許される全てのケースです)。

  • rb, rt
  • rb, rp, rt, rp
  • rbc, rtc
  • rbc, rtc, rtc

しかし、次の記述は誤りです。

  • rb, rtc - rb要素を子にするならrt要素を、rtc要素を子にするならrbc要素と組み合わせる
  • rb, rb, rt, rt - 直接こんな事はできない; rbc要素とrtc要素を噛ませる
  • rbc, rtc, rtc, rtc - rtc要素が多すぎる
  • rbc, rp, rtc, rp - rp要素はコンテナと一緒には使えない

大体の感じが掴めたでしょうか? 正規表現はとても便利なので、覚えておいて損はありません。尤も、ここに挙げた規則が全てではないので、詳しくはそれぞれのマニュアルやヘルプなどを参照して下さい。処理系によって多少違う事もありますので。

5. a要素はどの要素の中に書けるのか

a要素はInlineコンテントセットに属しているので、内容としてInlineコンテントセットを持つ要素の内容になる事ができます。Inlineコンテントセットの詳細ページを見れば判るように、hn要素、p要素、span要素などの子になる事ができます(使用要素の欄には、Inline-FormctrlやFlowなどを内容に持つ要素も含まれています)。InlineFormattableコンテントセットは特殊で、pre要素の内容を表す為だけに作ったものです。仕様書には登場しません。

6. li要素はどの要素の中に書けるのか

li要素など、どのコンテントセットにも所属していない要素もあります。そういう要素は、関連項目の欄に親となれる要素が並んでいるので、それらの要素の内容を確認してみて下さい。

[目的別利用方法]
Published : 2007-02-12T09:00:00+09:00
Last Modified : 2007-02-12T09:00:00+09:00
Table of Contents : XHTML 1.1 リファレンス
Verified with : Valid XHTML 1.1
Copyright © 2007  E+X.