解析.ttl文件并将其映射到Java类

解析.ttl文件并将其映射到Java类,java,owl,owl-api,Java,Owl,Owl Api,我不熟悉OWL2,我想用OWLAPI解析一个.ttl文件,但我发现OWLAPI与我以前使用的API不一样。如果我想在OWLAxiom或owleEntity中获取内容,那么我似乎应该编写一个访问者,以此类推。我读过一些教程,但没有找到正确的方法。此外,我发现搜索的教程使用的是较旧版本的OWLAPI。所以我想要一个详细的例子来解析一个实例,并将内容存储到一个Java类中 我做了一些尝试,我的代码如下,但我不知道如何继续 举例如下。特别是,我想将@en存储在ecrm:P3\u has\u note的对

我不熟悉OWL2,我想用OWLAPI解析一个.ttl文件,但我发现OWLAPI与我以前使用的API不一样。如果我想在OWLAxiom或owleEntity中获取内容,那么我似乎应该编写一个访问者,以此类推。我读过一些教程,但没有找到正确的方法。此外,我发现搜索的教程使用的是较旧版本的OWLAPI。所以我想要一个详细的例子来解析一个实例,并将内容存储到一个Java类中

我做了一些尝试,我的代码如下,但我不知道如何继续

举例如下。特别是,我想将@en存储在ecrm:P3\u has\u note的对象中

我想要的内容如下:

我使用的owlapi版本是5.1.0。我从下载jar和文档。我只是想知道如何在java类中获取所需的内容

如果有一些教程描述了如何做,请告诉我

非常感谢

更新:我已经知道如何做了,当我完成它,我会写一个答案,我希望它可以帮助后来的OWLAPI


再次感谢。

一旦有了个人,您需要的是检索数据属性断言公理并收集每个属性断言的文本

因此,在代码的for循环中:

// Let's rename your Object class to Literal so we don't get confused with java.lang.Object
Instance instance = new Instance();
localAcademic.dataPropertyAssertionAxioms()
    .forEach(ax -> instance.predicateToObject.put(
        ax.getProperty().getIRI().toString(),
        Collections.singleton(new Literal(ax.getObject))));
此代码假定属性只显示一次-如果属性显示多次,则必须检查属性集是否已存在,并仅将其添加到属性集中,而不是替换映射中的值。为了简化示例,我省略了这一点


在这个场景中不需要访问者,因为您已经知道您感兴趣的axiom类型以及调用它的方法。它可以写成一个只实现visitOWLDataPropertyAssertionAxiom的OWLAxiomVisitor,但在这种情况下,这样做没有什么好处。

非常感谢。但是我可以使用访问者来获取数据,它是owlannonationassersionaxiom,我认为OWLDataPropertyAssersionAxiom是存储描述数据属性的公理。我不确定,您的看法如何?取决于您要查找的属性是注释属性还是数据属性。区别在于注释属性被推理者忽略了。我还有一个问题。如果我现在有一个人,我想知道每一个财产和价值,有没有一个快速的方法来获得这些?你写过现成的方法吗?谢谢。
<http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896>
    a                      mus:M42_Performed_Expression_Creation ;
    ecrm:P3_has_note       "Créée par Teodoro Anzellotti, son commanditaire, en novembre 1995 à Rotterdam"@en ;
    ecrm:P4_has_time-span  <http://data.doremus.org/performance/4db95574-8497-3f30-ad1e-f6f65ed6c896/time> ;
    ecrm:P9_consists_of    [ a                        mus:M28_Individual_Performance ;
                             ecrm:P14_carried_out_by  "Teodoro Anzellotti"
                           ] ;
    ecrm:P9_consists_of    [ a                        mus:M28_Individual_Performance ;
                             ecrm:P14_carried_out_by  "à Rotterdam"
                           ] ;
    efrbroo:R17_created    <http://data.doremus.org/expression/2fdd40f3-f67c-30a0-bb03-f27e69b9f07f> ;
    efrbroo:R19_created_a_realisation_of
            <http://data.doremus.org/work/907de583-5247-346a-9c19-e184823c9fd6> ;
    efrbroo:R25_performed  <http://data.doremus.org/expression/b4bb1588-dd83-3915-ab55-b8b70b0131b5> .
class Instance{
    String subject;
    Map<String, Set<Object>> predicateToObject = new HashMap<String,Set<Object>>();
}

class Object{
    String value;
    String type;
    String language = null;
}
// Let's rename your Object class to Literal so we don't get confused with java.lang.Object
Instance instance = new Instance();
localAcademic.dataPropertyAssertionAxioms()
    .forEach(ax -> instance.predicateToObject.put(
        ax.getProperty().getIRI().toString(),
        Collections.singleton(new Literal(ax.getObject))));