Python 远程端点RDFLib/Redland上的SPARQL查询

Python 远程端点RDFLib/Redland上的SPARQL查询,python,rdf,sparql,rdflib,redland,Python,Rdf,Sparql,Rdflib,Redland,我尝试查询远程端点并获取get-owl:sameAs映射,我尝试了RDFLib和Redland,但都不适用于我,可能我没有正确处理名称空间 以下是我在RDFLib中的尝试: import rdflib rdflib.plugin.register('sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor') rdflib.plugin.register('sparql', rdf

我尝试查询远程端点并获取get-owl:sameAs映射,我尝试了RDFLib和Redland,但都不适用于我,可能我没有正确处理名称空间

以下是我在RDFLib中的尝试:

    import rdflib

    rdflib.plugin.register('sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor')
    rdflib.plugin.register('sparql', rdflib.query.Result, 'rdfextras.sparql.query', 'SPARQLQueryResult')

    g = rdflib.Graph()

    query = """
        SELECT *
        FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
        WHERE {
             ?s a http://purl.org/ontology/mo/MusicArtist;
                http://www.w3.org/2002/07/owl#sameAs ?o .
        }Limit 50
    """

    for row in g.query(query):
        print row
在这个例子中,我可以得到“Dbpedia”的名称吗?或者任何其他我有sameAs链接的数据集?(或者,我可以在对象字符串中查找感兴趣的数据集名称)非常感谢您事先提供的各种信息:

您是对的,您需要在
中包含任何URI。正确的查询是:

SELECT ?s ?o WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50

您可以看到远程SPARQL端点在查询之外成为一个参数。

< P>您也可以考虑使用它来实现用于远程查询执行的SPARQL FED“服务”PARAM,如在这些

中所示,雷德兰目前不支持从中使用SPARQL端点。这里使用的是加载到RDF数据集中的图形名称。当你用类似于

model.context\u add\u语句(statement,context)


Rasqal GIT确实支持解析
服务
,但还没有在查询中执行它。

在博客条目中有另一个简单的解决方案,可以保持代码相当干净。它也使用SPARQLWrapper

?s = http://www.bbc.co.uk/music/artists/eb5c8564-927d-414d-b152-c7b48a2c9d8b#artist
predicate = http://www.w3.org/2002/07/owl#sameAs
?0 = http://dbpedia.org/resource/The_Boy_Least_Likely_To
SELECT ?s ?o WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50
from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://api.talis.com/stores/bbc-backstage/services/sparql")
sparql.setQuery("""
    SELECT ?s ?o
    WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print result["s"]['value'], result["o"]['value']