我正在使用Protege 5中的SPARQL Query选项卡来查询我正在构建的OWL本体。我成功地进行了多种查询,但是当我在同一个查询中使用我的本体的某些特定类时(显然形式很好),它们没有返回任何结果。接下来,两个有问题的查询 - 假设"事件"作为本体论的一个概念(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 }
两者均未返回任何结果。但是,如果我将'#34;替换为:事件&#34;因为,让我们说,?b,两者都返回一长串结果 - 包括事件作为匹配?b。
这是我滥用或遗忘的事情(虽然我在互联网上的几个链接中看到这种模式与声称已经获得结果的人)或者它是SPARQL的限制还是某些Protege问题标签?
答案 0 :(得分:1)
问题是,事实上,虽然本体的 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égéProject邮件列表中的@Csongor,他找到了答案。)
P.S。:值得注意的是,不能理所当然地认为本体中的所有术语都是<current_ontology_URI#term>
- 例如如果在本体中包含一些术语然后更改本体URI,则这些术语将被标识为<previous_ontology_URI#term>
,而新的术语将被标识为<current_ontology_URI#term>
(这正是上述问题的原因)。