- Date:2009/11/2
- Category:マークアップ
- Author: wonder
事の発端は「ddの中にpって入れられますか?」っていう質問からでした。
「入れられるよ!」と答えたものの自信が・・。
とりあえずHTMLの仕様書を見れば分かるんじゃないですかね。
HTMLの仕様書
他のいろんな言語と同じように、HTMLにも仕様書があります。
英語だとよくわかんないので日本語に翻訳されたものを見ます。
ほかにもいろいろ。
タグの説明部分を見てみる
今回はddを調べたいのでddについて書いてある箇所をみることにします。
すると、こんな感じで。
<!ELEMENT DD - O (%flow;)* -- definition description -->
書いてありました。
なんでしょうこれ。
分かるのは「DD」っていう部分くらいかな。
調べてみるとどうやらこれが仕様のようで、これを読み解けば分かるらしいんですね。
いわゆる、DTD(Document Type Definition)(文書型定義)っていうやつ。
DTDを読む
読み方はこちらのページにありました。
神崎先生のサイトにも。
これをもとにすると、DTDというのは
<!ELEMENT 要素名 , タグの省略について , 内容 , コメント -->
※カンマは見やすくするためにつけているだけで、実際は入れません
というように書かれているようです。
じゃあ、ddについてを見直してみます。
ddについて
まず、要素名。
これは分かりますね。
<!ELEMENT DD - O (%flow;)* -- definition description -->
「DD」となっているのでこれはddについてのものだということですね。
さて、次にタグの省略について。
<!ELEMENT DD - O (%flow;)* -- definition description -->
この「- O」の部分なんですが、最初の記号が開始タグ、二番目の記号が終了タグを表します。
「-」は省略不可
「O」は省略可能
なので、ddタグは終了タグのみ省略が可能ということですね。(HTML 4.01)
さて、この次が問題の内容についてです。
これは、タグの中身に何が入るかということです。
この場合だと、
(%flow;)*
となっています。まあ、正規表現みたいなものですね。
()の中のものが、0回もしくは複数回入るということです。
(その他のものについては上記に紹介したサイトに書いてあります!)
じゃあ、この「%flow;」ってのはなんだろう?
仕様書を見てみると「%flow;」っていうのは
<!ENTITY % flow "%block; | %inline;">
ということみたいです。
“%block; | %inline;”とあるので、ブロック要素(%block;)もしくはインライン要素(%inline;)のどちらかが入るという意味のようです。
(※詳しくは下記に記述します)
つまり、ddは
終了タグが省略可能で、中身がブロック要素かインライン要素が0回以上入る
ということですね!
あってましたね!
よかったよかった。
ENTITYとは
<!ENTITY % flow "%block; | %inline;">
にあるように、ENTITYって書いてあるときはどういうことでしょうか。
神崎先生のサイトによると
実体(Entity)はDTDやHTML文書に頻繁に現れる要素などを別名として定義しておく、C言語のマクロあるいはエイリアスのようなものです。DTD内部だけで使うものをパラメータ実体と呼びます。
とのこと。
一種の変数のようなものなんですかね。グループ分け?
記述方法は
<!ENTITY 実体名 "置換実体文" >
になります。
つまり、上記のでいくと、
「flow」というものは、ブロック要素(%block;)もしくはインライン要素(%inline;)
ということですね。
もちろん、ブロック要素やインライン要素もENTITYなのでタグの集合体になるわけです。
※気になる方は仕様書を見てみて下さい。結構細かく分かれています。
まとめ
普段HTMLの仕様書って見ることがあまりないですが、何か疑問に思ったり分からないときは仕様書をみるクセをつけるようにすると良いですよね。
何か大きな発見があるかもしれません!
- Name
- Comment
