以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  如何用jena 查询一个类的所有子类?[求助]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=74689)


--  作者:紫雨寒轩
--  发布时间:5/6/2009 9:29:00 AM

--  如何用jena 查询一个类的所有子类?[求助]
我写了一个sparql查询语句,是查询“核果类”的所有子类,但是有问题,请大家帮忙看一下。我的本体是用中文建的。
OntModel om = ModelFactory.createOntologyModel();
om.read("file:d:/benti/Library.owl");
String queryString = "prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
  + "prefixowl:<http://www.w3.org/2002/07/owl#> "
    + "prefix data:<http://www.owl-ontologies.com/Ontology1236485361.owl#> "
    + "SELECT ?a  " +
    "WHERE{?a rdfs:subclassof data:核果类}";
  Query query = QueryFactory.create(queryString);
  // Execute the query and obtain results
  QueryExecution qe = QueryExecutionFactory.create(query, om);
  try {

   ResultSet results = qe.execSelect();
   while (results.hasNext()) {
    QuerySolution soln = results.nextSolution();
    RDFNode a = soln.get("?a");
    String s[]=a.toString().split("#");
    //System.out.println(a.toString());
    System.out.println(s[1]);

   }
  }
  // Important-free up resources used running the query
  finally {
   qe.close();
  }


--  作者:Lexxuan
--  发布时间:5/19/2009 7:47:00 PM

--  
可以不使用sparql
以下完整代码功能为显示所有类,及每个类下的子类,超类,及属性。希望对你有帮助:
import java.util.*;

import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.ontology.*;

public class Ontology
{
public static void main(String[] args) {
  // 创建本体模型
  OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
  ontModel.read("file:C:/Protege_3.4/Family.owl"); // 读取文件,加载模型

  // 迭代显示模型中的类
  for (Iterator i = ontModel.listClasses(); i.hasNext();) {
   OntClass c = (OntClass) i.next();

   
   if (!c.isAnon()) { // 如果不是匿名类
    System.out.print("Class");
    
    // 获取类的URI并输出,在输出时对URI做了简化
    System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()));
    // 迭代显示当前类的父类
    for (Iterator it = c.listSuperClasses(); it.hasNext();)
    {
     OntClass sp = (OntClass) it.next();
        String str = c.getModel().getGraph()
        .getPrefixMapping().shortForm(c.getURI()) // 获取URI
        + "'s superClass is " ;
     String strSP = sp.getURI();
     try{ // 另一种简化处理URI的方法
      str = str + ":" + strSP.substring(strSP.indexOf('#')+1);
      System.out.println("  Class" +str);
     }
     catch( Exception e ){
     }
    }

    // 迭代显示当前类的子类
    for (Iterator it = c.listSubClasses(); it.hasNext();)
    {
     System.out.print("  Class");
     OntClass sb = (OntClass) it.next();
     System.out.println(c.getModel().getGraph().getPrefixMapping()
       .shortForm(c.getURI())
       + "'s subClass is "
       + sb.getModel().getGraph().getPrefixMapping()
         .shortForm(sb.getURI()));
    }
    
    // 迭代显示与当前类相关的所有属性
    for(Iterator ipp = c.listDeclaredProperties(); ipp.hasNext();)
    {
     OntProperty p = (OntProperty)ipp.next();
      System.out.println("  associated property: " + p.getLocalName());
    }
   }
  }
  
}
}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms