しらぎくモバイルシステム VIでのテーブル処理。

しらぎくモバイルシステム VIでのテーブル(表)処理について。特にテーブルの表示が出来ない端末への対応について解説します。

テーブルをサポートしない主な端末。

以下の端末はテーブルをサポートしておりません。

ドコモの旧型端末
  • ムーヴァ全機種
  • フォーマの四桁型番全機種と三桁型番の初期端末
H"
WAP 1.0 端末

特にフォーマ端末は今後も残る事が予想されるため、これからも対応が必要になります。

しらぎくモバイルシステム VIでの処理例。

最も基本的なテーブル。

例えば、以下のテーブルがあったとします。

<table border="1" cellspacing="0" cellpadding="4">
			    <tr>
			        <td></td>
			        <th>出演携帯電話会社</th>
			        <th>出身地</th>
			        <th>身長</th>
			        <th>血液型</th>
			        </tr>

			    <tr>
			        <th>堀北真希</th>
			        <td>NTTドコモ</td>
			        <td>東京都</td>
			        <td>160cm</td>
			        <td>B型</td>
			        </tr>

			    <tr>
			        <th>仲間由紀恵</th>
			        <td>KDDI/沖縄セルラー</td>
			        <td>沖縄県</td>
			        <td>160cm</td>
			        <td>A型</td>
			        </tr>

			    <tr>
			        <th>上戸彩</th>
			        <td>ソフトバンクモバイル</td>
			        <td>東京都</td>
			        <td>162cm</td>
			        <td>O型</td>
			        </tr>
			    </table>

これをテーブルを認識するウェブブラウザで表示させると、横方向五桁、縦方向四桁の表が表示され、一番上は左から空欄, 出演携帯電話会社, 出身地, 身長, 血液型の順に見出しが並び、一番左も上から空欄, 堀北真希, 仲間由紀恵, 上戸彩の順に見出しが並ぶでしょう。

しらぎくモバイルシステム VIでは、テーブルを認識しない携帯電話に対して、以下のように出力します。

堀北真希
出演携帯電話会社
NTTドコモ
出身地
東京都
身長
160cm
血液型
B型
仲間由紀恵
出演携帯電話会社
KDDI/沖縄セルラー
出身地
沖縄県
身長
160cm
血液型
A型
上戸彩
出演携帯電話会社
ソフトバンクモバイル
出身地
東京都
身長
162cm
血液型
O型

HTMLとしては、以下のようになります。

  • 実際には要素の包含関係に合わせた字下げはされません。
<dl>
			    <dt>堀北真希</dt>
			    <dd>
			        <dl>
			            <dt>出演携帯電話会社</dt>
			            <dd>NTTドコモ</dd>
			            <dt>出身地</dt>
			            <dd>東京都</dd>
			            <dt>身長</dt>
			            <dd>160cm</dd>
			            <dt>血液型</dt>
			            <dd>B型</dd>
			            </dl>
			        </dd>

			    <dt>仲間由紀恵</dt>
			    <dd>
			        <dl>
			            <dt>出演携帯電話会社</dt>
			            <dd>KDDI/沖縄セルラー</dd>
			            <dt>出身地</dt>
			            <dd>沖縄県</dd>
			            <dt>身長</dt>
			            <dd>160cm</dd>
			            <dt>血液型</dt>
			            <dd>A型</dd>
			            </dl>
			        </dd>

			    <dt>上戸彩</dt>
			    <dd>
			        <dl>
			            <dt>出演携帯電話会社</dt>
			            <dd>ソフトバンクモバイル</dd>
			            <dt>出身地</dt>
			            <dd>東京都</dd>
			            <dt>身長</dt>
			            <dd>162cm</dd>
			            <dt>血液型</dt>
			            <dd>O型</dd>
			            </dl>
			        </dd>
			    </dl>

この事から、テーブルが処理出来ない環境でもテーブルの内容を適切にリスト化している事がお分かり頂けるかと思います。

