0

i learning jena for websemantic. I was tried made a function getAllSubClass for read ontology(.owl) which i made.

level1->level2 subclass level1->level3 subclass level2->level4 subclass level3->level5 subclass level4

this my code :

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 output always stop in level3 if class level4 output level4-level5

what should i do with my code for get output level1...level5?

Bima Wijaya
  • 183
  • 2
  • 16

1 Answers1

0

i've worked on this issue, I created a JenaHelper class that parse an Ontologoy (.owl) file created using Protege. This will help you, I hope, I developed methods for retreiving all concepts, concepts relationships, all values, and values of a specific concept.

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

Without instantiation just call for example JenaHelper.getConceptsNames("...","..."). Good luck.

user3728064
  • 158
  • 1
  • 11
  • thanks for your respon. i tried getConceptsName but output only until level2. – Bima Wijaya Mar 04 '15 at 13:40
  • In an Ontology file this is the structure: we have many concepts, every concept can have multiple subconcepts, the last concept of the hierarchy can have values those values aren't concepts, we call it values of a concept, so perhaps what you call it level 2 may be a value, what i want you to try is to test `JenaHelper#getValues()` method and check the returned set of String if they represent the missed level 2, if so, those are values. – user3728064 Mar 04 '15 at 18:14