以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (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=74631)


--  作者:liych05
--  发布时间:5/4/2009 1:05:00 PM

--  [原创]如何用Jena创建一个完整的OWL文件?
一个完整的OWL文件包含以下几部分:
1、<?xml version="1.0"?>
2、<!DOCTYPE rdf:RDF [
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
  .....
]>这一部分也可以没有

3、正文部分
<rdf:RDF
    xmlns:rdf="&rdf;"
    xmlns:owl="&owl;"
    xmlns:xsd="&xsd;"
    xmlns:rdfs="&rdfs;"
    xml:base="http://example.org.cn/" >
...................
</rdf:RDF>

可是当我们用OntModel对象来实现的时候,最后生成的文件只有第三3(正文部分)。程序如下:
OntModel ont = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null);
FileOutputStream out1 = new FileOutputStream("./foo.owl");
ont.write(out1,"RDF/XML","http://example");

生成的foo.owl文件如下:
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" >
</rdf:RDF>

由上看,Model的write方法是没有办法设置第1部分(xml编码格式)和第2部分。而且,xml:base属性在OntModel中是无法设置的。setNsPrefix只能设置xmlns下的属性。

但是RDFWriter类却可以做这样的工作。
OntModel marray = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null);
RDFWriter rdfwriter = marray.getWriter();
rdfwriter.setProperty("showXmlDeclaration","true");
rdfwriter.setProperty("showDoctypeDeclaration","true");
rdfwriter.setProperty("xmlbase","http://example.org.cn/");
FileOutputStream out1 = new FileOutputStream("./foo.owl");
rdfwriter.write(marray, out1, "http://example.org/");

最后生成的foo.owl文件如下:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
  <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
  <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'>
  <!ENTITY owl 'http://www.w3.org/2002/07/owl#'>
  <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>]>
<rdf:RDF
    xmlns:rdf="&rdf;"
    xmlns:owl="&owl;"
    xmlns:xsd="&xsd;"
    xmlns:rdfs="&rdfs;"
    xml:base="http://example.org.cn/" >
</rdf:RDF>

但是,根据jena的文档说明,我原以为,rdfwriter.write(marray,out1, "http://example.org/"); 执行之后,会将rdfwriter所设置的所有信息都保存到OntModel对象marray中去,可是没有。当我将marray直接输出到一个本体文件中去时发现,rdfwriter好像什么也没有做过一样。我才发现OntModel始终只是一个本体模型,除了描述本体的信息,再不包含多余信息。

求救,我想用jena创建一个完整的owl文件,应该如何做?该owl文件包括xml编码说明,包括DOCTYPE声明,包括xml:base属性设置。


--  作者:风余
--  发布时间:8/27/2011 12:00:00 PM

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