以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  求助,在Java程序中调用SPARQL对中文本体进行检索  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=75399)


--  作者:shoutfish
--  发布时间:6/16/2009 9:21:00 PM

--  求助,在Java程序中调用SPARQL对中文本体进行检索
有点急,毕设在检索的最后一部分卡住了。上来怨念一下。

public class OntoQuery{
 public static void main(String[] args) throws IOException{
  //首先,通过输入获取一个检索字段
  SearchOntoSenten ss = new SearchOntoSenten();
  String inputString = null;
  inputString = ss.getStr();
  // 创建一个本体模型,此处直接对Protege生成的owl文件进行检索
  OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
  model.read("file:D:/Program Files/Protege_3.3.1/s.f.achieve/设备1.2.owl");
  // 以下根据输入的字符串创建一个查询语句
  String queryString = " PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "
   + " PREFIX xmlns:<http://www.owl-ontologies.com/unnamed.owl#> "
   + " SELECT ?x "
   + " WHERE { "
   + "    ?x rdfs:subClassOf xmlns:" + inputString  //引入之前获取的输入字段
   + " } ";
  // 创建一个查询
  Query query = QueryFactory.create(queryString);
  // 执行查询,获得结果
  QueryExecution qe = QueryExecutionFactory.create(query, model);
  ResultSet results = qe.execSelect();
  // 向控制台输出结果
  ResultSetFormatter.out(System.out, results, query);
  // 释放资源
  qe.close();
 }
}

------请在下面一行输入所需检索字段,按回车结果------
流程泵
---------------
| x           |
===============
| xmlns:鍖栧伐娴佺▼娉?|
---------------


前面是我模仿developmentWorks上的代码设计的本体检索程序。后面是我检索返回的乱码结果。
getStr()是从输入取字符串的一个方法。就是把下面“流程泵”的值赋给inputString。
对英文进行检索的时候没有问题,但是,当本体内容是中文的时候就会返回乱码。
而且,因为新版的Jena好像方法也有了很大变化,原来那些方法虽然使用起来没有问题,但是,查文档看得还是一头雾水,纠结啊纠结……就算是能够检索得到正常的结果,也还要继续研究如何把检索结果赋给字符串数组变量。


--  作者:Humphrey
--  发布时间:6/20/2009 12:13:00 PM

--  
那么您的问题就是检索结果是乱码,如何解决吗?
如果是这样,还需要您提供您所使用的工具,包括数据库的名称和版本。很可能在其中某个环节出了问题。
--  作者:jpz6311whu
--  发布时间:6/22/2009 12:31:00 PM

--  
问题可能出现在两个地方:一个是读本体库的时候,是否是按照指定编码读取?另外打印结果的时候,编码是否设置正确?
--  作者:yayatu
--  发布时间:6/24/2009 4:01:00 AM

--  
很有可能是后者,呵呵。
--  作者:shoutfish
--  发布时间:6/24/2009 4:16:00 PM

--  
用的是Eclipse3.4.2release
Jena2.5.7
本体检索还用不到数据库,只是一个用Protege3.3.1编了一个本体文件(.owl)而已。
当这个文件是英文的时候,检索结果可以出现类似“xmlns:Pizza”的结果,但是中文,就会像上面的程序运行结果一样。
打印结果的时候还不是转换成字符串输出(这个我也不知道怎么实现),而是直接调用一个打印的方法:
ResultSetFormatter.out(System.out, results, query);
建立本体的时候,都是用的utf-8,这个应该是没有问题的,文件本身可以用记事本查看的。
应该是在检索的时候出的问题,不过,对owl文件进行检索的时候,怎么设置编码呀?
--  作者:yayatu
--  发布时间:6/24/2009 5:16:00 PM

--  

   请选择Run ->Run-> Common->Console Encode ->UTF-8

   Try it


--  作者:lgpxzyb
--  发布时间:7/27/2009 10:05:00 PM

--  
如何提取得到的结果?比如想把?x的值付给程序中的变量i。
--  作者:fanwander
--  发布时间:7/30/2009 3:03:00 PM

--  
我在使用ResultSetFormatter的时候也是乱码,可以把ResultSet中的结果遍历出来,不去使用ResultSetFormatter。
--  作者:Avansky
--  发布时间:3/28/2010 11:12:00 AM

--  
楼主:你的SearchOntoSenten具体代码可以看一下吗?
--  作者:Lexxuan
--  发布时间:3/30/2010 5:13:00 AM

--  
以下是引用shoutfish在2009-6-24 16:16:00的发言:
本体检索还用不到数据库,只是一个用Protege3.3.1编了一个本体文件(.owl)而已。
当这个文件是英文的时候,检索结果可以出现类似“xmlns:Pizza”的结果,但是中文,就会像上面的程序运行结果一样。
打印结果的时候还不是转换成字符串输出(这个我也不知道怎么实现),而是直接调用一个打印的方法:
ResultSetFormatter.out(System.out, results, query);
建立本体的时候,都是用的utf-8,这个应该是没有问题的,文件本身可以用记事本查看的。


如果全英文的owl,最好先用ANSI编码格式存,UTF-8有时候会出现问题,比如用mysql持久化的时候
--  作者:Lexxuan
--  发布时间:3/30/2010 5:16:00 AM

--  
query出来的每条result用toString转存为字符串,在对字符串进行信息提取就行
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
1,642.578ms