Jena API - 如何处理OWL文件?

时间:2014-07-03 22:44:27

标签: java rdf jena owl

我有以下代码列出本体的个人:

public static void main(String[] args) {
    OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
    String fileName = "C:/Users/Ikno/Desktop/workspace/Jena/ontrdf.rdf";

    try {
        InputStream inputStream = new FileInputStream(fileName);
        model.read(inputStream, "RDF/XML");
        //model.read(inputStream, "OWL/XML");
        inputStream.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    ExtendedIterator<Individual> itI = model.listIndividuals();

    while (itI.hasNext()) {
        Individual i = itI.next();
        System.out.println(i.getLocalName());
    }
}

代码没问题,它返回所有单独的本地名称。问题是我在Protégé中创建了 OWL 本体,将它转换为RDF是一个浪费的步骤,只是由Jena操作。如果我取消注释model.read(inputStream, "OWL/XML");,则会出现以下错误:

class org.apache.jena.riot.RiotException
[line: 266, col: 31] {E201} Multiple children of property element

Jena不能用 OWL 格式支持这种操作吗?

2 个答案:

答案 0 :(得分:3)

作为一个选项,您可以使用ONT-API,它是OWL-API和Apache Jena之间的桥梁。因此,它支持所有jena和owl-api格式(OWL / XML是OWL-API的原始格式和仅仅是protege),但是(注意)没有自己的实现。

答案 1 :(得分:2)

根据Jena文档here如果你看一下read方法,很明显Jena不支持OWL / XML。 lang的预定义值(读取方法的第二个Arg)是&#34; RDF / XML&#34;,&#34; N-TRIPLE&#34;,&#34; TURTLE&#34; (或&#34; TTL&#34;)和&#34; N3&#34;。 null表示默认语言,&#34; RDF / XML&#34;。 &#34; RDF / XML的缩写&#34;是&#34; RDF / XML&#34;的同义词。因此,在您的情况下,我将本体保存为RDF / XML,然后使用Jena读取它。