SGMLの排除機能とは?

HTML」や「XHTML」は「SGML」というものに内包されている形になります。
「SGML」はインターネット上にあるサイトを構成している多数のマークアップ言語 (HTML) の基盤とも呼べる言語になります。

SGMLって何だろう?

空白を空けるためのものだ!!!

現在地:TOP > 制作言語について > SGMLの排除機能について

SGMLについて

正式名称:Standard Generalized Markup Language 略称:SGML

後に、一般的なインターネットサイトを作る際に使用されることになった言語「HTML
XML」(XHTMLの基盤となったもの) これらの「」にあたります。

「XHTML」は、私がサイトを作成している際に使用している言語です。

「XHTML」とは、従来の「HTML」を「XML」のルールを使って再定義したものです。

感覚的に言えば、下図のようになると思われます。

SGMLの説明

図でもわかるように「XML」の中に「XHTML」があります。つまり内包されているといえます。
厳密に言えば「XHTMLは XML HTML 双方に内包されている」と言えます。

排除機能とは?

XHTMLで変更された項目の一項目として「SGMLの排除機能を再現できない」というものがありますが、
これは一体どういうことなのでしょうか。

SGMLの排除機能」を説明するにあたり、DTD (文書型宣言) の存在が必要不可欠になってきます。

このページを右クリックしていただき、ソースコードを見てもらうと分かると思うのですが、ソースコード最上部に

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

このような書き込みがあります。

これはザックリ言ってしまえば
このページは、XHTML 1.0 Transitional というものに従ってソースコードを書いていますよ~
という事の説明になります。

その内容自体は、インターネット上にある別の場所から参照している形になっていますので、
1行の書き込みですんでいますが、実際の内容はもっと複雑であり、かなりの長文です。

その内容の部分において「SGMLの排除機能を再現できない」といっているのです。
簡単に言えば「SGMLで出来ていた事が、XHTMLでは出来ない」という事になります。

では、それがどういう事なのか。従来のDTDと、XHTMLでのDTDの内容を比較して説明します。

今回は「aタグ」について着目してみます。

従来のHTML・・・つまりHTML4では

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

aタグに関して、上記のような記述があります。この中で注意すべき点は「-(A)」の部分です。

この部分の意味は「要素群(A)はその子孫にわたって出現してはいけない」という意味になります。

これについて噛み砕いて解釈すると
aタグの中にaタグを入れることはできない。(入れ子構造の不可)
という意味になります。

一方、XHTMLでの記述を見てみると・・・

<!ENTITY % a.content "(#PCDATA | %special; | %fontstyle; | %phrase; | %inline.forms; | %misc;)*">

こういった記述があります。
この時、XHTMLにおける「aタグ」について、さらに掘り下げていっても子要素に関して「aタグ」に関する記述がありません。

子要素で「aタグ」に関しての記述がない。
ということは、逆に言えば「子要素として、aタグを使用する事ができない」という事になります。(入れ子構造の不可)

しかし、上記の記述は「子要素」までしか明記されていません。
という事は
孫要素よりも深い部分でなら、aタグ 内で aタグ を使用する事ができるのでは?
とも考えられてしまうわけですが、
実は記述をしていないだけで、どんなに深度が増したとしても「aタグ」内に「aタグ」を入れる事はできません。

つまりどういうこと?

何やら難しくて、頭がこんがらがってきたので、さらに簡単にザックリ言ってしまいましょう!

つまりはこういう事なのです・・・

結論としては・・・

XHTMLでは、「排除機能」を使用する事ができない (再現できない) が、それを記述できないだけで、原則として (上記の例を用いると・・・)「aタグ」内には「aタグ」を入れる事ができませんよ

という事になるんです。

inserted by FC2 system