我开发了一个本体,您可以通过下面代码中的链接访问它。除 FILTER 部分外,代码工作正常。如果我在 FILTER 中使用相等运算符,它不会返回任何内容。如果我使用不等于运算符 (!=),它不会过滤任何内容。我想我的本体中使用“owl:Brands”对 Brands 类的引用不起作用。我缩短了 url,因为我不希望它被网络爬虫索引。我在代码中使用原始 URL。您可以使用缩短的网址访问原始网址。您可以通过编辑器浏览本体。我很确定“owl:Brands”不起作用,我尝试了许多其他可能性,但无法弄清楚如何使它起作用。
如果没有 FILTER 语句,它的作用等同于“FILTER(?sub!=owl:Brands)”,因为没有与 owl:Brands 匹配的内容。仅供引用,我正在使用 python 和 rdflib。
plugin.register(
'sparql', rdflib.query.Processor,
'rdfextras.sparql.processor', 'Processor')
plugin.register(
'sparql', rdflib.query.Result,
'rdfextras.sparql.query', 'SPARQLQueryResult')
qres = g.query(
"""
PREFIX owl: <http://goo.gl/ZwwgT>
SELECT ?class WHERE { ?sub rdfs:subClassOf ?class .
FILTER(?sub=owl:Brands)}
""")
for row in qres.result:
print(row)
最佳答案
我只能假设您错误地转录了您的示例,或者 rdflib 有错误。我加载了您的本体,执行了您的查询(使用本体的扩展 URL)并得到了一个结果,Beer。但是,我没有使用 RDFlib。您可以尝试将其提炼为单个测试用例并将其提供给 RDFlib 作者,以便他们可以解决问题,和/或考虑使用不同的数据库。
关于python - 在 SPARQL 过滤器语句中引用 OWL 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13354166/