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 :
感謝を! Protegeでクエリをテストしました。 SELECT?x WHERE {?x rdfs:subClassOf *:Animals}は正常に動作します。 しかし、SELECT?x WHERE {?x rdfs:subClassOf *:動物。 ?x:hasСolor "white"}一致するものが見つからない – ERG
その奇妙なクエリSELECT?x?y WHERE {?x rdfs:subClassOf *:Animals。 ?y rdf:type?x。 "}はうまく動作し、すべてのインスタンスを返しますが、(?x:hasocololor" white ")を追加すると、一致しないと判断されます。 – ERG
@ERG:' SELECT?x WHERE {?x rdfs :subClassOf *:Animals?y rdf:type?x?y:hasColor "white"} '? –