librdf raptor имеет дело с целочисленным значением в объекте

Я получил ошибку, когда в объекте ntriples есть целочисленное значение. как я могу получить целочисленное значение напрямую? Вместо того, чтобы получить ошибку. Спасибо.

Подробности:

  1. тройной рдф

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

2

Решение

Проблема в том, что ваши данные не являются действительными NTriples так libraptor совершенно правильно, отвергая его. Ваш фрагмент данных использует синтаксическое сжатие, называемое обычными литералами, которое недопустимо в NTriples.

Это сжатие на самом деле из черепаха формат (который является супер-набором NTriples), поэтому вам нужно вместо этого проанализировать ваши данные как Turtle.

Итак, вместо этой строки:

rdf_parser = raptor_new_parser(world, "ntriples");

Используйте эту строку:

rdf_parser = raptor_new_parser(world, "turtle");

Обратите внимание, что данные Freebase печально известны тем, что содержат много недопустимых данных, поэтому даже с этим изменением вы все равно можете столкнуться с ошибками.

0

Другие решения


По вопросам рекламы [email protected]