我正在尝试查询远程端点并获取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看看它是如何工作在这里与耶拿。不幸的是,rdflib和redland都没有实现SERVICESPARQL的子句,但是有解决方法。
FROM
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端点成为查询之外的参数。