Sesame 2.7无法识别RDF Literal

时间:2013-05-14 02:49:07

标签: rdf semantic-web sesame rdfs rdfstore

我在使用Sesame 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>

当我将其提交给芝麻时,会出现以下错误:

  

'测试'无法识别,无法通过数据类型http://www.w3.org/2000/01/rdf-schema#Literal

进行验证

以前的Sesame版本(版本2.6.9)运行良好。但是现在,在更新之后,Sesame 2.7无法识别它,我找不到原因。有人可以猜测发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

在旧版本的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);