以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  使用Jena修改的OWL文件无法读取?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=54819)


--  作者:topyn
--  发布时间:11/3/2007 1:19:00 AM

--  使用Jena修改的OWL文件无法读取?
用Proteg写了个本体,存为OWL格式,程序中用Jena查询都是对的,修改后就不对了。
读取代码:
              Model=model = ModelFactory.createDefaultModel();
              FileInputStream file = new FileInputStream(filePath);
               n = new InputStreamReader(file,"UTF-8");
               model.read(in, null);
               in.close();
插入实例代码:
        Resource rs=model.createResource("http://055.owl#小王");
        Property prop=model.createProperty("http://22-rdf-syntax-ns#type"); RDFNode node=model.getRDFNode(Node.create("http://055.owl#学生"));
       Statement stat=model.createStatement(rs, prop, node);
       model.add(stat);
      
      FileOutputStream file = new FileOutputStream(filePath);
      out = new OutputStreamWriter(file,"UTF-8");
      model.write(out,null,"http://055.owl");
      out.flush();
      out.close();
执行之后写入成功,新的实例也写进去了。但是再次运行程序查询的时候什么都查不到。
对比了一下文件开头少了<?xml version="1.0"?>。用程序把这句加上,还是什么都查不到。我认为是编码的问题,但不知怎么解决,请大家帮忙。谢谢。

--  作者:jpz6311whu
--  发布时间:11/3/2007 11:29:00 AM

--  
请楼主把运行前和运行后的owl传上来看看
--  作者:topyn
--  发布时间:11/3/2007 3:49:00 PM

--  


[此贴子已经被作者于2007-11-3 22:39:31编辑过]

--  作者:jpz6311whu
--  发布时间:11/3/2007 9:07:00 PM

--  
j p z 6 3 1 1 w h u @ t o m . c o m
--  作者:topyn
--  发布时间:11/3/2007 10:16:00 PM

--  
问题已解决,确实是编码的问题。看了com.hp.hpl.jena.rdf.model.Model接口,其中有一句话:It is often better to use an OutputStream rather than a Writer, since this will avoid character encoding errors.
就是说OutputStream比Writer好用,因为能够避免编码错误问题。所以我取消了源码中out = new OutputStreamWriter(file,"UTF-8"),直接使用FileOutputStream写。
代码如下:
     FileOutputStream file = new FileOutputStream(filepath);
     model.write(file, "RDF/XML-ABBREV");
     file.close();
希望给其他朋友提个醒,这个问题折腾了我好几天,呵呵。
--  作者:topyn
--  发布时间:11/3/2007 10:37:00 PM

--  
protege owl api也可实现Owl文件的读写,代码如下:
读取:
       FileInputStream file= new FileInputStream(filePath);
       Reader in = new InputStreamReader(file,"UTF-8");
       OWLModel  owlModel=ProtegeOWL.createJenaOWLModelFromReader(in);
       model=owlModel.getJenaModel();
       in.close();
写入:
       FileOutputStream outFile= new FileOutputStream(filepath);
   Writer out = new OutputStreamWriter(outFile,"UTF-8");
   OWLModelWriter omw = new OWLModelWriter(owlModel,  
   owlModel.getTripleStoreModel().getActiveTripleStore(), out);
   omw.write();
   out.close();
不过,这样写入以后,本体中的有些汉字变成编码了,不便于人阅读。


--  作者:liqu121982
--  发布时间:11/5/2007 11:39:00 AM

--  
hehe
--  作者:zhenzixiong
--  发布时间:7/10/2008 1:56:00 PM

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