3 SGML及びHTML

この規定のこの節は, SGMLを導入し, HTMLとの関係を示す。SGMLの詳細は,規格([ISO8879]を参照)に 示される。

3.1 SGMLへの導入

SGMLは, マーク付け言語 を定義するシステムとする。文書作成者は, 構造情報,表示情報及びセマンティック情報を内容とともに表現することによって, 文書をマーク付けする。 HTMLはマーク付け言語の一例である。 HTML文書の例を次に示す。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
     "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
   <HEAD>
      <TITLE>My first HTML document</TITLE>
   </HEAD>
   <BODY>
      <P>Hello world!
   </BODY>
</HTML>

HTML文書はヘッド部(ここでは, <HEAD>と</HEAD>との間)及びボディ部(ここでは, <BODY>と</BODY>との間)に分けられる。文書のタイトルは,文書に関する他の情報とともにヘッド部に現われ,文書内容は, ボディ部に現われる。この例のボディ部は, 1段落だけを含み, <P>でマーク付けされている。

SGMLで定義される各マーク付け言語は, SGML アプリケーションと呼ばれる。 SGMLアプリケーションの 一般的な特徴を次に示す。

HTML4.0規定は,SGML宣言, 三つの文書型定義 (三つの文書型定義の記述に関しては, HTML 版情報を参照)及び 文字参照のリストを含む。

3.2 HTMLで用いるSGML構成子

HTMLで用いるSGML構成要素を次の各節で導入する。

附属書は, HTMLツール及び利用者エージェントによって広くサポートされてなく,避けることが望ましいSGML機能を列挙する。

3.2.1 要素

SGML文書型定義は,構造又は望ましい振る舞いを表現する 要素型を宣言する。 HTMLは, 段落,ハイパテキストリンク,リスト,表, 画像などを表現する要素型を含む。

要素型宣言は,一般に,開始タグ,内容及び終了タグの3部分を記述する。

要素名は, 開始タグ(<element-name>と書かれる。)及び 終了タグ(</element-name>と書かれる。)に現われる。 終了タグの要素名の前の斜線に注意すること。 例えば,UL要素型という開始タグ及び終了タグは,リスト中で 項目を区切る。その例を次に示す。

<UL>
<LI><P>...list item 1...
<LI><P>...list item 2...
</UL>

HTML要素型の中には,文書作成者が終了タグを省略できるものがある。 P 要素型及びLI要素型がその例である。 開始タグ省略できる要素型もわずかに存在する。 HEAD及びBODYがその例である。 HTML DTDは, 各要素型に関して,開始タグ及び終了タグが必要かどうかを指示する。

HTML要素型には, 内容のないものもある。例えば, 改行要素BRは内容をもたず,テキストの行を終了させる役割しかない。 これらの要素は, 終了タグをもたない。 文書型定義及びこの規定のテキストは,要素型が空(内容をもたない)かどうかを指示し,内容をもつ場合は,何が正当な内容と考えられるかを指示する。

要素名は, 常に大文字及び小文字を区別しない

