[PR]何かを探す前に無料占い:当たる!無料占い『スピリチュアルの館』

XUL チュートリアル - 6.7 - RDF データソース
戻る 内容 リファレンス 進む

XUL チュートリアル - RDF データソース

ここでは、その他のデータソースと自分自身の RDF ファイルをデータソースとして使う方法を見ることにしましょう。

その他の Mozilla データソース

前のセクションで、ユーザーのブックマークを表示する方法を見ました。前のセクションの例を試すと、表示されるデータは、ブックマークに対応しています。ブックマークを追加したり削除すると、それは自動的に更新されます。例のウィンドウの一つを開いたままにしてブックマークを追加してみて下さい。即座に更新されることが分かるはずです。

Mozilla は、これ以外にも、多くのデータソースを提供しています。その幾つかを例とともにここでリストします。それらは、個々の場合でフィールドこそ異なりますが、ブックマークと同じように働きます。

履歴リスト (History List)

履歴データソースは、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>

この例を試してみると、トップレベルのディレクトリーはすぐに表示されますが、ディレクトリーを開くときはわずかに遅れることに気が付くでしょう。これは、ディレクトリー中のファイルのリストが読み込まれるからです。

複合データソース (Composite Datasources)

datasources 属性では、以下の例のように空白文字 (whitespace) で区切ることにより、複数のデータソースを指定できます。これは、データを指定されたすべてのデータソースから読み込む効果があります。


<tree datasources="rdf:bookmarks
                      rdf:history
                      animals.rdf" ref="NC:BookmarksRoot">

この例は、リソースを、ブックマーク、履歴、animals.rdf ファイルから読み込みます。それらは結び付けられて一つの複合データソースになり、あたかも一つのデータソースであるかのように使用することができます。

特殊なデータソースである rdf:null は、何にも対応しません。このデータソースは、スクリプトを使ってデータソースを動的に設定したいが、最初にその一つを指定したくない場合やその正確な URL が分からない場合に使えます。

カスタム RDF データソース

必要なら、上の内部データソースのどれでも使うことができます。その他に、メールやアドレスブック、検索などのためのデータソースがあります。しかし、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 すべてからなるポップアップメニューになります。


(進む) 次は、ルールシンタックスのすべてを見ることにしましょう。

例: 6.7.1 6.7.2 6.7.3 6.7.4

XUL チュートリアル - 6.7 - RDF データソース
戻る 内容 リファレンス 進む

[PR]500000円当る!通信講座:通信教育の費用に♪今なら無料で車も当る