我正在尝试查询远程端点并获取 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”的名称吗?或者我有同一链接的任何其他数据集? (或者我可能只是在对象字符串中只有 look-up 感兴趣的数据集名称)非常感谢你提前
4 回答
各种事物:
你是对的,你需要在
<
>
中包含任何 URI。正确的查询是:...查看结果这里。
你认为
FROM
没有在 rdflib 或 redland 中实现。它不提取远程 SPARQL 端点,它在本地存储中提取具有该名称的远程图形或图形。在你的情况下,你想使用SERVICE
见它与耶拿的合作方式。不幸的是,rdflib 和 redland 都没有为 SPARQL 实现SERVICE
子句,但有一些解决方法可以解决这个问题。一种可能的解决方案是使用用于 python 的 SPARQLWrapper。这很简单,在这里你有你的代码库:
如您所见,远程 SPARQL 端点成为查询外部的参数。
Redland 目前不支持在 FROM 中使用 SPARQL 端点。您在此处使用的是加载到 RDF 数据集中的图形名称。当你用
model.context_add_statement(statement, context)
之类的东西加载三重(s,p,o)c 时也称为 redland 上下文Rasqal GIT 支持解析
SERVICE
但尚未在查询中执行它。您也可以考虑使用与 RedLand 的 Virtuoso来实现 SPARQL-FED“Service”参数,以便进行远程查询执行,如这些在线示例所示
在http://terse-words.blogspot.com/2012/01/get-real-data-from-semantic-web.html的博客条目中还有另一个简单的解决方案,它可以使代码保持相当干净。它也使用 SPARQLWrapper。