ConstructQuery 预期{SelectQuery /radlex......。

问题描述 投票:0回答:1
这个错误是说它没有识别出一个语法上正确的查询形式。

在你的例子中,你需要从rdflib使用Python对象属性访问来表达前缀名--在你的例子中。

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

这意味着

在Python中翻译为

 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)

在SPARQL中。否则,rdflib就会抱怨它找不到有效的查询表单。

除此之外,还有一个原因是你的查询不会运行,即使你改变了
python sparql rdflib
1个回答
0
投票

命名空间前缀将不被查询识别。如果你添加了

在运行你的查询之前,你的查询就会运行。FOAF.RID13163一旦你的查询运行,还有两件事我想指出。首先,我想你的意思是你在查询三联中的谓词是指 FOAF.RID13163 -- 将返回一个结果。第二, FOAF:RID13163 是rdflib的内置命名空间(

),指的是著名的Friend of a Friend词汇。我建议你用另一个名字(FOAF.RID13163 在你的情况下?),以免混淆其他可能需要使用你的代码的人。FOAF:RID13163 FOAF g.bind("FOAF", FOAF)

© www.soinside.com 2019 - 2024. All rights reserved.