0

我为网络语义学习耶拿。我尝试为我制作的读取本体(.owl)制作一个函数 getAllSubClass。

level1->level2 子类 level1->level3 子类 level2->level4 子类 level3->level5 子类 level4

这是我的代码:

public void getAllSubClass(String class)
    {
        String temp = uri+""+class;
        OntClass classOwl = ontology.getOntClass(temp);
        do
        {
            System.out.println(classOwl.getLocalName());
            temp = uri+""+classOwl.getLocalName();
            classOwl = ontology.getOntClass(temp);
            classOwl = classOwl.getSubClass();
        }while(!classOwl.getLocalName().equals((Object)"Nothing"));
    }

if class level1/level2/level3 输出总是停在 level3 if class level4 输出 level4-level5

我应该如何处理获取输出 level1...level5 的代码?

4

1 回答 1

0

我已经解决了这个问题,我创建了一个 JenaHelper 类来解析使用 Protege 创建的 Ontologoy (.owl) 文件。我希望这将帮助您,我开发了用于检索所有概念、概念关系、所有值和特定概念的值的方法。

public class JenaHelper {

    public JenaHelper() {

    }

    public static Set<String> getConceptsNames(Model model, String uri) {
        Set<String> conceptsName = new HashSet<String>();
        StmtIterator sIter = model.listStatements();
        for (; sIter.hasNext();) {
            Statement stmt = sIter.nextStatement();
            String subject = stmt.getSubject().toString();
            String predicat = stmt.getPredicate().toString();
            String object = stmt.getObject().toString();
            if (subject.contains(uri) || predicat.contains(uri) || object.contains(uri)) {
                String s = subject.substring(subject.indexOf("#") + 1);
                String p = predicat.substring(predicat.indexOf("#") + 1);
                String o = object.substring(object.indexOf("#") + 1);
                if ("subClassOf".equals(p) && !s.toLowerCase().equals("thing") && !o.toLowerCase().equals("thing")
                        && !s.contains("/") && !o.contains("/")
                        && !s.contains(":") && !o.contains(":")
                        && !s.contains("-") && !o.contains("-")) {
                    conceptsName.add(s);
                    conceptsName.add(o);
                }
            }
        }
        sIter.close();
        return conceptsName;
    }

    public static Set<String> getValues(Model model, String uri) {
        Set<String> values = new HashSet<String>();
        StmtIterator sIter = model.listStatements();
        for (; sIter.hasNext();) {
            Statement stmt = sIter.nextStatement();
            String subject = stmt.getSubject().toString();
            String predicat = stmt.getPredicate().toString();
            if (subject.contains(uri) || predicat.contains(uri)) {
                String s = subject.substring(subject.indexOf("#") + 1);
                String p = predicat.substring(predicat.indexOf("#") + 1);
                if ("type".equals(p)) {
                    values.add(s);
                }
            }
        }
        sIter.close();
        return values;
    }

    public static Set<String> getValuesOfConcept(Model model, String className, String uri){
        Set<String> valuesConcept = new HashSet<String>();
        StmtIterator sIter = model.listStatements();
        for (; sIter.hasNext();) {
            Statement stmt = sIter.nextStatement();
            String subject = stmt.getSubject().toString();
            String predicat = stmt.getPredicate().toString();
            String object = stmt.getObject().toString();
            if (subject.contains(uri) || predicat.contains(uri) || object.contains(uri)) {
                String s = subject.substring(subject.indexOf("#") + 1);
                String p = predicat.substring(predicat.indexOf("#") + 1);
                String o = object.substring(object.indexOf("#") + 1);
                if (className.equals(o)) {
                    if ("type".equals(p) ) {
                        valuesConcept.add(s);
                    }
                }
            }
        }
        sIter.close();
        return valuesConcept;
    }


    public static String getRelation(Model model, String conceptSource, String conceptDestination, String uri){
        String relationName = "Fail";
        StmtIterator sIter = model.listStatements();
        while(sIter.hasNext()) {
            Statement stmt = sIter.nextStatement();
            String subject = stmt.getSubject().toString();
            String predicat = stmt.getPredicate().toString();
            String object = stmt.getObject().toString();
            if (subject.contains(uri) || predicat.contains(uri) || object.contains(uri)) {
                String s = subject.substring(subject.indexOf("#") + 1);
                String p = predicat.substring(predicat.indexOf("#") + 1);
                String o = object.substring(object.indexOf("#") + 1);

                if (o.equals(conceptSource) && s.equals(conceptDestination)) {
                    relationName = p;
                    break;
                }
            }
        }
        sIter.close();
        return relationName;
    }
}

没有实例化只需调用 example JenaHelper.getConceptsNames("...","...")。祝你好运。

于 2015-03-03T17:15:34.610 回答