HTMLのデータ形式

この文書の最新版は「データ形式一覧@ばけらの HTML リファレンス」に移転しています。以下の文章は古くなっているかも知れません。

HTML のデータ形式、主に属性値として指定できる値について説明します。

SGML基本データ形式

以下は SGMLで予約されているデータ形式です。#PCDATA や RCDATA は要素の中身として使われ、 NAME, ID, IDREF, IDREFS, NUMBER は属性値として使われます。CDATA はそのどちらにも使われます。

#PCDATA

PCDATA は Parsed Character Data の略です。Parsed というのは SGML 的に解釈(パース)されるということを意味します。このデータ型は任意の長さを持つ(長さゼロでも良い)任意のテキストですが、以下のような特徴を持ちます。

HTML のほとんどの要素は自らがこの #PCDATA を含めるか、もしくは子要素の中にこのデータを含めるようになっています。いわゆる「地の文」は、すべてこの #PCDATA という形式だと考えて構いません。

CDATA などと違い、#PCDATA の頭には予約名標識 "#" がつきますが、それほど深い意味はありません。内容モデルが CDATA や RCDATA の要素は他の要素を一切含みませんが、#PCDATA を含む要素は他の要素を含むこともできます(こういう内容モデルのことを「混合内容」と言います)。ですから、要素名と明確に区別するために # が必要なのです。

RCDATA

Replaceable Character Data、「置換可能文字データ」です。置換可能とは、文字参照が対応する文字に置き換えられると言うことを意味します。つまり、& と書くと & に置き換えられます。けれども、#PCDATA と違ってマークは解釈されませんので、タグやコメントのようなものを書いても単なるデータとして扱われます。

HTML2.0 の TITLE 要素の中身がこの形式でした。

CDATA

CDATA は Character Data の意味で、読んで字のごとく文字データを表します。#PCDATA と違う点は、マークが SGML的に解釈されないということです。これは任意の長さ(長さゼロでも良い)のべたのテキストだと考えて構いませんが、属性値として使われる場合と要素の中身として使われる場合で、その意味合いが少し違います。

要素内の CDATA

SCRIPT や STYLE 要素の中身が CDATA とされています。かつての XMP や PLAINTEXT 要素の中身も CDATA として定義されていました。これは以下のような特徴を持ちます。

それから、ETAGO が出現した時点で CDATA が終了することに注意してください。ETAGO とは「終了タグ開始区切り子」のことで、HTML では </ という文字列です。つまり、CDATA の中に </ を書くことは出来ません。そういうわけで、SCRIPT の中にも </ を書くことは出来ません。

もっとも、現実にはこれを正しく実装しているブラウザは存在しませんから、あまり心配しなくて良いのかもしれません。逆に、SCRIPT の終了タグにエンプティタグを使ったりすると SCRIPT 要素の終わりが判断できず、以降がずっと SCRIPT の中身だと見なされてしまいます。

属性内の CDATA

属性値の中の CDATA では、文字参照を解釈するようになっています。たとえば、onclick="alert(&quot;押すなよ&quot;)" は、onclick='alert("押すなよ")' と同じ効果を発揮します。

マークアップは無視されます。ですからたとえば

 <PRE title="<BR>タグの例文">

などという記述も可能です。しかし、ブラウザはこれをうまく解釈できないかも知れません。ですから、文字参照を使ってこのようにした方が良いでしょう。

 <PRE title="&lt;BR&gt;タグの例文">

これならブラウザを混乱させることはありません。

属性値が URI の場合も例外ではないので気をつけてください。CGI に渡すパラメータの区切りに & をそのまま使ってしまう人がいますが、駄目です。たとえば

<A href="dummy.cgi?lt=5&gt=6&copy=7">

のような例は不可で、& を &amp; に書き換えなければなりません。

なお、パラメータの区切りに ; を使えるようなら、& の代わりに ; を使うことで、この問題を回避できます。たとえば、鳩丸掲示板はパラメータの区切りに ; を使えるようになっています。CGI の側で対応する方法については、「Perlを改造しよう!」を参照してください。

※ややこしい註 …… ここでは CDATA ということにしていますが、SGML的には、引用符で括られた属性値の中身は RCDATA として解釈されます。引用符を省略したときは CDATA や他のデータ形式になります。HTML では文字参照を含む属性値の引用符は省略できません(名前文字でない & が含まれているからです)ので、常に文字参照が展開されるように見えます。

NAME

要素の名前を指定する属性の値として使われます。この値には、以下のような制限があります。

また、アルファベットの大文字小文字が区別されるか否かは、SGML 宣言の NAMECASE で指定されています。HTML ではNAMECASE GENERAL YES とされていますので、大文字と小文字を区別しません。よって、"NAME" という名前と "name" という名前は同じです。

もう少し正確に言うと、小文字は大文字に変換されて解釈されます。

