【发布时间】:2014-09-06 13:24:09
【问题描述】:
我创建了一个文件系统,将文件和文件夹的元数据存储在 owl 文件中。
对于文件系统,我使用 FUSE 的 java 绑定,即 FUSE-JNA
对于 OWL,我使用的是 Jena:
最初我的文件系统运行正常,没有错误。但一段时间后,我的程序停止读取 .owl 文件并引发一些错误。错误之一如下:
我在读取 .owl 文件时遇到的错误:
SEVERE: Exception thrown: org.apache.jena.riot.RiotException: [line: 476, col: 52] The value of attribute "rdf:about" associated with an element type "File" must not contain the '<' character.
org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
org.apache.jena.riot.lang.LangRDFXML$ErrorHandlerBridge.fatalError(LangRDFXML.java:252)
com.hp.hpl.jena.rdf.arp.impl.ARPSaxErrorHandler.fatalError(ARPSaxErrorHandler.java:48)
com.hp.hpl.jena.rdf.arp.impl.XMLHandler.warning(XMLHandler.java:209)
com.hp.hpl.jena.rdf.arp.impl.XMLHandler.fatalError(XMLHandler.java:239)
org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
...
我打开我的 .owl 文件,发现 Jena 没有正确写入。在下图中,如果您看到编号 3 以蓝色突出显示的错误,它不完整,那里缺少一些代码。
其次,第二个蓝色突出显示的错误也写错了。在我的本体中是文件的属性。它应该写为编号 1 蓝色突出显示的代码。
虽然数字 1 和数字 2 代码都是由 jena 编写的。大部分 owl 代码由 Jena 正确编写,与数字 1 相似,但有时 jena 将其错误地编写为与图片中的数字 2 相似。我不知道为什么。
(要查看完整尺寸的图片,请在新标签页中打开它或将其保存在您的计算机上)
这就是我使用 jena api 写入 .owl 文件的方式:
public void setDataTypeProperty(String resourceURI, String propertyName, String propertyValue) //create new data type property. Accept four arguments: URI of resource as string, property name (i.e #hasPath), old value as string and new value as string.
{
Model model = ModelFactory.createDefaultModel();
//read model from file
InputStream in = FileManager.get().open(inputFileName);
if (in == null)
{
throw new IllegalArgumentException( "File: " + inputFileName + " not found");
}
model.read(in, "");
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Add property to Model
Resource resource = model.createResource(resourceURI);
resource.addProperty(model.createProperty(baseURI+propertyName), model.createLiteral(propertyValue));
//Writing model to file
try {
FileWriter out = new FileWriter( inputFileName );
model.write( out, "RDF/XML-ABBREV" );
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
请指导我如何修复耶拿的 2 号和 3 号蓝色突出显示的错误。
【问题讨论】:
-
文本中的突出显示很好,但图像也相当小。请将重要文本复制并粘贴到问题中。
-
您能否提供一个Minimal, Complete, and Verifiable example,我们可以使用它来重现该问题?您提供了相关代码,这很有帮助,但您能否提供一个完整的工作示例来重现此行为?
-
@JoshuaTaylor 你是正确的,文本应该出现在问题中。但是,作为一种短期解决方法,您可以(至少在 Firefox 中)右键单击图像并选择
View Image以查看更大的版本。放大后图像的分辨率足以阅读。 -
您的文本中是否有任何意外字符可能不会显示在您向我们展示的编辑器中?也许是right to left mark?
-
你有什么方法可以猜测#3 - “admi”之后缺少多少?或者它甚至可能被复制?还有 w/r/t #2:你知道它应该放在哪个文件上吗?