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



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

如果我使用相同的数据集,我如何区分由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不包含任何导入。

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

答案是利用 命名模型 在 Dataset .上述代码片段中犯的错误是使用的model/ontModel是从 DefaultModel 生成的,即 Model model = dataset.getDefaultModel();本应使用: 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();
}

}

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

有关命名模型的更多信息,您可以参考此处它帮助我清除了我的概念。希望它也能帮助你..

相关内容

  • 没有找到相关文章

最新更新