スキップしてメイン コンテンツに移動

Bloggerのテンプレートのxmlからブログのhtmlに出て来る不要な名前空間を消す

htmlはバージョン5からそれまでのxml宣言や名前空間の記述が完全に不要になっている。しかもマークアップにはxml、またはxhtml(htmlに適合するxml)とhtmlの両方が使える仕様なので、以前よりも便利になったと思う。

Bloggerのテンプレートはブログの実際のソースコードを確認する(専用の閲覧アプリか、ChromeブラウザなどではURLの最初に「view-source:」を付けてアクセスすると表示できる)とhtml5の設定になっている。

html5のサイトの三つの条件

  • <!DOCTYPE html>
  • <html></html>
  • <meta charset="utf-8">/<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

ところがテンプレート自体のソースコードは違う。独自タグが使われれるし、一旦、コンピューターで処理されてからブログの実際のソースコードに成形されるようになっている。

これ自体は自動化されたサイト作成で珍しくないけど、Bloggerで特徴的なのは主体の構文がxml、またはxhtmlしか受け付けないんだ。

htmlとは微妙に違っていて例えば全てのタグに開始と終了の二つが必要――空の要素の終了タグは開始タグの最後に半角スラッシュ(/)を入れて代用できる/htmlならば半角スラッシュは要らなくて終了タグを省略して開始タグだけで通用する――だったりする。

因みにBloggerでは独自タグの要素の値を示すために一重引用符('')しか使えないのも注意しなくてはならない。独自タグに囲まれた内容には二重引用符("")を使ったマークアップを入れられる場合もあるけれども外側の独自タグと同様の位置付けでは受け付けられないんだ。html編集の保存やテーマのアップロードでエラーになってしまうのも特徴的で、他ではないかも知れない。

Bloggerのテンプレート自体はxml、またはxhtmlのマークアップが必要で、そのためか、ソースコードの最初にxml宣言(ファイルの種別)や名前空間(語句の定義付け)が記載されているんだ。

Bloggerの公式テーマ:Contempoのテンプレートの開始部分

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' b:responsive='true' b:templateUrl='indie.xml' b:templateVersion='1.3.0' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
  中略
</html>

※帯文字の一つ目がxml宣言、二つ目の四つが名前空間だ。

一見してDOCTYPE宣言がhtml5用(文書型の参照/バージョン情報を持たず、htmlの一言によるブラウザ任せの標準)だから何となく矛盾している。ブログのマークアップの設定がhtml5ならばxml宣言も名前空間も基本的に要らないだろう。しかし考えるとBloggerはテンプレート自体のソースコードをコンピューターで処理するのがxml、またはxhtmlだから付いている――サーバーのファイルもxmlだ――と理解するしかない。htmlのマークアップが主体ではhtml編集やテーマのアップロードでエラーになってしまうのも明らかになっているのは助かる。

<!DOCTYPE html>
<html dir='ltr'>
  中略
</html>

実際のブログのソースコードはhtml5の設定で、テンプレート自体の不要なxml宣言や名前空間のマークアップは削除されて出て来ない。つまりhtml5のサイトとしてBloggerブログはインターネットで動作しているわけだ。繰り返すとhtml5はxml、またはxhtmlとも十分に扱われるからテンプレート自体の他の部分のマークアップがBloggerならではのhtmlではない状態でも支障を来しはしない。

だから別に構わないと感じて何もせずに使っていたら問題を見付けたんだ。というのはhtml5におよそ無意味な名前空間がブログの実際のソースコードに記載される場合がある。調べるとhtml編集やテーマのアップロードでテンプレート自体のマークアップを書き換えると追加されるようなんだ。

Bloggerの公式テーマ:Contempoのマークアップの名前空間

<!DOCTYPE html>
<html dir='ltr' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
  中略
</html>

元々はhtml5に相応しく削除されるはずのxml宣言と名前空間の後者だけが出て来るのはBloggerのコンピューターのバグかも知れない。必要ならば前者も付けなくては不味いはずだし――挙げるとxhtml1との互換性を図るときはxml宣言と名前空間のxmlns="http://www.w3.org/1999/xhtml"を記述したりする――片方だけブログの実際のソースコードに出て来る状態はサイト作成の常識からしてあり得ない。況してやhtml5にとって両方とも基本的に不要なので、何とかならないかと考える。

Bloggerの四つの名前空間の役割

デフォルト/xhtmlの定義
xmlns='http://www.w3.org/1999/xhtml'
独自タグのbの定義
xmlns:b='http://www.google.com/2005/gml/b'
独自タグのdataの定義
xmlns:data='http://www.google.com/2005/gml/data'
独自タグのexprの定義
xmlns:expr='http://www.google.com/2005/gml/expr'

テンプレート自体の書式はxmlだけど、その中で、xhtmlや三つの独自タグが定義付けられて(同一の要素名でも区別されて)使える。

因みに取り上げられたURLを確認すると「w3.org」は良いけど、他の「google.com」の三つはエラーページでしかない。名前空間はxmlファイルの書式を諸々の仕方――デフォルトは何もない状態、その他は接頭辞(Bloggerではbとdataとexprの三つ)がそれぞれのURLで別物として割り振られる――で正確に捉えるための形式だから内容は強いて求められないせいだろう。名前空間のURLは厳密にいうとURIとしてウェブでの純然な識別子だからサイトアドレスを示すとはかぎらない。URLを使わなくてはならないわけでもないけど、複数の接頭辞の条件を世界で僅かでも重複させないために向いている。

html5のサイトには名前空間は基本的に不要だし、ブログの実際のソースコードもBloggerのテンプレート自体から削除されて成形されるようになっているので、最初から消しておいても構わないのではないかとやってみると大丈夫だと気付いた。

テンプレート自体に名前空間か、またはxml宣言も含めて二つともなくてもブログの実際のソースコードは以前と変わらずに記載されるし、正常に動作する。

どうしてかは不明だけれどもBloggerのサーバーの当該のxmlファイルからは完全に削除されないみたいだ。

html編集ではxml宣言や名前空間を削除して保存すると戻る際には「保存されていない内容は失われます」と表示されてしまってブラウザのバックなどから閉じて再び開くと削除したxml宣言や名前空間が復活している。

バックアップ/復元からテンプレートをダウンロードしてxml宣言や名前空間を削除してアップロードすると次のダウンロードでは削除したxml宣言や名前空間が復活している。

どちらにしてもxml宣言や名前空間を削除して保存できるけど、テンプレート自体を後から確認し直すと両方とも記載されたままになっているので、サーバーでは自動的に追加されていると推測されるんだ。

ブログの実際のソースコードに不要な名前空間が付いてしまったらテンプレート自体から名前空間を削除して保存/アップロードすれば消せるようになる。動作上、何も問題はなさそうだし、当初からhtml編集やテーマのアップロードで一度もカスタマイズせずに使うのと同様にhtml5に相応しいマークアップを無駄なく得られるから修正するのに役立つ。

コメント

些細な日常の人気の投稿

アドセンスの支払い日は翌月二十一日前後だけれども保留されると送金されない

PlayストアでAndroidアプリのダウンロードが非常に遅い場合の打開策

Imgurで画像URLと埋め込みコードを取得する方法