このセクションでは、 RDF (Resource Description Framework) について見ていきます。
RDF とは
XUL では、ツリー関連の要素を使用することで、 ブックマークやメールメッセージといったデータの集合を表示させることができます。 しかし、そのために XUL ファイルに直接データまで記述しなければならないとすると、 不便なことがたくさんあります。 例えば、ブックマークの情報が、直接 XUL ファイルに書かれているとしたら、 変更処理は非常に難しいものになるはずです。 RDF データソースを利用することで、こういった問題を解決することが可能です。
RDF (Resource Description Framework) は、ブックマークやメールなどのリソース情報を保存するときのフォーマットとして使用できます。 または、他のフォーマットで保存しておいて、ファイルを読み込んだときに RDF データを生成するようなコードを書くことも可能です。 後者の方法が、Mozilla がブックマークや履歴、メールメッセージなどのデータを読み込むときに行っている方法になります。 Mozilla では、こういった共通のデータに対するデータソースを提供しており、 XUL アプリケーションからも簡単に利用することが可能です。
ツリーで扱うデータの供給源として、Mozilla が提供する全ての RDF データソースを利用できます。 あるいは、XML 形式でデータを保存した、RDF ファイルを参照することも可能です。 これによって、多数の行が含まれるツリーを表示する場合の処理が非常に楽になります。 また、RDF はリストボックスやメニューといった他の要素で扱うデータの供給源としても利用できます。 これについては、次のセクションで見る予定です。
ここでは、RDF についてのごく簡単な概略を説明します。 なお、RDF についての詳しい説明は、XULPlanet の Introduction to the RDF Model を参照してください。 RDF についての知識がない方は、このガイドに目を通しておくことを薦めます。 【訳注: リンク先は英語なので、日本語の場合 Wikipedia の記載ぐらいを読んでおくのが適当かもしれません】
また、RDF についての詳細は、W3C の RDF のページ から、RDF の仕様についての情報を参照してください。
RDF/XML
RDF は、データをグラフとして表現するモデルからなっています。【訳注: グラフ理論のグラフです】 また、RDF/XML は RDF データを XML 言語の構文を使用して表現したもので、 適切かつシンプルにまとめられた要素のセットで構成されています。 以下に、簡単な RDF/XML ファイルの雛形を示します。
<?xml version="1.0"?> <RDF:RDF xmlns:RDF="https://www.w3.org/1999/02/22-rdf-syntax-ns#"> ... </RDF:RDF>
上記から、XUL のヘッダ部分と類似していることが確認できます。 相違点としては、XUL では
要素だった場所に、window
RDF
要素が使用されていることと、 RDF
関連の要素が正しく認識されるようにするために、 RDF の名前空間が宣言されている点です。 この RDF
要素の内側にデータを記述していきます。 なお、RDF/XML ファイルの例としては、実際に Mozilla が提供しているものがいくつかあるので、それらを参考にするのがよいでしょう。 RDF/XML ファイルの拡張子は rdf になります。
RDF データベース
それでは、例として RDF から生成されるブックマークリストについて見てみることにします。 ブックマークリストは、レコードの集合からなっており、個々のレコードには URL、タイトル、訪問日といったデータが関連付けられています。
このためブックマーク情報は、データを多数のフィールドからなる大規模な表として保存するようなデータベースであると考えることができます。 ただし、このとき RDF では、リストに階層構造を持たせることが可能です。 これはブックマークにフォルダやカテゴリをに設定するために必要になります。 RDF データベース内の各フィールドはリソースで、それぞれリソースと結び付けられた名前が付けられており、それらの名前は URI で記述されます。
例として、 Mozilla のブックマークリストのフィールドから、URI の記述をいくつか示します。
Name | https://home.netscape.com/NC-rdf#Name | ブックマーク名 |
URL | https://home.netscape.com/NC-rdf#URL | リンク先 URL |
Description | https://home.netscape.com/NC-rdf#Description | ブックマークの説明 |
Last Visited | https://home.netscape.com/WEB-rdf#LastVisitDate | 最終訪問日 |
これらの URI は、名前空間名にフィールド名を付加して生成されます。 次のセクションでは、これらを使ってフィールドの値を自動設定する方法について見ていきます。 なお、最終訪問日は他の 3 つのフィールドと若干異なる名前空間になっていることを注記しておきます。
RDF/XML ファイルの例
以下に、3 つのレコードと 3 つのフィールドを持つ表のための RDF/XML ファイルの例を示します。
<RDF:RDF xmlns:RDF="https://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ANIMALS="https://www.some-fictitious-zoo.com/rdf#"> <RDF:Seq about="https://www.some-fictitious-zoo.com/all-animals"> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/mammals/lion"> <ANIMALS:name>Lion</ANIMALS:name> <ANIMALS:species>Panthera leo</ANIMALS:species> <ANIMALS:class>Mammal</ANIMALS:class> </RDF:Description> </RDF:li> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/arachnids/tarantula"> <ANIMALS:name>Tarantula</ANIMALS:name> <ANIMALS:species>Avicularia avicularia</ANIMALS:species> <ANIMALS:class>Arachnid</ANIMALS:class> </RDF:Description> </RDF:li> <RDF:li> <RDF:Description about="https://www.some-fictitious-zoo.com/mammals/hippopotamus"> <ANIMALS:name>Hippopotamus</ANIMALS:name> <ANIMALS:species>Hippopotamus amphibius</ANIMALS:species> <ANIMALS:class>Mammal</ANIMALS:class> </RDF:Description> </RDF:li> </RDF:Seq> </RDF:RDF>
ここでは、3 つのレコードが記述されていて、1 レコードが 1 つの動物 (animal) に対応しています。 1 つのレコードは、各 RDF:Description
タグが対応します。 それぞれのレコードの内部には 3 つのフィールド、すなわち name
、species
、class
が記述されています。 なお、すべてのレコードが同じフィールドで構成されていなければならないわけではありませんが、フィールドを揃えておくことで、より意味のあるデータになります。
3 つのフィールドは、すべて名前空間として ANIMALS
が指定されており、その URL は RDF
タグで宣言されています。 フィールド名は、この例ではデータの意味合いを元に設定していますが、別の基準で設定してもかまいません。 なお、名前空間の特性によって、class
というフィールド名が、スタイルにある class
と衝突するのを回避していることを補足しておきます。
Seq
要素と li
要素は、レコードがリストになっていることを示すために使用します。 これは HTML でリストを宣言する方法と類似しています。 Seq
要素は、子要素の置かれる順番に意味があることを表すために使用します。 また、順番に意味がない場合は、Seq
要素ではなく Bag
要素を使用します。 なお、ここに Alt
要素を使用することで、データの各レコードが (ミラー URL のような) 代替の値を指定していることを表すことも可能です。
RDF のリソースは、名前空間の URL とそれに続くフィールド名によって、XUL ファイルから参照することが可能です。 上の例では、以下に示す URI が、特定のフィールドを指定した参照を可能にするために生成されます。
Name | https://www.some-fictitious-zoo.com/rdf#name |
Species | https://www.some-fictitious-zoo.com/rdf#species |
Class | https://www.some-fictitious-zoo.com/rdf#class |
次のセクションでは、RDF から供給されるデータに基づいて XUL 要素を生成する方法について見ていきます。