重要なのは、あなたが何を知っているかではなく、誰を知っているかということです。Webの登場以来、自己表現について多くの検討が行われてきました。多くの人がWebに最初に取り掛かる際に行ったことは、自分でホーム・ページを構築することでした。検索エンジンを使用してみると、自分と同じ興味を持つ人たちを素早く見つけることができました。確かにこのテクノロジーは人々にとって興味深いことでしたが、それにも増して興味深かったのは、世間の人々そのものでした。
今流行の個人用Webパブリッシングにおける最近のエピソードの1つに、ウェブログ (weblog) があります。これは一種の高速パブリッシングで、しばしば、非常に個人的でインフォーマルなトーンを帯びます。ウェブロガーたちは互いに引き合いに出すのを好み、複数のWebサイトにまたがるダイアログが作成されます。この高速形式のパブリッシングを支えるテクノロジーの1つがRich Site Summary (略してRSS) です(参考文献を参照)。これは、サイトのコンテンツ項目に関するメタデータが入っているXML文書です。
RSSは、コンテンツの断片を集約し、順序付けし、検索するための予測可能な方法を提供します。Syndic8やMeerkat (参考文献を参照) などのサイトは、ユーザーの関心のあるトピックまたは人物について、誰が何と言っているかを記録しています。RSSも比較的単純にできていて、しばしば、XMLチュートリアル資料の例示に使用されます。このアプリケーションの目玉は、ユーザーが自分のコンテンツをより大きなWebに接続して、他のユーザーがより簡単に自分を見つけ出せるようにしてくれることです。
しかし、この記事ではRSSについては述べません。これに関する文書は、ほかにも数多く書かれています。この記事では、ある程度の類似性を持つ新規プロジェクトFriend-of-a-Friend (FOAF) について検討します。このプロジェクトでは、Webの社会的ネットワーキング局面をさらに展開して行くつもりです。
多くのコミュニティーは、企業から専門家組織を経由して社会集団に至るまで、インターネットから生まれました。FOAF用語 (Dan BrickleyおよびLibby Miller両氏による編さん) は、コミュニティー・メンバーについての基本表現を提供します。つまり、ユーザーやその基本特性 (名前、Eメール・アドレスなど) を記述します。
FOAFは単なるRDF用語に過ぎません。その代表的な使用法はRSSの使用法と似ています。つまり、1つまたは複数のFOAFファイルをWebサーバー上に作成し、URLを共用して、そのファイルの情報をソフトウェアで使用できるようにします。ユーザー独自のWebページの作成と同様に、FOAFデータの作成は分散化されますので、ユーザーによる制御が可能です。これらのファイルを使用するアプリケーションの例としては、コミュニティー・ディレクトリーがありますが、そこではメンバーが自分自身のレコードを保守します。しかし、RSSの場合と同じように、FOAFの本当に興味深い部分が見られるのは、データの集約時であり、その後で、それらのデータを検討し、相互にリンクすることができます。
FOAFは、コミュニティーを管理するための重要なツールになる可能性を秘めています。簡単なディレクトリー・サービスを提供するだけでなく、FOAFの情報をさまざまな方法で活用することができます。例えば、次のとおりです。
- 信頼できる同僚からのメールの優先度を高めて、Eメールのフィルター操作を容易にする。
- コミュニティーへの新規登録を援助する。
- 自分と同じ興味を持つユーザーを見つける。
ここから、FOAFの基本機能を説明し、現在の実施状況と将来の考慮点についていくつかの指針を示します。では、FOAFが狙いとする中心問題の検討に入りましょう。ここでは、ユーザーを記述するために、どのようにして彼らを識別するかについて検討します。
実世界の事物 (例えば、ユーザー) に関するデータをコンピューター・システムに入力する際、それぞれの事物の固有名をどのように作成するかという困難に直面します。人物の場合、その人の名前だけでは、その人と他の人を一意的に識別するのに十分でないことは明白です。多くの閉じたシステムでは、人物には、アプリケーションに特有なIDを割り当てられがちです。この傾向はWebで見られます。つまり、メーリング・リストやWebサイトといったさまざまなサービスに、ユーザー名/パスワードのペアを使用することがあります。これらの別個の閉じたシステム間で相互運用を行わない限り、問題は生じません (ただし、記憶できないほど多くのIDがあることは別ですが)。
いくつかのサービスにまたがって識別性を統一したい場合は、難しい問題が生じます。識別性の割り当てを制御するための集中体系を、誰かが作成しなければなりません。最近急速な成長を遂げた体系の1つが、MicrosoftのPassportです。ただし、この集中化は、いくつかの理由でリスクがあります。その理由の1つとして、特に、ユーザーによるサービスへのアクセス、および、おそらくはユーザーのプライベート・データが、第三者によって完全制御されるという点が挙げられます。
このため、FOAFシステム (つまり、誰でも自由にデータを作成して使用でき、さらに1人当たり1つの名前のみが与えられる) を考える場合は、分散した命名ストラテジーが必要になります。Webには、URIのような非常に良くできた命名ストラテジーがあります。人物を命名する場合、みなさん、mailto: (Eメール・アドレス) が簡単なURI使用方式だと思われるかもしれません。しかし、物事は考えるほど簡単ではありません。単純なアプローチでは、開発者は、例えば以下のようなコードを作成するでしょう。
mailto:edd@xml.com lives in the UK |
ちょっと考えただけで、このコードがナンセンスであることが分かります。本当のところは、次のようになります。
mailto:edd@xml.com is an e-mail address |
人物とそのEメール・アドレスが同じものでないことは明らかです。そこで、実際上、人物のEメール・アドレスをグローバル名として使用することはできません。さらに、人物が複数のEメール・アドレスを持っていて、それぞれのアドレスが別々の目的に使用されることもあります。
しかし、Eメール・アドレスを使って人物を識別するという方針に欠陥はありません。一般に、Eメール・メッセージをある人物のアドレスに宛てて送信する場合、そのメッセージは、その特定の人物に届くはずです。これは先程の単純なアプローチで欠けている点でもありますが、人物のグローバル名を作成することはできないとしても、「この人のEメール・アドレスはedd@xml.comです」という記述が含まれる人物に関する記述は、すべて同じ人物を指すということを当然想定できるはずです。
そこで、正しくは次のようになります。
The person with e-mail address mailto:edd@xml.com lives in the UK. |
FOAFはこのように機能します。特定の個々人に関する情報を組み合わせる際、「Eメール・アドレスはあいまいでない特性 である」という前提に立ちます。つまり、1人の人物のみが1つのメールボックスを所有しています。
理論付けはさておき、FOAF情報がどのような形態を取るかを検討しましょう。コードがしばしば言葉よりも雄弁であるように、リスト1は私自身に関する小さなFOAF記述です。
リスト1. 著者のサンプルFOAF記述
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:name>Edd Dumbill</foaf:name>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
</foaf:Person>
</rdf:RDF>
|
簡単に言えば、リスト1 の記述は、「Edd Dumbillという名前の人がいて、Eメール・アドレスはedd@xml.comである」と言っています。
FOAFはRDFを使用してその記述をエンコードします。この記事では、オブジェクト指向のデータ構造を模倣した非常に基本的なRDFの使用法に従います。そのために、型付きオブジェクト (リスト1 の場合、型はfoaf:Person) と、その特性 (リスト1 の場合、foaf:name およびfoaf:mbox) をリストします。RDFの詳細については、『参考文献』を参照してください。
表1は、私自身をより詳しく表せるように、いくつかのより簡単な特性を示しています。
表1. 個人を特徴付けるためのいくつかの簡単な特性
| 特性 | 値 |
|---|---|
| nick | チャットや他のコンピューター・システム上でユーザーを識別するための名前を示す文字列リテラル。例えば、AIM画面名またはUNIXログイン |
| homepage | 個人のホーム・ページのURL |
| workplacehomepage | 個人が作業する場所のホーム・ページのURL |
| depiction | 個人を描いたイメージがある場所のURL |
| phone | 個人の電話番号 |
リスト2では、私自身についての記述に、さらにいくつかの特性を追加しています。(スペースを節約するために、RDFエンベロープの外側を省いています。)
リスト2. 著者についての記述に、表1の特性をさらにいくつか追加したRDFの抜粋
<foaf:Person>
<foaf:name>Edd Dumbill</foaf:name>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
<foaf:nick>edd</foaf:nick>
<foaf:workplacehomepage rdf:resource="http://xml.com/" />
<foaf:depiction
rdf:resource="http://heddley.com/edd/images/edd-shoulders.jpg" />
</foaf:Person>
|
以上、コンピューター読み取り可能なホーム・ページを作成するための有効な方法を例を上げて示しました。オンライン・コミュニティーのすべての人が、FOAFファイルをポイントするURLを提供するとしたら、それらのURLへのリンクを適当なコミュニティー・ディレクトリーに組み込むことができます。
私がまだ検討していない特性が1つあります。それはfoaf:knows 特性です。この特性は2人の人物をお互いにリンクするために使用され、基本的には、ある種の個人的な知り合いといった意味合いを持っています。このプロパティーを使用する場合は、まず、ほかの人たちを識別する必要があります。私が識別性の表現方法で結論しているように、FOAFは、ほかの人たちを識別するために、それらの人たちの特性を記述します。このため、プロセッサーは識別特性を使用して、誰を参照しているのかを割り出します。リスト3は、私がSimon St.Laurentを知っているということを表す方法を示しています。
リスト3. 2人の人物が知り合いであることを示すfoaf:knows特性の例
<foaf:Person>
<foaf:name>Edd Dumbill</foaf:name>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
...
<foaf:knows>
<foaf:Person>
<foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />
<foaf:name>Simon St.Laurent</foaf:name>
</foaf:Person>
</foaf:knows>
</foaf:Person>
|
リスト3 の私についての記述で、「この人は、メールボックスがsimon@xmlhack.comで、名前がSimon St.Laurentという人物を知っています」という記述を追加します。メールボックス行を太字で強調表示していますが、これは、FOAFが、メールボックスを使用して実際にSimonとのリンクを作成するからです (他の特性は使いません)。
次のセクションで示しますが、プログラムが私のFOAFファイルを読み込み、さらにSimonのファイルを読み込むと、私は当然、「私が知っている人物の名前とホーム・ページを示してくれる」ように依頼することになります。私はSimonのホーム・ページについて何も言うことはありませんが、もしも彼がこの情報を提供した場合は、プログラムにより、共用のfoaf:mbox 特性に基づいてこれらの情報をお互いにリンクさせることができます。
FOAF用語を使用した場合に本当の力が発揮されるのは、いくつかのFOAFファイルをマージしたときです。この用語の場合、自分自身についての記述だけしか作成できないという制限はまったくありません。例えば、私は、ほかの何人かの人物についてのFOAF記述を作成できました。小さな例を示しましょう。まず、私が作成したファイルを示しているリスト4を見てください。
リスト4. 著者と2人の同僚についての簡単な記述
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:name>Edd Dumbill</foaf:name>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
</foaf:Person>
<foaf:Person>
<foaf:name>Simon St.Laurent</foaf:name>
<foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />
</foaf:Person>
<foaf:Person>
<foaf:name>Eric van der Vlist</foaf:name>
<foaf:mbox rdf:resource="mailto:eric@xmlhack.com" />
</foaf:Person>
</rdf:RDF>
|
Ericがオンラインのフォト・アルバムを持っていると仮定します。彼はそれを使用して、リスト5のようなFOAFファイルを作成することができます。
リスト5. 2人の人物の描画を示す記述
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
<foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />
</foaf:Person>
<foaf:Person>
<foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />
<foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />
</foaf:Person>
</rdf:RDF>
|
人間の目には、これらの2つのファイルを一緒にインポートすることの意味は非常に明白です。すでに私が記述した情報の他に、以前は Simon St.Laurent と Edd Dumbill の 2 人の写真をhttp://example.org/photos/edd+simon.jpgで見ることができました。
コンピューターにそれを理解させるには、これらの2つのデータ・ファイルをマージする必要があります。つまり、コンピューターは、「人物Aが人物Bと同じfoaf:mbox 特性を持っている場合は、AとBは同じエンティティーである」という規則を実施するために、これらのファイル内のデータを処理する必要があります。この処理を終わると、システムが知り得たことをリスト6のように表すことができます。
リスト6. リスト4とリスト5の記述をマージして作成した記述
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:name>Edd Dumbill</foaf:name>
<foaf:mbox rdf:resource="mailto:edd@xml.com" />
<foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />
</foaf:Person>
<foaf:Person>
<foaf:name>Simon St.Laurent</foaf:name>
<foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />
<foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />
</foaf:Person>
<foaf:Person>
<foaf:name>Eric van der Vlist</foaf:name>
<foaf:mbox rdf:resource="mailto:eric@xmlhack.com" />
</foaf:Person>
</rdf:RDF>
|
ここまで来たら、マージの威力を確認できると思います。FOAFファイルを集約しマージすることで、シングル・ポイントの障害または制御という問題を起こすことなく、集中型ディレクトリー・サービスを操作したときと同じ結果を得ることができます。この機能は、政治構造または全体的な規模のいずれかの理由から、分散型制御や分離型制御を必要とする多くのコミュニティーにとって非常に魅力的なものです。
FOAF用語について説明するには、この記事のスペースでは足りません。この機能をさらに詳しく検討するために、いくつかのデモを見てみましょう
- 共同描写: リスト5 では、2人の人物が写真に一緒に写っているものとして記述されています。このデータを使用して、有用かつ面白い結果を入手することができます。この共同描写デモ (参考文献を参照)では、6分解度スタイル練習での共同描写を通して、各人物間の写真の経路を描くことができます。
-
オンライン・チャット: FOAFの検討中に、私はあるソフトウェア・エージェント (bot) を作りました。このソフトウェア・エージェントは、チャット・フォーラムに参加し、各FOAFファイルへのリンクを張り、コミュニティー・メンバーに関する情報を提供します。このコードはまだリリースされていませんが、以下、サンプル・セッションを示します。
<edd> oracle, edd's name <oracle> edd's name is 'Edd Dumbill' <edd> oracle, Edd Dumbill's nick <oracle> Edd Dumbill's nick is 'edd-lap' <oracle> Edd Dumbill's nick is 'edd' <edd> oracle, picture of Dave Beckett and Uche Ogbuji <oracle> Picture at http://photos.example.com/pic_029.jpg <oracle> Caption: Greg Fitzpatrick, Dave Beckett, Libby Miller, Uche Ogbuji
また、FOAFの資料やデモンストレーションの詳細については、参考文献を参照してください。
Friend-of-a-Friendシステムは多くの問題を投げかけます。そのかなりの数が、社会問題または法的問題にかかわっています。ここでそれらの問題を詳細に検討する余裕はありませんが、そのうちのいくつかの問題については、読者の皆さんに考えていただきたいと思います。
- 信頼の置けるコミュニティーから外部にデータを漏えいさせないようにするために、データをどのようにコントロールしますか?
- エラーを訂正し、説明責任を果たせるようにするために、事実の出所をどのように追跡し、保証しますか?
- 世間に公開する情報と、非公開にしておく情報 (例えば、「人物Xが人物Yを信用していない」など) がある場合に、データの区分化をどのように行いますか?
- オペレーション管轄内でのデータ保護法のもとで、FOAF情報の集合に、どのような法的義務がありますか?
- メーリング・リスト、IRC/chat、ウェブログ、RSS、wikisなど、すでに確立されたコミュニティー・ツールや新たに生まれたコミュニティー・ツールに、FOAFをどのように結合しますか?
こういった課題について、FOAF開発者たちは検討を重ねています。FOAFのディスカッションに参加するには、rdfweb-devメーリング・リストに加入してください(参考文献を参照)。
- 同僚のIBMdeveloperWorks コラムニストUche Ogbujiの、以下のようなRDFに関する他の記事を読んでください。
- ナレッジ管理のための基本的なXMLおよびRDF技法 その1: XSLTによるRDFの生成 (developerWorks、2001年7月)
- ナレッジ管理のための基本的なXMLおよびRDF技法 その2: RDFモデルへのファイルの組み込み、および基本的なRDF照会 (developerWorks、2001年9月)
- ナレッジ管理のための基本的なXMLおよびRDF技法 その3: 意味体系からの知識 (developerWorks、2001年11月)
- ナレッジ管理のための基本的なXMLおよびRDF技法 その4: 問題追跡機能のスキーマ (developerWorks、2002年2月)
- ナレッジ管理のための基本的なXMLおよびRDF技法 その5: RDFおよびDAML+OILスキーマの定義 (developerWorks、2002年3月)
-
RDFWebプロジェクト を検討してください。このプロジェクトは、FOAFおよび他のsemantic web vaporware イニシアチブへのリンクを提供します。
-
rdfweb-devメーリング・リスト に参加して、その開発者たちとFOAFについて話し合ってください。
- 現在文書化されているFOAF特性について説明しているFOAF 0.1スキーマ を調べてください。(そのソースを表示して、組み込まれているRDFスキーマを検索してください)。
-
FOAF Wiki におけるFOAFの今後の開発についてご意見をお寄せください。
- コミュニティー関係を写真を使って紹介するCo-depiction のデモを見てください。
-
Open Directory ProjectのRSSに関するページ を調べて、多くの有用な参考文献を検索してください。
- RSSを使用して情報をコンパイルする2つの集約サイトSyndic8およびMeerkat を試してみてください。
-
developerWorksXMLテクノロジー・ゾーン で、その他のXML参考資料を探してみてください。
- XMLおよび関連テクノロジー分野におけるIBM認証開発者になる方法については、こちらを参照してください。
Edd Dumbill氏はXML.com の編集長であり、XMLデベロッパーのためのニュース・サイトXMLhack の編集者兼発行者でもあります。Programming Web Services with XML-RPC (O'Reilly) の著者の1人であり、生命科学の知的財産を交換するPharmalicensing の共同設立者兼アドバイザーです。EddはXML Europe コンファレンスのプログラム司会者でもあります。