2002年8月 - マーク付けノート

2002年08月06日

XHTML 2.0 (1)

# 2003-11-10 追記

この辺りの記述はあくまで 2002-08-05 の草案について述べたもので、以後の版で記述が変更されている箇所も多々あることにご注意ください。

XHTML 2.0 (WD 2002-08-05) 出ました。で、斜め読みして気付いた点をいくつか。

XHTML 2.0 名前空間識別子

XHTML 2.0 の名前空間識別子は、XHTML 1.1 などとは異なり、http://www.w3.org/2002/06/xhtml2 となっています。

Heading

見出し要素型としては、新しく導入された h 要素型、及び従来の h1-h6 要素型が定義されています。これらの見出し要素は、いわゆるブロック要素型とは別個のものとして定義されていますが、実質的にはブロック要素型と同様の扱いを受けているようです。

section 要素型

「章」を示す要素型として、新たに section 要素型が導入されています。By representing the structure of documents explicitely using the section and h elements gives the author greater control over presentation possibilities than the traditional implicit structuring using numbered levels of headings. とのこと。

quote 要素型

新たにテキストレベルの引用を示す quote 要素型が導入されています。この要素型は、従来の q 要素と異なり、引用符の自動生成を前提としません。つまり、生のテキストに引用符を記述し、その内容を直接 quote 要素と見なすという規則で記述することになります。

恐らくは、HTML 4 での q 要素の引用符関連の規則についての不満が多かったことへの対処であろうと思われます。ちなみに q 要素は廃止される模様です。

line 要素型

従来の物理的な「改行」を示す br 要素型に代えて、論理的な「行」を示す line 要素型が導入されています。なお、br 要素型の方も依然健在ですが、こちらは非推奨とされています。

ナヴィゲーションリスト

リストモジュールとして、従来の ol/ul/dl に加え、ナヴィゲーションリストを示す nl 要素型が導入されました。これは、従来の menu 要素型と同様、サイトの構成をマーク付けするための要素型です。具体的には、併せて導入された name 要素型によってメニューの名前・ディレクトリ名などを示し、その後にリスト項目を続けて記述します。

このナヴィゲーションリストを用いると、例えば以下のようなマーク付けを行えるようになります。

<nl>
 <name>目次</name>
 <li>1. 発端</li>
 <li>
  <nl>
   <name>2. 展開</name>
   <li>2.1. 葛藤</li>
   <li>2.2. 危機</li>
   <li>2.3. 最高潮</li>
  </nl>
 </li>
 <li>3. 終結</li>
</nl>

なお、nl 要素型の内容モデルは (name, li+) となっています。

フォーム

フォーム周辺の定義は、XForms 1.0 モジュールを取り込んで定義される模様です。

イベント

XML Events モジュールが取り込まれ、新たに listener という要素型が定義される模様です。また、その他にもいくつかイベント関連の属性が追加されるようです (XML Events の仕様書を読んでいないので、この辺についてはほとんど知りません。その方面が気になる方は各自チェックして下さい)。

p 要素型

各種リスト/blockquote/pre/table といったブロックレベルの要素を子要素として記述できるようになりました。ただし p 要素を直接子要素として記述することは依然として禁止されています。

pre 要素型

pre に限らず、全ての XHTML ファミリの要素型は内容の空白を保持する旨(従って CSS による空白文字の描画の指定も pre に限らず行える)、必ずしも pre 要素を等幅フォントで描画しなくともよい旨などが注記されています。

acronym 要素型

この仕様は acronym 要素型を必要としないが、制作者の利便を考慮して 破棄はしないとのことです。

物理要素型

XHTML 1.1 で残されていた b/i/tt/big/small などの要素型は廃止されました。ただし、hr 及び sub/sup はいまだ健在です。

base 要素型

base 要素型は廃止されるようです。なお、xml:base 属性についての記述も今のところ見当たらないようです。

HyperText Attribute Collection

詳しくは XHTML 2.0 (4) を参照して下さい。

XFrames (HTML のフレームセットの XML 版) との併用を考慮して、target 属性が復活しています。また、従来の tabindex と同等の役割を果たす属性として、新しく navindex という属性が導入されています。なぜ tabindex でなくなったのかはよく判りません。

profile 属性

profile 属性は、head 要素ではなく html 要素に指定するように変更がなされています。

style 属性

XHTML 1.1 で非推奨とされていた style 属性は廃止されたようです。ただし、style 要素型はまだ残っています。

