当ntriples的对象中存在整数值时,出现错误。如何直接获取整数值?而不是得到一个错误。谢谢。
细节:
<http://rdf.freebase.com/ns/g.124x8gtbc> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 1.27 .
遵循是我的代码。
void process_nt_file(string file_path, raptor_statement_handler pro_handler){
unsigned char *uri_string;
raptor_uri *uri, *base_uri;
raptor_parser *rdf_parser;
raptor_world *world = raptor_new_world();
rdf_parser = raptor_new_parser(world, "ntriples");
raptor_parser_set_statement_handler(rdf_parser, NULL, pro_handler);
uri_string = raptor_uri_filename_to_uri_string(file_path.c_str());
uri = raptor_new_uri(world, uri_string);
base_uri = raptor_uri_copy(uri);
time_t start_t, end_t;
time(&start_t);
raptor_parser_parse_file(rdf_parser, uri, base_uri);
time(&end_t);
double diff_time = difftime(end_t, start_t);
printf("Duration: %.2lf s", diff_time);
raptor_free_parser(rdf_parser);
}
最佳答案
问题在于您的数据不是有效的NTriples,因此libraptor
在拒绝数据时是非常正确的。您的数据片段使用的是称为普通文字的语法压缩,在NTriples中无效。
这种压缩实际上来自Turtle格式(这是NTriples的超集),因此您需要将数据解析为Turtle。
因此,代替此行:
rdf_parser = raptor_new_parser(world, "ntriples");
使用此行:
rdf_parser = raptor_new_parser(world, "turtle");
请注意,Freebase数据因包含大量无效数据而臭名昭著,因此即使进行此更改,您仍然可能会遇到错误。