0

Websemantic の jena を学習しています。私が作ったオントロジー(.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

私はこの問題に取り組み、Protege を使用して作成された Ontologoy (.owl) ファイルを解析する JenaHelper クラスを作成しました。これは、すべての概念、概念の関係、すべての値、および特定の概念の値を取得する方法を開発したことを願っています。

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;
    }
}

インスタンス化せずに、たとえばを呼び出すだけですJenaHelper.getConceptsNames("...","...")。幸運を。

于 2015-03-03T17:15:34.610 に答える