ここでは、その他のデータソースと自分自身の RDF ファイルをデータソースとして使う方法を見ることにしましょう。
前のセクションで、ユーザーのブックマークを表示する方法を見ました。前のセクションの例を試すと、表示されるデータは、ブックマークに対応しています。ブックマークを追加したり削除すると、それは自動的に更新されます。例のウィンドウの一つを開いたままにしてブックマークを追加してみて下さい。即座に更新されることが分かるはずです。
Mozilla は、これ以外にも、多くのデータソースを提供しています。その幾つかを例とともにここでリストします。それらは、個々の場合でフィールドこそ異なりますが、ブックマークと同じように働きます。
履歴データソースは、URL のリストを提供する点で、ブックマークに似ています。もちろん、これは、ユーザーが最近訪れた URL のリストであるユーザーの履歴リストへのアクセスを提供するものです。リソースは、データソースとして、rdf:history を使って参照できます。下のテーブルは、履歴データソースから検索できるリソース (あるいはフィールド) を示しています。下の URL の値を、リソースの値として使いたい場所に置いて下さい。履歴は、一般に、階層的ではない点に注意して下さい。
| Date | rdf:http://home.netscape.com/NC-rdf#Date | 最後に訪れた日付 |
| Name | rdf:http://home.netscape.com/NC-rdf#Name | ページのタイトル |
| Page | rdf:http://home.netscape.com/NC-rdf#Page | ページの名前 |
| Referrer | rdf:http://home.netscape.com/NC-rdf#Referrer | ページの参照元 |
| URL | rdf:http://home.netscape.com/NC-rdf#URL | ページの URL |
| Visit Count | rdf:http://home.netscape.com/NC-rdf#VisitCount | ページの訪問回数 |
典型的な履歴リストは、これらのフィールドから選択されたツリーを表示します。これらを使うには、上の URL 値を、ボタンやツリーセルの label 属性に置くだけです。ref 属性の値として、NC:HistoryRoot が使えます。
履歴リストを表示する例を見ることにしましょう。履歴は、Name、Page、Date という 3 つのカラムからなるツリー内に表示されます。ここではコードを簡単にするため、ルールは一つしか使っていませんが、ブックマークの例にあるセパレーターのコードを追加することもできます。同じルールを使うことができます (履歴のセパレーターに特殊なものは何もありません)。実際には、履歴リストには、セパレーターなどあるべきではありません。
例 6.7.1
<window
id="example-window"
title="History List"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<tree flex="1" datasources="rdf:history" ref="NC:HistoryRoot">
<template>
<rule>
<treechildren flex="1">
<treeitem uri="rdf:*">
<treerow>
<treecell class="treecell-indent" label="rdf:http://home.netscape.com/NC-rdf#Name"/>
<treecell label="rdf:http://home.netscape.com/NC-rdf#URL"/>
<treecell label="rdf:http://home.netscape.com/NC-rdf#Date"/>
</treerow>
</treeitem>
</treechildren>
</rule>
</template>
</tree>
</window>
|
下のテーブルは、Mozilla で使えるその他のデータソースを幾つかリストしています。これらのリソースのどれでも使用できます。
Bookmarks (rdf:bookmarks): ブックマークは、ユーザーのブックマークリストから生成される。
| リソース | ||
| Added Date | rdf:http://home.netscape.com/NC-rdf#BookmarkAddDate | ブックマークが追加された日付 |
| Description | rdf:http://home.netscape.com/NC-rdf#Description | ブックマークの説明 |
| Last Modified | rdf:http://home.netscape.com/WEB-rdf#LastModifiedDate | 最終更新日付 |
| Last Visited | rdf:http://home.netscape.com/WEB-rdf#LastVisitDate | 最後に訪れた日付 |
| Name | rdf:http://home.netscape.com/NC-rdf#Name | ブックマークの名前 |
| Shortcut URL | rdf:http://home.netscape.com/NC-rdf#ShortcutURL | カスタムキーワードフィールド |
| URL | rdf:http://home.netscape.com/NC-rdf#URL | リンクしている URL |
| 可能なブックマークルート | |
| NC:BookmarksRoot | ブックマーク階層のトップレベル |
| NC:IEFavoritesRoot | ユーザーの IE のお気に入りに対応するブックマークフォルダー |
| NC:PersonalToolbarFolder | パーソナルなツールバーフォルダーに対応するブックマークフォルダー |
Files (rdf:files): ユーザーのファイルの一覧。
| リソース | ||
| Name | rdf:http://home.netscape.com/NC-rdf#Name | ファイルの名前 |
| URL | rdf:http://home.netscape.com/NC-rdf#URL | ファイルの URL |
| 可能なファイルルート | |
| NC:FilesRoot | ファイルシステムのトップレベル (通常、ドライブのリスト) |
| A file URL | ref にファイル URL を使うことによって、返される指定ディレクトリーを選択できる。例えば、file:///windows や files:///usr/local が使える。 |
ファイルデータソースは、必要な場合にだけ、そのリソースが何であるのかを決めるデータソースの例です。データが表示される前に、表示するのは、ファイルシステム中のすべてのファイルであると決めてもらいたくはありません。むしろ、ある時点でツリー要素 (あるいはその他の要素) が表示する必要があるファイルとディレクトリーだけを決めたいのです。
以下は、簡単なファイルブラウザーです。
例 6.7.2
<tree flex="1" datasources="rdf:files" ref="file:///">
<template>
<rule>
<treechildren flex="1">
<treeitem uri="rdf:*">
<treerow>
<treecell class="treecell-indent" label="rdf:http://home.netscape.com/NC-rdf#Name" flex="1"/>
</treerow>
</treeitem>
</treechildren>
</rule>
</template>
</tree>
|
この例を試してみると、トップレベルのディレクトリーはすぐに表示されますが、ディレクトリーを開くときはわずかに遅れることに気が付くでしょう。これは、ディレクトリー中のファイルのリストが読み込まれるからです。
datasources 属性では、以下の例のように空白文字 (whitespace) で区切ることにより、複数のデータソースを指定できます。これは、データを指定されたすべてのデータソースから読み込む効果があります。
<tree datasources="rdf:bookmarks
rdf:history
animals.rdf" ref="NC:BookmarksRoot">
|
この例は、リソースを、ブックマーク、履歴、animals.rdf ファイルから読み込みます。それらは結び付けられて一つの複合データソースになり、あたかも一つのデータソースであるかのように使用することができます。
特殊なデータソースである rdf:null は、何にも対応しません。このデータソースは、スクリプトを使ってデータソースを動的に設定したいが、最初にその一つを指定したくない場合やその正確な URL が分からない場合に使えます。
必要なら、上の内部データソースのどれでも使うことができます。その他に、メールやアドレスブック、検索などのためのデータソースがあります。しかし、RDF ファイルに保存した自分自身の RDF データソースを使いたいかもしれません。ファイルはローカルでもリモートでも構いません。RDF ファイルの URL を datasources 属性に置くだけです。
RDF ファイルを使うことによって、内部データソースすべてと同じ機能が提供できます。特殊な型の内容にマッチさせるため、ルールが使えます。rule 要素のこの属性は、RDF Description 要素の属性とマッチする場合にマッチします。階層的な RDF ファイルを作ることもできます。
以下は、どうすれば RDF ファイルをデータソースとして使えるかの例です。RDF ファイルはかなり大きいので、これとは別に見る ことができます。
例 6.7.3
<tree flex="1" datasources="animals.rdf" ref="urn:animals:data">
<treehead>
<treerow>
<treecell label="Name"/>
<treecell label="Species"/>
</treerow>
</treehead>
<treecolgroup>
<treecol flex="1"/>
<treecol flex="1"/>
</treecolgroup>
<template>
<rule>
<treechildren flex="1">
<treeitem uri="rdf:*">
<treerow>
<treecell class="treecell-indent" label="rdf:http://www.some-ficticious-zoo.com/rdf#name"/>
<treecell label="rdf:http://www.some-ficticious-zoo.com/rdf#species"/>
</treerow>
</treeitem>
</treechildren>
</rule>
</template>
</tree>
|
ここで、データはファイルから生成されています。ref 属性は、RDF ファイル中のルート要素、つまり、トップレベルの Seq に設定されています。これによって、animals の完全なリストが取得できます。必要であれば、返されるデータセットを制限するために、ref 属性を他の about 属性値のどれかに設定することもできます。例えば、reptiles (爬虫類) だけを表示するには、urn:animals:reptiles という値を使います。
下の例は、ref 属性を設定することにより、RDF データソースの特定部分を表示する方法を示しています。
例 6.7.4
<window
id="example-window"
title="History List"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ANIMALS="http://www.some-ficticious-zoo.com/rdf#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<popupset>
<popup id="mammals" datasources="animals.rdf" ref="urn:animals:mammals">
<template>
<rule ANIMALS:specimens="0"></rule>
<rule>
<menuitem uri="rdf:*" label="rdf:http://www.some-ficticious-zoo.com/rdf#name"/>
</rule>
</template>
</popup>
</popupset>
<box popup="mammals">
<button label="Click here to see the mammals the zoo has"/>
</box>
</window>
|
この場合は mammals (哺乳動物) だけが欲しいので、mammals リストの URI を選択します。例では ref 属性の値が urn:animals:mammals であることに気が付いたことでしょう。これは、RDF ファイル の Seq 要素の一つに対応します。これによって、このリストの子孫だけが返されます。
ここでは、2 つのルールが使われています。最初のルールによって、ANIMALS:specimens 属性が 0 に設定されたリソースすべてがキャッチされます。RDF ファイル中で、この属性が Description 要素のそれぞれにあることが分かるはずです。それらの中には、値が 0 のものがあります。そのため、この場合は、このルールがマッチします。このルールには内容がないので、これらのリソースのどれも表示されません。これは、表示したくないデータを隠す効率的な方法です。
2 番目のルールは、それ以外のすべてのリソースに適用され、ポップアップメニューの行を作り出します。最終結果は、0 以外の specimen (種族) をもつ mammals すべてからなるポップアップメニューになります。
(進む) 次は、ルールシンタックスのすべてを見ることにしましょう。