解析内容倒序
Parsed content is in reverse order
我正在尝试使用 OWL API 解析 OWL2 文件。但是我在尝试解析标签 <SubClassOf></SubClassOf>
时遇到了问题。请看下面的例子。
<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2006/12/owl2-xml#"
......>
<SubClassOf>
<Class URI="&ontology_people1;Address"/>
<Class URI="&ontology_people1;Location"/>
</SubClassOf>
......
</Ontology>
<SubClassOf> and </SubClassOf>
之间的内容是按顺序写的。
第一行写子class,第二行写父class。但是我解析它并在控制台中打印。他们的顺序是相反的。同时,其他人并不相反。我的代码在下面。
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
File file = new File("src/main/resources/dataSet/PR/person1/ontology_people1.owl");
OWLOntology o = manager.loadOntologyFromOntologyDocument(file);
List<OWLAxiom> subClassOf = o.axioms()
.filter(axiom -> axiom.getAxiomType().toString().equals("SubClassOf"))
.collect(Collectors.toList());
for (OWLAxiom owlAxiom : subClassOf) {
Stream<OWLEntity> owlEntityStream = owlAxiom.signature();
owlEntityStream.forEach(entity->System.out.println(entity.getIRI()));
System.out.println("**************");
}
为什么?
那是因为 signature()
方法不是您需要使用的。公理的签名是出现在该公理中的一组实体,并且独立于公理类型定义。在这种情况下,主要特征是签名中实体的顺序与公理的语义无关。
要可靠地访问子类和超类,请使用如下代码:
List<OWLSubClassOfAxiom> subClassOf = OWLAPIStreamUtils.asList(o.axioms(AxiomType.SUBCLASS_OF));
subClassOf.forEach(x->{
System.out.println( x.getSubClass());
System.out.println( x.getSuperClass());
});
我正在尝试使用 OWL API 解析 OWL2 文件。但是我在尝试解析标签 <SubClassOf></SubClassOf>
时遇到了问题。请看下面的例子。
<?xml version="1.0"?>
<Ontology xmlns="http://www.w3.org/2006/12/owl2-xml#"
......>
<SubClassOf>
<Class URI="&ontology_people1;Address"/>
<Class URI="&ontology_people1;Location"/>
</SubClassOf>
......
</Ontology>
<SubClassOf> and </SubClassOf>
之间的内容是按顺序写的。
第一行写子class,第二行写父class。但是我解析它并在控制台中打印。他们的顺序是相反的。同时,其他人并不相反。我的代码在下面。
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
File file = new File("src/main/resources/dataSet/PR/person1/ontology_people1.owl");
OWLOntology o = manager.loadOntologyFromOntologyDocument(file);
List<OWLAxiom> subClassOf = o.axioms()
.filter(axiom -> axiom.getAxiomType().toString().equals("SubClassOf"))
.collect(Collectors.toList());
for (OWLAxiom owlAxiom : subClassOf) {
Stream<OWLEntity> owlEntityStream = owlAxiom.signature();
owlEntityStream.forEach(entity->System.out.println(entity.getIRI()));
System.out.println("**************");
}
为什么?
那是因为 signature()
方法不是您需要使用的。公理的签名是出现在该公理中的一组实体,并且独立于公理类型定义。在这种情况下,主要特征是签名中实体的顺序与公理的语义无关。
要可靠地访问子类和超类,请使用如下代码:
List<OWLSubClassOfAxiom> subClassOf = OWLAPIStreamUtils.asList(o.axioms(AxiomType.SUBCLASS_OF));
subClassOf.forEach(x->{
System.out.println( x.getSubClass());
System.out.println( x.getSuperClass());
});