使用Java获取生成的本体中的兄弟类的名称和计数

时间:2016-02-28 02:55:49

标签: java jena ontology spquery

我首先生成了本体。它很成功。然后,我想为每个类获取兄弟类名,并计算生成的本体中每个类的兄弟类的数量。例如,

    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]

在上面的输出中,第一个用于B的兄弟姐妹,第二个用于C的兄弟姐妹......我用Jena生成本体。 (我听说过SPARQL查询,但我对它很新。)

以下代码仅用于获取同级类名称。它给出了nullpointer错误。但似乎输出是正确的完整链接。如何分开最后一部分?

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 个答案:

答案 0 :(得分:1)

OntClass.getSuperClass()的javadoc说:

  

此类的超类或null

A没有超类。