ブックマーク記述言語「XBEL」

XBEL
用途ブックマーク交換
実行-
日本語
対応環境XML
入手仕様書は無償

どんなソフトにも対応可能

XBEL の名は、「XML Bookmark Exchange Language (XML による ブックマーク交換のための言語)」の略です。XBEL はブックマークの保存形式の ひとつですが、オープンな規格である XML を使っているのが 強みです。XML も XBEL もシンプルなので、対応したソフトを作成するのは 比較的簡単です。しかも、拡張性を考えて設計されています。 ちなみに、Python.org で Python 言語 用の XML 処理ライブラリを開発した歳に生まれたものだそうです。

しかし、そんなにいいモノだとしても、なんの役に立つのでしょう? ブックマークの形式なんて、ソフトを使う人には関係ないのでは? ……という疑問もわいたかもしれません。

XBEL の最大の目的は、ブックマークを保存することではありません。 あるブラウザの形式で保存されたブックマークを他の形式に変換したいときに、 XBEL を「中間言語」として使うのです。つまり、 例えば Internet Explorer の形式を Navigator の形式に変換する場合、 直接変換するのではなく、Internet Explorer の形式から一度 XBEL に変換し、 それから改めて Navigator の形式に変換するのです。

「1 対 1」の変換だと手間が増えて損な気がしますが、これが「多対多」だと 話が違います。ブラウザにはいくつも種類がありますし、同じブラウザでも バージョンが違うと形式が変わったりします。仮に 10 種類の形式しかないとしても、 「1 対 1」の方法で変換すると、すべての形式で互いに変換できるように するには 90 通りのプログラムが必要になってしまいます。一度 XBEL に 変換する場合は、各形式と XBEL が互いに変換できればいいので、 たった 20 通りですんでしまいます。

一般には、変換を行なうと情報が減ってしまいます。Navigator 形式の ブックマークを Internet Explorer に変換すると Navigator 形式独自の 情報は抜け落ちてしまうため、再び Navigator 形式に変換し直しても その情報は元に戻らないのです。XBEL ではこのような特定のブラウザ専用の情報も 保存できるように工夫されています。

さらに、XBEL はウェブブラウザだけでなく巡回エージェントと呼ばれる種類の ソフトにも対応できます。つまり、Navigator 形式を WWWC 形式に変化したりすることも 考えられるわけです。XBEL 形式でそのまま保存して、人に渡すこともできます。 受け取った方では、XBEL を自分のブラウザや巡回エージェントの形式に変換する ソフトを見つけるだけですみます。「おすすめのリンク集」をプリクラみたいに 交換することもできるわけです。

XBEL 文書の構成

さて、ここからは XBEL の実際の形式について紹介します。 XML に関する知識が必要ですので、知らんという方はこの機会に XML についても 学んでみるといいかもしれません。

仕様書が公開されている XBEL 1.0 に登場する要素は 9 種類あります。 文書ルートの xbel 要素の他、 ブックマーク (bookmark)、 フォルダ (folder)、 エイリアス (alias)、 セパレータ (separator) を表す 要素 (以下、この 4 つをまとめてブックマークノードと呼びます) と、 それらについての情報を記述するための 要素 (titleinfometadatadesc) があります。各ブックマークを登録した 日時などはブックマークの要素に属性として保存されます。

以下の内容は、XBEL 1.0 の文書型定義と仕様書を元に作成したものです。

文書型定義

XBEL の文書型定義は http://www.python.org/topics/xml/dtds/xbel-1.0.dtd にあり、 +//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML という公開識別子が与えられています。

空文字列を定義したパラメータ実体が 3 つ用意されており、用途によっては これを使って拡張することができます。

xbel 要素

<!ELEMENT xbel (title?, info?, desc?, (%nodes.mix;)*)>
<!ATTLIST xbel
            %node.att;
            version  CDATA      #FIXED "1.0"
>
意味
XBEL 文書 (ルート)。全ブックマークのルートフォルダにあたります。 内容や属性も folder 要素とほぼ共通です。 ソフトウェアは、フォルダのような展開・縮退ができない点を除いて、 フォルダと同様に処理することが期待されています。
親要素
なし
子要素
title (0 または 1 個)、info (0 または 1 個)、desc (0 または 1 個)、ブックマークノード (0 個以上) をこの順で
属性
id="ID"
ルートフォルダの ID 値。XML のリンク機構や alias 要素の ref 属性で使われます。省略可能。
added="日時"
登録された日時を表す CDATA 値。省略可能。
version="バージョン番号"
使っている XBEL 仕様のバージョン番号を表す CDATA 値。XBEL 1.0 では "1.0" しか指定できません。

title 要素

<!ELEMENT title      (#PCDATA)>
意味
フォルダやブックマークの、表示用のタイトルを表します。多くのブラウザの ブックマークでタイトルという仕組みが採用されています。ブックマークの検索にも 使えるかもしれません。
親要素
xbelfolderbookmark
内容
#PCDATA
属性
なし

info 要素

<!ELEMENT info (metadata+)>
意味
フォルダやブックマークについての、ソフトウェア固有のデータを記述するための 要素です (実際のデータは子要素 metadeta に記述します)。例えば、 自動巡回プログラムなら、巡回する頻度などを登録するかもしれません。 こういったメタ情報が必要ないソフトウェアでも、できるだけ情報を残すように するべきです。子要素 metadata を 1 つも もたない info は削除されます。
親要素
xbelfolderbookmark
子要素
1 つ以上の metadata
属性
なし

metadata 要素

<!ELEMENT metadata EMPTY>
<!ATTLIST metadata
            owner    CDATA      #REQUIRED
>
意味
XBEL に要素や属性が用意されていない、ソフトウェア固有のメタ情報を 記述します。実際のデータは、名前空間を使って metadata に属性を追加し、 そこに記述します。
親要素
info
内容
属性
owner="URI"
このメタ情報を「所有」するソフトウェアを示す CDATA 値。この値は、アプリケーションの定義などを、人間または機械が読める形式で記述したもの (RDF などで) を参照する URI にします。実際にネットワーク上で位置が確定できるものでなくてもかまいません。

desc 要素

<!ELEMENT desc       (#PCDATA)>
意味
フォルダやブックマークについての、ユーザーが読むための説明文を表します。 ブックマークについては、そのリソースの要約を記述しておくことも考えられます。 フォルダについてはユーザーの指示に応じて表示されることになるでしょう。 ブックマークでは実際にそのリソースを取得しようとするときに表示されるかも知れません。
親要素
xbelfolderbookmark
内容
説明文を表す #PCDATA。
属性
なし

folder 要素

<!ELEMENT folder   (title?, info?, desc?, (%nodes.mix;)*)>
<!ATTLIST folder
            %node.att;
            folded   (yes|no)   'yes'
>
意味
階層的なデータ構造をつくるための要素です。ブックマークの集まりを表し、 入れ子にすることもできます。ユーザーインタフェースでは、ユーザーの指示に応じて 展開・縮退のできるリストなどとして表されるでしょう。
親要素
xbelfolder
子要素
title (0 または 1 個)、info (0 または 1 個)、desc(0 または 1 個)、ブックマークノード (0 個以上) をこの順で
属性
id="ID"
このフォルダの ID 値。XML のリンク機構や alias 要素の ref 属性に使われます。省略可能。
added="日時"
登録された日時を表す CDATA 値。省略可能。
folded="状態"
フォルダのデフォルトの開閉状態を表す文字列。畳み込まれていることを示すyes か、中身が表示されていることを示す no のどちらかで、既定値は yes

bookmark 要素

<!ELEMENT bookmark (title?, info?, desc?)>
<!ATTLIST bookmark
            %node.att;
            %url.att;
>
意味
個々のブックマーク、つまりネットワーク上のリソースへの参照を表します。 ユーザーインタフェースでは、title 要素があれば、 それを使って表示され、ユーザーの指示に応じて desc などの 内容も表示されるでしょう。それ以外の動作はソフトウェアによります。
親要素
xbelfolder
子要素
title (0 または 1 個)、info (0 または 1 個)、desc (0 または 1 個) をこの順で
属性
href="URI"
ブックマークが参照するリソースの URI を示す CDATA 値。必ず指定します。
id="ID"
このブックマークの ID 値。XML のリンク機構や alias 要素の ref 属性に使われます。省略可能。
added="日時"
登録された日時を表す CDATA 値。省略可能。
modified="日時"
ブックマークが示すリソースが最後に変更された日時を表す CDATA 値。省略可能。
「わかる限りでの最後」なので、ブラウザでは一般に visited より 古い日付になるでしょう。巡回ソフトなどでは visited の方が 新しくなることがあります。
visited="日時"
ユーザーが最後にそのリソースを「訪れ」た日時を表す CDATA 値。省略可能。

separator 要素

<!ELEMENT separator EMPTY>
意味
xbelfolder 内の ブックマークやフォルダを、グループごとに分ける境目を表します。 folder が階層構造を作るのに対して、 separator は構造を作るわけではありません。表示される際は、 水平線がはいったりや行間が大目に取られたり、読み上げに間を置かれたりします。
親要素
xbelfolder
内容
なし
属性
なし

alias 要素

<!ELEMENT alias EMPTY>
<!ATTLIST alias
            ref       IDREF     #REQUIRED
>
意味
ブックマークやフォルダの分身 (いわゆるエイリアス) を表します。 ひとつの XBEL 文書内での参照を想定しています。ユーザーインタフェースでは、 通常のブックマークやフォルダとは表示方法が異なるべきです。 例えば Netscape Navigator の場合、エイリアスは斜体で表示されます。 それ以外の点では、ユーザーはエイリアスが参照するブックマークやフォルダ そのもののように操作できます。ソフトウェアは、循環参照に陥らないように 注意する必要があります。
親要素
xbelfolder
内容
なし
属性
ref="参照する ID"
参照するブックマークやフォルダの ID (IDREF 値)。必ず指定します。


Presented by 夏鰯 <sardine@toyfish.net>