2012-03-30 3 views
6

SPARQLに関する質問があります。SPARQL:クラス階層の深さが不明な場合、オントロジーの威信を取得するにはどうすればよいですか?

Animals (is a superclass with object property <hasColor>) 
------ Mammals (subclass of Animals) 
------------- Dog (subclass of Mammals) 
---------------- dog1 (a instance with property <hasColor>="white") 
---------------- dog2 (a instance with property <hasColor>="red" ) 
------ Bird (subclass of Animals) 

それは「動物のすべてのインスタンス」または「『白』であるすべての動物、」SPARQLで見つけることが可能です:私は動物のオントロジーを持っていますか?そして、後方:インスタンス(dog1)がAnimalsに属しているかどうか、どうすればわかりますか?

:クラス階層の深さと幅は、事前に不明です。

また、以下のクエリは

SELECT ?x WHERE {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"} 

を動作しませんし、次のクエリは、(「白」であること、すべての動物を見つける。)クラス階層の深さが分かっている場合にのみ機能します。 (階層が知られているのであれば、私は目標到達する)下に階層の最上位から(指定された手順を行うことができます。この場合、2つのステップを

SELECT ?z WHERE { 
?x rdfs:subClassOf :Animals . 
?y rdfs:subClassOf ?x . 
?z rdf:type ?y . 
?z :hasColor "white" 
} 

同じことが次の例のために真であります - 。 「動物のすべてのインスタンスを見つける」

SELECT ?z WHERE { 
?x rdfs:subClassOf :Animals . 
?y rdfs:subClassOf ?x . 
?z rdf:type ?y . 
} 

hierarchieが不明の場合、何をするには?

クエリが SDBで処理されます

が(あるのコンポーネントイエナ)。 select ?x where {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"})

UPD:

は、私のような何かをしたいです。このように見えるかもしれません " '白' であるすべての動物(インスタンス)を、見つける" ためソリューション:??

SELECT Y {Xのrdfs:subClassOfの*:動物。 ?y rdf:type?x。 ?Y :

答えて

10

あなたのSPARQLクエリで推移を使用することができますhasColor "白い"}(*使用):

SELECT ?y WHERE { ?x rdfs:subClassOf* :Animals . 
        ?y rdf:type ?x . 
        ?y :hasColor "white" } 
+0

感謝を! Protegeでクエリをテストしました。 SELECT?x WHERE {?x rdfs:subClassOf *:Animals}は正常に動作します。 しかし、SELECT?x WHERE {?x rdfs:subClassOf *:動物。 ?x:hasСolor "white"}一致するものが見つからない – ERG

+0

その奇妙なクエリSELECT?x?y WHERE {?x rdfs:subClassOf *:Animals。 ?y rdf:type?x。 "}はうまく動作し、すべてのインスタンスを返しますが、(?x:hasocololor" white ")を追加すると、一致しないと判断されます。 – ERG

+0

@ERG:' SELECT?x WHERE {?x rdfs :subClassOf *:Animals?y rdf:type?x?y:hasColor "white"} '? –

関連する問題