以下代码应返回本体中所有三元组主题的字典。相反,它将整个本体作为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的本体验证。
答案 0 :(得分:1)
SPARQLWrapper()
的第一个参数should be一个SPARQL端点地址:
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序列化中抽象出来,则应使用owlready。