在SPARQL过滤器语句中引用OWL类

时间:2012-11-13 01:00:46

标签: python sparql owl rdflib

我开发了一个本体,您可以使用下面的代码中存在的链接访问该本体。代码工作正常,除了FILTER部分。如果我在FILTER中使用相等的运算符,它不会返回任何内容。如果我使用不等于运算符(!=),它不会过滤任何东西。我想我的本体论中的Brands课程参考了" owl:Brands"不管用。我缩短了网址,因为我不想让它被网络抓取工具编入索引。我在代码中使用原始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)

1 个答案:

答案 0 :(得分:2)

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