2

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

4

1 回答 1

2

SPARQLWrapper()的第一个参数应该是一个 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 格式 ( spec ) 的 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 序列化中抽象出来,你应该使用

于 2018-03-06T12:25:07.053 回答