SPARQLWrapper 未返回 JSON

SPARQLWrapper not returning JSON

下面的代码应该return ontology中所有三元组的主语字典。相反,它 return 将整个 ontology 作为 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()

以上代码在不同的 ontology 下运行良好,这表明 ontology 是问题所在。我不确定 ontology 可能是什么问题。我用 Protege 生成了 ontology,它可以加载到 vOWL 中,并且通过了 vOWL 的 ontology 验证。

SPARQLWrapper() 的第一个参数 should be 一个 SPARQL 端点地址:

  • 无法对 RDF 文件执行 SPARQL 查询。
  • 如果要查询 RDF 文件,应使用 .
  • 将其加载到本地存储中
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查询结果(spec):

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序列化中抽象出来,你应该使用