私はontobeeを使用して、ヒト疾患オントロジー「DOID」の「必須高血圧」のすべての兄弟を取得するためのクエリを実行します。クエリは5つのトリプルを返します。クエリによって返さない1人の以上の兄弟があることをクラス階層で"DOID"オントロジーで兄弟クラスをクエリする方法は?
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix owl: <http://www.w3.org/2002/07/owl#>
SELECT ?xChild Str(?xChildLa)
from <http://purl.obolibrary.org/obo/merged/DOID>
WHERE {
<http://purl.obolibrary.org/obo/DOID_10825> rdfs:subClassOf ?x.
?xChild rdfs:subClassOf|(owl:equivalentClass)* ?x ;
rdfs:label ?xChildLa.
}
しかしthe page of "essential Hypertension"ショー。
上記のクエリで何が問題になっていますか? 「腎性高血圧症」が返されないのはなぜですか?
where句でプロパティとしてequivalentClassを使用していても、クエリではなく「腎性高血圧症」がなぜ発生するのか、まだわかりません。 –
OWLクラス式とOWL公理のRDFマッピングを見てみると、明らかになります:https://www.w3.org/TR/owl2-mapping-to-rdf/。はるかに冗長です。スーパークラスは、RDFリストを介してエンコードされた交差部です: '_:x rdf:type owl:Class。 _:x owl:intersectionOf T(SEQ CE1 ... CEn).'ここで、各 'CE_i'自体はOWLクラス式になります。だからこそ、私はSPARQLの方がはるかに複雑だと言ったのです。 – AKSW
'rdfs:subClassOf |(owl:equivalentClass/ owl:intersectionOf/ rdf:rest */rdf:first)'のようなものは動作しますが、ローカルで実行するサンプルデータがあります。 – AKSW