PROTÉGÉ SPARQL QUERY TAB: 无法查询特定于本体的类



我正在使用Protege 5中的SPARQL Query选项卡来查询我一直在构建的OWL本体。我在许多类型的查询中都成功了,但是当我在相同的查询(显然是格式良好的)中使用我的本体的某些特定类时,它们不会返回任何结果。下面是两个有问题的查询——假设"Event"是本体的一个概念(http://www.semanticweb.org/ontologies/2014/5/MyOnto#Event):

)
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX onto: <http://www.semanticweb.org/ontologies/2014/5/MyOnto#>
SELECT ?a  WHERE { ?a rdfs:subClassOf onto:Event } 

和,前缀相同

SELECT ?a  WHERE { ?a rdfs:range onto:Event } 

都不返回结果。但是,如果我将"onto:Event"替换为?b,则两者都会返回一长串结果—包括Event作为?b的匹配项。

是我误用或忘记的东西(尽管我在互联网上的几个链接中看到过这种模式,人们声称已经得到了结果),还是SPARQL的限制或Protege选项卡的一些问题?

问题是,事实上,尽管本体的URI是:

<http://www.semanticweb.org/ontologies/2014/5/MyOnto#>
在OWL文档中,类名之前使用的前缀是IRI:

<http://www.semanticweb.org/ontologies/2014/2/untitled-ontology-662#>
因此,用

替换旧的onto:
PREFIX onto: <http://www.semanticweb.org/ontologies/2014/2/untitled-ontology-662#> 

解决了这个问题。

(感谢来自prot项目邮件列表的@Csongor,他找到了答案。)

注::值得注意的是,不能想当然地认为本体中的所有术语都是<current_ontology_URI#term>,例如,如果在本体中包含了某些术语,然后更改了本体URI,则这些术语将被识别为<previous_ontology_URI#term>,而新的术语将被识别为<current_ontology_URI#term>(这正是上述问题的原因)。

我有同样的问题,每当使用特定于本体的类时,尽管应该有结果,但没有结果。我的本体(pizza.owl)是从本地文件加载的。我发现需要在PREFIX中添加文件名。

PREFIX : <http://www.co-ode.org/ontologies/pizza/pizza.owl#>

在那之后我得到了我所期望的信息

最新更新