テーブル処理の詳細。

テーブルを表としてレンダリング出来ない環境に対して、しらぎくモバイルシステム VIでは以下のような考え方でテーブルを処理します。

1. 先ず、テーブルのヘッダを取り出す。

先ず、以下のルールでヘッダと見なせる部分を取り出します。

  • テーブルの冒頭から空でないデータコマ(<td>要素)が含まれない連続する行(<tr>要素)をヘッダと見なす。

最も単純なテーブルで言えば、一行目のみがこれに該当するため、この部分をヘッダとして処理しております。

  • 携帯電話向けのHTMLでは、テーブルのヘッダ部分を<thead>要素として纏める事が出来ないため、仮令<thead>要素としてマークアップされている場合であっても、上記の法則にのみ従って対応します。
  • 尚、テーブルを認識する環境に対しては、同様に末尾の連続する見出しのみの行をフッタとして取り出しますが、テーブルに対応していない環境では利用しようがないため、単純に削除または無視されます。

2. 続いて、見出しの扱いを決める。

続いて、見出しコマ(<th>要素)の扱いを決めますが、これは特に指定がない限り、以下のように処理されます。

  • 尚、scope属性が与えられたデータコマ(<td>要素)も、便宜上見出しコマと見なします。

通常の見出しコマの扱い。

scope属性で見出しの方向を指定しておらず、またデータコマからheaders属性で参照もされていない場合には、以下のように処理します。

ヘッダ部にある見出し
ヘッダ部にある見出しは、その見出しを含む列に掛かる見出しとして処理します。
ヘッダ部以外にある見出し
ヘッダ部以外にある見出しは、
  • 左端にあればその行に掛かる見出しとして扱い、
  • 何らかのデータコマ(<td>要素)より右にある場合はそれより右の行内のデータコマ全てに掛かる見出しとして扱います。

scope属性のある見出しコマの扱い。

一方、見出しコマ(<th>要素)またはデータコマ(<td>要素)にscope属性が与えられている場合には、以下のように処理します。

  • scope="col"属性またはscope="colgroup"属性が与えられている見出しコマに関しては、当該コマのある列に掛かる見出しとして扱います。
  • scope="row"属性またはscope="rowgroup"属性が与えられている見出しコマに関しては、当該コマのある行に掛かる見出しとして扱います。但しそのコマが他のデータコマ(<td>要素)より右にある場合には、それより右の行内の各データコマに掛かる見出しとして扱います。
  • その他のscope属性値は無効(エラー)であり、従って通常のコマと同様に扱われる事となります。

headers属性で参照されている表の見出しコマ。

また、他のデータコマからheaders属性で参照されている場合、以下のように扱います。

行内の全てのデータコマから参照されている見出し
その行全体に掛かる見出しと見なします。
その他の見出し
その他のheaders属性で参照されている見出しは、各コマに掛かる見出しと見なします。

複数行または複数列に跨る見出しコマの扱い。

尚、複数行或いは複数列に掛かる見出しについては以下のように扱います。

列見出しとして扱う見出しがcolspan属性で複数列に掛かる場合
該当する列全てに掛かる見出しとして扱います。
行見出しとして扱う見出しがrowspan属性で複数行に掛かる場合
該当する行全てに掛かる見出しとして扱うものとします。

3. 最後にデータコマを処理する。

最後にデータコマ(<td>要素)の扱いを決めますが、これは以下のように処理されます。

複数行に跨るデータコマ
rowspan属性で複数行に掛かるデータコマについては、該当する各行にデータがコピーされます。
複数列に跨るデータコマ
colspan属性で複数行に掛かるデータコマについては、内容表示の都合上跨るコマの一番右端にデータが移されます。

この他の要素・属性の扱い。

サポートされる要素・属性。

しらぎくモバイルシステム VIでは、テーブルに関連する以下の論理要素・論理属性をサポートします。

