2016-12-22 2 views
3

私は歯の修復手順(すなわち、充填材)の成功を研究している研究プロジェクトに取り組んでいます。数多くの歯科診療所からデータを収集しており、すべてのデータをGraphDBトリプルストアに集約します。私の質問は、すべてのデータを単一のレポに保存するためにGraphDBコンテキストを使用する方法と関係していますが、必要なときに個々のプラクティスを個別に照会することができます。私は、GraphDB、バージョン7.0.3、およびGraphDBワークベンチのFree版を使用しています。graphdbリポジトリ内の複数のデータセットのコンテキストを使用

リポジトリにデータをインポートすると、コンテキストを指定するオプションが表示されます。私の理解は、これは本質的にRDFグラフ全体の部分グラフであるということです。右?しかし、これがベースURIとどう違うかについては少し不安です。この例のページでは、ベースURIとコンテキストの両方が同じです。

レポを設定する一般的な考え方は、ベースURIを与え、各練習データセットに対してベースURIを同じに保つことですが、各練習をロードするときにはコンテキストを変更します。例えば:

  • 練習1件のデータロードする:
    ベースURI:www.example.com/dental-practices/practice-1


  • コンテキストwww.example.com/dental-practices/を
    ベースURI:www.example.com/dental-practices/
    文脈:TO

  • www.example.com/dental-practices/practice-2練習2データをロードする

  • ロード・プラクティス3データ:
    ベースURI:www.example.com/dental-practices/
    コンテキスト:ように

www.example.com/dental-practices/practice-3 ...と...

すべてのデータの集計を照会するには、グラフを指定しないSPARQLクエリを使用します。たとえば、すべての患者を見つけるには:

select ?patient where { ?patient rdf:type :Patient } 

しかし、私はどのように特定の練習を質問しますか?グラフを指定するか、「from」キーワークを使用しますか?たとえば:

select ?patient from <practice-1> where { ?patient rdf:type :Patient } 

または

select ?patient where { graph <practice-1> { ?patient rdf:type :Patient } } 

最後に、誰もが効果的にコンテキストを使用する方法を説明するところがあっページ/ドキュメントを知っているのですか?

答えて

0

特定のグラフのクエリにどちらの方法を使用してもかまいません。 GRAPHキーワードとFROMキーワードは、この場合ほぼ同じことを行います。ただし、このバリアントをクエリプランナに最適化するのは少し簡単ですので、FROM - バリアントを使用する方が高速になる可能性があります。

いくつかの背景:GRAPHキーワードは、単純に現在照会データセットのサブセットに「ズームイン」しながら、SPARQLで、FROM(およびFROM NAMED)句は、クエリが及ぶその上データセットを指定します。 FROM句を省略すると、クエリはデータベースのデフォルトデータセットで評価されます。GraphDBでは、デフォルトのSPARQLデータセットには、データベースで使用可能なすべての名前付きグラフが含まれています。このため、GRAPHキーワードとFROMキーワードを使用すると同じことが行われます。ただし、これは店舗固有のものであることに注意してください。他のデータベースでは、デフォルトのデータセットを異なる方法で定義することができます。

脇に:何もベースURIとは関係ありません。ベースURIは、入力データ内の相対URI参照を解決するときに使用される単なる構文メカニズムです。 GraphDBのようなRDFデータベースは相対URIを実際には格納しないので、データベースに追加する前に、ベースURIをパーサーが使用してデータ内の相対URIを絶対URIに変換します。

さらに読むには、GraphDB's own documentation about query behaviourをお勧めします。 RDF4J Programming documentationには名前付きグラフに関するセクションもあります - GraphDBはRDF4J APIと密接にリンクしているため、ほとんどの慣習に従います。

+0

ありがとうございました。 – Bill

+0

私はレポにいくつかのコンテキストを追加しました。しかし、私は結果を取得することができません。 たとえば、実行された歯の修復回数を取得するには、次のように入力します。 PREFIX rdf: PREFIX rdfs: 個別(count(?i)as total_procedures) { ?i rdf:type #復元手順 ?i rdfs:label?s。 } - > 696 しかし、文脈を指定すると結果は得られません: – Bill

+0

@Bill新しい質問がある場合は、実際にコメントとしてではなく新しい質問として投稿してください。コンテキストを提供する場合は、この質問に戻るリンクを追加してください。 –

0

さらに、Jeenの回答では、ベースURLがリポジトリのデフォルトの名前空間であると付け加えます。デフォルトでは、値は空ですが、空でないベースURLを使用すると、匿名(空白)ノードの一意性が保証されます。

+0

これについて詳しく説明できますか?私はベースURLが空のノード識別子と関係があることを知らなかった... –

関連する問題