HTML表モデル

HTML表モデル

[1] HTML で採用されている表モデル (table model) について。

[2] HTMLには、単純表モデル複雑表モデルの2種類があります。 いずれも、、すなわち二次元配列状に整理されたデータを記述する基本的能力を備えていますが、 複雑表モデルではをそれぞれ化できます。

HTML 4 は、複雑表モデルを採用しています。 XHTML Basic は、単純表モデルを採用しています。

XHTML m12n では単純表用モジュールと複雑表用モジュールの両方が用意されています。

[3] HTML モデルの構成要素

名前要素型名単純表複雑表説明
table二次元配列全体
表題caption見出し (に1つ以下)
tr
行群 (頭部)thead×見出しとみなせる (に1つ以下)
行群 (本体)tbody× (明示できない)本体とみなせる (に1つ以上)
行群 (脚部)tfoot×尾部とみなせる (に1つ以下)
col× (明示できない)
列群colgroup×
こま (見出し)thで指定される見出し
こま (本体)tdで指定されるデータ (本体)

設計について

[25] HTML 表模型の設計に関する解説が HTML 4 B.5.1 にあります。

それによれば、 HTML 表模型は、

  • 次のものの研究から発展しています。
    • SGML 表模型
    • 文書処理器 (ワープロ) での表の扱い
    • 雑誌、書籍、その他紙媒体での様々な表配置技術
  • 単純な表は単純に、必要なら複雑な表も扱えるように設計されました。
    • 常用の文章編集器で HTML の表をマークできます。
    • 学習曲線が緩くなります。
  • こまの連結や揃えなどの表現特性のこま群への関連付けは他の文書書式からの変換や WYSIWTG 編集器での作成と相性が良いよう考慮しています。

[26] 動的再書式付け HTML 4 B.5.1.1。 HTML 表模型では、表の大きさやフォントなどについて著者が制御しません。 ですから、列幅を絶対画素単位指定に依存するのは危険です。 よって、表は窓やフォントの大きさに合わせて動的に大きさを変更できなければなりません。

著者は列の相対幅のヒントを提供できますが、 利用者エージェントはこまの内容で一番幅の広い要素をレンダリングできる広さを確保するべきです。 著者の指定を上書きする時には、各列の相対幅が極端に変わることは避けるべきです。

[27] 漸次表示 HTML 4 B.5.1.2。 表が大きな時やネットワーク接続が遅い時は、表を徐々に表示するのが利用者的にはよろしいです。 利用者エージェントは表のすべてのデータを受信する前に表示開始できるべきです。 著者は、漸次表示のためのヒントとして、列の数や表・各列の幅を指定できます。 (表の幅は既定値が 100% で、列の幅の既定値は均分した値です。いずれも table 要素や col 要素の width 属性で上書きできます。)

列の数は、最初の行が到着するのを待てば良いと提案した人もいましたが、 最初の行の内容が多ければ時間がかかります。ですから、 漸次表示のためには著者が列数を明示する必要があります。 著者は漸次表示モードにするか、こま内容にあわせて幅を決定するモード (2パス自動幅決定モード) にするかも知らせる必要があります。 前者は col 要素や colgroup 要素で列数を明示します。 後者は1パス目で UA が列数を決定します。

[28] 構造と表現 HTML 4 B.5.1.3Stricter 的にはこま内の文章の揃え位置やこま間の境界線はレンダリングの問題で、 構造の話ではありません。ですが、このような特徴は (ある応用から別の応用へと) 非常に可搬ですから、構造情報とまとめておくと便利です。 HTML 表模型はほとんどのレンダリング情報をスタイル・シートに任せていますが、 必ず使わないといけないわけではありません。

現在の DTP ソフトウェアは表のレンダリングを極めて多様に制御できますが、 HTML でそれをやると RTFMIF のようにでかくなってしまうので非現実的です。 HTML はそうせずに、よく使われる線種から著者が選ぶ能力程度を提供しています。 それ以上の制御はスタイル・シートで行えます。

開発の過程で表罫パターン指定方法が色々検討されました。 辺の加減算ができるようにすると算法が比較的複雑になります。 (例えば、すべての表の要素に framerules を持たせると、あるこまのある辺の罫線の決定に24段階程度も必要になります。) それだけしても需要を完全に満たすことはできませんから、 単純で直感的でほとんどの目的に十分な程度に抑えてあります。 より複雑な方法を標準化する際には更に実験が必要です。

