首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找本体中使用的所有IRI,哪些不是实体?

查找本体中使用的所有IRI,哪些不是实体?
EN

Stack Overflow用户
提问于 2018-02-10 05:05:16
回答 1查看 58关注 0票数 0

在OWLAPI中,有没有什么直接的方法可以找到本体中使用的所有IRI,这些IRI没有被标识为实体,即没有被声明,也没有在允许它们被标识为特定实体类型的上下文中使用?希望有类似于OWLOntology.signature()的东西,但什么也没看到。

这种情况的一个例子出现在BFO2.0 (http://purl.obolibrary.org/obo/bfo.owl)中:

代码语言:javascript
复制
<rdf:Description rdf:about="http://example.com/bfo-spec-label">
    <obo:IAO_0000119>Person:Alan Ruttenberg</obo:IAO_0000119>
</rdf:Description>

在这里,http://example.com/bfo-spec-label只是一个未知实体类型的“裸”IRI,因此不会出现在本体签名中。

EN

回答 1

Stack Overflow用户

发布于 2018-02-14 00:03:22

我找不到任何优雅的方法来找到所有这些赤裸裸的IRI,但是可以通过查找所有可能出现的地方来找到它们。一个简单的方法看起来像这样:私有列表findBareIRIs(OWLOntology onto) { List bares =新的ArrayList();

代码语言:javascript
复制
// bare IRIs can occur as AnnotationSubjects, AnnotationObjects or the domain/range of AnnotationProperties
List<OWLAnnotationAssertionAxiom> asserts = OWLAPIStreamUtils.asList(onto.axioms(AxiomType.ANNOTATION_ASSERTION));
List<OWLAnnotationPropertyDomainAxiom> domains = OWLAPIStreamUtils.asList(onto.axioms(AxiomType.ANNOTATION_PROPERTY_DOMAIN));
List<OWLAnnotationPropertyRangeAxiom> ranges = OWLAPIStreamUtils.asList(onto.axioms(AxiomType.ANNOTATION_PROPERTY_RANGE));

//check the subject and values of each AnnotationAsertion
for (OWLAnnotationAssertionAxiom ax : asserts) {
  OWLAnnotationSubject subj = ax.getSubject();
  OWLAnnotationValue value = ax.getValue();
  if (subj.isIRI()) {
    bares.add((IRI) subj);
  }
  if (value.isIRI()) {
    bares.add((IRI) value);
  }
}
// check the domain and ranges of each AnnotationProperty
for (OWLAnnotationPropertyDomainAxiom ax : domains) {
  bares.add(ax.getDomain());
}
for (OWLAnnotationPropertyRangeAxiom ax : ranges) {
  bares.add(ax.getRange());
}

return bares;

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48714072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档