SPARQL聚合查询无效

时间:2017-12-14 14:45:44

标签: sparql

我尝试编写SPARQL查询以从RDF中的本体中提取某些属性和标签。我在python 2.7(操作系统:Ubuntu 16.04,64位)中使用rdflib 4.2.2,它允许我在SPARQL 1.1中运行查询。本体论是人体的解剖学,所有的器官都有自己的阶级。它的组织使得这些器官具有超类,以及具有标签的其他属性,例如hasRelatedSynonymsomeValuesFrom。以下是本体的示例,具有类限制和属性的单个类:

<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将所有这些值放在一行中,以便拥有所有这些值关于一行中的一个类的相关信息。

这是我试图运行的查询:

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未绑定。为什么即使变量在可选块内部也会抛出此错误,我该如何解决此查询?任何建议将不胜感激。我已经附加了本体,以防有人想尝试自己运行查询。

可以从此链接下载本体。它在商店/ anatomy / human.owl

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

1 个答案:

答案 0 :(得分:0)

我认为您的查询中的问题可能是?node2Label之间的空白区域,因为您在? node2Label语句之前编写了LIMIT

我从链接下载了人类本体,删除了那个空白区域,在GraphDB上运行查询,运行正常。