新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   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程序输出的三元组是缩写形式? 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6775 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 如何使Jena程序输出的三元组是缩写形式? 举报  打印  推荐  IE收藏夹 
       本主题类别: Ontology Engineering | RDF/RDFS    
     anzhiruosu 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:54
      积分:286
      门派:XML.ORG.CN
      注册:2007/7/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给anzhiruosu发送一个短消息 把anzhiruosu加入好友 查看anzhiruosu的个人资料 搜索anzhiruosu在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看anzhiruosu的博客楼主
    发贴心情 如何使Jena程序输出的三元组是缩写形式?

    我在Jena平台上读入一个本体文件,然后通过listStatement()方法输出所有三元组,大概的代码如下:
          Model model = ModelFactory.createDefaultModel();
          // read the RDF/XML file
          model.read("file:e:D2RROOT/examples/SmartRoom/output/output.owl");
         StmtIterator iter=model.listStatements(null,null,(RDFNode)null);
      //打印本体模型中的三元组
      while(iter.hasNext()){
       System.out.println("***"+iter.nextStatement());
      }
    输出结果的三元组形式如下:
    ***[http://www.owl-ontologies.com/MyOntology.owl#Living_Room2, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.owl-ontologies.com/MyOntology/schema.owl#Room]
    可以看出,输出的三元组各个资源是以URI全名的输出的,而我在本体文档中已经定义了名字空间:
    xmlns:users="http://www.owl-ontologies.com/MyOntology/schema.owl#"
    我所希望输出的形式是:
    [uers:Living_Room2,rdfs:type,users:Room]
    所以我想问一下,在Jena中应该怎么设置才能达到以上的效果呢?

    另外:
    在jena读取的规则文档中也可以使用prefix来定义前缀。因为功能需求,我为Jena添加了一个功能子(functor)ruleTrace,这个functor的基本功能是当某条规则触发时获取规则的前件和后件。功能子ruleTrace对应的内嵌原语RuleTrace的headAction方法的主要代码如下:
    public void headAction(Node[] args, int length, RuleContext context) {
            //通过循环把每个在ruleTrace中指定的前后件找出来
            for (int i = 0; i < length; i++) {
               //获得在ruleTrace中指定的参数内容
                Node clauseN = getArg(i, args, context);
              //判定参数是否为数字,因为参数指定的位置信息,所以只能是整数。
                if (Util.isNumeric(clauseN)) {
                   //转化为整型
                    int clauseIndex = Util.getIntValue(clauseN);
                    //前件三元组
                    Object bodyclause ;
                    //后件三元组
                    Object headClause;
                     //如果是正整数,则获取前件信息
                    if(clauseIndex >=0){
                          //从规则中获取指定前件
                     bodyclause = context.getRule().getBodyElement(clauseIndex);
                        if (bodyclause instanceof TriplePattern) {
                          //这里打印前件
                            System.out.println(bodyclause);                    

                        } else {
                            throw new BuiltinException(this, context, "illegal triple to remove non-triple clause");
                        }
                    }
                    //否则获取后件信息
                    else{
                        headClause = context.getRule().getHeadElement(-1-clauseIndex);
                        if (headClause instanceof TriplePattern) {
                            //这里仅仅是打印后件,
                            System.out.println(headClause);
                           // context.remove(t);

                        } else {
                            throw new BuiltinException(this, context, "illegal triple to remove non-triple clause");
                        }
                     
                    }
                    }
                else {
                    throw new BuiltinException(this, context, "illegal arg to remove (" + clauseN + "), must be an integer");
                }
            }
        }

    例如我写得规则是:
    @prefix mys http://www.owl-ontologies.com/MyOntology/schema.owl#
    @prefix my http://www.owl-ontologies.com/MyOntology.owl#
    [ (?user rdf:type mys:User)  (?room rdf:type mys:Room) (?room mys:has_light ?light)(?light  mys:status my:closed) -> (?light mys:need my:open_light_server )( my:open_light_server rdf:type mys:Server )ruleTrace(0,-1)print("rule11") ]

    当这条规则被触发,我指定获取第一个前件,理想输出为:
    (?user rdf:type mys:User)
    但实际输出为:
    ?user @rdf:type User
    少了自定义的前缀。请问这如何解决?


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/5/19 22:37:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/2 20:45:18

    本主题贴数1,分页: [1]

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