新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国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等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区W3CHINA.ORG讨论区 - Web新技术讨论『 Semantic Web(语义Web)/描述逻辑/本体 』 → sparql查询求助 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 65552 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: sparql查询求助 举报  打印  推荐  IE收藏夹 
       本主题类别: Ontology Engineering | RDF/RDFS    
     szm 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:46
      积分:250
      门派:XML.ORG.CN
      注册:2008/11/11

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

    我按照资料上做了一下本体的简单查询,可是最后出来的结果很奇怪,现将代码贴出来,希望走过路过的人能帮帮我,谢谢!
     Model m = ModelFactory.createOntologyModel();
     try{
         FileInputStream file;
         file = new FileInputStream("E:\\1.owl");
         InputStreamReader in;
         in = new InputStreamReader(file,"UTF-8");
         m.read(in,null);
         in.close();
         }catch(FileNotFoundException e){
            e.printStackTrace();
         }catch(UnsupportedEncodingException e){
            e.printStackTrace();
         }catch(IOException e){
            e.printStackTrace();
         }
     String queryString=
     "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>"+
     "PREFIX owl:<http://www.w3.org/2002/07/owl#>"+
     "PREFIX eg:<http://www.owl-ontologies.com/unnamed.owl#>"+
     "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
     "PREFIX xsd:<http://www.w3.org/2001/XMLSchema#string>"+
     "SELECT ?x"+
     "WHERE {"+
     "?x rdfs:subClassOf eg:ManagementScience."+
     "}";
     
     Query query=QueryFactory.create(queryString);
     QueryExecution qexec=QueryExecutionFactory.create(query,m);
     ResultSet rs=qexec.execSelect();
     ResultSetFormatter.out(System.out,rs,query);
     qexec.close();
      %>
    </body>
    </html>
    最后的结果却是:
    ----------
    | xWHERE |
    ==========
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    ----------
    想不通,首先为什么名称不是x,而是xwhere;其次还有一个问题,就是我想要将结果输出到屏幕上,而不是控制台中,该怎么做呢?

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 17:14:00
     
     yayatu 美女呀,离线,快来找我吧!双子座1981-6-1
      
      
      
      威望:1
      等级:大三暑假(2个月背完了红宝书)(贵宾)
      文章:134
      积分:965
      门派:XML.ORG.CN
      注册:2004/7/6

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

       呵呵应该是这里出现了问题,SELECT ?x后面必须有个空格,即改为 "SELECT ?X "

      Try it

    ----------------------------------------------
    研究描述逻辑,努力中……

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 17:19:00
     
     szm 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:46
      积分:250
      门派:XML.ORG.CN
      注册:2008/11/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给szm发送一个短消息 把szm加入好友 查看szm的个人资料 搜索szm在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看szm的博客3
    发贴心情 
    的确是的,非常感谢楼上的。
    另:1.如果想把结果直接打印在页面上该怎么做呢?
          2.我现在又遇到一个新问题,那就是在检索实例的数据属性时,只能出现这个属性的值的类型,而不是值。举个例子说:我查找一个叫“张三”的人的身高值,希望它的结果是175cm,可是最终得到的结果却是string,就是他返回的是身高这个值的类型是string型的,不晓得为什么?
    望大家帮忙,谢谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 19:25:00
     
     yayatu 美女呀,离线,快来找我吧!双子座1981-6-1
      
      
      
      威望:1
      等级:大三暑假(2个月背完了红宝书)(贵宾)
      文章:134
      积分:965
      门派:XML.ORG.CN
      注册:2004/7/6

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

    1.如果想把结果直接打印在页面上该怎么做呢?
       页面? web页面吗?
    2. 请贴出你的查询语句。再分析问题

    ----------------------------------------------
    研究描述逻辑,努力中……

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 19:34:00
     
     szm 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:46
      积分:250
      门派:XML.ORG.CN
      注册:2008/11/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给szm发送一个短消息 把szm加入好友 查看szm的个人资料 搜索szm在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看szm的博客5
    发贴心情 
    不好意思,是这样的,代码总体和前面是一样的,就是select那段不同,是这样的:
    String queryString=
    "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>"+
    "PREFIX owl:<http://www.w3.org/2002/07/owl#>"+
    "PREFIX eg:<http://www.owl-ontologies.com/unnamed.owl#>"+
    "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
    "PREFIX xsd:<http://www.w3.org/2001/XMLSchema#string>"+
    "SELECT ?x "+
    "WHERE {"+
    "eg:张三 eg:身高 ?x."+
    "}";
    最后的返回结果是string,而不是175cm
    页面指的是web页面。
    另:想请教一下sparql语句可以动态生成吗?就是具体的查询条件能根据用户提交来确定吗?拿我现在的举个例子就是如果“张三”这个值不是由我预先填好的,而是根据用户提交的结果来绑定的,能实现吗?
    谢谢帮助!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 20:42:00
     
     yayatu 美女呀,离线,快来找我吧!双子座1981-6-1
      
      
      
      威望:1
      等级:大三暑假(2个月背完了红宝书)(贵宾)
      文章:134
      积分:965
      门派:XML.ORG.CN
      注册:2004/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给yayatu发送一个短消息 把yayatu加入好友 查看yayatu的个人资料 搜索yayatu在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看yayatu的博客6
    发贴心情 
    1. 打印在页面上的话,你需要用一个Bean来访问查询结果,然后通过Java Bean将结果生成在页面上,这个需要JSP的技术。

    2. “身高”在你的本体里面是一个属性吗?

        你自己也可以测试,你查看关于“张三”的的全部信息,你看看有没有这样的三元组
       “张三 eg:身高 175cm”;

       如果可以你把关于张三的信息的那段RDF或者OWL代码发出来。

    3. 当然是可以动态生成的,你将为固定的变量作为参数传到函数里面,

        例如 : String name:

       那么 用name这个替换所有张三出现的地方。当然了。这里要注意Java对双引号的处理
       即为 "\ name \"  + eg:身高 +........

    ----------------------------------------------
    研究描述逻辑,努力中……

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/24 21:20:00
     
     szm 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:46
      积分:250
      门派:XML.ORG.CN
      注册:2008/11/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给szm发送一个短消息 把szm加入好友 查看szm的个人资料 搜索szm在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看szm的博客7
    发贴心情 
    1.我现在也在学习jsp,但还没太入门,关于你说的用Bean访问还不是太明白,不过我会继续学习的;
    2.“身高”在我的本体中是一个DataType Property。
       关于这段的代码如下:
      <owl:Class rdf:ID="张三">
        <rdfs:subClassOf>
          <owl:Class rdf:ID="人"/>
        </rdfs:subClassOf>
      </owl:Class>
    <owl:DatatypeProperty rdf:ID="身高">
        <rdfs:domain rdf:resource="#人"/>
        <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
    </owl:DatatypeProperty>
    <身高 rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
        >175cm</身高>
    麻烦帮我看下,另外我做了三元组的测试,有这样的:张三 eg:身高 “175cm”@en这种形式的三元组,那为什么查不到呢?是不是我的查询表达有错啊?
    3.关于动态绑定,我是定义了一个变量来接受值,然后用这个变量替代需要动态绑定的值。
    代码如下:
    String name=....(动态接受值,已测试,没有问题)
    String queryString=
    "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>"+
    "PREFIX owl:<http://www.w3.org/2002/07/owl#>"+
    "PREFIX eg:<http://www.owl-ontologies.com/unnamed.owl#>"+
    "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
    "PREFIX xsd:<http://www.w3.org/2001/XMLSchema#string>"+
    "SELECT ?x "+
    "WHERE {"+
    "?x rdfs:subClassOf " +
    name+
    "}";
    说明:我是这样理解的,应为name作为我定义的变量已经接受了值,它本身是一个变量,而不是一个字符串,所以我认为在select的语句中似乎不需要用引号了吧?那也就不需要转义了,不知道我这样说有没有错
    我这个的目的是:比如我的name接收到的值是“人”,那么检索结果就显示“人”的所有子类
    4.我现在已经能实现打印到页面了,但是查询三元组时,却报错:
    2009-6-25 10:46:09 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet jsp threw exception
    java.util.NoSuchElementException
    而我把三元关系中设定好一元,也报同样的错,但是如果设定好二元,只查其中一元,就可以正常输出,不知道是什么原因
    谢谢!

    [此贴子已经被作者于2009-6-25 11:19:35编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/25 9:42:00
     
     yayatu 美女呀,离线,快来找我吧!双子座1981-6-1
      
      
      
      威望:1
      等级:大三暑假(2个月背完了红宝书)(贵宾)
      文章:134
      积分:965
      门派:XML.ORG.CN
      注册:2004/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给yayatu发送一个短消息 把yayatu加入好友 查看yayatu的个人资料 搜索yayatu在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看yayatu的博客8
    发贴心情 
    2. 我的查询结果得到了 “175@en“  
      查询语句如下:   
      String qstr = prefixes +
            "SELECT ?h " +
            "WHERE {" +
            "ex:Jone rdf:type ex:Person . " +
            "ex:Jone ex:height ?h ." +
            "}" ;

       其中ex也就是你代码中的eg。只是一个前缀而已。 Jone是我定义的一个人的实例,对应你的张三。

       你再次检查你的查询语句吧

    3、是的
    4. 从出错信息来看,遇到了空成员异常,也就是说jsp试图去读一个为空的成员。你要检查你的jsp去结果的那段代码,你传给jsp的是几个成员,为你让jsp访问的是几个成员,只有当一致的时候,并且成员值不为空的时候,才不会出错,

    ----------------------------------------------
    研究描述逻辑,努力中……

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/25 15:46:00
     
     szm 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究C++)
      文章:46
      积分:250
      门派:XML.ORG.CN
      注册:2008/11/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给szm发送一个短消息 把szm加入好友 查看szm的个人资料 搜索szm在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看szm的博客9
    发贴心情 
    谢谢你的解答,可是我又出现了新问题,是这样的:
    1.我现在能检索出结果了。但是因为我用的不是你说的通过Bean访问结果然后输出,我暂时还不会,我用的是下面的语句:
    while(rs.hasNext()){
       QuerySolution soln=rs.nextSolution();
       String s=soln.get("x").toString();
       StringTokenizer token=new StringTokenizer(s,"#");
       token.nextToken();
       out.print(token.nextToken());
       out.print("
    ");
                    }
    问题就出来了,这样的话就只返回string,而用
    ResultSetFormatter.out(System.out,rs,query);
    就能返回
    -----------------------------------------
    | x                                     |
    =========================================
    | "175cm"@en |
    -----------------------------------------
    请问这是什么原因呢?
    另外,前一种方法能返回中文,可后一种遇到中文就乱码;还有那@en就不能删掉吗?
    2.关于动态绑定,你也接受我的说法,可是关键是在代码编写中它报错,就是报那个select中name的错,意思是这是一个不被识别的,不知道为什么
    谢谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/6/25 16:08:00
     
     yayatu 美女呀,离线,快来找我吧!双子座1981-6-1
      
      
      
      威望:1
      等级:大三暑假(2个月背完了红宝书)(贵宾)
      文章:134
      积分:965
      门派:XML.ORG.CN
      注册:2004/7/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给yayatu发送一个短消息 把yayatu加入好友 查看yayatu的个人资料 搜索yayatu在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看yayatu的博客10
    发贴心情 
    1. eclipse打印时候出现的乱码,run-run-common-console encoding- UTF8. 去掉"@"有两种方法,
       a. 在你添加身高175这个值的时候,你就不要选择任何语言。
       
       b. 程序自己处理了。JAVA对字符串的处理。google一下就知道了
    2.你需要java提供的双引号的转移。
      
       "?p ex:height \"" + name+ "\". "

    ----------------------------------------------
    研究描述逻辑,努力中……

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

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

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