2

我正在尝试创建一个新的本体,并在一些操作后保存它。它创建得很好,我在处理类和其他事情时没有问题,但是当我尝试将它保存到本地文件时给了我一个错误!我的代码是:

//create a new ontology
SOURCE = "http://www.w3.org/2002/07/owl#";
NS = SOURCE + "#";
ontology = ModelFactory.createOntologyModel();
ontology.read( SOURCE, "RDF/XML" );
///////some actions
//save the ontology
try {
        File file= new File("Log.owl");
        ontology.write(new FileOutputStream(file));

    } 
    catch (IOException e) {
        e.printStackTrace();
    }

错误是:

Exception in thread "main" com.hp.hpl.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <d> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing.
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.checkURI(BaseXMLWriter.java:829)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.xmlnsDecl(BaseXMLWriter.java:348)
at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFHeader(Basic.java:56)
at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:39)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:500)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:472)
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:458)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:271)
at com.hp.hpl.jena.ontology.impl.OntModelImpl.write(OntModelImpl.java:2552)

我知道“http://www.w3.org/2002/07/owl#”的格式是 TURTLE,但我想在 RDF/XML 中有本体,我不知道该写什么而不是该链接。我尝试了不同的链接,但每次它都给了我另一个错误。SOURCE 应该是一个真正的链接吗?

感谢您的回复!

4

3 回答 3

2

最后,我设法找到了解决方案!这比我想象的要容易!我的问题在于创建类。我的代码是:

ontology.createClass(word);

我不得不写:

ontology.createClass(NS+word);

一块蛋糕!

于 2012-09-22T10:47:11.047 回答
1

尝试以 Turtle 的形式阅读 - 输出将是 RDF/XML(但您想使用更简洁的 RDF/XML-ABBREV。在内部,它以三元组的形式保存,而不是在某些具体语法中读取。

于 2012-09-13T12:44:21.617 回答
0

您需要使用 format 来阅读本体"TURTLE",而不是"RDF/XML". 您可以在编写时选择不同的格式,请参阅Jena Model javadoc了解不同版本的write()方法。选择一个您可以指定输出格式 ( lang) 的位置并"RDF/XML-ABBREV"按照 AndyS 的说明使用。

"d"例外情况是因为您在只允许使用完整绝对 URI 的位置(例如 )中使用了简单字符串(显然是"http://example.com/mydata#d")。也许在打电话给createResource()?

于 2012-09-13T13:27:38.583 回答