gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:41:13 27 4
gpt4 key购买 nike

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

... 查看结果 here .

FROM并没有像您想象的那样在 rdflib 或 redland 中实现。它不获取远程 SPARQL 端点,而是获取远程图形或本地存储中具有该名称的图形。在您的情况下,您想使用 SERVICEhow it works here with Jena .不幸的是,rdflib 和 redland 都没有实现 SERVICE SPARQL 的子句,但有一些解决方法可以解决这个问题。

一种可能的解决方案是使用 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']

如您所见,远程 SPARQL 端点成为查询之外的参数。

关于python - 远程端点 RDFLib/Redland 上的 SPARQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5888020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com