[2] HTML の表には、単純表モデルと複雑表モデルの2種類があります。 いずれも、表、すなわち二次元配列状に整理されたデータを記述する基本的能力を備えていますが、 複雑表モデルでは行と列をそれぞれ群化できます。
HTML 4 は、複雑表モデルを採用しています。 XHTML Basic は、単純表モデルを採用しています。
名前 | 要素型名 | 単純表 | 複雑表 | 説明 |
表 | table | ○ | ○二次元配列全体 | |
表題 | caption | ○ | ○ | 表の見出し (表に1つ以下) |
行 | tr | ○ | ○ | |
行群 (頭部) | thead | × | ○ | 見出しとみなせる行の群 (表に1つ以下) |
行群 (本体) | tbody | × (明示できない) | ○ | 本体とみなせる行の群 (表に1つ以上) |
行群 (脚部) | tfoot | × | ○ | 尾部とみなせる行の群 (表に1つ以下) |
列 | col | × (明示できない) | ○ | |
列群 | colgroup | × | ○ | 列の群 |
こま (見出し) | th | ○ | ○ | 行と列で指定される見出し |
こま (本体) | td | ○ | ○ | 行と列で指定されるデータ (本体) |
[25] HTML 表模型の設計に関する解説が HTML 4 B.5.1 にあります。
それによれば、 HTML 表模型は、
[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.3。 Stricter 的にはこま内の文章の揃え位置やこま間の境界線はレンダリングの問題で、 構造の話ではありません。ですが、このような特徴は (ある応用から別の応用へと) 非常に可搬ですから、構造情報とまとめておくと便利です。 HTML 表模型はほとんどのレンダリング情報をスタイル・シートに任せていますが、 必ず使わないといけないわけではありません。
現在の DTP ソフトウェアは表のレンダリングを極めて多様に制御できますが、 HTML でそれをやると RTF や MIF のようにでかくなってしまうので非現実的です。 HTML はそうせずに、よく使われる線種から著者が選ぶ能力程度を提供しています。 それ以上の制御はスタイル・シートで行えます。
開発の過程で表罫パターン指定方法が色々検討されました。
辺の加減算ができるようにすると算法が比較的複雑になります。
(例えば、すべての表の要素に frame
や rules
を持たせると、あるこまのある辺の罫線の決定に24段階程度も必要になります。)
それだけしても需要を完全に満たすことはできませんから、
単純で直感的でほとんどの目的に十分な程度に抑えてあります。
より複雑な方法を標準化する際には更に実験が必要です。
[29] 行群・列群 HTML 4 B.5.1.4。
HTML では、 CALS 表模型に倣い、表の列を頭・体・足に分類できます。
こうすることでレンダリング情報の表現が簡単になりますし、
頁境界をまたぐ表で頭や足を反復させられますし、
体だけ scroll 可能にすることもできます。 tfoot
は
thead
の前に置くので、
表全体を処理するのを待たずレンダリングできます。
[30] アクセス可能性 HTML 4 B.5.1.5。 HTML 表模型は、こまを名札付けできますから、 高品質な文章を生成できます。データベースや表計算との輸出入の自動化にも使えます。
[4] 非正方形的連結
HTML の表モデルは、1つのこまに連結する場合、
連結行数を rowspan
属性、
連結列数を colspan
属性で指定しますが、
このために
+-----+-----+-----+ | and | 0 | 1 | +-----+-----+-----+ | 0 | 0 | +-----+ +-----+ | 1 | | 1 | +-----+-----+-----+
のような表を表すことはできません。
[5] 入れ子の群
例えば、
-------------------- 中部 東海 静岡 愛知 岐阜 三重 -------------- 北陸 富山 石川 福井 -------------------- 近畿 滋賀 京都 奈良 和歌山 大阪 兵庫 --------------------
のような構造を (tbody
を入れ子にするなどして)
記述することはできません。
[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 では表せません。
[7] 頭・脚的列群
行群には頭・体・足の別があるのに、列群は一種類しかありません。 表は (少なくてもこの点では) 本来行方向と列方向で対称的なはずですが、 HTML ではその区別を記述できません。
[8] 表題以外の付加情報
table
要素内には、
狭義の表の他に表題 (caption
)
を含めることができますが、その他の物は HTML
の内容モデルでは含められません。
例えば表題と共に短い説明が加えられていたり、 表のデータや項目に関する補足説明が配置されていたりすることがありますが、 HTML ではこれを明確に記述することができません。
[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
(名無しさん)
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 で表系要素のレンダリングが規定される |
[22] www-talk では、1993年3月に HTML に表機能を追加することが提案されています。
Dave Raggett は LaTeX や tbl (なに?) や Microsoft Word を検討しつつ、 LATEX 染みた表モデルを提案しています。
その後半年にわたる議論の末、 CALS・ICADD 風の表モデルが採用されました。
[12] tbl
は、HTML の表を表す要素として提案されていたものです。
現在の table
要素にあたります。
[13] WWW-Talk Apr-Jun 1993: Tables and HTML+, http://1997.webhistory.org/www.lists/www-talk.1993q2/0271.html
[14] WWW-Talk Apr-Jun 1993: Re HMML?, http://1997.webhistory.org/www.lists/www-talk.1993q2/0385.html
[15] WWW-Talk Jul-Sep 1993: Re: Tables, http://1997.webhistory.org/www.lists/www-talk.1993q3/0554.html
[16] WWW-Talk Jul-Sep 1993: Re: Status of Tables in HTML+?, http://1997.webhistory.org/www.lists/www-talk.1993q3/0876.html
This program will parse a HTML+ Document replace HTML+ Tables
(<tbl>...</tbl>) with preformatted text tables.
[20] , http://www.math.utah.edu/~beebe/support/html+tables/html+tables
[23] NCSA Mosaic History http://www.ncsa.uiuc.edu/Divisions/PublicAffairs/MosaicHistory/history.html
[7] table
を最初に実装したのは NN だと思ってる人は多いけど、
実はそうじゃないんだなぁ。
[24] NCSA Mosaic 2.0 で表がちゃんと実装されているとしたら、 WinIE 1.0 の酷い実装ぶりは何なのかということになりますが、 NCSA Mosaic 2.0 の表の実装はどのような感じなのでしょうか? あるいはその期間の他の mosaic variant はどうなのでしょう?
[39] 参考: http://slashdot.jp/comments.pl?sid=81655&cid=280883
[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
(名無しさん)
- 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)
col
colw
を
col
に改称している。colgroup
colgroup
を追加した。[40] HTML5 では HTML・HTML DOM の様々な機能の意味論的・処理モデル的明確化がはかられていますが、 HTML表モデルも例外ではありません。これまでおおよそ自明と思われたのか十分明確に規定されていなかった表の形成 (表に含まれる行や列や、こまのそれらへの所属などの確定) が算法の形で厳密に定義されたり、 見出しこまの適用対象を発見論的方法も取り入れつつやはり算法として定義したりしています。
[41] また、HTML4 までに導入されたものの十分な運用・実装実績のない機能や、もっぱら表の見た目に関する機能は削除されています。
前者の例としては abbr
属性や axis
属性、
後者の例としては align
属性や border
属性があります。ただし後者は過去の文書との互換性のため、 Webブラウザーがどのようにレンダリングするのが好ましいかの規定が
HTML5 に含まれています。
[64] Guide to the W3C XML Specification (XMLspec) DTD, Version 2.1, , https://www.w3.org/XML/1998/06/xmlspec-report.htm#table
[68] XMLspec は HTML4 の表を採用しています。 しかし属性、内容モデル等を XMLspec に合わせて改変しています。
[65]
XMLspec の古い版は htable
, htbody
と要素名を置き換えていましたが、
その後 table
, tbody
に変更しました。 >>64
[69] 古い版は SGML Open の表モデルを採用していましたが、削除されました。
[72] DocBook は CALS表とHTML表を取り込んでいます。
HTML表は caption
がある table
とない informaltable
の2つに分かれています。
属性や内容モデルは DocBook に合わせて改変しています。
[38] DocBook ではいくつかの表モデルが採用されていますが、その1つとして HTML表モデルも用いることができます。
[36] CSS は HTML の表 (のレンダリング) モデルに強く影響を受けた表モデルを規定しています。
HTML の要素に対応する display:
属性値として
table
、table-row
、table-cell
などが用意されています。
[37] OOXML は HTML の影響を受けた表モデルを採用しています。ただし、 要素名や要素の構造など様々な点が大きく異なっており、直接の互換性はまったくありません。
[35] Re: several messages about tables and related subjects (Ian Hickson <ian@...> 著, 版) http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/13535 (名無しさん)