なお、A の NAME 属性のデータ形式は NAME ではなく CDATA ですから、上記の制限は受けません。属性名だけを見て早とちりしないようにしてください。

ID

id 属性の値として使われる形式です。NAME と同じ制限があります。大文字小文字の区別についても同様です。

IDREF

これは ID Reference の略です。他の ID を参照するときに使います。別の場所で記述された ID の値をそのまま書くわけです。

IDREFS

IDREF の複数形です。スペースで区切って ID を列挙します。

NUMBER

正の整数を十進数で記します。使える文字は 0〜9 です。CDATA 型属性は長さゼロの空の値をとることが出来ましたが、NUMBER では最低でも一桁の数字が必要です。

意味づけされた CDATA型属性

ほとんどの属性値は CDATA の形を取ります。しかし一口に CDATA と言っても、その内容は様々です。アスキー文字で記された名前、URI、パーセント付きの数値、文章……これらは全く違う値をとるにも拘わらず、SGML 的にはすべて CDATA という同じデータ形式を持っています。

これらを一口に CDATA だと言ってしまうと、その属性にどんな値が指定されるのか理解することが難しくなります。そこで HTML の DTD では、パラメータ実体を用いて属性のデータ形式を色々に区分しています。

MIMEタイプ (%ContentType;)

MIME タイプ(コンテントタイプ)を示します。"text/html" とか "image/gif" のように記します。大文字小文字は区別しません。A要素の type属性などがこの形式の値をとります。

MIMEタイプ列挙 (%ContentTypes;)

上記 MIME タイプをコンマで区切って列挙したものです。FORM要素の accept属性がこの形式の値をとります。

文字セット (%Charset;)

文字エンコーディング(文字セット、符号化方式)を示します。"ISO-2022-JP" とか "SHift_JIS" のように、IANA に登録されている符号化方式の名称を指定します。大文字小文字は区別しません。A, LINK, SCRIPT の charset属性がこの形式の値をとります。

文字セット列挙 (%Charsets;)

上記をスペースで区切って列挙したものです。FORM要素の accept-charset属性がこの形式の値をとります。

一文字 (%Character;)

ISO10646で定義されている文字の中から、一文字。&amp; のように文字参照を使うこともできます。A, LABEL などの accesskey属性がこの形式の値をとります。

リンクタイプ (%LinkTypes;)

リンクタイプをスペースで区切って列挙します。リンクタイプとは、Next, Prev, StyleSheet 等々です。大文字小文字は区別しません。ALINK の rel属性、rev属性がこの形式の値をとります。

出力メディア (%MediaDesc;)

出力メディアをコンマ区切りで列挙します。現在できる指定は、screen, tty, tv. projection, handheld, print, braille, aural, all です。大文字小文字は区別しません。LINK要素や STYLE要素の media属性がこの値をとります。

URI (%URI;)

URI を示します。URI とは RFC2396 で定義されているもので、URL, URN, などなどの総称です。スキーム名で始まる絶対 URI だけでなく、相対 URI(たとえば <A href="../"> とか)も使えます。

基本的に URI は大文字小文字を厳格に区別しますので気をつけてください。

また、フラグメントID の指定も可能です。これは URI の後ろに # で区切って記します。フラグメントID とは文書内の位置を指定するもので、HTML では id 属性や A の name 属性の値をそのままフラグメントID として使います。たとえば、inline.html という文書の中に

<SPAN id="a">ここがアンカーですよ。</SPAN>

としておいて、他の文書で

<A href="inline#a">A要素</A>

のようにすると、inline.html という文書の当該部分にジャンプします。

URI には空の値を指定することもできます。その際には、BASE 要素で指定されている URI が指定されたものと見なされます(BASE の指定がなければ、HTML 文書自身の URI が使われます)。ただし、空の URI を解釈できないブラウザもあるようです。

空の URI とフラグメントID 、という指定も可能です。たとえば <A href="#top">先頭へ</A> のようにすると、同一文書内の Top という場所を参照することになります。

A の href属性、IMG の src 属性、BLOCKQUOTE の cite属性など、この形式を使う属性はたくさんあります。

日付と時間 (%Datetime;)

日付と時間を表します。書式は以下のとおりです。

YYYY-MM-DDThh:mm:ssTZD

YYYY,MM,DD,hh,mm,ssにはそれぞれ数字が入ります。桁数が少ないときは0で埋めます。大文字の T は日付と時間の区切り子、hh は二十四時間制で、am/pm の表記はありません。TZD はタイムゾーンを示します。たとえば日本なら "+09:00" です。標準時なら大文字の Z をつけます。

要するに、1998-09-22T23:15:30+09:00 のような表記になるわけです。

INS要素、DEL要素の datetime属性がこの形式の値をとります。

スクリプト (%Script;)

