2017-05-05 15 views
0

私は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"ショー。

上記のクエリで何が問題になっていますか? 「腎性高血圧症」が返されないのはなぜですか?

答えて

1

あなたはdescription of renal hypertensionをクリックすると、あなたはそれはそれは、OWLクラスの等価性の公理(owl:equivalentClass)を使っていることを意味する

renal hypertension EquivalentTo hypertension and (located in some kidney)

で表示されます。これは双方向のrdfs:subClassOfの関係の構文的な砂糖であり、実際にはあなたのSPARQLクエリはこの公理を構文的にも意味的にも扱いません。

可視化のためにすべてのサブクラスを取得するためにOWL reasonerを使用するかどうかは不明です。

SPARQL経由で行うことは、great answer from Joshua Taylorにあります。

+0

where句でプロパティとしてequivalentClassを使用していても、クエリではなく「腎性高血圧症」がなぜ発生するのか、まだわかりません。 –

+0

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

+0

'rdfs:subClassOf |(owl:equivalentClass/ owl:intersectionOf/ rdf:rest */rdf:first)'のようなものは動作しますが、ローカルで実行するサンプルデータがあります。 – AKSW

関連する問題