在远程远程端点RDFLib / Redland上进行SPARQL查询

|| 我正在尝试查询远程端点并获取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
这是雷德兰德:
import RDF
model = RDF.Model()

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 statement in RDF.Query(query ,query_language=\"sparql\").execute(model):
    print statement
您能给我一个提示吗? 我还有另一个困难:是否可以获取对象的数据集名称?例如:如果存在:
?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
在此示例中,我能否获得\“ 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
...在这里查看结果。
FROM
并未像您认为的那样在rdflib或redland中实现。它不会获取远程SPARQL端点,而是在本地存储中获取远程图或具有该名称的图。在您的情况下,您想使用
SERVICE
来了解Jena在这里的工作原理。不幸的是,rdflib和redland都没有为SPARQL实现
SERVICE
子句,但是有解决方法。 一种可能的解决方案是将SPARQLWrapper用于python。这很简单,在这里您可以使用该库编写代码:
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\']
如您所见,远程SPARQL端点成为查询之外的参数。     
Redland当前不支持在FROM中使用SPARQL端点。这里使用的是您加载到RDF数据集中的图形名称。当您加载诸如ѭ10,之类的三元组(s,p,o)+ c时也称为redland上下文 Rasqal GIT确实支持解析
SERVICE
,但尚未在查询中执行它。     
您还可以考虑将Virtuoso与RedLand一起使用,因为它实现了SPARQL-FED \“ Service \”参数以执行远程查询,如这些在线示例所示     
http://terse-words.blogspot.com/2012/01/get-real-data-from-semantic-web.html上的博客条目中还有一个简单的解决方案,可以使代码保持清晰。它还使用SPARQLWrapper。     

要回复问题请先登录注册