miximixi

XML宣言についてのアレコレ

01月06日(土)15:00

category
(X)HTML

CSSを覚えていく上でXML宣言と文書型宣言に関しての理解がないと、組んでいくうちにブラウザによって表示の違いが生じ、後から色々とスタイルを調整しても何が原因で表示が違うのか分からなくなってしまうといった事があると思います。

という事で、XML宣言について自分なりのアレコレを書いてみます。(間違ってるトコあったらご指摘願います)
文書型宣言に関してのアレコレは次のエントリーに。

あ、XML宣言ってのはコレ↓です。

<?xml version="1.0" encoding="utf-8"?>

文書型宣言ってのは、ウチのサイトの場合コレ↓です。

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

---- こっから続き

XML宣言のアレコレ

XML宣言はXHTMLで記述していく際に宣言するので、HTMLの場合は宣言の必要はありません。

よく聞くXML宣言は必要か否かって部分は、仕様上強く推奨されている部分ですので、必要です。
TransitionalでもStrictでも同様にXHTMLで書いている以上必要とされます。
lintでもすっごい減点対象ですしね。(それだけ重要なんだっていう認識をして頂ければいいかと)

でもXHTMLなのにXML宣言をしていないサイトって多いと思います。(ウチのサイトもしてません)

宣言しない理由としては、以下のようなことが考えられます。

  1. Win IE6の環境下において、互換モードで表示されてしまう
  2. 文字コードが「UTF-8」または「UTF-16」の場合はXML宣言自体を省略することが出来るから
  3. HTMLからXHTMLに変えたばかりで、理解していない
  4. 何処かのサイトからコピペしてきた
  5. 色んなサイトの色んな説明を読んでいる内に混乱しちゃったから取り合えずつけない

辺りでしょうか?ぱっと浮かんだのを書いただけなんで微妙ですが。
あと、CMSで~とかプログラム関係の都合とかもありそうですね。(その辺さっぱり)

何にせよ大半は1番のWin IE6で互換モードになるのがイヤだからだと思います。
有名な表示の違いだと、全体をセンタリングする際にtext-align:centerも追記しなければセンタリングされないとか、ボックスの解釈の違いなどなど色々あります。
互換モードになるのはIE6のバグで、IE7もリリースされた現状で修正される希望なんて…って感じなんで、うまく付き合っていく為にUTF-8でなら省略できるので、省略しているという感じ。
IE6のシェアがMacIE5くらいのシェアになったら無視しちゃうってのも手かなと思いますが、何年先の話か…

2番の省略できるってのは、XHTMLのデフォルトの文字コードが「UTF-8」または「UTF-16」だからです。ただし、省略できるといってもXML宣言することを強く推奨されている事にはかわりありません。

3番以下は、覚えたての方とか最初の頃の方々がよく分からずに宣言していないケースかな、と。

さくっとまとめると、
XHTMLである以上、XML宣言は必要だけど、IE6のバグなどの原因で宣言しないケースが多い。
といった感じ。

その他もうちょっと書いておきます。
XHTMLは、XMLアプリケーションのひとつなんで、文章の一番最初でXML宣言を記述します。

version属性に関して

コレは必須です。値はXHTMLのバージョンではなく、XMLのバージョンなんで、XHTML1.0にしろXHTML1.1にしろ「1.0」と指定します。

encoding属性に関して

エンコードに用いる文字コードセットを指定します。
特に指定しない場合は、XHTMLのデフォルト文字コードである「UTF-8」または「UTF-16」が適用されます。

文字コードに関しては、一般的に「UTF-8」「Shft_JIS」「EUC-JP」「iso-2022-jp」が使用されてます。

コレ↓ですね、ここで指定している文字コードと同じになってればOKです。(見た目問題で改行してますが実際には改行は入りません)

<meta http-equiv="content-type" 
content="text/html; charset=UTF-8" />

文字コードは何を使うのが良いか?ってのは、お好きで構わないと思います。
ボクの場合は、上記のXML宣言が省略できるって部分と、MTのデフォルトの文字コードがUTF-8だったりするので、色々と楽ってことでUTF-8で書いてます。
後、かなり内部的な事情ですが、社内で推奨されている文字コードがUTF-8なんで仕事で制作するサイトは当然社内ルールにあわせてます。
状況によりますが、クライアント側でHTMLソースを直接いぢるような場合は何かあってもイヤなんで、Shift_JISを指定する場合もあります。
この辺は状況にあわせて臨機応変にってところでしょうか。

standalone属性に関して

あんまり指定していることはないんですが、コレは外部DTDを参照するかどうかってのを指定するための属性です。
規定値では「no」になっているので、特にstandalone属性を指定する必要はありません。

各種SBMに追加
  • Hatenaブックマークに追加
  • del.icio.usに追加
  • POOKMARK Airlinesへ追加
  • livedoorクリップへ追加
  • ニフティクリップへ追加
  • newsingへ投稿
  • Saafブックマークへ追加
  • Redditへ追加

