Jena之外的选择:protégé-owl API
一般做基于语义网的开发,Jena是最为常用的API,Jena提供了一整套完整的解决办法,特别是在对于本体的持久化方面,做的很不错。因此,一般做基于本体的应用常常采用Protege来制作本体,定义各种关系,然后在程序中采用Jena提供的API对本体进行操作。
Jena是极好的选择,但不是唯一的选择。大家写程序的时候可能常常会有这样的感觉,我在Protege中很轻松的做了这件事情,可是用Jena在程序中实现怎么这么麻烦。你可能会想到要实现几个跟Protege中一样的功能,但是你不知道怎么做。有没有Protege提供的API呢?有的,对于本体,Protege不仅仅提供了编辑软件,还提供了一整套的API,我翻过几下Protege源码,到处都用到了Jena,这个Protege的提供API是否是对Jena的再次封装,我还没细看,不大清楚。但使用的方便性据说是要好于Jena的,我想应当也是如此。另外,使用protégé-owl API有个较好的理由应该是程序可以利用protégé-owl API持久化到数据库的本体可以在直接在Protege软件中读取,既利用Protege软件做的OWL Database与利用这个protégé-owl API持久化后的格式是一致的,感性的讲,采用Protege持久化到数据库方式可能会比Jena持久化本体到数据库的方式性能方面要好一些。
下面给个例子,从这里看似乎与Jena没太大分别哦。
OWLModel owlModel = ProtegeOWL.createJenaOWLModel(); OWLNamedClass worldClass = owlModel.createOWLNamedClass("World"); System.out.println("Class URI: " + worldClass.getURI());
在看看下面几行代码,似乎是比Jena要舒服点,至少找类找属性等等不用自己一个一个去遍历了。
OWLNamedClass destinationClass = owlModel.getOWLNamedClass("Destination"); OWLObjectProperty hasContactProperty = owlModel.getOWLObjectProperty("hasContact"); OWLDatatypeProperty hasZipCodeProperty = owlModel.getOWLDatatypeProperty("hasZipCode"); OWLIndividual sydney = owlModel.getOWLIndividual("Sydney");
我在写程序的时候,对Jena的API进行了些简单的封装,也能提供类似的功能。





