Musical baton vocabularyスキーマには、RDFでモデルを考えるに際して迷ったり勘違いしたりしやすいポイントがいくつか含まれている。概要紹介でも簡単に触れたが、参考までにFAQ的にとりあげてみることにしよう。
- MusicalBaton要素にはrdf:aboutでRDF/XMLのURIを与えるべきではないのですか
-
すぐに出てきそうなのが、RDF/XMLでバトンを記述するのなら、それが
mb:MusicalBaton
型リソースのURIになるのではないかという発想。これは、URIとリソース(およびそのリプレゼンテーション)の関係についての、何度も取り上げられている問題ですね。よく使われる例としては、《W3Cという組織を表すリソースに、
http://www.w3.org
というURIを与えたらどうだ》というものがあります。もちろんこれでは、組織としてのW3Cと、そのホームページが区別できなくなり、このリソースのdc:creator
はバーナーズ=リーなのかW3Cのウェブマスターなのか混乱してしまいます。一般には、組織としてのW3Cは、foaf:homepage
のようなIFPとしてURIを結びつけるのです。(例)
<foaf:Organization> <foaf:homepage rdf:resource="http://www.w3.org"/> </foaf:Organization>
FOAFのケースを考えてみてもいいでしょう。FOAFファイルがRDF/XMLとして記述してあっても、foaf:Person型リソース(人物)に
rdf:about
でそのファイルのURIを与えたりはしません。FOAFファイルはその人を識別するURI(IFP)ですらなく、FOAFにおいてはrdfs:seeAlso
によって結びつけられているだけなのです。(例)
<foaf:Person> <foaf:nich>masaka</foaf:nick> <foaf:mbox rdf:resource="mailto:webmaster@kanzaki.com"/> <rdfs:seeAlso rdf:resource="http://www.kanzaki.com/info/webwho.rdf"/> </foaf:Person>
同様に、mb:MusicalBatonにはRDF/XMLのURIを与えず、
rdfs:seeAlso
としてロボットの参照のためにこのURIを示すというモデルを採用しています。またIFPは、mb:batonPage
としてバトンを表現したウェブページのURIを用います。(例)
<mb:MusicalBaton> <mb:batonPage rdf:resource="http://www.kanzaki.com/memo/2005/06/18-1"/> <rdfs:seeAlso rdf:resource="http://www.kanzaki.com/.../musicalbaton.xml"/> <mb:total_volume_of_music_files_on_my_computer> 242MB </mb:total_volume_of_music_files_on_my_computer> ... </mb:MusicalBaton>
MusicalBatonは「ある人のある時の音楽環境を表し、人に送ったり受け取ったりできる特殊なバトン」という抽象的なリソースで、XMLファイルではありません。でないと「XMLファイルが242MBの音楽ファイルを持っている」という変な話になってしまいますよね?
※一般論として、抽象的なリソースURIがそのリプレゼンテーションとしてHTML/XMLファイルを持つことはあります。例えば、XML名前空間URIとそのURIに対応する文書の関係などです。ここでは、FOAFの一部としてバトンを記述できるようにしているため、RDF/XMLのURIがバトンを表すとは考えません。
- バトンの4つの質問は、直接foaf:Personのプロパティにする方が良くないですか
-
「ある人の音楽的環境や嗜好」を表すプロパティは、当然
foaf:Person
型リソースを直接記述するものとして定義することもできます。“私が最近買ったCD”は、「私」についての話ですから、次のように記述することも可能でしょう。(例)
<foaf:Person> <mb:last_CD_I_bought>Mendelssohn: Symphony No.3/No.4</mb:last_CD_I_bought> ... </foaf:Person>
ただしこれは、「私」がまた別の新しいCDを買うと、その時点で真ではない文になってしまいます。この文が常に真になるようにするには、主語が時間スライスで限定可能な形になっていないとうまく行かないのです。
例えば「日本の外務大臣は○○だ」という文は、いつの時点かによって目的語が違ってきます。これが「第二次小泉内閣の外務大臣は○○だ」ならば、目的語の特定は可能です。あるいは年鑑の記述のように「2005年の日本の外務大臣は○○だ」という形もあり得るでしょう。
日本と外務大臣を直接結びつける代わりに「○○内閣」という中間リソースをおくことで、時間変化をうまく吸収できます。同じように、Musical Batonでは「私が最近買ったCD」ではなく、バトンを表す中間リソースを導入し、「私がこのバトンを受け取った時の一番新しい購入CD」と表現しているのです。
また、「私」が複数のバトンを受け取って、それぞれに異なる「環境・嗜好」を記述した場合、それぞれのプロパティが直接「私」に結びつけられていると、どの文がワンセットのバトン(4つの質問)になるかが不明になってしまいます。この点からも、
mb:MusicalBaton
型のリソースを使って質問をグループ化するほうが都合がよいのです。 - Musical Batonは人と人をつなぐものだから、batonFromの目的語を人にしてしまう方が適切ではありませんか
-
foaf:knows
が人と人のつながりを示すプロパティであるように、mb:batonFrom
はバトンの受け渡しを記述するプロパティです。この関係によって、バトンがどのように伝播していったかを示すことができます。「このバトンはある“人”から渡された」という文を記述するためには、別のプロパティ
mb:receivedFrom
がいちおう定義してあります。ただしこの“人”は、mb:batonFrom
で記述したバトンにmb:batonHolder
プロパティを加えて示すことができるので、mb:receivedFrom
は実質的には必要ありません。mb:passedTo
の対として存在しているだけです。バトンの受け渡しを
mb:receivedFrom
のような「人」を目的語としたプロパティで記述しようとすると、その人が複数のバトンを保有していた場合、どのバトンが渡されたのかを特定することができないという問題もあります。バトンの流れも、間に人物リソースが介在してくるので、伝搬をストレートに示すことができないでしょう。なお、バトンを「ある人に渡した」ことは
mb:passedTo
で示しています。これは、バトンを渡す時点ではその人がどんなバトンリソースを作るか、あるいはそもそもバトンを受け取ってくれるかどうか分からないため、バトンどうしの関係記述ではなく、「バトンと受け取る人」という非対称な関係を記述しているわけです。仮に、バトンは受け取ってもらえるという前提に立てば、次のようにbatonTo
を用いた記述も可能でしょう。(例)
<mb:batonTo> <mb:MusicalBaton> <mb:batonHolder rdf:parseType="Resource"> <foaf:nick>bar</foaf:nick> <foaf:weblog rdf:resource="http://example.org/bar/"/> </mb:batonHolder> </mb:MusicalBaton> </mb:batonTo>
mb:batonTo
は純粋にmb:batonFrom
の反対関係のプロパティで、バトンの流れを示すという観点では、重複していて不要なものです。バトンはどこから受け取ったかはウェブページに記述する習慣になっているので、mb:batonFrom
は基本的には与えられると考えると、これだけで流れを追うのに十分ということになります。mb:passedTo
は、バトンの流れを追うというよりも、自分のバトン記述の中で「次に誰に渡したか」を示して記述を完結させるという目的が中心です。 - five_tunes_I_listen_to...はRDFコンテナを用いる一方、passedToは列挙にしているのはなぜですか
-
このスキーマは《Musical Batonの質問を忠実に再現する》という遊びからスタートしたため、プロパティは必要以上に質問そのものの名前(とセマンティクス)を用いています。その結果、4番目の質問に対応するプロパティは
five_tunes_I_listen_to...
と、メンバー数が5であるグループを示すプロパティになってしまいました。つまり、RDFコンテナでないと表現しにくいものになっているわけです。プロパティを、たとえば
mb:favorite_tune
のようなもっとニュートラルな形で定義していれば、列挙型で記述する方がよいでしょう。(例)
<mb:MusicalBaton> ... <mb:favorite_tune>Britten: Peter Grimes</mb:favorite_tune> <mb:favorite_tune>バルトーク: 弦楽四重奏曲</mb:favorite_tune> <mb:favorite_tune>ブラームス: ピアノ協奏曲第2番</mb:favorite_tune> <mb:favorite_tune>マーラー: 大地の歌</mb:favorite_tune> <mb:favorite_tune>ニールセン: 交響曲第5番</mb:favorite_tune> </mb:MusicalBaton>
mb:favorite_tune
が5回出現するということを明確にしたければ、スキーマでowl:cardinality
を使って制約を加えておくことも可能です。mb:passedTo
はこのような特殊事情がないので、素直に列挙型にしています。一般に、複数出現するプロパティ/値の記述は、必然的な理由がなければ、RDFコンテナではなく列挙型とすることが推奨されています。
まだ疑問点はあるかも知れないが、長くなってきたので、ひとまずこの辺りで。
- httpRange-14あるいはhttp:型URIの適用範囲 (2005-06-22)
- 作者を表すURIとホームページのURI (2005-07-23)
- Musical Baton記述のスキーマ (2005-06-21)
- Musical Baton (2005-06-18)