繁体   English   中英

如何计算耶拿猫头鹰班的人数?

[英]How to count individuals of an owl class in Jena?

我正在使用Jena进行OWL模型的自动实例化。 由于每个人都需要一个唯一的标识符。

我如何知道给定OWL类的个人人数,以便为下一个要实例化的新个人生成新的id

我已经通过使用方法listIndividuals尝试了以下Jena Java代码,在这里,但是没有用。

import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.model.*;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public static int individualSize(Resource res){

        int size = 0;

        ExtendedIterator<Individual> individuals = domainModel.listIndividuals(res);

        while (individuals.next() != null){ size++; }

        return size;
}

static String xmlbase = "http://www.semantic.org/ontologies/exemple.owl#";
OntModel domainModel = ModelFactory.createOntologyModel(ProfileRegistry.OWL_DL_LANG);
domainModel.read((new FileInputStream(ontoInPath)), null);

int nextId = individualSize(domainModel.getOntClass(xmlbase+"Event"));

System.out.print(nextId);

错误是:

Exception in thread "main" java.util.NoSuchElementException
    at com.hp.hpl.jena.util.iterator.NiceIterator.ensureHasNext(NiceIterator.java:37)
    at com.hp.hpl.jena.util.iterator.UniqueExtendedIterator.next(UniqueExtendedIterator.java:77)
    at soctrace.Intology.individualSize(Intology.java:225)
    at soctrace.Intology.manageOntologies(Intology.java:124)
    at soctrace.Intology.main(Intology.java:65)

Jena API中是否有任何方法可以帮助我更轻松地完成此操作?

如果不 ! 我该如何更正我的代码。

谢谢您的答复!

您的代码:

while (individuals.next() != null){ size++; }

不是使用迭代器的正确方法,您想要的是:

while (individuals.hasNext()) {
  size++;
  individuals.next();
}

如果Model.read尚未关闭FileInputStream,则可能还需要关闭它。

此外,如果您打算使用OWL,则需要使用OWLAPI ,这是一个以OWL为中心的Java API。 Jena很棒,但是它以RDF / triples为中心,这使得在基于OWL的实际应用程序中使用起来很麻烦(至少以我的经验)。 如果要在应用程序中进行大量推理,您可能还想研究使用专用的OWL推理器,例如HermiTPellet

如果我在正确地进行数学运算,那么您总会有一个错误的错误。 尝试:

public static int individualSize(Resource res){

    int size = 0;
    ExtendedIterator<Individual> individuals = domainModel.listIndividuals(res);

    while(individuals.hasNext()) {
        individuals.next();
        size++;
    }
    return size;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM