以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  jena加载含中文的本体文件乱码问题的一个解决办法  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=33181)


--  作者:jiexincao
--  发布时间:5/27/2006 9:46:00 PM

--  jena加载含中文的本体文件乱码问题的一个解决办法
以前一直有人问jena读入本体的乱码问题,似乎版上还没有明确的写出解决方法。下面是我解决这个问题的代码片断:

FileInputStream file = new FileInputStream("test.owl");
InputStreamReader in = new InputStreamReader(file, "UTF-8");
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
in.close();

究其原因应该是文件中的编码为unicode,java默认的编码是gb2312(当然是指我们的简体中文版操作系统),所以读入文件的时候指定编码就可以了。

另外一种解决方法是在protege的菜单code中选择show RDF/OWL source code,然后把这些code贴到一个文件(test.owl)中,然后使用一般的方法就可以读了,示例代码如下:

BufferedReader in=new BufferedReader(new FileReader("test.owl"));
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
in.close();

不过这个方法有点“丑陋”——汉字在文件中全部变成其对应的unicode编码,只能通过程序读了。所以建议直接使用上面一种。

如果有其他什么解决方法,建议大家也贴上来。


--  作者:badguy_tj
--  发布时间:5/28/2006 9:48:00 AM

--  


--  作者:happy++
--  发布时间:5/28/2006 12:03:00 PM

--  
支持
--  作者:wyf_aaa
--  发布时间:5/28/2006 3:00:00 PM

--  
不错!
--  作者:Green_blue
--  发布时间:6/15/2006 8:58:00 PM

--  
我用了你的第一个方法怎么不啊, 还是有错误, 操作系统是windows Server 2003,开发环境是Eclipse,是什么原因?

--  作者:Green_blue
--  发布时间:6/15/2006 9:01:00 PM

--  
出现的错误:
WARN [main] (RDFDefaultErrorHandler.java:36) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 7 column 43): {W124} Non-ascii characters in a namespace URI may not be completely portable: <http://example.org/schemas/tongxin/schemas/???#>. Resulting RDF URI references are legal.
WARN [main] (RDFDefaultErrorHandler.java:36) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 7 column 43): {W124} Non-ascii characters in a namespace URI may not be completely portable: <http://example.org/schemas/tongxin/schemas/???#>. Resulting RDF URI references are legal.
ERROR [main] (RDFDefaultErrorHandler.java:40) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 9 column 40): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 15 column 42): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 21 column 46): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 27 column 44): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:44) - file:///F:/yyx/%E7%A8%8B%E5%BA%8F/mddm_rdfstore_db/(line 30 column 95): An invalid XML character (Unicode: 0xde64) was found in the element content of the document.
Exception: com.hp.hpl.jena.shared.JenaException: rethrew: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xde64) was found in the element content of the document.
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xde64) was found in the element content of the document.
 at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
 at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
 at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
 at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
 at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
 at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
 at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
 at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:106)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:197)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:184)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:222)
 at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:187)
 at com.mddm_rdfstore_db.store.RDFStore1.parser(RDFStore1.java:103)
 at com.mddm_rdfstore_db.store.RDFStore1.main(RDFStore1.java:489)
com.hp.hpl.jena.shared.JenaException: rethrew: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xde64) was found in the element content of the document.
 at com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler.fatalError(RDFDefaultErrorHandler.java:45)
 at com.hp.hpl.jena.rdf.arp.impl.ARPSaxErrorHandler.fatalError(ARPSaxErrorHandler.java:35)
 at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.warning(XMLHandler.java:212)
 at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.fatalError(XMLHandler.java:239)
 at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
 at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
 at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
 at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
 at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
 at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
 at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
 at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:106)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:197)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:184)
 at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:222)
 at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:187)
 at com.mddm_rdfstore_db.store.RDFStore1.parser(RDFStore1.java:103)
 at com.mddm_rdfstore_db.store.RDFStore1.main(RDFStore1.java:489)
Caused by: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xde64) was found in the element content of the document.
 at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 ... 17 more
--  作者:homkee
--  发布时间:6/15/2006 10:24:00 PM

--  
以下是引用jiexincao在2006-5-27 21:46:00的发言:
以前一直有人问jena读入本体的乱码问题,似乎版上还没有明确的写出解决方法。下面是我解决这个问题的代码片断:

FileInputStream file = new FileInputStream("test.owl");
InputStreamReader in = new InputStreamReader(file, "UTF-8");
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
in.close();

究其原因应该是文件中的编码为unicode,java默认的编码是gb2312(当然是指我们的简体中文版操作系统),所以读入文件的时候指定编码就可以了。

另外一种解决方法是在protege的菜单code中选择show RDF/OWL source code,然后把这些code贴到一个文件(test.owl)中,然后使用一般的方法就可以读了,示例代码如下:

BufferedReader in=new BufferedReader(new FileReader("test.owl"));
Model model = ModelFactory.createDefaultModel();
model.read(in, null);
in.close();

不过这个方法有点“丑陋”——汉字在文件中全部变成其对应的unicode编码,只能通过程序读了。所以建议直接使用上面一种。

如果有其他什么解决方法,建议大家也贴


  
从Protege 3.1 的file-> export to format 可以直接输出 owl文件,可以不那么“丑陋”。


--  作者:jiexincao
--  发布时间:6/15/2006 10:52:00 PM

--  
to 5楼,你说的问题我也不是很清楚,要不你把你的owl文件贴上来,我来试试能不能找到出问题的地方
--  作者:Green_blue
--  发布时间:6/18/2006 9:46:00 AM

--  
我解析的是RDF文件:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:tg="http://example.org/schemas/tongxin/schemas/自动#"
xml:base="http://example.org/tongxin/自动">

<rdf:Description rdf:resource="#自动化">
  <tg:Englishname>automation</tg:Englishname>
  <tg:explain>采用自动控制、自动监测、自动调整装置来操纵设备,完成生产、管理过程或其它所需的功能。</tg:explain>
  <tg:category>19B</tg:category>
</rdf:Description>

<rdf:Description rdf:resource="#办公自动化">
  <tg:equate>办公室自动化、OA</tg:equate>
  <tg:Englishname>office automation</tg:Englishname>
  <tg:explain>以管理科学为前提,以行为学为主导,以系统科学为理论基础,综合运用电子计算机及通信技术而形成的一门办公业务自动化处理的综合技术。</tg:explain>
</rdf:Description>

<rdf:Description rdf:resource="#情报处理自动化">
  <tg:equate>自动化情报处理</tg:equate>
  <tg:Englishname>自动化情报处理</tg:Englishname>
  <tg:explain>利用计算机和其它有关设备,实现对情报信息收集综合、分类、辨别、存储、更新、检索和复制的自动化。</tg:explain>
</rdf:Description>

<rdf:Description rdf:resource="#图书馆自动化">
  <tg:equate>电子图书馆</tg:equate>
  <tg:Englishname>library automation</tg:Englishname>
  <tg:explain>以电子计算机系统为基础,在程序自动控制下,使图书馆中各项业务操作系统化、数据处理自动化、编目分类标准化、管理工作自动化、实现联机检索和数据传输网络化,以达到资源共享和充分发挥图书馆效益的目的。</tg:explain>
</rdf:Description>

<rdf:Description rdf:resource="#业务管理自动化">
  <tg:equate>自动化业务管理</tg:equate>
  <tg:Englishname>service management automation</tg:Englishname>
  <tg:explain>在各类业务部门中,综合运用计算机技术、通信技术、系统科学、行为科学等处理数量庞大且结构不明确的工作,以实现业务管理的自动化。</tg:explain>
</rdf:Description>
</rdf:RDF>

能不能把你解析成功的OWL文件或者RDF文件给我传几个,我也试试, 我用的操作系统是windows server 2003,Eclipse3.1环境下开发,与这些有关系吗?
谢谢了搂主!yyxsj_2008@yahoo.com


--  作者:jiexincao
--  发布时间:6/18/2006 10:43:00 PM

--  
我把你的文件内容拷到文本文件中,保存之后编码问题解决了。

但仍然有提示信息:
WARN [main] (RDFDefaultErrorHandler.java:36) - (line 6 column 42): {W124} Non-ascii characters in a namespace URI may not be completely portable: <http://example.org/schemas/tongxin/schemas/自动#>. Resulting RDF URI references are legal.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 8 column 38): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 14 column 40): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 20 column 42): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 26 column 41): {E201} rdf:resource not allowed as attribute here.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 32 column 42): {E201} rdf:resource not allowed as attribute here.
OK
所以你的里面除了编码问题还有一些RDF的语法问题。不过我的RDF 学的半生不熟,熟悉的快来帮忙啊!


--  作者:Green_blue
--  发布时间:6/19/2006 7:39:00 AM

--  
只要解决编码问题就好办了,因为太长了,只是截了一部分,所以可能会出现警告错误,谢谢楼主了,你用的是你上面的那段代码吗?我是保存成 .rdf格式,保存成文本本件就可以吗?
--  作者:Green_blue
--  发布时间:6/21/2006 9:09:00 AM

--  
楼主能不能给我发几个中文本体?yyxsj_2008@yahoo.com
--  作者:jiexincao
--  发布时间:6/21/2006 12:11:00 PM

--  
就是那段代码。

我这里唯一的一个中文的本体里有一些数据不便公开,所以……


--  作者:Green_blue
--  发布时间:6/22/2006 7:15:00 PM

--  
哦,谢谢楼主了
--  作者:fuyudong
--  发布时间:7/2/2006 4:48:00 PM

--  
还没出过这个问题,呵呵!
--  作者:trustyou
--  发布时间:8/9/2006 11:43:00 AM

--  
我想问问楼主,我想在Jena中写进中文,让它生成。rdf文档,但是输出的是乱码,请问怎么解决?代码如下:
static Model model = ModelFactory.createDefaultModel();
static Resource 自主感知 = model.createResource(baseURI+"/自主感知#").
                          addProperty(DC.description,model.createResource().addProperty(Q,c)).
                          addProperty(creator,"张三").
                          addProperty(createdata,"2006-02-20");
model.write(System.out,"RDF/XML-ABBREV");
写出的中文字符是乱码,请帮帮我,谢谢。
--  作者:w.g.xjtu
--  发布时间:8/22/2009 5:23:00 PM

--  求:Jena使用中文材料
请问楼主有Jena的中文使用手册或之类的材料可以分享一下吗?
--  作者:admin
--  发布时间:8/22/2009 10:05:00 PM

--  
以下是引用w.g.xjtu在2009-8-22 17:23:00的发言:
请问楼主有Jena的中文使用手册或之类的材料可以分享一下吗?

这个没有


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