如果研究一下本体文件(.owl)就会发现,其中都是由一些三元组构成的,然而不管是subject、predicte还是object都是以资源描述的,而资源的标识符是URI,因此前面都会有一大串的前缀,而我们感兴趣的往往是最后的一个词,称之为localname不知何不合适,怎样得到用localname表示的三元组呢?subject、predicte直接通过getLocalName就可以得到,object则比较烦人,没有getLocalName函数~查了一下statement的结构(Resource arg0,Property arg1,RDFNode arg2)问题就在RDFNode类型没有getLocalName函数,但通过调用asResource函数转为Resource就可以了,代码:
FileInputStream file = new FileInputStream(owl_path);//owl_path当然是owl文件路径
InputStreamReader in = new InputStreamReader(file, "UTF-8");//解决中文问题
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
StmtIterator stmIter=model.listStatements();
while(stmIter.hasNext()){
Statement stm=stmIter.nextStatement();
RDFNode object=stm.getObject();
if(object instanceof Resource){ //主要为了判定RDFNode是Resource还是Literal
System.out.println(stm.getSubject().getLocalName()+"**"+stm.getPredicate().getLocalName()+"**"+object.asResource().getLocalName());
}
else
System.out.println(stm.getSubject().getLocalName()+"**"+stm.getPredicate().getLocalName()+"**"+object.toString());
}