文法チェッカーで重要度9のエラー (htmlとbodyタグ)

[統計] HTMLからXHTMLへの移行を進めていますか?



0   名前: PhoNe : 2007/03/22(木) 15:02  ID:nxMc5kEy sub-eX
下のHTMLを「Another HTML-lint gateway」でチェックして、
いくつかエラーが出てくる中で重要度が9のもの(2つあります)を直したいんですが、
どう直せばよいのか分かりませんでした。

因みにこのHTMLは、
いま作成中の自分のサイトのページの一つでファイル名や文字を置き換えた物です。
他のページでも同じエラーが出ます。



◆ 今分からないと自覚している所 ◆

下のエラーメッセージの一つ目、
「2行目の <html>〜</html> 内」とはどこの事なのでしょうか?

エラーメッセージの二つ目、
フレームを使用していないのになぜ <frameset> が必要なのでしょうか?



◆ 重要度9のエラーメッセージ ◆
line 14: <body> を 2行目の <html>〜</html> 内に書くことはできません。
line 28: <html>〜</html> 内には <frameset> が必要です。


http://validator.w3.org/ でも一応調べてみました。(↓)
Yahoo!で翻訳してみましたが、
私にはイマイチ意味が掴めませんでした…。

Error Line 14 column 5: document type does not allow element "body" here.
<body>The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).



Error Line 28 column 6: end tag for "html" which is not finished.
</html>Most likely, You nested tags and closed them in the wrong order. For example <p><em>...</p> is not acceptable, as <em> must be closed before <p>. Acceptable nesting is: <p><em>...</em></p>

Another possibility is that you used an element which requires a child element that you did not include. Hence the parent element is "not finished", not complete. For instance, <head> generally requires a <title>, lists (ul, ol, dl) require list items (li, or dt, dd), and so on.




時間があって分かる方がいらしたら、
ぜひ教えて頂けないでしょうか?

(この様な場に書き込むのもHTMLにもイマイチ慣れていないので、
説明が分かりにくい場所があったらすみません…。)




◆ 問題のHTML ◆
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis" />
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="content-script-type" content="text/javascript" />
<meta http-equiv="pragma" content="no-cache" /> 
<meta http-equiv="cache-control" content="no-cache" />
<link rel="index" href="http://aaa.jp/" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>タイトル</title>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div>
<p id="title">タイトル</p>
ああああああああああ。
<hr />
いいいいいいいいいい。
<ul>
<li>その1</li>
<li>その2</li>
<li>その3</li>  
</ul>
ううううう<br />えええええ
</div>
</body>
</html>

1   名前: とおりすがり : 2007/03/22(木) 15:02  ID:UWsZexeD sub-gm
framesetを使用していないページなのに、
なぜdoctype宣言がframeset用なのですか?

2   名前: 匿名 : 2007/03/22(木) 15:02  ID:PoQCRt0c sub-Ds
日本語はこちら
http://www.doraneko.org/webauth/xhtml10/20000126/Overview.html

フレーム使わないなら、そのようなモードにしましょう。

3   名前: tiefe : 2007/03/22(木) 15:02  ID:YGJdDjn0 sub-t1
line 14: <body> を 2行目の <html>〜</html> 内に書くことはできません。
line 28: <html>〜</html> 内には <frameset> が必要です。


このエラーはどちらも、frameを使用していないのに、DOCTYPE宣言がframesetのため起こるエラーです。
DOCTYPE宣言をframesetでないものに変えてみてください。

DOCTYPE宣言がframesetの場合、このhtmlに<frameset>タグが使われることが必要十分条件になります。
なので<frameset>タグを使用していない時点でエラーがひとつ。
<frameset>タグを使用すると<body>タグは書かないので、ここでもエラーがひとつ。
以上によって上記のエラー2つが生じます。



4   名前: 匿名 : 2007/03/22(木) 15:02  ID:PoQCRt0c sub-Ds
下のHTMLを「Another HTML-lint gateway」でチェックしたときにJってでますよね。
それが、日本語です。機械翻訳は、まだ、込み入った話の使用に耐えるものではありません。


とおりすがりさん、調べている内にかぶっちゃいました。ごめんなさい

5   名前: PhoNe : 2007/03/22(木) 15:02  ID:nxMc5kEy sub-eX
>>とおりすがりさん

他の所ばかり見ていて!DOCTYPE宣言自体が間違っていることに全然気付きませんでした…!
下の様に直したら重要度9のエラーは全て無くなりました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  ↓ ↓ ↓
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


>>2,4

リンク先のページはXHTML1.0の事が詳しく載ってそうなので、
!DOCTYPE宣言以外の所もまた時間のある時に見ておこうと思います。

あと、
翻訳を使ったのは「W3C」の方で、 (http://validator.w3.org/
「Another HTML-lint gateway」は、
はじめから日本語で出ました。
説明分かりづらくてごめんなさい…。


>>tiefeさん

!DOCTYPE宣言が間違っていると分かった時点でエラーの理由は何となく分かっていましたが、
tiefeさんの説明でよりしっかりと理解することが出来ました!



フレームページのタグをコピペしてそのままだったのをすっかり忘れていました…。
くだらないことで書き込みしてごめんなさい…。
でも皆さんのおかげで早くそれに気付くことが出来ました!
本当にありがとうございました。

6   名前: Z ◆XTzyosZXcL : 2007/03/22(木) 15:02  ID:vJSduAD1 sub-Cl
 終了宣言されてしまっているのですが、気になりましたので(^^;

>>5
 XHTML1.0の厳格型(Strict)考え方にたつなら、>>1の本文部分は少なくともテキストを直接DIV要素で囲うやり方はなさらないほうがよいと思います(HTML4.01でも同じ)。
 また、「タイトル」であればそれはp要素ではなく見出しであるH1〜H6要素でマークアップすべきでしょう。

文書の骨格となる基本要素 -- ごく簡単なHTMLの説明:http://www.kanzaki.com/docs/html/htminfo11.html

XHTMLの書き方と留意点:
http://www.kanzaki.com/docs/html/xhtml1.html

7   名前: Z ◆XTzyosZXcL : 2007/03/22(木) 15:02  ID:vJSduAD1 sub-Cl
 追加資料として下記もあげておきます。

HTML講話:
http://web.xii.jp/iec/html/

XHTML講話:
http://web.xii.jp/iec/xhtml/

8   名前: PhoNe : 2007/03/22(木) 15:02  ID:nxMc5kEy sub-eX
>>Zさん

殆ど文法チェッカーを頼りにHTMLを修正しているので、
チェッカーでエラーが出ない所まで教えて頂けて嬉しいです!
とりあえず>>1で挙げたページだけ、
div要素で直接囲っていたテキストはspan要素で囲み、
p要素で囲っていた「タイトル」の文字はh1要素に修正しました。
他のページも直せる所はまた直していこうと思います。

質問していない部分まで本当にわざわざありがとうございました!

9   名前: K+S : 2007/03/22(木) 15:02  ID:nROqylMa sub-YS
> div要素で直接囲っていたテキストはspan要素で囲み、

内容に適した div 要素以外のブロック要素で包含すべきです。
その上でインラインに意味付けをするのであればインライン要素で包含します。

この場合は span 要素を外し、p 要素でマークアップしてください。

10   名前: PhoNe : 2007/03/22(木) 15:02  ID:nxMc5kEy sub-eX
「span → p」に直してきました。

ZさんとK+Sさん、
お二人とも細かい所までどうもありがとうございました!
XHTMLやHTMLについてはまだまだ知らない事が多そうなので、
また自分でも詳しく勉強しておきます。

一覧へ戻る