在同一个JENA应用程序中处理多个OWL文件

时间:2014-11-19 07:32:18

标签: java rdf jena owl arq

我正在制作一个可能需要大约2-3个OWL文件才能使用的应用程序,以便为同一个应用程序提供不同的任务。我使用Jena作为我的语义Web框架。我的问题是:我们如何组织/设置这些猫头鹰文件? 我应该读取同一数据集中的所有owl文件,还是应该为不同的owl维护不同的数据集。 注意:我不会考虑进口猫头鹰,因为它是由jena自己​​处理的。

如果我使用相同的数据集,我如何区分由OntModel.lisRootHierarchyClasses()等函数获得的结果?和其他类似的功能。 当我将它们读入OntModel时,是否可以命名本体。

因此,想知道在同一个应用程序中处理多个OWL文件的最佳实践

例如: 我将我的本体读入到由TDB数据集支持的ontModel中:

public static void loadModel(){
    dataset.begin(ReadWrite.WRITE);
    try{    
        ontModel = ModelToOntModel(model);
        FileManager.get().readModel( ontModel, "SourceOwl1.owk");
        FileManager.get().readModel( ontModel, "SourceOwl2.owl");

        registerListener();
        dataset.commit();
    } catch (Exception e){
        System.out.println("Error in Loading model from source!!");
        e.printStackTrace();
    } finally {

        dataset.end();
    }

}

一旦ontmodel准备就绪,用户输入就会在任何owl文件中指定一个特定的类(比如:SourceOWL2_ClassA),我还需要处理它的Object属性和数据类型属性,并为用户提供一些信息。相同的背景。

但是为了做到这一点,SourceOWL1中的属性也会被列出,从而导致错误。此外,SourceOWL1和SourceOWL2的结构非常不同,其中SourceOWL1包含大约3个导入而SourceOWL2不包含任何内容。

1 个答案:

答案 0 :(得分:1)

经过几天的广泛实践,我找到了解决方案。

答案是在Dataset中使用命名模型。 上述代码段中提交的错误是使用的model / ontModel是从 DefaultModel 生成的,即 Model model = dataset.getDefaultModel(); Insted应该使用: Model namedmodel = dataset.addNamedModel("NameOfModel");其中NameOfModel可以是方便开发人员的任何字符串。  然后在相应的namedModel

中加载OWL文件

因此,上述功能可以重写如下:

public static void loadModel(){
dataset.begin(ReadWrite.WRITE);
try{    
    Model namedModel1 = dataset.addNamedModel("NamedModel1");
    OntModel ontModel1 = ModelFactory.createOntologyModel();
    FileManager.get().readModel( ontModel1, "SourceOwl1.owl");
// Load second Model    
    Model namedModel1 = dataset.addNamedModel("NamedModel2");
    OntModel ontModel1 = ModelFactory.createOntologyModel();
    FileManager.get().readModel( ontModel, "SourceOwl2.owl");
// Similarly you can load many other models within same dataset.

    dataset.commit();
} catch (Exception e){
    System.out.println("Error in Loading model from source!!");
    e.printStackTrace();
} finally {

    dataset.end();
}

}

回答问题中所述的问题: 完成数据集创建后,我们可以使用OntModel访问特定于我们要求的不同本体/ dataset.getNamedModel("NamedModel1"),从而将其视为独立于其他模型的ontModel。 由于问题中使用的ontModel是通过dataset.getDefaultModel()生成的,因此ontModel.lisRootHierarchyClasses()用于生成所有源猫头鹰的根类。但现在可以使用命名模型概念访问desiered模型,ontModel.lisRootHierarchyClasses()将仅回答特定于该本体的根类。

有关命名模型的详细信息,请参阅here 它帮助我清除了我的概念..希望它也能帮助你......