[29] 行群・列群 HTML 4 B.5.1.4。 HTML では、 CALS 表模型に倣い、表の列を頭・体・足に分類できます。 こうすることでレンダリング情報の表現が簡単になりますし、 頁境界をまたぐ表で頭や足を反復させられますし、 体だけ scroll 可能にすることもできます。 tfootthead の前に置くので、 表全体を処理するのを待たずレンダリングできます。

[30] アクセス可能性 HTML 4 B.5.1.5。 HTML 表模型は、こまを名札付けできますから、 高品質な文章を生成できます。データベースや表計算との輸出入の自動化にも使えます。

HTML 表モデルの限界

[4] 非正方形的連結

HTML表モデルは、1つのこまに連結する場合、 連結数を rowspan 属性、 連結数を colspan 属性で指定しますが、 このために

+-----+-----+-----+
| and |  0  |  1  |
+-----+-----+-----+
|  0  |  0        |
+-----+     +-----+
|  1  |     |  1  |
+-----+-----+-----+

のようなを表すことはできません。

枠線の表示を変えればこのように見える表を作ることはできますが、 あくまでそう見えるに過ぎません。

[5] 入れ子の群

行群列群が入れ子になった関係を表すことができません。

例えば、

--------------------
中部  東海  静岡
            愛知
            岐阜
            三重
      --------------
      北陸  富山
            石川
            福井
--------------------
近畿        滋賀
            京都
            奈良
            和歌山
            大阪
            兵庫
--------------------

のような構造を (tbody を入れ子にするなどして) 記述することはできません。

一応 HTML 4 的には axis 属性が用意されてはいますが・・・。

[6] こまの細分

こま内に更にの一部と考えられる構造が存在し得ますが、 HTML表モデルではそれを記述できません。

例えば、見出しに対する見出しこま (次例の左上のこま) のような表現は極めてよく見られますが、 HTML では表せません。

+---+----+----+----+
|\年|    |    |    |
| \ | 01 | 02 | 03 |
|市\|    |    |    |
+---+----+----+----+
|津 | 32 | 42 | 42 |
+---+----+----+----+
|呉 | 55 | 32 | 32 |
+---+----+----+----+
+---+----+----+----+
|   |  1 |  2 |  3 |
+---+----+----+----+
| A | 3/ | 5/ | 2/ |
|   |/  3|/  8|/ 10|
+---+----+----+----+
| B | 5/ | 1/ | 9/ |
|   |/  5|/  6|/ 15|
+---+----+----+----+

その回の得点と累計点を並べたこのようなも、 HTML では表せません。

td 内に適当な要素型要素を使って記述することもできますが、 この例の場合こま内の構造も含めての構造であると考えた方が自然ですから、 そのことを記述できる方法がある方が好ましいと思われます。

[7] 頭・脚的列群

行群には頭・体・足の別があるのに、列群は一種類しかありません。 (少なくてもこの点では) 本来方向と方向で対称的なはずですが、 HTML ではその区別を記述できません。

[8] 表題以外の付加情報

table 要素内には、 狭義のの他に表題 (caption) を含めることができますが、その他の物は HTML内容モデルでは含められません。

例えば表題と共に短い説明が加えられていたり、 のデータや項目に関する補足説明が配置されていたりすることがありますが、 HTML ではこれを明確に記述することができません。

table 要素の外に記述することはもちろんできますが、 表題table に含まれるのに、 表題以外の付属情報が含められないのは、 現在の仕様の制約以上の理由がありません。

[34] HTML tables: Why not column based tables in addition to row based tables? (tenacious-techhunter@comcast.net 著, 2007-10-02 07:53:55 +09:00 版) <http://lists.w3.org/Archives/Public/public-html-comments/2007Oct/0000.html> (名無しさん)

歴史

[21]