要素を支配する規則に関する情報については,SGMLの規格を参照されたい。 (要素は適切に入れ子にされなければならず,一つの終了タグは, マッチする開始タグ(7.5.1)まですべての省略された開始タグを閉じる。

終了タグのある例を次に示す。

<P>This is the first paragraph.</P>
...a block element...

これは, 終了タグを用いずに次のとおり書ける。

<P>This is the first paragraph.
...a block element...

これは, <P>開始タグが次のブロック要素によって閉じられることによる。同様に,段落がブロック要素で囲まれる例を次に示す。

<DIV>
<P>This is the paragraph.
</DIV>

このとき, 囲んでいるブロック要素の終了タグ(ここでは, </DIV>)は, <P>開始タグが開いたものの終了タグを意味する。

要素はタグではない。タグとして(例えば"Pタグ"), 要素を参照する人がいる。 開始タグにしても終了タグにしても, タグと要素とは別のものであることを忘れてはならない。 例えば,開始HEADタグ及び終了HEADタグのどちらもマーク付けにはなくてもよいが,HEAD要素は常に存在している。

この規定で宣言される要素型は, すべて 要素索引に列挙されている。

3.2.2 属性

要素は, 属性と呼ばれる関連特性をもつことができ,それは, デフォルトで,又は文書作成者若しくはスクリプトで設定される値をもってもよい。 属性及び値の対は, 要素の開始タグの最後の">"の前に現われる。 (文法に合った)幾つかの個数の属性及び値の対が,スペースで区切られて,要素の開始タグの中に現れてよい。 それらはどんな順序で現われてもよい。

id属性が H1要素に対して設定されている例を次に示す。

<H1 id="section1">
This is an identified heading thanks to the id attribute
</H1> 

デフォルトで,SGMLは, 2重引用符(ASCII 10進 34)又は1重引用符(ASCII 10進 39)のいずれかを使用して,すべての属性値が 囲まれることを要求する。値が2重引用符によって囲まれる場合には, 1重引用符は属性値に含まれることができ, 逆も成り立つ。 文書作成者は, 2重引用符(&#34;)及び1重引用符(&#39;)を表現するために, 数値文字参照を用いてもよい。 2重引用符については,文書作成者は 文字実体参照&quot;も使用できる。

文書作成者が, 引用符なしに属性の値を指定してよい場合もある。 その属性値は, a〜z及びA〜Zの文字, 0〜9の数字, ハイフン(ASCII 10進 45) 及びピリオド(ASCII 10進 46)だけを含んでよい。 引用符を除去することが可能な場合でも,引用符の使用を推奨する。

属性名は, 常に 大文字及び小文字を区別しない。

属性値は, 一般的に大文字及び小文字を区別しない。 参照マニュアルの各属性の定義は, その値が大文字及び小文字を区別しないかどうかを示す。

この規定によって定義される属性は, すべて 属性索引に列挙されている。

3.2.3 文字参照

文字参照は, HTML文書に含んでよい文字の数値名又は記号名とする。文字参照は, めったに使用されない文字を参照したり, 文書作成ツールによる入力が難しいか不可能である文字を参照する場合に便利である。この標準情報(TR)の中でも文字参照を見ることが できる。文字参照は, "&"という記号で始まり, セミコロン(;)で終わる。 よくある例を次に示す。

HTML文字参照の詳細は, 後のHTML文書の文字集合の節に示す。 この規定は, HTML4.0文書に現われてよい文字参照のリストも含む。

3.2.4 注釈

HTMLの注釈(コメント)は, 次の構文をもつ。

<!-- this is a comment -->
<!-- and so is this one,
    which occupies more than one line -->

マーク付け宣言の開始区切り子("<!")と注釈の開始区切り子("--")との間に空白があってはならない。しかし,注釈の終了区切り子("--")とマーク付け宣言の終了区切り子(">")との間には空白があってもよい。よくあるエラーには, 注釈の中にハイフン列("---")を含むことがある。文書作成者は,注釈内に二つ以上の隣接したハイフンを置くことを避けるほうがよい。

注釈内に現われる情報に特別の意味はない。 例えば,文字参照は, 文字参照としては解釈されない。

3.3 HTML DTDの読み方

この標準情報(TR)における要素宣言及び属性宣言のいずれもは,それぞれの文書型定義(DTD)の素片を伴う。 要素の特性の記述に関して,より理解しやすいが,長くて正確さを犠牲にした記述方法を探すのではなく,規定の中にDTDの素片を含めることにした。 次の解説は,SGMLに詳しくない読者が, DTDを読んでHTML規定の技術的詳細を理解することを可能にする。

参考 この標準情報(TR)の本文中に断片的に示されたDTDは, 厳密DTD(7.参照)であって, そこには推奨しない要素及び属性は示されていない。それらについては, 22.の過渡的な文書型定義を参照されたい。

3.3.1 DTD注釈

DTDでは, 注釈は1行以上に広がってもよい。 DTDでは, 注釈は"--"マークの対によって区切られる。その例を次に示す。

<!ELEMENT PARAM - O EMPTY       -- named property value -->
この例では,"named property value"という注釈が, PARAM要素型の使用を説明している。DTDの中の注釈は, 規定ではない。

3.3.2 パラメタ実体定義

HTML DTDは, 一連のパラメタ実体定義で始まる。 パラメタ実体定義は, DTDの中の他の場所で参照され展開されてもよい一種のマクロを定義する。 これらのマクロは, HTML文書のテキストの中には現れてはならず,DTDの中だけに現われる。 文字参照と呼ばれる他のタイプのマクロは, HTML文書のテキストの中又は属性値の中で使用してよい。

パラメタ実体がDTDの中で名前によって参照されるとき,パラメタ実体は文字列に展開される。

パラメタ実体定義は,キーワード<!ENTITY % で開始し, その後に 実体名と, その実体を展開する引用符付き文字列とが続き,最後に >で終了する。 DTDの中のパラメタ実体のインスタンスは, "%"で開始し, それにパラメタ実体名が続き, オプションの";"によって終了する。

"%fontstyle;"実体が展開する文字列を定義する例を次に示す。

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

パラメタ実体が展開する文字列は, 他のパラメタ実体名を含んでよい。 これらの名前は,再帰的に展開される。 "%inline;"パラメタ実体が"%fontstyle;", "%phrase;", "%special;"及び"%formctrl;"のパラメタ実体を含んで定義される例を, 次に示す。

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

HTML DTDの中には,"%block;" "%inline;"という二つのDTD実体が頻繁に現れる。 それらは,内容モデルがそれぞれブロックレベル要素及び行内要素 を含む場合に用いられる。これらは, HTML文書の大域的構造の節で定義される。

3.3.3 要素宣言

HTML DTDの大部分は, 要素型及びその属性の宣言から構成される。キーワード<!ELEMENT が宣言を開始し, 文字> がそれを終了する。これらの間に次の指定がある。

例を次に示す。

    <!ELEMENT UL - - (LI)+>
この例では,

空要素型の宣言を次に例示する。

    <!ELEMENT IMG - O EMPTY>

内容モデル定義 

内容モデルは,要素型のインスタンスが何を含んでよいかを記述する。 内容モデル定義は, 次を含んでよい。

要素の内容モデルは, 次の構文で指定される。

( ... )
グループを区切る。
A | B
A又はBのどちらかが現れるが,両方が現れることはない。
A , B
A及びBの両方が, その順序で現れる。
A & B
A及びBの両方が, 任意の順序で現れる。
A?
Aが, 0回又は1回現れる。
A*
Aが, 0回以上現れる。
A+
Aが, 1回以上現れる。

HTML DTDからの幾つかの例を次に示す。

   <!ELEMENT UL - - (LI)+>

UL要素は, 1個以上のLI要素を含まなければならない。

   <!ELEMENT DL    - - (DT|DD)+>

DL要素は, 1個以上のDT要素又はDD要素を任意の順序で含まなければならない。

   <!ELEMENT OPTION - O (#PCDATA)>

OPTION要素は, &amp; -- などのテキスト及び実体だけを含んでよい。これは, SGMLデータ型#PCDATA によって示される。

付加的なSGML機能を用いて,内容モデルから要素を除外するHTML要素型もある。 除外される要素には, ハイフンが前置される。 明示的な除外は, 許容された要素を無効にする。

次の例では, -(A)は, 要素Aが別のA要素の中に現われることはできないことを意味する。つまり, アンカを入れ子にすることはできない。

   <!ELEMENT A - - (%inline;)* -(A)>

A要素型は, DTDのパラメタ実体"%inline;"の一部であるが, -(A)のために明示的に除外されること注意されたい。

同様に, 次のFORMに関する要素型宣言は, 入れ子にされたフォームを禁止する。

   <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

3.3.4 属性宣言

キーワード<!ATTLIST は, 要素がとり得る属性の宣言を開始し,着目する要素の名前,属性定義のリストがその後に続き,>で終了する。 各属性定義は,次を定義する三つ組みとする。

name属性がMAP要素に関して定義される例を次に示す。属性は, この要素についてはオプションとする。

<!ATTLIST MAP
  name        CDATA     #IMPLIED
  >

属性に許可される値の型は, SGMLデータ型であるCDATAとして与えられる。 CDATA は, 文字参照を含んでよいテキストとする。

"CDATA", "NAME", "ID"及びその他データ型に関するもっと詳細な情報は, HTMLデータ型の節を参照のこと。

いくつかの属性定義を記述する例を次に示す。

rowspan     NUMBER     1         -- number of rows spanned by cell --
http-equiv  NAME       #IMPLIED  -- HTTP response header name  --
id          ID         #IMPLIED  -- document-wide unique id -- 
valign      (top|middle|bottom|baseline) #IMPLIED

rowspan属性は, 型NUMBERの値を必要とする。そのデフォルト値は, "1" として明示的に与えられる。オプションのhttp-equiv属性は, 型NAMEの値を必要とする。オプションのid属性は, 型IDの値を必要とする。オプションのvalign属性は, 集合{top, middle, bottom, baseline} から値をとらなければならない。

属性定義におけるDTD実体 

属性定義は, パラメタ実体参照を含んでもよい。

次の例では, LINK要素に関する属性定義リストが, "%attrs;"パラメタ実体で開始している。

<!ELEMENT LINK - O EMPTY               -- a media-independent link -->
<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
  >

開始タグ: 必須, 終了タグ: 禁止

"%attrs;"パラメタ実体は, 次のとおり定義される。

<!ENTITY % attrs "%coreattrs; %i18n; %events;">

"%attrs;"の定義における"%coreattrs;"パラメタ実体は, 次のとおり展開する。

<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --
  class       CDATA          #IMPLIED  -- space separated list of classes --
  style       %StyleSheet;   #IMPLIED  -- associated style info --
  title       %Text;         #IMPLIED  -- advisory title/amplification --"
  >

これらの属性はほとんどのHTML要素型について定義されるため, 便宜上, "%attrs;"パラメタ実体が定義された。

同様に,DTDは, "%URI;"パラメタ実体を文字列"CDATA"に展開するものと定義する。

<!ENTITY % URI "CDATA"
    -- a Uniform Resource Identifier,
       see [URI]
    -->

ここに例示するとおり, パラメタ実体"%URI;"は, 属性に期待されるデータの型に関してより多くの情報を, DTDの読者に提供する。 類似する実体が, "%Color;", "%Charset;", "%Length;", "%Pixels;"などに関して定義されている。

論理属性  

OPTION要素に関するselected属性などの,論理変数の役割を果たす属性もある。要素の開始タグに現われることが,属性の値は"真"であることを意味する。 要素の開始タグになければ, "偽"の値を意味する。

論理属性は,文法に従って,例えばselected="selected"などの,属性それ自体の名前である単一の値をとってよい。

selected属性を論理属性と定義する例を次に示す。

selected     (selected)  #IMPLIED  -- reduced inter-item spacing --

属性は, 要素の開始タグに現われることによって, "真"に設定される。その例を 次に示す。

<OPTION selected="selected">
...contents...
<OPTION>

HTMLでは,論理属性は最小化フォームで現われてよい。属性のは, 単独で要素の開始タグに現われる。したがって, selectedが, 次に示すとおり書くことによって設定される。

<OPTION selected>

これは, 次の記述の代わりになる。

<OPTION selected="selected">

多くの利用者エージェントが論理属性の最小化フォームだけを認識し, 完全フォームを認識しないことを, 文書作成者は知っていることが望ましい。