我对 SPARQL、OWL 和 Jena 还很陌生,所以如果我问的是完全愚蠢的问题,请原谅。几天以来,我遇到了一个让我发疯的问题。我使用以下字符串作为 Jena 的查询QueryFactory.create(queryString)
,
queryString = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>"+
"PREFIX ho: <http://www.flatlandfarm.de/fhtw/ontologies/2010/5/22/helloOwl.owl#>" +
"SELECT ?name ?person ?test ?group "+
"WHERE { ?person foaf:name ?name ; "+
" a ho:GoodPerson ; "+
" ho:isMemberOf ?group ; "+
"}";
直到今天早上,只要我只要求来自 foaf 命名空间的属性,它就可以工作。一旦我从我自己的命名空间中请求属性,我总是得到空的结果。当我正要在这里发布这个问题并进行一些最终测试以尽可能准确地发布它时,它突然起作用了。因此,由于我不知道究竟要问什么,我在发布之前删除了我的问题。几个小时后,我使用 Protege 的 Pellet 插件创建和导出推断模型。我将其命名为 helloOwlInferred.owl 并将其上传到我的服务器上 helloWl.owl 所在的目录。我调整了加载推断本体的方法并更改了上述查询,以便前缀 ho: 也分配给推断本体。一下子,什么都没有了。确切地说,它不再起作用了,但直到今天早上我的原始查询都出现了相同的症状。我的前缀不再起作用。我做了一个简单的测试:我将所有 helloWorldInferred.owl 文件(我服务器上的前缀文件和我加载的本地副本)重命名为 helloWorld.owl。足够奇怪,解决了所有问题。
将其重命名为 helloWorldInferred.owl 再次破坏了一切。等等。那里发生了什么?我是否只需要等待几周,直到我的本体“注册为有效前缀”?