我正在尝试使用RDFlib执行一个简单的SPARQL查询。 我已经使用Radlex本体创建了一个RDF图,并尝试在图中进行查询 '''
g = Graph()
FOAF = rdflib.Namespace("http://radlex.org/RID/")
patient = rdflib.term.URIRef("http://localhost/rdf/patient/")
n1 = Namespace("http://localhost/rdf/patient/")
g.add( (patient, FOAF.RID13159, n1.age) )
g.add( (patient, FOAF.RID13159, n1.name) )
g.add( (patient, FOAF.RID13159, n1.gender) )
g.add( (n1.name, FOAF.RID13160, Literal("Radha")))
g.add( (n1.age, FOAF.RID13163, Literal('21')))
g.add( (n1.gender,FOAF.RID13164, Literal("F")))
result = g.serialize(format='turtle')
qres = g.query(
"""SELECT ?Subject
WHERE {
?Subject FOAF.RID13163 "F".
}"""
)
'''
我得到了这个错误
ParseException Traceback (most recent call last)
<ipython-input-9-7aadbf996386> in <module>
24 WHERE {
25 ?Subject FOAF.RID13163 "F".
---> 26 }"""
27 )
28 # list( g.triples((None, FOAF.RID13160, None)) )
~\AppData\Local\Continuum\anaconda3\lib\site-packages\rdflib\graph.py in query(self, query_object, processor, result, initNs, initBindings, use_store_provided, **kwargs)
1087
1088 return result(processor.query(
-> 1089 query_object, initBindings, initNs, **kwargs))
1090
1091 def update(self, update_object, processor='sparql',
~\AppData\Local\Continuum\anaconda3\lib\site-packages\rdflib\plugins\sparql\processor.py in query(self, strOrQuery, initBindings, initNs, base, DEBUG)
72
73 if not isinstance(strOrQuery, Query):
---> 74 parsetree = parseQuery(strOrQuery)
75 query = translateQuery(parsetree, base, initNs)
76 else:
ParseException: Expected {SelectQuery | ConstructQuery | DescribeQuery | AskQuery} (at char 57), (line:3, col:21)
我不明白这个错误是什么意思
错误是它无法识别语法正确的查询表单
在您的例子中,您需要从rdflib使用Python对象属性访问来表示前缀名称(在您的示例中)
FOAF.RID13163
映射到SPARQL使用冒号表示前缀名称的表示法。这意味着Python中的FOAF.RID13163
转换为SPARQL中的FOAF:RID13163
。否则,rdflib会抱怨找不到有效的查询表单除此之外,即使将
FOAF.RID13163
更改为FOAF:RID13163
,查询也不会运行的另一个原因是FOAF
名称空间前缀不会被查询识别。如果在运行查询之前添加行g.bind("FOAF", FOAF)
,则查询将运行一旦您的查询运行,我还想指出另外两件事。首先,我认为您的意思是查询三元组中的谓词为
FOAF:RID13164
,将返回一个结果。第二,FOAF
是rdflib(from rdflib.namespace import FOAF
)的内置名称空间,并引用朋友词汇表中众所周知的朋友。我建议您使用另一个名称(RID
在您的情况下?),以免混淆可能需要使用您的代码的其他人相关问题 更多 >
编程相关推荐