1

我正在制作一个可能需要大约 2-3 个 OWL 文件才能使用的应用程序,以便为同一应用程序提供不同的任务。我使用 Jena 作为我的语义网络框架。我的问题是:我们如何组织/设置这些 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),我还需要处理它的对象属性和数据类型属性,并在相同的上下文中为用户提供一些信息。

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

4

1 回答 1

1

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

答案是在Dataset. 上述代码片段中的错误是model/ ontModelused 是从DefaultModel生成的,即 Model model = dataset.getDefaultModel(); Insted 应该使用 : Model namedmodel = dataset.addNamedModel("NameOfModel");其中 NameOfModel 可以是任何便于开发人员使用的字符串。之后将 OWL 文件加载到相应的namedModel.

因此上面的函数可以重写如下:

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。由于问题中的used 是通过因此ontModel生成的,因此用于导致来自所有源 owls 的根类。但是现在可以使用命名模型概念访问所需模型,并且 只回答特定于该本体的根类。dataset.getDefaultModel()ontModel.lisRootHierarchyClasses()ontModel.lisRootHierarchyClasses()

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

于 2014-12-19T10:51:23.073 回答