取り敢えず、スクリプト関係/フォーム関係についてはさっぱり解らないので、その辺も使う人は自分で原文を参照するか、他の解説を参照するかなさるのが賢明であると思います。

以上、XHTML 1.1 との差分などをざっと列挙しました。なお、DTD/XML Schema などはまだ公開されていません(取り込むモジュールの一覧は The XHTML 2.0 Document Type に記載されています。また、非公式ながら RELAX NG モジュールも公開されています)。ちなみに、まだ草案段階の仕様を利用する予定の部分も多く、その辺りの記述はこの先相当量の修正が行われうることも考慮しておいた方がよいかも知れません。

# もう少しきちんとまとめ直して、別のファイルに分離するかも知れません。

XHTML 2.0 (2)

名前空間が変わっていることを書き忘れていました。現時点では http://www.w3.org/2002/06/xhtml2 ということになっています。(勧告もこれを使うのかな?)

あと、神崎さんも書いていますが、a/link/img/object なんかは旧来通りの属性を利用していて、XLink を使っていないんですよね。これは今後の修正を期待。

XHTML 2.0 (3)

section の内容は (PCDATA | Flow)* よりも (PCDATA | Block)+ の方がいいんじゃないかとか寝ぼけたことを書いてしまった。恥ずかし。(Block)+ のつもりというか、(Heading | Block | section)+ のつもりだったんだけど。

XHTML 2.0 (4)

もう一つ、重要な変更がありました。href/target/accesskey/navindex の各属性、つまりリンクを作成するための属性は、汎用属性になる模様です。ざっと目を通した段階では、Common Attribute CollectionHyperText が含まれている意味が今ひとつ解らなかったのですが、ようやく理解できました。

要するに、わざわざ <a href="..."><dfn>...</dfn></a> とかやる必要がなくなって、<dfn href="...">...</dfn> とできる、ということです。これはやはり XLink を念頭において設計されているのだと思います。

UA 側から見た場合、XLink の href 属性は要素型に関係なく機能しますから、わざわざ特に a 要素として記述する必然性もない訳です。実際、上記の dfn の例は <dfn xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="...">...</dfn> としてやれば、現行の Mozilla でも動作します(なぜかコンテキストメニューからしかジャンプできませんが)。XLink が使用されている要素型が、XHTML 1 の名前空間を指定されていなければワンクリックでジャンプできるようです。つまり、<dfn xmlns="http://www.w3.org/2002/06/xhtml2" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="...">...</dfn> は現行の Mozilla でも期待通りに動作します。

ちなみに、それじゃ XHTML 2.0 における a 要素型の存在意義は何なのか、ということが疑問になると思いますが、それは rel/rev/hreflang/type/charset などによって、リンク先の情報を明確に記述できるということでしょう。この部分は特にリンクとして記述したのだ、という時には a 要素としてマーク付けする、ということになると思います。

XFrames (1)

