[英]SPARQL query on the remote remote endpoint RDFLib / Redland
我正在尝试查询远程端点并获取 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
你能提示一下其中任何一个有什么问题吗? 我遇到的另一个困难:是否可以获得 object 的数据集名称? 例如:如果有:
?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链接的任何其他数据集? (或者我可以在 object 字符串中查找感兴趣的数据集名称)非常非常感谢您提前
各种东西:
你是对的,你需要在<
>
中包含任何 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 数据集中的图形名称。 当您加载三元组 (s, p, o) + c 时,也称为 redland 上下文,例如model.context_add_statement(statement, context)
Rasqal GIT 确实支持解析SERVICE
但尚未在查询中执行它。
您还可以考虑将Virtuoso 与 RedLand 一起使用,因为它实现了用于远程查询执行的 SPARQL-FED“服务”参数,如这些在线示例中所示
http://terse-words.blogspot.com/2012/01/get-real-data-from-semantic-web.html的博客条目中还有另一个简单的解决方案,它可以保持代码相当干净。 它也使用 SPARQLWrapper。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.