<caption>要素
テーブルの冒頭に出力されます。
abbr属性
当該コマが繰返し現れる場合、二度目からはabbr属性があればその内容に置き換えられます。
  • 尚、見出しコマでなくてもこの扱いは有効です。
axis属性
当該コマの内容の前に補助情報として附加されます。

サポートされない要素・属性。

以下の要素・属性はモバイル向けのHTMLでは定義されていないため、しらぎくモバイルシステム VIでは無視されます。

<colgroup>要素
列のグループ化は無効となります。

このため、colspan="0"属性を与えられた列は、最右端まで跨る事となります。

<col>要素
列へのスタイル指定は無効となります。
<thead>要素
テーブルでのヘッダ部分は冒頭より連続する見出しのみから成る行の集まりと見なします。
  • テーブルのヘッダ部分の見出しコマとそれ以外の箇所の見出しコマは取扱が異なります。意図した方向に見出しが掛かるようにするには、必ず
    • scope属性で方向を指定するか、
    • 全ての見出しコマにid属性を与えてデータコマからheaders属性で参照するか

    のどちらかを行ってください。

<tfoot>要素
特に<thead>要素と一番目の<tbody>要素の間に記述された場合、記述の順序に従って出力されますのでご注意ください。
<tbody>要素
行のグループ化は無効となります。

このため、rowspan="0"属性を与えられた列は、最終行まで跨る事となります。

colspan="0"属性
<colgroup>要素の開始・終了タグを無視するため、当該属性を与えられたコマのある行での最大幅まで跨る事とします。
rowspan="0"属性
<thead>要素, <tfoot>要素及び<tbody>要素の開始・終了タグを無視するため、最終行まで跨る事とします。

これとは別に、<table>要素に与えられたsummary属性はモバイル向けのテーブルの仕様として定義されてはいるものの、出力が冗長になる恐れがある事から無視しております。

もう一つの例。

例えば、最も単純なテーブルを以下のように書き直したとします。

<table border="1" cellspacing="0" cellpadding="4">
		    <caption>平成21年度の携帯電話会社<abbr title="コマーシャル">CM</abbr>出演アイドル女優</caption>
		    <tr>
		        <td></td>
		        <th abbr="携帯会社">出演携帯電話会社</th>
		        <th abbr="出身">出身地</th>
		        <th>身長</th>
		        <th>血液型</th>
		        </tr>

		    <tr>
		        <th>堀北真希</th>
		        <td>NTTドコモ</td>
		        <td>東京都</td>
		        <td rowspan="2">160cm</td>
		        <td>B型</td>
		        </tr>

		    <tr>
		        <th>仲間由紀恵</th>
		        <td>KDDI/沖縄セルラー</td>
		        <td>沖縄県</td>
		        <td>A型</td>
		        </tr>

		    <tr>
		        <th>上戸彩</th>
		        <td>ソフトバンクモバイル</td>
		        <td>東京都</td>
		        <td>162cm</td>
		        <td>O型</td>
		        </tr>
		    </table>

これをテーブルを認識するウェブブラウザで表示させると、表の上に「平成21年度の携帯電話会社CM出演アイドル女優」と表示され、更に上下に並んでいた堀北真希と仲間由紀恵の身長の項目が上下繋がって一コマになるでしょう。

しらぎくモバイルシステム VIでは、テーブルを認識しない携帯電話に対して、以下のように出力します。

平成21年度の携帯電話会社CM出演アイドル女優
堀北真希
出演携帯電話会社
NTTドコモ
出身地
東京都
身長
160cm
血液型
B型
仲間由紀恵
携帯会社
KDDI/沖縄セルラー
出身
沖縄県
身長
160cm
血液型
A型
上戸彩
携帯会社
ソフトバンクモバイル
出身
東京都
身長
162cm
血液型
O型

HTMLでは以下のようになります。

