この文章で書かれていることは必ずしも実行されてはいません(XML 宣言など)。未実行のものは、時間ができればやります。
原則として XHTML と CSS の文字コードは UTF-8N を用いる( CGI は別)。
採用理由は、NT系のMicrosoft Windows、Mac OS X、LinuxやJava言語などで基本的な文字コードとして利用されている
ため、標準の文字コードになると思われるから。
原則として XHTML 1.0 Strict を用いる。
採用理由は、XHTML はXML であるので、将来 XML アプリケーション(SVGとかMathML)が使えるようになるであろうから。。
なぜ、1.1 ではなく 1.0 Strict を採用したかというと、2つの理由がある。まず、 1.1 では Media Type
を application/xhtml+xml
とすることが SHOULD(推奨)となっているが、ブラウザシェアトップの IE はこれをサポートしていない。そこで、 text/html
にしてしまえばと思っても、 1.1 では Media Type を text/html
にすることが SHOULD NOT (非推奨)とされている。禁止ではないが、 HTML 互換の 1.0 なら text/html
は MAY (可能)となっている。次に、 1.1 では a 要素と map
要素の name
属性が使用不可だからである。詳しく言うと、 XHTML では name 属性ではなく id 属性使用することになっている。しかし、 map
要素の id
属性については Gecko と Safari が対応できてない。これらの理由により、 1.1 にすることは保留した。
このサイトの XHTML 文章では、 IE 7 以前に対してのみ XML 宣言を行っていない。
理由は、 IE 7 以前ではこの XML 宣言があると、表示モードを互換モードにしてしまうバグがあるからだ。これでは、ほかのブラウザ( Firefox やOpera )と同様の出力を得るのが困難になるため、仕方なくこのようにしている。
振り分けは SSI と PHP を利用して行っている。詳細は以下のとおり。
.htaccess
にて User Agent の判定。IE 7 以前のみ XML_Declaration
を偽とする。
BrowserMatch .* XML_Declaration
BrowserMatch "MSIE [^7]" !XML_Declaration
ファイル先頭に判定分の挿入。XML_Declaration
が真なら XML 宣言が書かれたファイルを include する。
<!--#if expr="${XML_Declaration}" -->
<!--#include virtual="/hogehoge.html" -->
<!--#endif -->
以下に示す内容のファイルを include して行う。Blog はこれでやっている。
<?php $ua = $_SERVER['HTTP_USER_AGENT']; if (!(ereg("Windows",$ua) && ereg("MSIE",$ua)) || ereg("MSIE 7",$ua)) { echo '<?xml version="1.0" encoding="utf-8"?>'; } ?>
原則として XML の木構造を明示するためにすべての Section 毎に以下の例のように div
要素で囲む。
<div class="section">
<h1>foobar</h1>
<p>hogehoge</p>
<div class="section">
<h2>foobar</h2>
<p>hogehoge</p>
</div>
</div>
ただし、階層メニュー (hierarchical-menu)、アクセス解析に関する部分はメインの文章の一部ではないのでこれで囲わない。
原則として .htaccess
ファイルで Content Negotiation を有効にして、拡張子をつけない形で表記する。
拡張子をつけると、例えば .html を .shtml ( SSI を使用する場合の html の拡張子)に変更する場合、いちいちそれを変更しなければならない。しかし、Content Negotiation を使えば、サーバー側が適切なファイルを選んでくれるので、拡張子が無くても無問題なのである。
このサイトは管理人の手元で確認できる以下の UA で表示確認をしています。
ただし、Safari は大学で暇なときに適当に確認しているだけなので、あまり当てにはなりません。また、この文章をいちいち書き換えるのが面倒くさいので、そもそもどれもそんなにあてにはなりません。