gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:41:12 26 4
gpt4 key购买 nike

我是 OWL 2 的新手,我想使用 OWL API 解析“.ttl”文件,但我发现 OWL API 与我之前使用的 API 不一样。如果我想获取 OWLAxiom 或 OWLEntity 等中的内容,似乎我应该写一个“访问者”。我读过一些教程,但没有找到正确的方法。另外,我发现搜索的教程使用旧版本的 owl api。所以我想要一个详细的例子来解析一个实例,并将内容存储到一个Java类中。

<小时/>

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

<小时/>
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

File file = new File("./source.ttl");

OWLOntology localAcademic = manager.loadOntologyFromOntologyDocument(file);

Stream<OWLNamedIndividual> namedIndividualStream = localAcademic.individualsInSignature();

Iterator<OWLNamedIndividual> iterator = namedIndividualStream.iterator();

while (iterator.hasNext()) {

OWLNamedIndividual namedIndividual = iterator.next();

}
<小时/>

实例举例如下。特别是,我想将“@en”存储在“ecrm:P3_has_note”对象中。

<小时/>
<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;
}
<小时/>

我使用的owlapi版本是5.1.0。我从 there 下载 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))));

此代码假设属性仅出现一次 - 如果您的属性出现多次,您必须检查该属性是否已存在集合,然后只需添加到其中,而不是替换映射中的值。为了简化示例,我省略了它。

此场景不需要访问者,因为您已经知道您感兴趣的公理类型以及要调用的方法。它可以被编写为仅实现 visit(OWLDataPropertyAssertionAxiom)OWLAxiomVisitor,但在这种情况下,这样做几乎没有什么优势。

关于java - 解析 .ttl 文件并将其映射到 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44926081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com