以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  如何利用已建好本体来进行web信息搜索  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=89850)


--  作者:lavender_22
--  发布时间:3/20/2011 9:30:00 PM

--  如何利用已建好本体来进行web信息搜索

初学者,向高手求教:
用protege已建好的本体,如何来指导web信息搜索呢(如文本分类、检索模块等),是在eclipse建的工程,是不是使用jena包中支持的本体查询语言查出该概念的上下位词等,怎么用呢?另,如何将owl文件解析成树状结构类?
--  作者:lavender_22
--  发布时间:3/22/2011 2:29:00 PM

--  
额,自己再顶顶,要不就给淹死了
--  作者:jkjkqueen
--  发布时间:5/14/2011 8:13:00 PM

--  
这个论坛已经没落了,,,,从来没有人来回答问题了,搞的我做本体的都心灰意冷了!!
我也不会!!!求解答啊~~~~~~
--  作者:newnewz
--  发布时间:6/2/2011 6:45:00 PM

--  
我有在myeclipse导入jena实现的将本体解析为树状结构类的代码,是我前些日期刚做好的,不知道是不是你需要的。
--  作者:lavender_22
--  发布时间:6/8/2011 12:35:00 PM

--  
回复四楼:我有在myeclipse导入jena实现的将本体解析为树状结构类的代码。。。
哈,真的呀,求赐教,呵呵,可否发我一份“解析成树状结构”的源码呢,不胜感激呀,xjf_622@163.com
--  作者:andyneo
--  发布时间:6/17/2011 4:46:00 PM

--  
http://protegewiki.stanford.edu/wiki/ProgrammingWithProtege  
这里有些代码可以参照一下
--  作者:newnewz
--  发布时间:6/17/2011 5:21:00 PM

--  
相应代码已经发到Lz的邮箱。
--  作者:lavender_22
--  发布时间:9/5/2011 4:58:00 PM

--  
一直有事没上来公布答案的,抱歉啦,各位,谢谢楼上童鞋的帮助,感谢感谢,特将代码全奉上,有需要的盆友可以看看下回去调试

public class Tree extends JFrame{

 public  final String strDriver = "com.mysql.jdbc.Driver";
  public  final String strURL = "jdbc:mysql://localhost/course";
  public  final String strUser = "root";
  public final String strPassword ="";
  public  final String strDB = "MySQL";
  public static IDBConnection connectDB(String DBURL, String DBUSER, String DBPASSWORD, String DBTYPE){
   try {
    Class.forName("com.mysql.jdbc.Driver");
   System.out.print("数据库连接成功, 已经连接到");
   }catch (ClassNotFoundException e){
    e.printStackTrace();
    System.out.println("数据库连接不成功");
   }
   return new DBConnection(DBURL, DBUSER,DBPASSWORD,DBTYPE);
  }
  public static OntModelSpec getModelSpec(ModelMaker maker) {
   OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
   spec.setImportModelGetter(maker);
   return spec;
  }
  public static OntModel ceateDBModelFromFile(IDBConnection con, String name, String filePath){
   ModelMaker maker = ModelFactory.createModelRDBMaker(con);
   Model base = maker.createModel(name);
   OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
   newmodel.read(filePath);
   System.out.println("已将本体文件存入数据库。");
   System.out.println();
   return newmodel;  
  }
  public static OntModel getModelFromDB(IDBConnection con, String name){
   ModelMaker maker = ModelFactory.createModelRDBMaker(con);
   Model base = maker.getModel(name);
   OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
   System.out.println("已从数据库中读出本体文件。");
   System.out.println();
   return newmodel;
  }
 public static ArrayList<OntResource> getRecord(OntClass targetClass, ArrayList<OntResource> record)
  {
   if (! targetClass.isAnon())
   {
       record.add(targetClass);
       OntClass tempClass = targetClass;
      
      while (tempClass.hasSuperClass())
    {
      Iterator<OntClass> superClassIterator = tempClass.listSuperClasses(true);
       OntClass superClass = null;
       while ( superClassIterator.hasNext())
       {
        superClass = superClassIterator.next();
        if ( !superClass.isAnon())
        {
         break;
        }
       }
       if ( superClass != null && !superClass.isAnon())
       {
        if ( tempClass.getURI() == superClass.getURI())
         break;
        record.add(superClass);
         
        tempClass = superClass;
       }
       else
        break;
       
    }
     
   }
   return record;
  }
  public static void addRecordToTree(DefaultMutableTreeNode sourceRoot, ArrayList<OntResource> record)
  {
   DefaultMutableTreeNode lastNode = sourceRoot;
   DefaultMutableTreeNode insertingNode=null;
   for ( int i = 0; i < record.size(); ++i)
   {
    
    boolean alreadyExisted = false;
    for ( int j = 0; j< lastNode.getChildCount(); ++ j)
    {
     if ( ((OntResource)((DefaultMutableTreeNode)lastNode.getChildAt(j)).getUserObject()).getURI() == record.get(record.size()-i-1).getURI())
     {
      lastNode = (DefaultMutableTreeNode) lastNode.getChildAt(j);
      alreadyExisted = true;
      break;
     }
       
    }
    if( alreadyExisted == false)
    {
      insertingNode = new DefaultMutableTreeNode();
      insertingNode.setUserObject(record.get(record.size()-i-1));
      lastNode.add(insertingNode);
      lastNode = insertingNode;     
    }
   }
  }
  @SuppressWarnings("unchecked")
 public void treeinit(){
   JTree jTree=new JTree();
   GridLayout lay=new GridLayout(1,1);
   DefaultMutableTreeNode root=new DefaultMutableTreeNode("");
    DefaultMutableTreeNode father=new DefaultMutableTreeNode("root");
    root.add(father);
     TreeModel treeModel = new DefaultTreeModel(root);
      jTree.setModel(treeModel);
     this.setSize(400,400);
     this.setLayout(lay);
     this.add(jTree);
     this.setVisible(true);
     jTree.setCellRenderer(new IndividualTreeCellRenderer());

    IDBConnection con = connectDB(strURL, strUser, strPassword, strDB);
     System.out.println(con + ";");
     System.out.println();
     String filePath = "";
     String prefix = " ";
     OntModel defModel = ceateDBModelFromFile(con, "Course1", filePath);
     OntModel model = getModelFromDB(con, "Course1");
     ArrayList<OntResource> record = new ArrayList<OntResource>();
     Iterator<OntClass> classIterator = model.listClasses();
      
   while ( classIterator.hasNext())
   {
    OntClass currentClass = classIterator.next();
       
    getRecord(currentClass, record);
       
    addRecordToTree((DefaultMutableTreeNode)root.getChildAt(0),record);   
    record.clear();   }   } 
  public static void main(String[] args)
  {  
  Tree tree =new Tree();
  tree.treeinit();     }}


--  作者:admin
--  发布时间:9/5/2011 10:31:00 PM

--  
感谢分享!

以下是引用lavender_22在2011-9-5 16:58:00的发言:
一直有事没上来公布答案的,抱歉啦,各位,谢谢楼上童鞋的帮助,感谢感谢,特将代码全奉上,有需要的盆友可以看看下回去调试

。。。




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