HTML4の仕様では、「checked」属性には「checked」という値を設定する(しなければならない)と取れる記述があります。しかし実際には、省略して記述しているページをよく見かけますし、また省略しても正しく解釈されるブラウザがほとんどです。これがHTMLの仕様なのか各ブラウザ独自の慣習なのかよく分かりません。
HTML 4 Document Type Definition
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …
※言うまでも無いことかもしれませんが「checked」属性以外にも「disabled」「readonly」などいくつかあります。
また、XHTMLでは(当然)省略不可となっていましたが、HTML5ではどうなっているのかよく分かりません。
このあたりのことについて教えてください。
質問は以下です
・HTML4では属性値の省略について仕様として省略可と明記しているのでしょうか。それともなんとなく慣習でそうなってしまったのでしょうか?
・もしもHTML4の仕様として省略可とされているのならば、仕様書上の記述個所を教えてください。
・HTML5ではどうなっているのでしょうか?まだ策定中とはいえ、さすがにこのレベルのことは議論が済んでいるように思います。省略可なのか不可なのか、仕様書上のどこかに記述されているのかまだ決まっていないのか、この点を教えてください。
・HTML5のDTDがあればそれを教えてください
以上、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
DTD を参照しておられますが、まず見るべきはそこではなく、SGML 宣言の内容です。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …
FEATURES / MINIMIZE / SHORTTAG YES となっています。すなわち、SGML の短縮タグ機構を許可する、ということです。
短縮タグ機構とは何か。
http://www1.u-netsurf.ne.jp/~7l1rll/SGMLsec6_0.h …
(a). 属性値が名前文字のみであるなら、引用符を省略して良い。
<input type=text>
(b). 列挙値(<input type="text"> のように取りうる値が決まっている)の場合、属性名を省略して良い。デフォルト値は初回に用いられた値。
<input text>
(c). 空タグを使って良い。
<p>段落<>段落</><>段落</>
(d). タグをまとめて良い。
<div<p>段落</p</div>
(e). 簡略終了タグを使って良い。
<p/段落/
ちなみに、XML における空要素の省略表記 <input/> は (e) のルールを応用したものです。
---
ですから「HTML を正規表現で処理したい」なんてのは、本当は現実離れした話なのです。とは言え、SGML パーサでさえこれらを全部認識できるものはありませんので、HTML4: B.3.3 ではこれらを使わないように、と注意書きがあります。
それなら、最初から SHORTTAG NO にしておけば良いではないか。ところが、古いブラウザの中にはこれらを中途半端に実装しているものがありました。例えば、disabled などについてです。
<input disabled>
これは (b) の応用です。それでいて、<input disabled="disabled"> は認識できなかった。つまり、属性名と属性値が同じ場合に限り省略でき、しかも省略した形しか認識できないブラウザがあったので、仕様書でもこの省略を許可せざるをえなかったのです。その上で、もうそういうのは止めてね、と注意を促したのです。
---
しかしながら、この省略法は使われ続けました。そこで、HTML(5) ではいっそ「属性名と属性値が同じ場合に限り、disabled のように省略できる」というのを仕様化してしまい、これを「論理型属性」と呼ぶことにしました(参考 URL)。すなわち、DOM 上では true/false として露出する属性です。
なお、注意書きにもあるように、contentEditable="true" のように "true" または "false" を取る属性は、論理型属性ではありません。混同しないようにして下さい。
それと、HTML(5) に DTD はありません。HTML(5) は SGML でも XML でもない、第三の形式です。どうしても必要なら、有志が DTD、RELAX NG、Schematron などのスキーマを作って配布しています。Validator.nu はそれを利用しています。
参考URL:http://www.whatwg.org/specs/web-apps/current-wor …
この回答への補足
属性名の省略を試してみようと
・<input radio>
・<input checkbox>
・<input button>
を書いたHTMLで試してみたのですが、FireFox11/Chrome18/IE8では認識しませんでした…。(すべてデフォルト値「type="text"」として処理されてしまいました)
属性名の省略として正式にサポートしているブラウザはないのですかね?(昔はあった?)
>列挙値の場合、属性名を省略して良い。
これはびっくりしました。「<input type="radio" checked>」等とだけ書いた場合、省略されているのは値だと思い込んでいました。しかしそうではなく属性名が省略されているのですね。
>HTML(5) に DTD はありません。HTML(5) は SGML でも XML でもない、第三の形式です。
おお、そうなんですか。以前自分でHTML5のDTDを探した時もあったのですが、どうしても見つかりませんでした。そもそも無いのですね。というか本来はDTDが適用されるべき対象ではなくなっているのですね。
少し難しかったのですが大変参考になりました。
ありがとうございました。
No.3
- 回答日時:
No.2 にも書きましたが、タグ短縮をマトモにサポートしているブラウザなんてありませんよ。
しかし、中途半端に実装しているブラウザがちらほらあり、そのままでは相互運用性に支障をきたすので、とりあえずそれまでの分については仕様上もタグ短縮を認めるけれども、今後はやらないようにね、というのが HTML 4.0 規定の付録 B. 3 です。付録なので規範性はなかったんですけどね。Fx 11、Ch 18 なら、すでに HTML(5) の解析ルールで動いているはずです。誤解している方をたまに見かけるので念のため申し上げておきますが、今後のブラウザは例えページが HTML 4.0 で書かれていようと XHTML 1.0 で書かれていようと、原則として全て HTML(5) のルールで解析します。文書型宣言によって解析ルールを切り替える、なんて器用なことはしてくれません(もちろん、文書型宣言の有無だけはモード切替のスイッチになります)。これによって、全てのブラウザは同じ DOM 木を構築する「はず」です。
HTML(5) のルール上、<input radio>、<input checkbox>、<input button> などは未知の論理型属性として無視されます(将来的にそれらが追加される可能性を考慮して、内部的に保存はされる)。つまり、<input my-extend-attr="my-extend-attr"> のように書いたのと同じことです。
>No.2 にも書きましたが、タグ短縮をマトモにサポートしているブラウザなんてありませんよ。
すみません。理解不足でした。
スッキリしました。ありがとうございました。
(それにしても本当にお詳しいですね。敬服します)
No.1
- 回答日時:
HTML4の場合は checked と記述するだけでよく、XHTMLの場合は checked="checked" と記述しなければいけません。
質問者さんが示されている HTML4のDTDでもcheckedの値は括弧書きで書かれている通りオプション扱いですので省略可能です。
HTML5でも今の所は属性名だけの記述で良いという解釈のようです。
参考URL:http://www.w3.org/TR/html5/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- 電気工事士 金属管と金属製可とう電線管におけるD種接地工事省略条件の違いについて 1 2022/09/12 17:13
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- クラシック 楽譜の読み方が分かってきたのですが、あとちょっと、不明な点についての質問です。 1 2023/03/23 19:23
- 英語 関係副詞または先行詞の省略、について ①限定的用法では関係副詞は常に省略できる。ただし、非限定的用法 1 2022/12/09 19:55
- 英語 関係副詞の省略について 関係副詞の省略って全て「関係副詞that」に置き換えてから省略するのですか? 1 2022/12/17 14:39
- その他(就職・転職・働き方) ハロワなんて、所詮いい加減ですよね 1 2022/07/23 16:05
- ハローワーク・職業安定所 ハロワなんて、所詮いい加減ですよね? 2 2022/07/23 17:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しいタブで開かせない方法は...
-
小窓について。
-
IE7でモーダル画面
-
プルダウンメニューの開く方向...
-
VC++2010 MFC サイズの最大化に...
-
指定URLを新しいウィンドウで開...
-
form の target(
-
POST先のURLアドレスに遷移した...
-
プルダウンメニューからリンク→...
-
ホームページビルダーでのドロ...
-
VBSでIEのウィンドウサイズを強...
-
XMLを作成してもタグしか表示さ...
-
テキストエリア内の改行禁止
-
Windowsのformでtextareaに入力...
-
デメタグとは?
-
GoogleChromeでレイアウトが左...
-
ブラウザでのタイ語の改行について
-
アコーディオン仕様の中の ul l...
-
C#のシリアル通信プログラムで...
-
リンク先のURLを非表示にし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
指定URLを新しいウィンドウで開...
-
自分のサイトを開いた時にウィ...
-
プルダウンメニューの開く方向...
-
新しいタブで開かせない方法は...
-
ASP.Net 別ウィンドウを開く・...
-
DBからPDFを取得して別画面で表...
-
表示中のURLなどをバッチファイ...
-
HTML 全画面表示 リンク先の...
-
ポップアップメニューを同じ画...
-
プルダウンメニューからリンク→...
-
HTML,js)リンクを新しいタブで...
-
FindWindowの使い方
-
HP、リンク先を最大化で開く方...
-
ハイパーリンクからメニュー無...
-
googleマップをポップアップウ...
-
QT 半透明の画面生成について
-
別ウィンドウで複数ページを同...
-
OpenCVのcvNamedWindowによるウ...
-
インラインフレームの中の表示...
-
新規ウィンドウの表示位置を画...
おすすめ情報