2

我不会列出一个类的所有子类。我列出类,我的算法检查每个类是否有一个子类。如果为真,则列出所有子类。但这不会发生,它似乎忽略了条件“如果(essaClasse.hasSubClass)。有人可以帮我吗?下面的代码部分。

谢谢!

黛博拉(里约热内卢 - 巴西)

完整代码:

package testejena;

import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import java.io.InputStream;
import java.util.Iterator;


public class testeProp {

    static final String inputFileName = "OBRecortada3.owl";

    public static void main(String args[]) {

        try {

            //create the reasoning model using the base
            OntModel inf = ModelFactory.createOntologyModel();

            // use the FileManager to find the input file
            InputStream in = FileManager.get().open(inputFileName);
            if (in == null) {
                throw new IllegalArgumentException("File: " + inputFileName + " not found");
            }

            inf.read(in, "");

            String URI = "http://www.owl-ontologies.com/OntologyBase.owl#";

            ExtendedIterator classes = inf.listClasses();
            while (classes.hasNext()) {
                OntClass essaClasse = (OntClass) classes.next();

                String vClasse = essaClasse.getLocalName().toString();

                if (essaClasse.hasSubClass()) {
                    System.out.println("Classe: " + vClasse);
                    OntClass cla = inf.getOntClass(URI + vClasse);
                    for (Iterator i = cla.listSubClasses(); i.hasNext();) {
                        OntClass c = (OntClass) i.next();
                        System.out.print("   " + c.getLocalName() + " " + "\n");
                    }
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}}
4

2 回答 2

1

您的算法不起作用,因为您没有OntModelSpecOntModel. 指定OntModelSpec此代码非常有效!

OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
于 2015-11-24T14:50:15.830 回答
0

你没有展示你的数据或完整的代码(包括你设置 OntModel 对象的那部分),所以很难给出明确的建议。该hasSubClass方法在 Jena 单元测试中进行了测试,因此它不太可能(尽管并非不可能)包含错误。我建议检查:

  • 在运行上述代码之前,您正在正确地将数据加载到 中Model,使用调试器或日志语句来显示,例如,加载的三元组的数量

  • 您正在加载的本体实际上包含子类语句,包括检查用于rdfs在任何rdfs:subClassOf三元组中定义的前缀声明(它必须完全是 http://www.w3.org/2000/01/rdf-schema#

于 2011-04-10T19:29:01.680 回答