2016-08-11 13 views
1

これはVirtuoso 7.1とDBpediaの単純なRDFS推論に関する質問です。私はこのlinkを参考にしてインストールされたVirtuosoインスタンスを持っています。次に、次の問合せでエンドポイントに問合せを行った場合:Virtuoso 7.xのデフォルトのRDFS推論

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Cricketer> . } 

DBpediaに存在するCricketersのリストが表示されます。 (競技者がrdfs:superClassOfクリケット選手であり、全てのスポーツやクリケット選手含まれている)私は、すべての選手がたいと、私はちょうど私がすべて正しい答えを得るために、このクエリ

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Athlete> . } 

を試してみてください。しかし、私はrdfs:subPropertyOfの問題があります。たとえば、プロパティ<http://dbpedia.org/ontology/capital>はサブプロパティー<http://dbpedia.org/ontology/administrativeHeadCity>です。だから私はすべての首都と行政の首都がほしいと思うと私はクエリを発行する

Select ?s ?o 
where { ?s <http://dbpedia.org/ontology/administrativeHeadCity> ?o . } 

私は結果を得る。サブプロパティ推論がDBpediaで動作しないのはなぜですか?私が逃した何か他のものがありますか?

答えて

2

あなたが見逃していますカップルのもの。

まず、Virtuosoは7.2.4 as of April 2016にあります。このバージョンは、多くの理由から2014年の古いバージョンよりも強く推奨されます。

@AKSWのプロパティパスに関するアドバイスは、この後のバージョンでもうまく機能します。

その後、あなたは(ローカル・ミラーを含む)DBpediaのエンドポイント上使用推論は、the input:inference pragmaを通じて、live resultsthe query shown belowの図のようにすることができます -

DEFINE input:inference "http://dbpedia.org/resource/inference/rules/dbpedia#" 

SELECT ?place ?HeadCity 
WHERE 
    { 
    ?place <http://dbpedia.org/ontology/administrativeHeadCity> ?HeadCity 
    } 
ORDER BY ?place ?HeadCity 

またpredefined inference rule setsの一覧を見ることができます。

...続きを読むrelevant documentationのものです。

(ObDisclaimer:OpenLink Software、製造元はVirtuosoです。)

+0

これは本当に@TallTedの問題を解決します。私は、Jenaのプラグマを使用してVirtuosoをクエリすることもできるはずです。 – N00bsie

+0

はい、プラグマは、任意の接続を通じてVirtuosoに到達するSPARQLクエリで使用できます。使用する特定のVirtuoso機能に応じて、[私たちのドキュメントに記載されているようにJenaパーサーをバイパスする必要があるかもしれません](http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtJenaProvider#Bypass% 20Jena/ARQ%20parser)。 – TallTed

2

DBpediaでは自動推論が有効になっていません。 DBpedia自体は、Virtuosoに読み込まれたデータセットです。

あなたはdbo:Athleteのようなスーパークラスですべてのインスタンスを取得する理由は、サブクラス、継承が完全に現在のDBpediaのデータセットでマテリアライズされていることである。

(s rdf:type c1), (c1 rdfs:subClassOf c2) -> (s rdf:type c2)

個々のxのためにということを意味し、DBpediaのデータセットそれは属しているすべてのクラスCを含んでいます - 実際にはスーパークラスです。手順ははサブプロパティ継承のために行われていなかった

、すなわち、

(s p1 o), (p1 rdfs:subPropertyOf p2) -> (s p2 o)

あなたはSPARQL 1.1プロパティパスでその問題を解決することができます:

SELECT ?s ?o WHERE { 
    ?p rdfs:subPropertyOf* <http://dbpedia.org/ontology/administrativeHeadCity> . 
    ?s ?p ?o . 
} 
+0

ああ! subPropertyOfが機能しなかった理由を説明します。私は早くそれをチェックしていたはずです。ありがとう@AKSW! – N00bsie