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



我正在尝试查询远程端点并获取 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

这是雷德兰:

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"的名称吗?或者我有相同链接的任何其他数据集?(或者我可以在对象字符串中查找感兴趣的数据集名称)提前非常感谢

各种事情:

你是对的,你需要在< >内包含任何 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看看它是如何与耶拿一起工作的。不幸的是,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 数据集中的图形名称。也称为 redland 上下文,当您加载三元组 (s, p, o) + c

时,类似 model.context_add_statement(statement, context)

Rasqal GIT 确实支持解析SERVICE但尚未在查询中执行它。

您也可以考虑将Virtuoso与RedLand一起使用,因为它实现了SPARQL-FED"Service"参数以进行远程查询执行,如这些在线示例所示。

http://terse-words.blogspot.com/2012/01/get-real-data-from-semantic-web.html 的博客条目中还有另一个简单的解决方案,可以使代码保持相当干净。它也使用SPARQLWrapper。

相关内容

  • 没有找到相关文章

最新更新