HTML 4.01でのOGP(名前空間の箇所)の指定【HTML】

HTML5なご時世に、HTML 4.01の内容もどうかと思いますが、長くあるサービスでは未だにHTML 4.01を使っていることもあります。今回のエントリーはHTML 4.01でのOGPでどうもOGPの指定に関して正確な情報がないように思ったので書きました。

HTML 4.01でxmlns属性??

記事によったら「HTML 4.01では以下のように指定します。」と書いてあるエントリーを見かけます。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">

んなアホな....

xmlns属性

XHTMLでは、他に定義されたマークアップ言語をひとつの文章の中で複数使用することができます。複数のマークアップ言語を使用する場合、それらの言語の中で同じ名前のタグが使用されている場合に衝突が起こるかもしれません。こういった衝突を起こさないようにするために、どのDTDの要素と属性を参照するのかを指定するxmlns属性が用意されています。

xmlns属性はXHTMLのためにあります。

ここまで書いたように、HTML 4.01ではXHTMLではないので、xmlns属性を使うことができませんので上記のような指定は間違いです。

prefix属性

では、HTML 4.01ではどのようにするのかと言うと、prefix属性を使って次のようにします。


<html prefix="og: http://ogp.me/ns# fb: http://www.facebook.com/2008/fbml">

prefix属性はRDFaの仕様です。

しかし、prefix属性を指定してもHTML 4.01では文法エラーになってしまいます。HTML 4.01のDTDでは、RDFaをサポートしていません。その場合DOCTYPEを以下のようにすると文法エラーになりません。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01+RDFa 1.1//EN"
        "http://www.w3.org/MarkUp/DTD/html401-rdfa11-1.dtd">

HTML 4.01で文法エラー無しでOGP等を指定する場合には、RDFaをサポートしたDTDとprefix属性を使います。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01+RDFa 1.1//EN"
        "http://www.w3.org/MarkUp/DTD/html401-rdfa11-1.dtd">
<html prefix="og: http://ogp.me/ns# fb: http://www.facebook.com/2008/fbml">