解析.ttl文件并将其映射到Java类
我不熟悉OWL2,我想用OWLAPI解析一个.ttl文件,但我发现OWLAPI与我以前使用的API不一样。如果我想在OWLAxiom或owleEntity中获取内容,那么我似乎应该编写一个访问者,以此类推。我读过一些教程,但没有找到正确的方法。此外,我发现搜索的教程使用的是较旧版本的OWLAPI。所以我想要一个详细的例子来解析一个实例,并将内容存储到一个Java类中 我做了一些尝试,我的代码如下,但我不知道如何继续 举例如下。特别是,我想将@en存储在ecrm:P3\u has\u note的对象中 我想要的内容如下: 我使用的owlapi版本是5.1.0。我从下载jar和文档。我只是想知道如何在java类中获取所需的内容 如果有一些教程描述了如何做,请告诉我 非常感谢 更新:我已经知道如何做了,当我完成它,我会写一个答案,我希望它可以帮助后来的OWLAPI解析.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的对
再次感谢。一旦有了个人,您需要的是检索数据属性断言公理并收集每个属性断言的文本 因此,在代码的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))));