1993年3月28日仕様案おそらく最初の提案
1993年6月24日仕様案HTML+ DTD
1993年7月13日仕様案HTML+ DTD (この頃、ブロック水準要素がこま内容に認められる)
1993年9月10日仕様案HTML+ (tbl から table に改名)
1993年9月実装(この頃、 NCSA (Mosaic) や SoftQuad (HoTMetaL PRO) で実装実験)
1993年11月8日単純表仕様案HTML+ Discussion Document
1994年1月5日単純表仕様案HTML+ DTD (この頃、 tr が包含子に)
1994年12月20日単純表実装NCSA Mosaic 2.0 Alpha 8 >>23
1995年3月28日単純表仕様案HTML 3.0 I-D 00
1995年4月単純表実装NN 1.1
1995年7月7日複雑表仕様案html-tables I-D 00 (後の RFC 1942)
1995年8月単純表実装とりあえず実装した WinIE 1.0
1995年10月単純表実装WinIE 2.0b 本格実装
1996年1月23日複雑表仕様案WD-tables The HTML3 Table Model (後の RFC 1942)
1996年5月5日単純表仕様案HTML 3.2 Draft
1996年5月複雑表実装WinIE 3.0a1
1996年3月複雑表仕様RFC 1942 HTML Tables
1996年12月単純表実装Opera 2.1
1997年1月14日単純表仕様HTML 3.2 勧告 (最終版)
1997年12月複雑表仕様HTML 4.0 FE 勧告
1998年7月20日単純表実装w3m の最初の表実装
複雑表実装Mozilla (Gecko)
2000年1月複雑表実装Opera 4.0
2001年4月10日複雑表・単純表仕様XHTML m12n 1.0 FE 勧告
@@ ??複雑表仕様HTML5 で表系要素が規定される
@@ ??複雑表仕様HTML5 見出しこま算法が改訂される
@@ ??複雑表仕様HTML5 見出しこま算法が改訂される
2009年2月複雑表仕様HTML5 で表系要素のレンダリングが規定される

[39] 参考: <http://slashdot.jp/comments.pl?sid=81655&cid=280883>

HTML 表モデルの成立

[23] NCSA Mosaic History <http://www.ncsa.uiuc.edu/Divisions/PublicAffairs/MosaicHistory/history.html>

[7] table を最初に実装したのは NN だと思ってる人は多いけど、 実はそうじゃないんだなぁ。

確かに普及させたのは NN ですが。

[22] www-talk では、1993年3月に HTML機能を追加することが提案されています。

Dave RaggettLaTeXtbl (なに?) や Microsoft Word を検討しつつ、 LATEX 染みたモデルを提案しています。

その後半年にわたる議論の末、 CALSICADD 風のモデルが採用されました。

[24] NCSA Mosaic 2.0 でがちゃんと実装されているとしたら、 WinIE 1.0 の酷い実装ぶりは何なのかということになりますが、 NCSA Mosaic 2.0 のの実装はどのような感じなのでしょうか? あるいはその期間の他の mosaic variant はどうなのでしょう?

[31] Chapter 2 (1998-05-20 00:22:16 +09:00 版) <http://www.w3.org/People/Raggett/book4/ch02.html> (名無しさん)

[32] HTML: Table Deployment Strategy (1995-10-18 14:13:35 +09:00 版) <http://www.w3.org/MarkUp/table-deployment.html> (名無しさん)

[33] >>32

Toward Graceful Deployment of Tables in HTML March 1995, Unpublished
A strategy for gracefully introducing tables into the web using HTTP format negotiation. (revised Oct 1995)

・・・

HTML5

[40] HTML5 では HTMLHTML DOM の様々な機能の意味論的・処理モデル的明確化がはかられていますが、 HTML表モデルも例外ではありません。これまでおおよそ自明と思われたのか十分明確に規定されていなかった表の形成 (form a table) (に含まれるや、こまのそれらへの所属などの確定) が算法の形で厳密に定義されたり、 見出しこまの適用対象を発見論的方法も取り入れつつやはり算法として定義したりしています。

[41] また、HTML4 までに導入されたものの十分な運用・実装実績のない機能や、もっぱらの見た目に関する機能は削除されています。 前者の例としては abbr 属性axis 属性、 後者の例としては align 属性border 属性があります。ただし後者は過去の文書との互換性のため、 Webブラウザーがどのようにレンダリングするのが好ましいかの規定が HTML5 に含まれています。

流用例

[38] DocBook ではいくつかの表モデルが採用されていますが、その1つとして HTML表モデルも用いることができます。

関連

[36] CSSHTML の表 (のレンダリング) モデルに強く影響を受けた表モデルを規定しています。 HTML要素に対応する display: 属性値として tabletable-rowtable-cell などが用意されています。

[37] OOXMLHTML の影響を受けた表モデルを採用しています。ただし、 要素名や要素の構造など様々な点が大きく異なっており、直接の互換性はまったくありません。

メモ

[35] Re: several messages about tables and related subjects (Ian Hickson <ian@...> 著, 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/13535> (名無しさん)