SPARQLWrapper不返回JSON

时间:2018-03-05 00:30:16

标签: python sparql protege sparqlwrapper

以下代码应返回本体中所有三元组主题的字典。相反,它将整个本体作为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的本体验证。

1 个答案:

答案 0 :(得分:1)

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