<dl>
		    <dt>平成21年度の携帯電話会社CM出演アイドル女優</dt>
		    <dd>
		        <dl>
		            <dt>堀北真希</dt>
		            <dd>
		                <dl>
		                    <dt>出演携帯電話会社</dt>
		                    <dd>NTTドコモ</dd>
		                    <dt>出身地</dt>
		                    <dd>東京都</dd>
		                    <dt>身長</dt>
		                    <dd>160cm</dd>
		                    <dt>血液型</dt>
		                    <dd>B型</dd>
		                    </dl>
		                </dd>

		            <dt>仲間由紀恵</dt>
		            <dd>
		                <dl>
		                    <dt>携帯会社</dt>
		                    <dd>KDDI/沖縄セルラー</dd>
		                    <dt>出身</dt>
		                    <dd>沖縄県</dd>
		                    <dt>身長</dt>
		                    <dd>160cm</dd>
		                    <dt>血液型</dt>
		                    <dd>A型</dd>
		                    </dl>
		                </dd>

		            <dt>上戸彩</dt>
		            <dd>
		                <dl>
		                    <dt>携帯会社</dt>
		                    <dd>ソフトバンクモバイル</dd>
		                    <dt>出身</dt>
		                    <dd>東京都</dd>
		                    <dt>身長</dt>
		                    <dd>162cm</dd>
		                    <dt>血液型</dt>
		                    <dd>O型</dd>
		                    </dl>
		                </dd>
		            </dl>
		        </dd>
		    </dl>

以上のように、

  • 出演携帯電話会社のコマについていたabbr="携帯会社"の値
  • 出身地のコマについていたabbr="出身"の値

がそれぞれ二度目以降に使われており、また、rowspan属性を与えられた160cmのコマも適切に再配置されているのが分かります。

また、列と行を入れ替えたとします。

<table border="1" cellspacing="0" cellpadding="4">
			<caption>平成21年度の携帯電話会社<abbr title="コマーシャル">CM</abbr>出演アイドル女優</caption>
			<tr>
				<td></td>
				<th abbr="堀北">堀北真希</th>
				<th abbr="仲間">仲間由紀恵</th>
				<th abbr="上戸">上戸彩</th>
				</tr>

			<tr>
				<th abbr="携帯会社">出演携帯電話会社</th>
				<td>NTTドコモ</td>
				<td>KDDI/沖縄セルラー</td>
				<td>ソフトバンクモバイル</td>
				</tr>

			<tr>
				<th abbr="出身">出身地</th>
				<td>東京都</td>
				<td>沖縄県</td>
				<td>東京都</td>
				</tr>

			<tr>
				<th>身長</th>
				<td colspan="2">160cm</td>
				<td>162cm</td>
				</tr>

			<tr>
				<th>血液型</th>
				<td>B型</td>
				<td>A型</td>
				<td>O型</td>
				</tr>
			</table>

これをテーブルを認識するウェブブラウザで表示させると、一番上の行は左から空欄, 堀北真希, 仲間由紀恵, 上戸彩と見出しが表示され、また左端の列は上から空欄, 出演携帯電話会社, 出身地, 身長, 血液型の順に見出しが並び、それぞれに適切な情報が並べられる事となります。

これをしらぎくモバイルシステム VIを通すと、テーブルを認識しない携帯電話に対して、以下のように出力します。

平成21年度の携帯電話会社CM出演アイドル女優
出演携帯電話会社
堀北真希
NTTドコモ
仲間由紀恵
KDDI/沖縄セルラー
上戸彩
ソフトバンクモバイル
出身地
堀北
東京都
仲間
沖縄県
上戸
東京都
身長
堀北
仲間
160cm
上戸
162cm
血液型
堀北
B型
仲間
A型
上戸
O型

