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属性を指定する必要はありません。