Возьмите имя и посчитайте количество родственных классов в сгенерированной онтологии, используя Java
Сначала я сгенерировал онтологию. Это было успешно. Затем я хочу взять имя классов-братьев и сестер для каждого класса и подсчитать количество классов-братьев и сестер каждого класса в сгенерированной онтологии. Например,
Main super class- A
Two sub classes of A - B , C
Three sub classes of B- D, E
Я пытался использовать следующий код. Я использовал getSuperClass для получения суперкласса, а затем getSubClass для получения его подклассов. Я использовал arraylist для первого имени каждого класса братьев и сестер. Итак, в вышеприведенном примере вывод должен выглядеть так:
[C] [B] [E] [D]
В приведенном выше выводе, 1-й для родного брата B, 2-й для родного брата C... Я использовал Jena для генерации онтологии. (Я слышал о запросе SPARQL, но я новичок в этом.)
Следующий код только для получения имени класса родного брата. Это дало ошибку нулевого указателя. Но похоже, что вывод правильный с полной ссылкой. Как отделить последнюю часть?
public ArrayList<String> countSiblingClasses(String ontoClass) {
ontologyCreation();
this. m.read("http://localhost/new/onto1.owl");
ExtendedIterator<OntClass> classes = ((OntModel) m).listClasses();
ArrayList<String> siblingsName = new ArrayList<String>();
while (classes.hasNext()) {
OntClass all= (OntClass) classes.next();
String cls = all.getSuperClass().listSubClasses().toSet().toString();
System.out.println("class names="+cls);
siblingsName.add(cls);
}
return siblingsName;
}
Выдали пут,
Exception in thread "main" class names=[http://localhost/new/E, http://localhost/new/D]
class names=[http://localhost/new/E, http://localhost/new/D]
class names=[http://localhost/new/C, http://localhost/new/B]
class names=[http://localhost/new/C, http://localhost/new/B]
java.lang.NullPointerException
at Final_Cal.OntologyCreation2.countSiblingClasses(OntologyCreation2.java:235)
at Final_Cal.OntologyCreation2.main(OntologyCreation2.java:34)
1 ответ
Javadoc для OntClass.getSuperClass()
говорит:
Суперкласс этого класса или нуль
A
не будет суперкласса.