use*_*778 8 python rdf sparql redland rdflib
我正在尝试查询远程端点并获取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
Run Code Online (Sandbox Code Playgroud)
这里是雷德兰:
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
Run Code Online (Sandbox Code Playgroud)
你能不能暗示其中任何一个出了什么问题?我有另一个困难:是否有可能获得对象的数据集名称?例如:如果有:
?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
Run Code Online (Sandbox Code Playgroud)
我可以在这个例子中获得"Dbpedia"的名称吗?或者我有同一链接的任何其他数据集?(或者我可能只是在对象字符串中查找感兴趣的数据集名称)非常感谢您提前
Man*_*res 12
各种事物:
你是对的,你需要在其中包含任何URI < >.正确的查询是:
SELECT ?s ?o WHERE {
?s a <http://purl.org/ontology/mo/MusicArtist>;
<http://www.w3.org/2002/07/owl#sameAs> ?o .
} limit 50
Run Code Online (Sandbox Code Playgroud)
...在这里查看结果.
FROM没有像你想象的那样在rdflib或redland中实现.它不提取远程SPARQL端点,它在本地存储中提取具有该名称的远程图形或图形.在你的情况下,你想SERVICE看看它如何与耶拿一起工作.不幸的是,rdflib和redland都没有实现SERVICESPARQL 的子句,但是有一些解决方法可以解决这个问题.
一种可能的解决方案是使用SPARQLWrapper for 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']
Run Code Online (Sandbox Code Playgroud)
如您所见,远程SPARQL端点成为查询外部的参数.