2015-02-23 30 views
0

我正在使用Jena来读取本体,并且迄今为止它工作得非常好。不幸的是,我一直无法弄清楚如何使用我在模型中定义的紧凑型uris。我已经使用模型的setNSPrefix(String prefix, String uri)方法定义了前缀。当我尝试使用前缀检索语句时,我什么也得不到。另外,当我成功检索一个Statement时,它包含完整的URI而不是我定义的紧凑的URI。它甚至会做的XSD URI http://www.w3.org/2001/XMLSchema#在Jena中使用简洁的URI

例如,我使用URI http://www.example.com#,我定义我的前缀映射为ex,和我的发言是http://www.example.com#father http://www.example.com#parentOf http://www.example.com#child其中父亲是主体,parentOf是谓语,孩子是对象。如果我尝试使用ex:father来检索它,我不会得到任何结果,并且当我确实得到语句时,完整的uri就是主题,谓词和对象。当我做model.write(OutputStream)时,我已经看到它使用前缀而不是uri,但这对我没有特别的帮助。我是否可以使用前缀代替uri,就像我一直在试图做的那样,还是那不是耶拿会为我提供的东西?

回答

1

当我尝试使用前缀检索语句时,我什么都没有。

你不能这样做,例如,

model.getResource("ex:foo")` 

你要做

model.getResource("http://example.org/foo"); 

可以作出这样的简单,当然,通过

String EX = "http://example.org/"; 
model.getResource(EX+"foo"); 

前缀实际上只是为了使序列化更好阅读和写作。

+0

所以,当我得到一个基于资源的声明,有什么办法显示前缀而不是完整的uri,或者它是否处于类似的情况?例如,当我真的想要'ex:child'时,statement.getObject()将返回'http:// www.example.com#child'。 – endorphins 2015-02-23 18:53:55

+0

没有通用的方法来做到这一点。例如,如果在模型中定义了两个前缀:“ex:http://www.example.com#”和“ex2:ex:http://www.example.com#chi”,会怎么样?你想要ex:child还是ex2:ld?如果没有前缀会怎么样?如果它是不可缩写的IRI呢?如果你想要类似的东西,你将不得不通过检查给定的IRI是否可以被模型中声明的任何前缀缩写来滚动你自己。 – 2015-02-23 18:58:38

+0

好吧,这就是我想我必须做的。我的想法是从模型中获取前缀映射,使用它来查看uri是否有前缀,然后将其作为前缀而不是完整的uri进行编写。 – endorphins 2015-02-23 19:03:46