HTMLはISO 8879:1986 -- Standard Generalized Markup Language (SGML)の応用です。SGMLは構造化された文書の型とその文書型の例を表現する表記法を定義したシステムです。HTMLのDTDの公式文――DTDとSGML宣言――は9.「HTML公開書類」に載せてあります。
「HTML」という用語は、ここで定義される文書型とそれに従って表現するための表記法の両方を意味します。
HTML文書はSGML文書、すなわち実体の集まりとして物理的に、また要素の階層として論理的に構成された字の配列です。
SGMLの仕様書では、SGML構文法の最初の現れとして、SGML文書をSGML宣言・序文(prologue)・例(instance)の三つの部分に分けています。この仕様書の目的からすると、序文はDTDになります。このDTDは別の文法で記述されます。それは、文書型宣言(doctype declaration)で開始記号が示され、データ文字とタグを端子とし、要素宣言により結果を決めるというものです。これらはDTD、つまりこの文法により定義された言語に従わなければなりません。
SGML宣言は文法における語彙を決定します。SGML宣言では、文書内のすべての文章実体に存在する全ての文字を含んだ文字集合とその文字に対応したコード位置を表わす文字セットを定義します。
また、SGML 宣言は、文書の構文参照文字セットや、具体的な構文にSGMLの抽象的な構文を結び付ける他の2、3の変数を指定します。この具体的な構文が、文書の文字の連続がどのように序文の文法における端子の連なりとして表わされるのかを決定します。
例えば以下の文書を見てみましょう。
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<title>構文解析の例</title>
<p>テキスト。 <em>*wow*</em></p>
HTML利用者代理は、9.5.「HTMLにおけるSGML宣言」で示されるSGML宣言を使用するべきです。その文書の文字セットに従って、`*'は米印文字`*'と看做されます。
上の例は、以下のような端子の配列と看做されます。
DTD文法の開始記号はHTMLで、それの結果は`-//IETF//DTD HTML 2.0//EN'(9.1.「HTML DTD」)により同定される公開書類として与えられます。上記の端子を解析すると以下のようになります。
HTML | ¥-HEAD | | | ¥-TITLE | | | ¥-<TITLE> | | | ¥-"構造分析の例" | | | ¥-</TITLE> | ¥-BODY | ¥-P | ¥-<P> | ¥-"テキスト。 " | ¥-EM | | | ¥-<EM> | | | ¥-"*wow*" | | | ¥-</EM> | ¥-</P>
他のものの境界が推察に任されるのに対して、要素のいくつかはタグによって明白に区切られています。<HTML>要素は<HEAD>要素と<BODY>要素を含みます。<HEAD>は、開始タグと終了タグで明白に区切られた<TITLE>要素を含みます。
SGMLは抽象的構文と具体的参照構文を指定します。分量や能力(例えば名前の字数の制限)は別にして、すべてのHTML文書は具体的参照構文を用いています。特に、全ての表記記号は[ISO-646]のレパートリーになります。データ文字は、文書の文字セット(6.「文字、単語、段落」を参照)から描かれます。
たとえば一連のタグとデータへの一連の文字の対応など、SGML解析についての完備した論文は、SGML標準[SGML]に委ねられています。この節は単なる要約です。
表記を構成しない文字の連なりについては([SGML]の 9.6 『 Delimiter Recognition 』を見てください)直接にデータ文字列として表現されます。 表記の中にも、データ文字列として表現されるものがあります。文書文字セットにより、数字はただ一つの文字列に対応します。HTMLのDTDで定義された一般的な実体のそれぞれがただ一つの文字列に対応します。
例えば、
abc<def => "abc","<","def"
abc<def => "abc","<","def"
実体上のセミコロン区切りや数字参照は、参照の後に来る文字が名前の一部だと認識されかねないときにだけ必要です([SGML]の9.4.5 "Reference End"を見てください)。
abc < def => "abc ","<"," def"
abc < def => "abc ","<"," def"
アンパサンド(&記号)は、後ろに文字や`#'記号、数字が続く場合には表記>記号としてのみ認識されます。
abc & lt def => "abc & lt def"
abc &# 60 def => "abc &# 60 def"
通常の文章をHTMLへ変換する際には、以下のとおり'<'や'&'、'>'などの記号を実体参照や数字参照に置き換えてください。
記号 実体参照 数字参照 記号の種類
--------- ---------- --------- ------------
& & & アンパサンド
< < < 小なり
> > > 大なり
タグは、見出し、段落、一覧、強調文字、そして連鎖といった要素の範囲を区切ります。ほとんどのHTML要素は、まず要素名や属性を与える開始タグとして現われ、次に内容、そして終了タグと続きます。開始タグは`<'と`>'で区切られ、終了タグは`</'と`>'で区切られます。例えば以下のようにします:
<H1>これは見出しです</H1>
終了タグがない開始タグのみの要素もあります。例えば改行するときには`<BR>'タグを使います。
それから、段落(`</P>')や一覧項目(`</LI>')、定義項目(`</DT>')、定義内容(`</DD>')など、省略してもいい終了タグもあります。
要素の内容は一連のデータ文字列と入れ子になった要素です。錨など、入れ子にできない要素もあります。錨と強調は別の部分に入れるようにしてください。HTML DTDのすべての詳細は9.1, "HTML DTD"を見てください。
要素名は、文字、数字、ピリオド、ハイフンから成ります。9.5,「HTMLのSGML宣言」にあるように、HTMLのSGML宣言における`NAMELEN'変数で、要素名の長さは72字以内に制限されています。要素と属性名は大文字小文字を区別しませんが、実体名は区別します。例えば`<BLOCKQUATE>'も`<BlockQuate>'も`<blockquate>'も同じですが、`&'は`&'とは異なります。
開始タグにおいては、要素名はタグ開始記号`<'に続けて書かなければなりません。
開始タグの中では、要素名とタグ終了記号との間に空白と属性を書くことができます。名称のみからなる属性もいくつかありますが、属性の仕様は一般的に、名称・等号・値で形成されています。等号の前後には空白をつけることができます。
属性の値は以下のどちらかになります。
下の例では、<img>は要素名で、srcが属性名であり、`http://host/dir/file.gif'は属性値です。
<img src='http://host/dir/file.gif'>
文字列による属性値を処理する際には、以下のとおり引用符や空白を実体参照や数字参照に置き換えてください。
記号 実体参照 数字参照 記号の種類
--------- ---------- ----------- ---------------------
HT 	 タブ
LF ラインフィード
CR キャリッジリターン
SP   スペース
" " " 引用符
& & & アンパサンド
例えば以下のようになります。
<IMG SRC="image.jpg" alt="First "real" example">
属性値の長さは、SGML宣言(9.5,「HTMLのSGML宣言」)の`NAMELEN'パラメータで1024文字に制限されています。
ISMAPやCOMPACTのような属性は最小限の語法([SGML]の7.9.1.2 "Omitted Attribute Name"を見てください)で書いてもかまいません。
<UL COMPACT='compact'>
という表記を最小限の語法で記述すると以下のようになります。
<UL COMPACT>
HTML文書の中で注釈を挿入するには注釈宣言を使用します。注釈宣言は、`<!'とゼロもしくはそれ以上の注釈、それに続く`>'から成ります。個々の注釈は、`--'で始まり次の`--'までの文章全てが含まれます。注釈宣言では個々の注釈の後に空白を入れることが可能ですが、最初の注釈の前に入れることはできません。注釈宣言全体は無視されます。
注釈の例
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HEAD>
<TITLE>HTMLの注釈例</TITLE>
<!-- Id: html-sgml.sgm,v 1.5 1995/05/26 21:29:50 connolly Exp -->
<!-- 別の -- -- 注釈 -->
<!>
</HEAD>
<BODY>
<p> <!- 注釈ではなく、データ文字です ->
この仕様に準拠したHTMLであることを明示するには、それぞれの文書を以下に示すいずれかの文書型宣言で始める必要があります。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
この文書型宣言は9.1,「HTML DTD」で示すHTML DTDに関連しています。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN">
この文書型宣言も9.1,「HTML DTD」で示すHTML DTDに関連しています。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN">
この文書型宣言は9.3,「第1水準HTML DTD」による第1水準HTML DTDに関連しています。第1水準文書に書式要素が存在してはいけません。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN">
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN">
この二つの文書型定義は、9.2,「厳密なHTML DTD」と9.4,「厳密な第1水準HTML DTD」によるHTML DTDに関連しています。これは構造的により厳密なHTMLの定義になっています。
HTML利用者代理はその他の文書型を扱ってもかまいません。特にまったく別のformal public identifiersや文書型を扱ってもかまいません。付け加えた実体や要素など、内部宣言のサブセットや別の表記>宣言を扱ってもかまいません。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<!-- ここにコメントを書くとよいでしょう -->
<HEAD>
<TITLE>文書構造の例</TITLE>
</HEAD><BODY>
<H1>第一の見だし</H1>
<P>HTMLファイル例における段落です。テキスト文書内にタイトルは現われませんが、(H1で定義した)見出しは現われることを覚えておいてください。</P>
<OL>
<LI>番号付きリストの最初の項目
<LI>番号付きリストの二番目の項目
<UL COMPACT>
<LI> リストは入れ子が可能な点に注目してください
<LI> 空白はHTMLソースを見やすくするのに便利です。
</UL>
<LI>番号付きリストの三番目の項目
</OL>
<P>追加された段落です。ここでは付けていますが、段落の終了タグは 技術的には必要ではありません。また、段落内で強調文字を含めること もできます。<EM>この部分は強調されています。</EM>終了タグ </P>が省略されていることに注目してください。
<P>
<IMG SRC ="triangle.xbm" alt="警告:">
この<b>太字の説明</b>を読みましょう。
</BODY></HTML>