本体建立以后,接下来就是考虑怎样去使用本体。之前已经说过,我的主要用途就是找出本体实例中的冲突(inconsistent)以及推导出新的关系,而这两者都要用到规则。笔者主要运用运用Jena提供的基于自定义规则的推理机来实现以上两点,当然你也可以使用Jena+pellet或是通过Jena的dig接口(是这样吧?意会)。
因为添加到本体中的实例数据是中文,所以尝试新建localname为中文的资源,事实证明可以。然而在基于自己编的规则推理中文名称时,如:已知 张三 isFatherOf 李四 推出 李四 hasFather 张三,结果不成功,而英文名称就可以。查了一下Java api发现InputStreamReader(InputStream in, String charsetName)还有个字符集参数,加入“UTF-8"就可以了,代码:
FileInputStream file = new FileInputStream(owl_path);//owl_path当然是owl文件路径
InputStreamReader in = new InputStreamReader(file, "UTF-8");//解决中文问题
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
编写推理规则时,觉得对于逆属性(owl:inverse),知道其中一对就可以推出另一对,