SPARQLWrapper not returning JSON



下面的代码应该返回本体中所有三元组的主题字典。相反,它将整个本体作为 XML 字符串返回。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://purl.org/sudo/ontology/sudo.owl")
sparql.setQuery("""
    SELECT ?subject
    WHERE {?subject ?verb  ?object}
    """)
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
print results.keys()

上面的代码适用于不同的本体,这表明本体是问题所在。我不确定本体的问题可能是什么。我用Protege生成了本体,它可以加载到vOWL中,并通过了vOWL的本体验证。

SPARQLWrapper()的第一个参数应该是SPARQL端点地址:

  • sparqlwrapper 无法对 RDF 文件执行 SPARQL 查询。
  • 如果要针对 RDF 文件进行查询,则应使用 RDFlib 将其加载到本地存储中。
from rdflib import Graph
g = Graph()
g.parse("http://purl.org/sudo/ontology/sudo.owl", format="xml")
qres = g.query("""
    SELECT DISTINCT ?s {
        ?s ?p ?o
    }""")
for row in qres:
    print("%s" % row)

如果您确实需要 JSON 格式(规范(的 SPARQL 查询结果:

import sys
from rdflib import Graph
from rdflib.plugins.sparql.results.jsonresults import JSONResultSerializer
g = Graph()
g.parse("http://purl.org/sudo/ontology/sudo.owl", format="xml")
qres = g.query("""
    SELECT DISTINCT ?s {
        ?s ?p ?o
    }""")
JSONResultSerializer(qres).serialize(sys.stdout)

如果你想从RDF序列化中抽象出来,你应该使用owlready。

最新更新