新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     >>W3CHINA.ORG讨论区<<     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Semantic Web(语义Web,语义网或语义万维网, Web 3.0)及相关理论,如:Ontology(本体,本体论), OWL(Web Ontology Langauge,Web本体语言), Description Logic(DL, 描述逻辑),RDFa,Ontology Engineering等。
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWLW3CHINA.ORG讨论区 - Web新技术讨论『 Semantic Web(语义Web)/描述逻辑/本体 』 → [原创]Jena下本体的简单检索 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 122535 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]Jena下本体的简单检索 举报  打印  推荐  IE收藏夹 
       本主题类别: Ontology Language | RDF/RDFS    
     Lexxuan 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大四(GRE考了1500分!)
      文章:88
      积分:1025
      门派:W3CHINA.ORG
      注册:2009/4/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Lexxuan发送一个短消息 把Lexxuan加入好友 查看Lexxuan的个人资料 搜索Lexxuan在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 点击这里发送电邮给Lexxuan  引用回复这个贴子 回复这个贴子 查看Lexxuan的博客楼主
    发贴心情 [原创]Jena下本体的简单检索

    以下代码实现的具体功能为:
    读入三个不同但相关联的本体,设定1个关键词(此关键词在某本体内为类名,在另一本体内为实体名),查询出跟这关键词相关的总共三个本体内的内容.
    希望此代码能帮助初学者了解Jena下使用SPARQL实现本体的查询,以此举一反三.同时也欢迎交流与指错.
    (注意:勿忘运行前设好Jena的classpath)
    import com.hp.hpl.jena.query.*;
    import com.hp.hpl.jena.rdf.model.*;
    import com.hp.hpl.jena.query.Query;
    import com.hp.hpl.jena.query.ResultSet;
    import com.hp.hpl.jena.ontology.*;
    import com.hp.hpl.jena.reasoner.*;
    public class MyOntology{
      public static void main(String[] args) {
        OntModel text_ontmodel = ModelFactory.createOntologyModel();
           OntDocumentManager dm = text_ontmodel.getDocumentManager();
           dm.addAltEntry("http://www.owl-ontologies.com/Ontology1241779535.owl#","file:" + "Family.owl");
           text_ontmodel.read("file:C:/Protege_3.4/Family.owl");
           String k=" base:Julia ";
           String prefix = "PREFIX owl: <http://www.w3.org/2002/07/owl#>"+
                           "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
                        "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
                           "PREFIX  base:<http://www.owl-ontologies.com/Ontology1241779535.owl#> ";
           String slect =  "SELECT ?son ?daughter ?father ?mother ?sister ?brother ?marry_with ";
           String where =  "WHERE { "+
                             "OPTIONAL { "+ k +
                                      " base:son ?son ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:daughter ?daughter ."+
                             //for <daughter xml:lang="en">Lily</daughter> in <married rdf:ID="Julia">
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:father ?father ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:mother ?mother ."+
                             " }"+     
                             "OPTIONAL { "+ k +        
                                      " base:sister ?sister ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:brother ?brother ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:marry_with ?marry_with ."+
                             " }"+
                                   //can test "?x rdfs:subClassOf ?y ." +
                                   //and "?y base:son \"Jack\"@en ."+
                            " }";
           Query query = QueryFactory.create(prefix + slect + where);
           Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
           InfModel inf = ModelFactory.createInfModel(reasoner, text_ontmodel);
           QueryExecution qe = QueryExecutionFactory.create(query,inf);
           ResultSet results = qe.execSelect();
           ResultSetFormatter.out(System.out,results,query);
           qe.close();
           
           
           
           
           OntModel text_ontmodel2 = ModelFactory.createOntologyModel();
           OntDocumentManager dm2 = text_ontmodel.getDocumentManager();
           dm2.addAltEntry("http://www.owl-ontologies.com/Ontology1241779535.owl#","file:" + "Family2.owl");
           text_ontmodel2.read("file:C:/Protege_3.4/Family2.owl");
           String prefix2 = "PREFIX owl: <http://www.w3.org/2002/07/owl#>"+
                            "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
                         "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
                            "PREFIX  base:<http://www.owl-ontologies.com/Ontology1241779535.owl#> ";
           String slect2 =  "SELECT ?relationship ?with ";
           String where2 =  "WHERE { "+
                                    "?x owl:onProperty ?relationship ." +
                                    //here for <owl:ObjectProperty rdf:ID="daughter_is"/> in <owl:onProperty> in <owl:Restriction> in <owl:Class rdf:ID="Julia">
                                    "?x owl:allValuesFrom ?with ."+ k +
                                    " rdfs:subClassOf ?x ."+
                                    
                            " }";
           Query query2 = QueryFactory.create(prefix2 + slect2 + where2);
           Reasoner reasoner2 = ReasonerRegistry.getOWLReasoner();
           InfModel inf2 = ModelFactory.createInfModel(reasoner2, text_ontmodel2);
           QueryExecution qe2 = QueryExecutionFactory.create(query2,inf2);
           ResultSet results2 = qe2.execSelect();
           ResultSetFormatter.out(System.out,results2,query2);
           qe2.close();
           
           
           
           

           OntModel text_ontmodel3 = ModelFactory.createOntologyModel();
           OntDocumentManager dm3 = text_ontmodel3.getDocumentManager();
           dm3.addAltEntry("http://www.owl-ontologies.com/Ontology1241772983.owl#","file:" + "human_being.owl");
           text_ontmodel3.read("file:C:/Protege_3.4/human_being.owl");
           String prefix3 = "PREFIX owl: <http://www.w3.org/2002/07/owl#>"+
                            "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
                         "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
                            "PREFIX  base:<http://www.owl-ontologies.com/Ontology1241772983.owl#> ";
           String slect3 = "SELECT ?birthday ?firstname ?familyname ?nationality ";
           String where3 = "WHERE { "+
                             "OPTIONAL { "+ k +
                                      " base:birthday ?birthday ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:firstname ?firstname ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:familyname ?familyname ."+
                             " }"+
                             "OPTIONAL { "+ k +
                                      " base:nationality ?nationality ."+
                             " }"+     
                           " }";
           Query query3 = QueryFactory.create(prefix3 + slect3 + where3);
           Reasoner reasoner3 = ReasonerRegistry.getOWLReasoner();
           InfModel inf3 = ModelFactory.createInfModel(reasoner3, text_ontmodel3);
           QueryExecution qe3 = QueryExecutionFactory.create(query3,inf3);
           ResultSet results3 = qe3.execSelect();
           ResultSetFormatter.out(System.out,results3,query3);
           qe3.close();       


      }
    }

    附件里面有本代码应用到的三个本体owl文件,另外还有4个关系图帮助理解三本体,其中Ktiiy应为Kitty



    此主题相关图片如下:
    按此在新窗口浏览图片


    此主题相关图片如下:
    按此在新窗口浏览图片
    此主题相关图片如下:
    按此在新窗口浏览图片
    此主题相关图片如下:
    按此在新窗口浏览图片


    [此贴子已经被作者于2009-5-19 14:23:05编辑过]

       收藏   分享  
    顶(3)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/19 4:23:00
     
     heather_0209 美女呀,离线,快来找我吧!魔羯座1984-1-1
      
      
      等级:大一(高数修炼中)
      文章:11
      积分:123
      门派:XML.ORG.CN
      注册:2008/12/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给heather_0209发送一个短消息 把heather_0209加入好友 查看heather_0209的个人资料 搜索heather_0209在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看heather_0209的博客2
    发贴心情 
    太好了,谢谢LZ了

    ----------------------------------------------
    每天进步一点点

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/21 16:43:00
     
     zhangjiazimei 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:59
      积分:291
      门派:XML.ORG.CN
      注册:2008/12/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhangjiazimei发送一个短消息 把zhangjiazimei加入好友 查看zhangjiazimei的个人资料 搜索zhangjiazimei在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zhangjiazimei的博客3
    发贴心情 
    楼主太好了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/25 10:29:00
     
     xiaoxiaoxia 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:10
      积分:100
      门派:XML.ORG.CN
      注册:2008/11/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiaoxiaoxia发送一个短消息 把xiaoxiaoxia加入好友 查看xiaoxiaoxia的个人资料 搜索xiaoxiaoxia在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiaoxiaoxia的博客4
    发贴心情 
    请问LZ,如果我想针对一个本体编写自己的检索程序,是对owl文件进行操作,而不是对protege软件进行操作,对吧?我们可以实现对中文本体的检索吗?我刚刚起步,对一些基础的东西不了解。还请LZ包涵:)
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/25 10:55:00
     
     Lexxuan 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大四(GRE考了1500分!)
      文章:88
      积分:1025
      门派:W3CHINA.ORG
      注册:2009/4/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Lexxuan发送一个短消息 把Lexxuan加入好友 查看Lexxuan的个人资料 搜索Lexxuan在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 点击这里发送电邮给Lexxuan  引用回复这个贴子 回复这个贴子 查看Lexxuan的博客5
    发贴心情 
    以下是引用xiaoxiaoxia在2009-5-25 10:55:00的发言:
    请问LZ,如果我想针对一个本体编写自己的检索程序,是对owl文件进行操作,而不是对protege软件进行操作,对吧?我们可以实现对中文本体的检索吗?我刚刚起步,对一些基础的东西不了解。还请LZ包涵:)


    构造owl文件有很多工具,远不止protege,因此本文对本体的检索,当然也不是对软件的检索,而是对owl的检索.
    我们能实现任何一种语言本体的检索,前提首先是该本体包含了此种语言,其次就是你的检索环境支持此种语言.
    比如,在Jena下,你想对中文本体和阿拉伯文本体进行检索,那你的本体owl文件就需要有你所检索的中文和阿拉伯文关键词,且需要Jena支持中文和阿拉伯文的编译
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/25 18:07:00
     
     mrjpj520 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:67
      门派:XML.ORG.CN
      注册:2009/5/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mrjpj520发送一个短消息 把mrjpj520加入好友 查看mrjpj520的个人资料 搜索mrjpj520在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mrjpj520的博客6
    发贴心情 
    您好,问个比较白痴的问题,但是确实是不会,把程序和本体用记事本保存,是用Eclipse全部打开后运行么?
    正在学习怎样改Jena的classpath,请您见谅。麻烦了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/28 16:07:00
     
     cxgnj 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:12
      积分:114
      门派:XML.ORG.CN
      注册:2008/10/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cxgnj发送一个短消息 把cxgnj加入好友 查看cxgnj的个人资料 搜索cxgnj在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cxgnj的博客7
    发贴心情 
    楼主的程序是在控制台输出结果的,比如ResultSetFormatter.out(System.out,results3,query3);
    在控制台输出是:
    ---------------------------------------------------------------------------------------------------
    | birthday                                              | firstname  | familyname   | nationality |
    ===================================================================================================
    | "1982-05-20"^^<http://www.w3.org/2001/XMLSchema#date> | "Julia"@en | "Addison"@en | "USA"@en    |
    ---------------------------------------------------------------------------------------------------
    能不能在jsp的页面中输出查询的结果呢?这样能实现吗?如何实现啊?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/29 17:49:00
     
     springbird 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(C++考了100分!)
      文章:85
      积分:412
      门派:XML.ORG.CN
      注册:2008/5/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给springbird发送一个短消息 把springbird加入好友 查看springbird的个人资料 搜索springbird在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看springbird的博客8
    发贴心情 
    问个很白痴的问题吧,你的这些图是用什么软件画的呢?本体能用hozo建立吗
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/29 20:14:00
     
     Lexxuan 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大四(GRE考了1500分!)
      文章:88
      积分:1025
      门派:W3CHINA.ORG
      注册:2009/4/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Lexxuan发送一个短消息 把Lexxuan加入好友 查看Lexxuan的个人资料 搜索Lexxuan在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 点击这里发送电邮给Lexxuan  引用回复这个贴子 回复这个贴子 查看Lexxuan的博客9
    发贴心情 
    以下是引用mrjpj520在2009-5-28 16:07:00的发言:
    您好,问个比较白痴的问题,但是确实是不会,把程序和本体用记事本保存,是用Eclipse全部打开后运行么?
    正在学习怎样改Jena的classpath,请您见谅。麻烦了


    。。。。。。
    首先,创造本体可以用很多工具,记事本也是可以的.......当然用记事本写程序也是可以.......但是绝对不推荐.......
    其次,下载Jena包,设classpath,在比如Eclipse下写程序,程序中读入本体文件......如果程序不能正常运行,可以再在java项目下把Jena包全部加载进去
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/29 20:25:00
     
     Lexxuan 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大四(GRE考了1500分!)
      文章:88
      积分:1025
      门派:W3CHINA.ORG
      注册:2009/4/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Lexxuan发送一个短消息 把Lexxuan加入好友 查看Lexxuan的个人资料 搜索Lexxuan在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 点击这里发送电邮给Lexxuan  引用回复这个贴子 回复这个贴子 查看Lexxuan的博客10
    发贴心情 
    以下是引用cxgnj在2009-5-29 17:49:00的发言:
    楼主的程序是在控制台输出结果的,
    能不能在jsp的页面中输出查询的结果呢?这样能实现吗?如何实现啊?



    本人没尝试过在jsp页面上输出,理论上当然可以,加油!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/29 20:27:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/6/15 20:21:55

    本主题贴数39,分页: [1] [2] [3] [4]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    156.250ms