3

我开发了一个本体,您可以通过下面代码中的链接访问它。除 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)
4

1 回答 1

2

我只能假设您错误地转录了您的示例,或者 rdflib 有错误。我加载了你的本体,执行了你的查询(使用你的本体的扩展 URL)并得到一个结果,啤酒。然而,我没有使用 RDFlib。您可以尝试将其提取为单个测试用例并将其提供给 RDFlib 作者,以便他们可以解决问题,和/或研究使用不同的数据库。

于 2012-11-13T12:50:00.847 回答