RDFlib 查询无效

2024-04-19 22:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Python脚本,它应该能够运行dbpediauri的列表并对它们运行查询。但是,由于某些原因,我在

qres = g.query(query) 

当我运行这个代码时。有人知道为什么会这样吗?我该怎么解决这个问题?我真的被卡住了,而且我的论文时间也落后了,所以压力真的越来越大了。在

代码:

^{pr2}$

cmd中的错误消息:

/resource/Sheldon_J._Plankton
[a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory']].
query: SELECT ?subject WHERE {<http://dbpedia.org/resource/Sheldon_J._Plankton>
dbo:wikiPageRedirects*/dct:subject ?subject .}
Traceback (most recent call last):
  File "rdfimport.py", line 47, in <module>
    qres = g.query(query)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\graph.py", line 1089, in query
    query_object, initBindings, initNs, **kwargs))
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\processor.py", line 75, in query
    query = translateQuery(parsetree, base, initNs)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 764, in translateQuery
    q[1], visitPost=functools.partial(translatePName, prologue=prologue))
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 384, in traverse
    r = _traverse(tree, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in _traverse
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in <listcomp>
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in _traverse
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in <listcomp>
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in _traverse
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in <listcomp>
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in _traverse
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in <listcomp>
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in _traverse
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 339, in <listcomp>
    return [_traverse(x, visitPre, visitPost) for x in e]
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 345, in _traverse
    e[k] = _traverse(val, visitPre, visitPost)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 347, in _traverse
    _e = visitPost(e)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\algebra.py", line 142, in translatePName
    return prologue.absolutize(p)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\sparql.py", line 374, in absolutize
    return self.resolvePName(iri.prefix, iri.localname)
  File "C:\Users\Frank\AppData\Local\Programs\Python\Python36-32\lib\site-packag
es\rdflib\plugins\sparql\sparql.py", line 357, in resolvePName
    raise Exception('Unknown namespace prefix : %s' % prefix)
Exception: Unknown namespace prefix : dct

提前感谢:)

编辑:

我相信里面出了点问题

result = g.parse("http://dbpedia.org" + uri2)

在这个例子中,它试图解析的URI是“http://dbpedia.org/resource/Sheldon_J._Plankton

如果我直接将这个URI放到g.parse中,也会出现错误。这可能是因为该URI是“错误的”,因为它重定向到

http://dbpedia.org/resource/Plankton_(character)”。在

我用修正了这个问题dbo:wikiPageRedirects,但这当然是在这个解析之后。所以我想问题就在这里,但是我怎样才能使用正确的页面呢dbo:wikipagerirects如果我不能先解析它来得到那个页面??在


Tags: frankinpyliblocallinesitesparql
1条回答
网友
1楼 · 发布于 2024-04-19 22:35:23

错误消息抱怨无法识别前缀dct,RDFLib内置了dcterms,或者您可以绑定自己的前缀:

from rdflib.namespace import DCTERMS, Namespace
g.bind("dct", DCTerms)
g.bind("dbo", Namespace("http://dbpedia.org/ontology/"))
g.bind("dbr", Namespace("http://dbpedia.org/resource/"))

假设uri2是一个dbpedia资源,并且只包含URI的最后一部分(即“Sheldon_J.u Plankton”),那么用于获取重定向页面的SPARQL查询变成:

^{pr2}$

要获取重定向的主题,如果它在您的数据中,这个查询应该可以工作。但您可能需要对上一个查询中返回的uri运行g.parse,才能将其添加到数据中:

q = "SELECT ?subject WHERE {{ dbr:{} dbo:wikiPageRedirects ?redirect. ?redirect dct:subject ?subject. }}".format
result = q.query(q(uri2))

相关问题 更多 >