comment [9]

1 - chobi さん

はじめまして。
そして、唐突ですみませんが今「XML宣言」を入れようか入れないか迷っております。
今まで「UTF-8」で書いていたので省いてましたが「Another HTML-lint」で検証すると11点減点されます。
でも、W3Cの構文をチェックするやつだと問題なく通ります。

そこんとこどうなんでしょう?

他力本願ですみません。
ヘタレですみません。

何かアドバイスがありましたらお願い致します。

2007年1月 7日 18:26

2 - ひら@管理人 さん

chobiさん、初めまして。

エントリー内でも書いてますが、文字コードがutf-8でも、XML宣言することを強く推奨されていますので、IE6の互換モードでも苦がなく組めるのでしたらXML宣言は入れるべきだと思います。

また、lintで100点を取れているサイトが必ずしも素晴らしいサイトという訳でもないので、あまりlintの点数に拘り過ぎるのもよくないかな、と思います。

W3Cの構文チェックはあんまり使わないのですが、lintとかに比べたらゆるいので、問題なく通っているんだと思います。

2007年1月 7日 20:49

3 - chobi さん

ご返答ありがとうございます。
お手数お掛けしてすみません。

そうですね。推奨されているので宣言してみます。
苦がないわけではないですが、CSSハックとか使ってレベルアップのために頑張ってみます。

この度はありがとうございました。

2007年1月 8日 00:37

4 - ゆう さん

はじめまして。通りすがりの者です。(^ ^;)

よく言われることですが、XML 宣言を入れると、IE 6- では標準準拠モード(Standard mode)ではなく、後方互換モード(Quirks mode)でレンダリングしてしまうという、致命的な仕様上の問題があります。(IE 7 では修正されてます。)

そこで、IE 6- で標準準拠モードにするためには、文字エンコーディングを UTF-8 にして XML 宣言を省略するというのが better な解ということになるかと思います。

で、IE での文字化けを回避するために、文字エンコーディングをメディアタイプの方で指定することになるわけですが、XHTML 1.1 では text/html の使用が "shuold not" になっています。

http://www.w3.org/TR/2002/NOTE-xhtml-media-types-20020801/

もっとも、こちらも IE 6- が text/html 以外のメディアタイプに対応していないというオチがあって、XHTML 1.0 を選ぶか、XHTML 1.1 で記述する場合でも、W3C の文書が "must not"(不可)ではなく "should not"(非推奨)としていることを盾に、"text/html" を使うしかないようです。

このあたり、lint はブラウザの実装には、まったく配慮してくれませんので(あくまで規格墨守)、標準規格や lint の点数を重視するか、実装の現状を踏まえたアクセシビリティを重視するかということになります。つまり lint で 100点を取ることが必ずしもベストなコーディングとは限らない、ということですね。

URL|2007年1月 8日 04:07

5 - chobi さん

ゆう様

コメントありがとうございます。
なるほどですね。lintはあくまで参考程度にしといた方が宜しいですね。
メディアタイプは何も考えずに「text/html」を使ってました…。勉強になりますた。

2007年1月 8日 10:40

6 - hiloki さん

大変参考にさせていただいております。

>何にせよ大半は1番のWin IE6で互換モードになるのがイヤだからだと思います。
>有名な表示の違いだと、全体をセンタリングする際にtext-indent:centerも追記しなければセンタリングされないとか、ボックスの解釈の違いなどなど色々あります。


text-indent:center
こちらは
text-align:center
ではないでしょうか?

2007年1月16日 13:36

7 - hira@管理人っぽいひと さん

hilokiさん

おおっと、完全なミスです。
お恥ずかしい。

エントリーは修正しておきました。

ありがとうございます。

2007年1月16日 13:47

8 - レイバン さん

XML宣言を外すと、Googleの検索結果に大きな違いが出るということ
http://xoopscube.jp/modules/xhnewbb/viewtopic.php?topic_id=2590&viewmode=flat
どうなんでしょ??がせ?

2007年5月24日 18:52

9 - hira@管理人 さん

>レイバン さん
それで落ちるのなら、ウチのサイトはGoogleから訪れる人が居なくなっちゃいますね。

2007年5月30日 22:54

コメント投稿フォーム

post your comment

※コメントが認証されるまで、コメントは反映されません。ご了承くださいませ。

行き場を失ったモノたち

フィードメーター - CSS HappyLife

Feeds購読数

あわせて読みたい

えかきっず!

気まぐれブログパーツ

change color or layout
  • デフォルトカラー
  • 薄い青
  • 青緑
  • 緑
  • 深い青
  • 薄い紫
  • ピンク
  • 黄金
  • 茶
  • 赤
  • 黒
  • 白
  • シルバー
  • 2カラム(カラーはデフォルト)
  • リキッドレイアウト(カラーはデフォルト)

ページトップへ