2017-12-14 19 views
1

私は、RDFのオントロジーから特定のプロパティとラベルを抽出するSPARQLクエリを作成しようとしています。私はPython 2.7(OS:Ubuntu 16.04,64ビット)でrdflib 4.2.2を使用しています。これによりSPARQL 1.1でクエリを実行できます。オントロジーは人体の解剖学的構造であり、すべての器官は独自のクラスを持っています。これらの器官がスーパークラスを有し、ラベルを有するhasRelatedSynonymおよびsomeValuesFromのような追加の特性を有するように編成される。ここではオントロジーのサンプル、クラス制限およびプロパティを持つ単一のクラスである:クラスのいくつかは、私が使用しようとした理由である単一のプロパティに複数の値を持つ制約を、SPARQL集約クエリが機能しない

<owl:Class rdf:about="http://human.owl#NCI_C12832"> 
<rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Conus_Medullaris</rdfs:label> 
<rdfs:subClassOf rdf:resource="http://human.owl#NCI_C33969"/> 
<rdfs:subClassOf> 
    <owl:Restriction> 
     <owl:onProperty rdf:resource="http://human.owl#UNDEFINED_part_of"/> 
     <owl:someValuesFrom rdf:resource="http://human.owl#NCI_C12464"/> 
    </owl:Restriction> 
</rdfs:subClassOf> 
<oboInOwl:hasRelatedSynonym rdf:resource="http://human.owl#genid5111"/> 

ていgroup_concatある行のクラスに関するすべての関連情報を得るために、これらの値をすべて1行に取得する必要があります。

これは私が実行しようとしているクエリです:

querytrial4=graph.query("""SELECT ?node ?nodeLabel ?superclass ?superclassLabel (group_concat(DISTINCT ?node2) as ?node2s) (group_concat(DISTINCT ?node2Label) as ?node2Labels) where { 
?node rdf:type owl:Class . 
?node rdfs:subClassOf ?superclass . 
OPTIONAL { 
    ?node rdfs:subClassOf ?restriction . 
    ?restriction a owl:Restriction . 
    ?restriction owl:someValuesFrom ?node2 . 
    ?node2 rdfs:label ?node2Label } 
?node rdfs:label ?nodeLabel . 
?superclass rdfs:label ?superclassLabel . 
} 
group by ?node ?nodeLabel ?superclass ?superclassLabel ?node2 ? 
node2Label 
LIMIT 10""") 

rdf4jのフォーラムで、いくつかの貢献者によって示唆されるように、私が原因ではないすべての、OPTIONALブロックに制限し、そのプロパティを配置しましたクラスにはこれらのプロパティがあります。しかし、クエリを実行しようとすると、変数?node2Labelがアンバインドされているというエラーが表示されます。変数がオプションのブロック内にあってもこのエラーがスローされるのはなぜですか?このクエリはどのように解決できますか?アドバイスをいただければ幸いです。誰かがクエリを実行しようとする場合に備えて、私はオントロジを添付しました。

このリンクからオントロジーをダウンロードできます。それはあなたがLIMIT文の前? node2Labelを書くように私は、あなたのクエリに問題が?node2Labelの間に空白かもしれないと思う店/解剖学/ human.owl

https://github.com/AgreementMakerLight/AML-Jar

+0

オントロジ全体が表示されないため、テストすることは不可能です。しかし、一般的に、クエリは有効なSPARQLであり、VirtuosoとApache Jenaで動作します。 – AKSW

+0

申し訳ありませんが、ここにはontologyへのリンクがあります:https://github.com/AgreementMakerLight/AML-Jar –

答えて

0

にあります。

私はリンクから人間のオントロジをダウンロードし、その空白を取り除き、GraphDBでクエリを実行しました。正常に動作します。