BH13.13/uuid-bnode

提供:TogoWiki

移動: 案内, 検索

目次

UUID vs. Blank node

作成者:金(DBCLS)

背景

BH13.13で有りましたUUIDとBlank nodeの使い分けの議論の対しての僕の論点を共有する目的で書きました。こんな議論が蓄積されるとRDFデータ作りのガイドラインになるのではないかと期待します。もちろん間違った内容が共有されるのは良くないですので、間違ったところが見つかったら、ご指摘を頂けますと幸いです。

UUIDとBlank nodeを使う時の差

正確に言うと「URIを発行する」vs.「URIを発行しない」の差だと思います。 URIを発行する時、URIを生成する幾つかの方法の一つがUUIDですが、どんな方 法で作られてもURIになるのは一緒ですので、標準のセマンティックウェブのツー ルがUUIDのURIとそうでないURIで区別しないと思います。

UUIDは数あるID生成の方法の中でID生成の主体が不特定多数の時、生成さ れるID間の衝突を防ぐための方法であります。セマンティックウェブの世界で はこんな目的のために各自が持っているドメイン名を使って皆自分のネームス ペースでIDを生成しますので普通だったらUUIDを作る理由はないと思います。 なのでUUIDでURIを生成するというのは「どうしても不特定多数が同じネーム スペースを共有してIDを発行したい」時に限ると思います。

「Blank nodeの代わりに適当に臨時的にUUIDのURIを発行する」というのはちょっと 危険な発想だと思います。それはなぜなら「適当に臨時的に」というのは prefixとして'uuid:'を付けるだけでは表現できないからです。そんなUUIDが 含まれたRDFデータを使う人はきっとちゃんとしたURIとして使うと思います。

コストの差

「UUIDを発行してもコストはあまり掛からないので」というのは違うと思いま す。「UUIDの生成」だけはコストが低いかも知らないですが、UUIDで生成され てもURIはURIですのでちゃんとしたURIとしての管理が必要になります。

例えば、「とりあえずUUIDを付けておこう」という気持ちで生成したURIを含む RDFデータセットを公開した後で、そのデータセットをバージョンアップしよう とすると,以前UUIDで生成したURIをちゃんと維持しながら作業しないと行けな いです。というか維持しないとIDを発行した意味がなくなります。Blank node はそんなの気にしなくても大丈夫ですのでコストの差は結構有ると思います。

探索という観点から見てもURIが増えるというのはグローバル探索空間が広くな ることになりますので、探索のコストが上がることに繋がります。ですので 「後で使うかどうかしらないがとりあえず作っておこう」というのはあまりお勧め できるやり方ではないと思います。

意味的な観点

意味的には、例えば「今朝ある人が自転車にぶつかるのを見ました。その人は病院に運ばれました。」とのことを言うため「僕が今朝見た自転車にぶつかった人をこれからXFDFSFRFGAさんと呼びます。」とわざわざ宣言する必要はあまりないと思います。もちろん、そうする方が良い場合もあると思いますので絶対必要ないとは言えませんが。

結論

  • Blank nodeで済むどころをわざわざURIを付けようとしない方が作成者も使用者も楽でしょう。
  • 同じネームスペースで不特定多数がURIを生成する必要がある時はID間の衝突を防ぐ方法としてUUIDが使えるでしょう。

コメント

バイオロジーのデータでは URI が必要だが cool な URL の設計が困難なオブジェクトを管理しなくてはならない場面が多くあります。 将来、各オブジェクトの(バイオロジカルな)アノテーションのバージョン管理まで行うことを想定すると、 空白ノードではどのバージョンのどのデータセットのどのオブジェクトのことを指しているかグローバルに特定できません。

空白ノードを含む RDF データを公開し、複数の機関でそれぞれトリプルストアにインポートすると、 同じオブジェクトに(実装ごとにことなる)内部 ID が振られることになります。 たとえば INSDC (GenBank/EMBL/DDBJ) で共通に管理している塩基配列データベースの定期リリースを元に、 それぞれの機関やサードパーティが特定のオブジェクトに分散アノテーションを追加するという行為を独立して行うと、 オブジェクトが空白ノードであれば次のリリースでマージすることが難しくなります。

空白ノードの場合も UUID の場合も通常の利用では同じ SPARQL クエリで済ませることができますので、 上記のような場合が想定される RDF データでは UUID の使用がむしろ推奨されることもあるかと思います。

片山(ライフサイエンス統合データベースセンター)

→ 続きの議論が biohackathon-jp のメーリングリストで行われました。


References

Linked Data Tutorial [1]

In the context of Linked Data, we restrict ourselves to using HTTP URIs only and avoid other URI schemes such as URNs and DOIs. HTTP URIs make good names for two reasons: They provide a simple way to create globally unique names without centralized management; and URIs work not just as a name but also as a means of accessing information about a resource over the Web.


We discourage the use of blank nodes. It is impossible to set external RDF links to a blank node, and merging data from different sources becomes much more difficult when blank nodes are used. Therefore, all resources of any importance should be named using URI references.

RDF 1.1 Proposed Recommendation [2]

Blank node identifiers are local identifiers that are used in some concrete RDF syntaxes or RDF store implementations. They are always locally scoped to the file or RDF store, and are not persistent or portable identifiers for blank nodes. Blank node identifiers are not part of the RDF abstract syntax, but are entirely dependent on the concrete syntax or implementation. The syntactic restrictions on blank node identifiers, if any, therefore also depend on the concrete RDF syntax or implementation. Implementations that handle blank node identifiers in concrete syntaxes need to be careful not to create the same blank node from multiple occurrences of the same blank node identifier except in situations where this is supported by the syntax.

3.5 Replacing Blank Nodes with IRIs [3]

In situations where stronger identification is needed, systems may systematically replace some or all of the blank nodes in an RDF graph with IRIs. Systems wishing to do this should mint a new, globally unique IRI (a Skolem IRI) for each blank node so replaced.

http://example.com/.well-known/genid/d26a2d0e98334696f4ad70a677abc1f6

Systems may wish to mint Skolem IRIs in such a way that they can recognize the IRIs as having been introduced solely to replace blank nodes. This allows a system to map IRIs back to blank nodes if needed.

/mw/BH13.13/uuid-bnode」より作成