librdf raptor处理对象中的整数值

时间:2015-02-07 07:05:21

标签: c++ rdf

当ntriples对象中存在整数值时出错。我怎样才能直接得到整数值?而不是一个错误。谢谢。

详细信息:

  1. rdf triple

    <http://rdf.freebase.com/ns/g.124x8gtbc> <http://rdf.freebase.com/ns/measurement_unit.dated_percentage.rate> 1.27 .

  2. 以下是我的代码。

    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);
    }
    

1 个答案:

答案 0 :(得分:0)

问题是您的数据无效NTriples,因此libraptor在拒绝它时非常正确。您的数据片段使用称为普通文字的语法压缩,这在NTriples中无效。

此压缩实际上来自Turtle格式(这是NTriples的超集),因此您需要将数据解析为Turtle。

所以不是这一行:

rdf_parser = raptor_new_parser(world, "ntriples");

使用此行:

rdf_parser = raptor_new_parser(world, "turtle");

请注意,Freebase数据因包含大量无效数据而臭名昭着,因此即使进行此更改,您仍可能会遇到错误。