我正在尝试使用Jena解析freebase转储文件freebase-rdf-2014-01-12-00-00.gz(25 GB)。
耶拿报道了关于不良数据的许多问题。
示例 - 150.0无效,true和false值无效
我通过在转储文件中添加十进制和true / false的双引号来解决这些问题。
但问题仍然是reported by Jena.(current - org.apache.jena.riot.RiotException: [line: 161083, col: 110] Illegal object: [MINUS])
有没有办法预处理这些数据,这样我就不必一个一个地解决每个问题。 我的Java代码:
// Open TDB dataset
String directory = "D:/test_dump";
Dataset dataset = TDBFactory.createDataset(directory);
// Assume we want the default model, or we could get a named model here
Model tdb = dataset.getDefaultModel();
// Read the input file - only needs to be done once
String source = "D:/test_dump/fixed-freebase-second-rdf.gz";
FileManager.get().readModel( tdb, source, "N-TRIPLES" );
答案 0 :(得分:4)
数据采用Turtle格式,而不是N-Triples。他们使用各种Turtle缩写(例如true
为"true"^^xsd:boolean
或-27
为"-27"^^xsd:integer
。
可能仍然存在错误,因为它们的转储也包含非法语法,例如在前缀名称中使用$
而没有必要的\
在事物周围添加引号更改 RDF。
答案 1 :(得分:2)
注意:这是answers.semanticweb.com问题的答案副本,Does the Freebase RDF dump conform to the w3 n-triples spec?简短的回答是数据是在Turtle序列化中,而不是N-Triples。 Turtle支持各种缩写,例如true
"true"^^xsd:boolean
。
即使在Data Dumps的示例数据中,也存在错误的N-Triples:
<http://rdf.freebase.com/ns/g.11vjz1ynm> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 4.5 .
看起来他们的数据更像是Notation 3(N3)或Turtle格式而不是N-Triples。事实上,2013年8月29日来自Shawn Simister的this post on the freebase-discuss说(重点补充):
我一直在研究新版本的 Freebase RDF转储哪个会 解决许多问题 自从我们刚开始以来被发现 将数据发布为RDF。 ... 这些转储的最大变化是 格式已切换到 来自海龟的N-Triples。在实践中 这是一个非常小的改变 N-Triples是Turtle的一个子集 遵循相同的每行三重奏 我们现在拥有的格式。
A later post(2013年10月31日)触及布尔问题:
嗯,是的,看来这是一个 错误。龟支持真假 相当于“true”^^ xsd:boolean和 “false”^^ xsd:boolean但即便如此 N-Triples是Turtle的一个子集 不支持简化的布尔值 语法。
值得阅读更多该主题。但是有点令人沮丧,因为当人们写下“你可以使用”真实“这样的东西时,”不清楚它们是true
还是"true"
。听起来有些人实际上并不关心有效的RDF,或者无类型的普通文字"true"
和布尔类型的文字"true"^^xsd:boolean
之间的区别可以缩写为{{1} }。无论如何,简短的回答看起来像是“使用Turtle或N3解析器。”