ご覧の通り、一番目の見出し行で堀北真希, 仲間由紀恵, 及び上戸彩の見出しコマにそれぞれ abbr="堀北"属性, abbr="仲間"属性, 及び abbr="上戸"属性が附与されている事で出力二行目の出身地以降ではこれらの属性値(略称)に置き換えられているのが分かります。

また、colspan="2"属性を与えられ、堀北真希の列と仲間由紀恵の列に跨って表示される事となっている160cmと言う項目は、関与する堀北及び仲間の見出し(正確には<dt>要素)のあとに移され、それぞれに対応する内容である事を明らかにしております。

テーブルを用いる場合の推奨事項。

文書中にテーブルがある場合、以下のようにする事であらゆる端末の閲覧者にも適切に情報を提供出来るようになります。

特に、以下に挙げる措置はしらぎくモバイルシステム VIを利用しない場合であっても、視覚障害者などが音声または点字出力で情報を得るのに有利な手助けとなります。

  • 制作者としては、しらぎくモバイルシステム VIを使う使わないに拘らず、表をHTML文書に記述するのであれば必ずやって欲しいと思っている事です。
モバイル向けにシンプルな表を作る
余り複雑な表を作ると、携帯端末で読めなくなる場合があります。

特に横スクロールを禁じている端末では、桁が増え過ぎると表が崩れるなどして読めない事もあり得ます。

このため、少なくとも桁は少なめにする事をお勧めします。

また、行も長過ぎると途中でページ分割が入ったりして閲覧性を損ねる事もありますので、余り長くならないようにしてください。

見出しコマにはscope属性を与える
見出しコマ(<th>要素)にはscope属性を与える事で、そのコマがどの方向に掛かるかが明確になります。

特にしらぎくモバイルシステム VIでは、scope属性の値に忠実に解析するようにしております。

  • 各データコマ(<td>要素)にheaders属性を与えて、対応する見出しコマを指定する事も可能ですが、記述数が少ない分見出しコマ側にscope属性を与える方が簡単かと思われます。
見出しコマや複数行に跨るデータコマにはabbr属性を与える
テーブルに対応していない環境に対して、しらぎくモバイルシステム VIはabbr属性が与えられているコマについて、一回目は当該要素の内容をそのまま出しますが、二回目以降はabbr属性で表される略称を代わりに出力します。

情報の欠落の恐れが無い限り、abbr属性で端折った表現を与えておく事をお勧めします。

以下はしらぎくモバイルシステム VIの処理上の都合に依る推奨事項ですが、それでも他の非視覚系環境への対応を阻害する事はない筈のものです。

クラス名の与え方
WAP 2.0 端末向けには、<tr>要素, <th>要素及び<td>要素のclass属性はそのまま出力されます。

一方、携帯電話向けのHTMLでは行グループ(<tbody>要素など), 列(<col>要素)及び列のグループ化(<colgroup>要素)は定義されておりません

従って、これらの要素にクラス名を与えても、携帯端末では利用出来ませんし、しらぎくモバイルシステム VIでも当然無視します

行にクラス名を与える場合には必ず<tr>要素に、列にクラス名を与える場合には対応するコマ全てにそれぞれクラス名を与えてください。

id属性の扱い
WAP 2.0 端末向けには、<tr>要素, <th>要素及び<td>要素のid属性はそのまま出力されます。
  • このため、これらの要素であれば、IDセレクタに依るスタイル指定が可能になります。

その他の端末に対しては、これらの要素に与えられたid属性はフラグメントとしてのみ機能します。

  • すなわち、行或いはコマに与えたid属性は、そのタグの後の最も近いコマの内容の先頭に<a id="○○"></a>要素または<a name="○○"></a>要素として置き換えられます。

尚、携帯電話向けのHTMLでは行グループ(<tbody>要素など), 列(<col>要素)及び列のグループ化(<colgroup>要素)は定義されておりません

従って、これらの要素にid属性を与えても、携帯端末では利用出来ませんし、しらぎくモバイルシステム VIでも当然無視します