XFrames WD 2002-08-06 出ました。基本的には HTML 4.01 frameset の要素名を一部変更した感じです (noframes 相当の要素型はない模様)。なお、名前空間 (http://www.w3.org/2002/06/xframes) からも判るように、XFrames は XHTML とは別個の(独立した)仕様です。

例えば、HTML 4.01 Frameset の次のような記述を考えます。

<!DOCTYPE html
     PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
            "http://www.w3.org/TR/html4/frameset.dtd" >
<html>
 <head>
  <title>フレームの例</title>
 </head>
 <frameset cols="20%, 80%">
  <frameset rows="100, 200">
   <frame src="frame1.html" name="frame1">
   <frame src="frame2.html" name="frame2">
  <frameset>
  <frame src="frame3.html" name="frame3">
 </frameset>
</html>

これを XFrames で表現すると、次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="#style" ?>
<!DOCTYPE frames
     PUBLIC "... Public id of XFrames ..."
            "... System id of XFrames ..." >
<frames xmlns="http://www.w3.org/2002/06/xframes">
 <head>
  <title>フレームの例</title>
  <style type="text/css" id="style">
   colum {height:20%;}
   #frame3 {height:80%;}
   #frame1 {width:33%;}
   #frame2 {width:67%;}
  </style>
 </head>
 <row>
  <colum>
   <frame source="frame1.html" id="frame1" />
   <frame source="frame2.html" id="frame2" />
  </row>
  <frame source="frame3.html" id="frame3" />
 </colum>
</row>

HTML 4.01 の <frameset col="...">...</frameset><row>...</row> に、<frameset row="...">...</frameset><colum>...</colum> に対応するかたちになりますが、XFrames の定義の方が table などからの類推をしやすく、解りよいと思います。

ちなみに、XFramse の head 要素は省略可能となっています。また、現時点では head の内容は title と style のみですが、meta や RDF 関連の要素型を取り込む可能性もあるようです。

…とまあ、こんな感じです。暇なので、後で訳してみるかも知れません。

# でも、こっちを訳するよりは XHTML 2.0 の方を訳すべきだろうな…。フレームなんて今日び流行んないって。

# 2003-11-10 追記

この辺りの記述はあくまで 2002-08-06 の草案について述べたものですので、将来的に変更される可能性もあることに注意してください。

XFrames (2)

XFrames 非対応の UA には、コンテントネゴシエーションでそれ用のページを参照させる、ということのようです。確かに noframes よりもそっちの方が遥かにスマートだと思います。ちなみに、具体的な XFrames の MIME に関する記述はないようです(拡張子は .xfm ? .frm ?)。

XHTML 2.0 (5)

あくまで非公式なものですが、石川雅康先生が XHTML 2.0 in RELAX NG を公開されています。

# しかし、RELAX NG ってのは解りやすい…。特に書き方を調べたことはないのですが、意味はほとんど判ります(いや、もしかしたら勘違いしてるところもあるかも知れませんが、多分間違っていないと思います)。

XHTML 2.0 (6)

些細な変更ですが、XHTML 1.1 以前では head 要素型の属性として定義されていた profile 属性が、html 要素型の属性として定義されています。個人的にはその方が分かりやすいかなと思います。

XFrames (3)

なるほど!! 「フレームセットが使用されているページだと、ある特定の状態をブックマークしようとしても、デフォルトの状態がブックマークされてしまう」という問題を解決するために、フレームセットの URI 自体に「どのフレームにどのファイルを表示するか」を記述できるようにする、という方法が導入されているようです。

具体的には、XFrames の文書の URI を ../samp.frm#frames(id1=menu.xhtml,id2=topics.xhtml,...) というように記述すると、<frame id="id1" .../> のフレームに 'menu.xhtml' が表示される、という具合です。こりゃ素晴らしい。

#frames(...) によって表示するファイルの指定がなされていないフレームがある時には、そのフレームの source 属性 (HTML 4.01 の frame の src 相当)が利用され、#frames(...) による指定も source による指定もない時には、そのフレームは空白状態で表示される、ということです。

2002年08月08日

XHTML 2.0 (7) フライング実装(?)されている方々へ:

XHTML 2.0 の DTD はまだ公開されていません。従って、文書型宣言を <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/TR/xhtml2/DTD/xhtml2.dtd" > などと記述してしまうと、(一応 well-formed ではあるものの、)なお invalid であることに変わりはない上、DTD を取得できないということで、そこで処理を停止してしまうパーザもでてきます (W3C の validator なんかがそうです)。

ですから、現時点で XHTML 2.0 を利用しようとする場合には、文書型宣言を記述しない方が賢明です。例の非公式 RELAX NG から DTD をでっち上げることも可能ですが、XHTML 2.0 であるということは、名前空間を明示しさえすれば明らかですから、特に DTD に拘る必要はないと思います。

ただし、文書型宣言を省略した場合には、&copy&hearts; などの一般実体参照は使用できなくなるので、こういった文字類は文字参照を用いて &#169;/&#9829; というように記述する必要があります(なお、&amp;/&lt;/&gt;/&quot;/&apos; の五つの一般実体参照はそのまま使用できます)。

ちなみに、単に一般実体参照を利用するためには、文書型宣言で XHTML Character Entities Module だけを取り込むという方法もあります。例えば、文書型宣言を <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-charent-1.mod" > と記述する、といった具合です(この文書型宣言は妥当性検証のためのものではなく、あくまで実体の定義のみを目的としたものです)。

# なお、この記事は草案段階での XHTML 2.0 の利用を促すものではありませんし、逆に利用の禁止を促すものでもありません。念のため。

# 2003-11-10 追記

この辺り、やや "XHTML 2.0" と "XHTML2" という言葉の使い分けができていないので、適宜判別してください。例えばXHTML 2.0 であるということは、名前空間を明示しさえすれば明らかなどというのは、"XHTML2" の誤りです。

この文書のステータス

URI
http://www.satoshii.org/markup/notes/2002/08
初版
2002-08-06
最終更新
2003-11-10
著者
石川哲志
Copyright © 2002-2003 Satoshi ISHIKAWA, All Rights Reserved.