Python RDFlib查询不工作

Python RDFlib查询不工作,python,sparql,dbpedia,rdflib,Python,Sparql,Dbpedia,Rdflib,我编写了一个Python脚本,该脚本应该能够运行dbpediaURI列表并对其运行查询。然而,由于某种原因,我在上得到了一个错误 qres = g.query(query) 当我运行此代码时。有人知道为什么会发生这种情况,以及我如何解决这个问题吗?我真的被卡住了,我的论文时间进度落后了,所以压力真的越来越大 代码: import rdflib import csv import pandas as pd colnames = ['Link'] list2 = pd.read_csv('C

我编写了一个Python脚本,该脚本应该能够运行dbpediaURI列表并对其运行查询。然而,由于某种原因,我在上得到了一个错误

qres = g.query(query) 
当我运行此代码时。有人知道为什么会发生这种情况,以及我如何解决这个问题吗?我真的被卡住了,我的论文时间进度落后了,所以压力真的越来越大

代码:

import rdflib
import csv
import pandas as pd

colnames = ['Link']

list2 = pd.read_csv('C:/Users/Frank/Google Drive/Master Scriptie/testtest3.csv', sep=',', header=None, usecols=[2], names=colnames)
saved_column = list2.Link 
outputfile = open('C:/Users/Frank/Google Drive/Master Scriptie/code files/dbpedia_output/test_dataset_uri_subject.csv', 'w')

reader = csv.reader(saved_column)

g = rdflib.Graph()
for uri in reader:
    uri2 = "".join(str(x) for x in uri)
    uri2 = uri2[1:].rstrip()
    print (uri2)
    result = g.parse("http://dbpedia.org" + uri2)
    print (result)
    query = "SELECT ?subject WHERE {<http://dbpedia.org" + uri2 + "> dbo:wikiPageRedirects*/dct:subject ?subject .}"
    print ("query: " + query)
    qres = g.query(query)
    for singlerow in qres:
        subject_final = "%s" % singlerow
        outputfile.write("{0}, {1} \n".format(uri,subject_final)
在此示例中,它尝试在此处解析的URI为“”

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

“”


我在使用dbo:wikiPageRedirects的查询中修复了这个问题,但这当然是在解析之后。所以问题就在这里,我想,但是如果我不能首先解析它以获得该页面,那么如何使用dbo:wikiPageRedirects获得正确的页面???

错误消息是抱怨没有识别前缀
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._Plankton”),那么获取重定向页面的SPARQL查询将变为:

q = "SELECT ?subject WHERE {{ dbr:{} dbo:wikiPageRedirects ?subject. }}".format
result = g.query(q(uri2))
for row in result:
    print(row.subject)
要获取重定向的主题,如果它在您的数据中,则此查询应该可以工作。但您可能需要对上一个查询中返回的URI运行g.parse,以将其添加到数据中:

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

错误消息抱怨无法识别前缀
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._Plankton”),那么获取重定向页面的SPARQL查询将变为:

q = "SELECT ?subject WHERE {{ dbr:{} dbo:wikiPageRedirects ?subject. }}".format
result = g.query(q(uri2))
for row in result:
    print(row.subject)
要获取重定向的主题,如果它在您的数据中,则此查询应该可以工作。但您可能需要对上一个查询中返回的URI运行g.parse,以将其添加到数据中:

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

我刚刚发现错误在g.parse中,因为如果我将“正确的”URI放在那里,它就可以正常工作。检查我的编辑以获得解释:)一旦g.parse正确工作,它应该能够识别这些前缀,对吗?不,当它解析图形时,它使用完整的URI进行解析,当您运行查询时,它不知道dct对您意味着什么,它认为URI是。这就是错误消息以以下结尾的原因:
异常:未知名称空间前缀:dct
。您可以将前缀添加到SPARQL,或者使用上述方法将它们显式绑定到图形。然后图形将知道您所说的
dct
是什么意思。好吧,这很有意义!如果我将您给我的代码添加到代码顶部,我会遇到以下错误:回溯(最近一次调用最后一次):文件“rdfimport.py”,第5行,在from rdflib.namespace import DCTerms,namespace importorror:无法导入名称“DCTerms”,抱歉,我的错误,它是rdflib中的DCTerms,全部大写。哦,它不能完全工作。现在代码确实运行了,但是对于那些“错误的URI”页面,它找不到任何结果。例如,我给出的URI示例应该返回几个URI,但它没有找到?我刚刚发现错误在g.parse中,我想,因为如果我将“正确的”URI放在那里,它就可以正常工作。检查我的编辑以获得解释:)一旦g.parse正确工作,它应该能够识别这些前缀,对吗?不,当它解析图形时,它使用完整的URI进行解析,当您运行查询时,它不知道dct对您意味着什么,它认为URI是。这就是错误消息以以下结尾的原因:
异常:未知名称空间前缀:dct
。您可以将前缀添加到SPARQL,或者使用上述方法将它们显式绑定到图形。然后图形将知道您所说的
dct
是什么意思。好吧,这很有意义!如果我将您给我的代码添加到代码顶部,我会遇到以下错误:回溯(最近一次调用最后一次):文件“rdfimport.py”,第5行,在from rdflib.namespace import DCTerms,namespace importorror:无法导入名称“DCTerms”,抱歉,我的错误,它是rdflib中的DCTerms,全部大写。哦,它不能完全工作。现在代码确实运行了,但是对于那些“错误的URI”页面,它找不到任何结果。例如,我给出的URI示例应该返回几个URI,但它没有找到?