我在使用芝麻2.7时遇到了一些麻烦。假设我有以下RDF文档:
<rdf:RDF xmlns:arq="http://example.com/vocab.rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<arq:Photo rdf:about="http://example.com/photo_2230.rdf">
<arq:photoName rdf:datatype="http://www.w3.org/2000/01/rdf-schema#Literal">Testing</arq:photoName>
<!-- More properties -->
...
</arq:Photo>
当我将它提交给Sesame时,出现以下错误:
"测试"未被识别,且无法验证,数据类型为http://www.w3.org/2000/01/rdf-schema#Literal
它在以前的Sesame版本(2.6.9版本)中运行良好。但是现在,在更新之后,芝麻2.7不识别它,我不知道为什么。有人能猜一下发生了什么吗?
谢谢!
在老版本的Sesame中,解析器只在遇到无法识别的数据类型时给出警告。在Sesame 2.7中,默认情况下,解析器实际上会停止并出现错误(尽管我们正在考虑在下一个更新中再次放松这一点)。因此,即使在旧版本的Sesame中,这也无法识别,当您尝试加载此数据时,您将在日志中看到警告。
这是一个无法识别的数据类型的原因是"http://www.w3.org/2000/01/rdf-schema#Literal"根本不是一个数据类型标识符。相反,它是文字类的标识符(因此是完全不同的事情)。您应该从RDF中删除这种数据类型,因为这是对数据类型机制的错误使用。
要拼出来,更改这一行:
<arq:photoName rdf:datatype="http://www.w3.org/2000/01/rdf-schema#Literal">Testing</arq:photoName>
:
<arq:photoName>Testing</arq:photoName>
除了修复数据之外,您当然还可以配置Sesame的解析器,使其不会在无效数据类型上立即失败。在编程上,这很容易通过调整连接解析器中使用的ParserConfig
来实现。
RepositoryConnection conn; // your repository connection
// set the parser used in the connection to report datatype
// verification errors but not fail on them.
conn.getParserConfig().addNonFatalError(BasicParserSettings.VERIFY_DATATYPE_VALUES);