score:1

Accepted answer

a base uri is required because the parser says so using raptor_syntax_need_base_uri flag. it produces the error before even looking at the content in raptor_parser_parse_start().

if you know a real base uri is not needed, you can supply a dummy uri such as . instead:

librdf_uri *baseuri = librdf_new_uri(world, (const unsigned char *)".");

to enable better error reports, you should register a logger with librdf_world_set_logger() - the default logger just spits to stderr. return non-0 from the logger function to signal you handler the message yourself. example:

#include <librdf.h>

int customlogger(void *user_data, librdf_log_message *message) {
  fputs("mad custom logger: ", stderr);
  fputs(message->message, stderr);
  fputs("\n", stderr);
  return 1;
}

int main() {

  librdf_world *world = librdf_new_world();
  librdf_world_set_logger(world, /*user_data=*/ 0, customlogger);
  librdf_world_open(world);

  librdf_storage *storage = librdf_new_storage(world, "memory", null, null);
  librdf_model   *model   = librdf_new_model(world, storage, null);

  librdf_parser* parser = librdf_new_parser(world, null, "text/turtle", null);

  librdf_uri *baseuri = null;

  const char *turtle = "<http://example.com/somesubject> <http://example.com/somepredicate> <http://example.com/someobject> .";

  int error = librdf_parser_parse_string_into_model(parser, (const unsigned char *)turtle, baseuri, model);

}

running this will result in

mad custom logger: missing base uri for turtle parser

(for a real program, add some cleanup etc.)


Related Query

More Query from same tag