2017-12-14 16 views
1

RDAR에서 온톨로지의 특정 속성과 레이블을 추출하는 SPARQL 쿼리를 작성하려고합니다. Python 2.7 (OS : Ubuntu 16.04, 64 비트)에서 rdflib 4.2.2를 사용하고 있습니다. SPARQL 1.1에서 쿼리를 실행할 수 있습니다. 온톨로지는 인체의 해부학에 속하며, 모든 기관에는 고유 한 클래스가 있습니다. 이러한 기관에는 수퍼 클래스가 있고 레이블이있는 hasRelatedSynonymsomeValuesFrom과 같은 추가 속성이 있도록 구성되어 있습니다. 다음은 온톨로지의 샘플, 클래스 제한과 특성을 가진 하나의 클래스는 다음과 같습니다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를 사용하려고했습니다 단일 속성에 대한 여러 값에 제한을가 하나의 행에 클래스에 대한 모든 관련 정보를 갖도록 이러한 모든 값을 단일 행에 가져옵니다.

내가 실행하는 데 노력하고있어 쿼리입니다 다음 rdf4j 포럼에서 여러 기여자에 의해 제안

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""") 

, 나는 때문에 모든의, 제한 및 OPTIONAL 블록의 속성을 배치 한 클래스에는 이러한 속성이 있습니다. 그러나 쿼리를 실행하려고하면 변수 ?node2Label이 언 바운드됨을 알리는 오류가 발생합니다. 변수가 선택적 블록 안에 있더라도이 오류가 발생하는 이유는 무엇입니까?이 쿼리를 어떻게 해결할 수 있습니까? 모든 조언을 많이 주시면 감사하겠습니다. 누군가가 직접 쿼리를 실행하려고 할 경우에 대비해 온톨로지를 첨부했습니다.

온톨로지는이 링크에서 다운로드 할 수 있습니다. 그것은 당신이 LIMIT 문 앞에 ? node2Label 쓰기 나는, 당신의 쿼리에 문제가 ?node2Label 사이의 빈 공간이있을 것 같아요 저장/해부학/human.owl

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

+0

전체 온톨로지가 표시되지 않으므로 테스트 할 수 없습니다. 그러나 일반적으로 쿼리는 유효한 SPARQL이며 Virtuoso 및 Apache Jena에서 작동합니다. – AKSW

+0

죄송합니다. 여기 온톨로지에 대한 링크가 있습니다 : https://github.com/AgreementMakerLight/AML-Jar –

답변

0

에 있습니다.

링크에서 인간 온톨로지를 다운로드하고 그 빈 공간을 제거하고 GraphDB에서 쿼리를 실행하면 정상적으로 실행됩니다.