スクリプト言語を記します。文字列はスクリプト実行エンジンにそっくりそのまま渡されます。大文字小文字を区別するか否かは、その言語次第です。

SCRIPT要素の中身がこの形式です。また、onclick などのイベント系属性がこの形式の値をとります。

スタイル言語 (%StyleSheet;)

スタイルシート言語を記します。スクリプト同様、スタイルシート言語解釈エンジンにそのまま渡されます。

STYLE 要素の中身、style属性の値がこの形式です。

テキスト (%Text;)

メッセージとしてそのまま表示されたり読み上げられたりするテキストです。

属性を省略したときの値が空文字列 "" とは限らない点に注意してください。たとえば、IMG の alt 属性を指定しないとき、alt="" と見なされるとは限りません。ブラウザによっては、[INLINE] などという文字列を与えたりします。

IMG の alt属性、TABLE の summary属性などがこの形式の値をとります。

ピクセル数 (%Pixels;)

長さを表します。整数値のピクセル数を指定します。TABLEの border属性、TDの width属性などがこの形式の値をとります。

長さ (%Length;)

長さを表します。整数値のピクセル数か、表示可能領域に対する長さの比率を "50%" のようにパーセンテージで指定します。IMG要素の width属性や height属性を始め、長さを規定する属性の多くがこの形式の値をとります。

長さ比率 (%MultiLength;)

長さを示します。ピクセル数、パーセンテージの他に、相対比率を指定することが可能です。相対比率は整数値の右に * を付して表されます。たとえば、

<TABLE width="600">
<COLGROUP width="50">
<COLGROUP width="2*">
<COLGROUP width="3*">
<TBODY>
……

のようにすると、最初の COLGROUP が 50 ピクセルを占め、残りの 550 ピクセルを二番目、三番目の COLGROUP が 2:3 の割合で分割することになります(220 ピクセルと 330ピクセルになります)。なお、* と書くと 1* と同じ意味になります。

COLCOLGROUP の width 属性がこの形式の値をとります。

長さ比率列挙 (%MultiLengths;)

上記長さ比率をコンマで区切って列挙します。"50, 40, 30" "10%, 10%, 80%" "5*, 2*, 3*" "120, 25%, 1*" などの指定が可能です。

FRAMESET要素の rows属性や cols属性がこの形式の値をとります。

コーディネート (%Coords;)

整数値のピクセル数をコンマで区切って列挙します。AAREA の coords 属性がこの形式の値をとります。

(%Color;)

色を指定します。RGB値か色名で指定することが出来ます。

RGB値で指定する場合、赤、緑、青それぞれの強さを 00 から FF までの 256段階で表し、#RRGGBB の形式で指定します。たとえば #FFCC99 なら、赤 FF(十進数の255)、緑 CC(204)、青 99(153) で、肌色っぽい色になります。

名前で指定する場合、以下の 16種類の色名から一つを選んで指定します。black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua です。

orange などはありません。ブラウザは独自に対応しているかもしれませんが、一般的ではないので、RGB指定の方が無難でしょう。

BODY の bgclor属性や FONT の color 属性などがこの形式の値をとりますが、いずれも HTML4.0 では非推奨とされています。

目標フレーム (%FrameTarget;)

リンク先の文書などを表示するフレーム(もしくはウィンドウ)を指定します。FRAME 要素の name 属性で付けた名前をそのまま用います(この名前はアルファベットで始まらなければなりません)が、用いられていない名前を指定することも出来ます。その場合、その名前の付いた新しいウィンドウを開くことになります。

この属性には、次のような予約名を指定することもできます。予約名の先頭には _ (アンダースコア)がついています。

_blank を使うと新しいブラウザが開きますが、勝手にぼこぼこブラウザが立ち上がると、メモリの少ない環境ではつらいものがあります。大抵のブラウザには「新しいウィンドウで開く」というコマンドがありますから、別ウィンドウを開きたいときは自分の意思で実行可能です。_blank の指定は程々にしましょう。

A, AREA, LINK, FORM, BASE 要素の target 属性がこの形式の値をとります。

その他の意味づけされた属性

CDATA じゃなくても意味づけされているものがあります。

言語コード (%LanguageCode;)

これは NAME 型の属性値で、言語コードを指定します。言語コードについては RFC1766 を参照してください。

日本語のサイトでよく使われるのは、"ja"(日本語)、"en"(英語) の二つでしょう。他にも zh(中)、de(独)、fr(仏)、it(伊)など、たくさんあります。"en-US"(アメリカ英語)のような細かい指定もあります。

ほとんどの要素に指定できる lang 属性、A 要素や LINK 要素の hreflang 属性がこの値をとります。


ばけらのHTMLリファレンス

HTML鳩丸倶楽部

水無月ばけら, MINAZUKI Bakera
E-mail: bakera@star.email.ne.jp