/** * librdf_stream_write: * @stream: the stream object * @iostr: the iostream to write to * * Write a stream of triples to an iostream in a debug format. * * This prints the remaining statements of the stream to the given * #raptor_iostream in a debug format. * * Note that after this method is called the stream will be empty so * that librdf_stream_end() will always be true and * librdf_stream_next() will always return NULL. The only useful * operation is to dispose of the stream with the * librdf_free_stream() destructor. * * This method is for debugging and the format of the output should * not be relied on. In particular, when contexts are used the * result may be 4 nodes. * * Return value: non-0 on failure **/ int librdf_stream_write(librdf_stream *stream, raptor_iostream *iostr) { LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(stream, librdf_stream, 1); LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(iostr, raptor_iostream, 1); while(!librdf_stream_end(stream)) { librdf_statement* statement; librdf_node* context_node; statement = librdf_stream_get_object(stream); if(!statement) break; raptor_iostream_counted_string_write(" ", 2, iostr); if(librdf_statement_write(statement, iostr)) return 1; context_node = librdf_stream_get_context2(stream); if(context_node) { raptor_iostream_counted_string_write(" with context ", 14, iostr); librdf_node_write(context_node, iostr); } raptor_iostream_counted_string_write(". \n", 3, iostr); librdf_stream_next(stream); } return 0; }
/** * librdf_stream_print: * @stream: the stream object * @fh: the FILE stream to print to * * Print the stream. * * This prints the remaining statements of the stream to the given * file handle. Note that after this method is called the stream * will be empty so that librdf_stream_end() will always be true * and librdf_stream_next() will always return NULL. The only * useful operation is to dispose of the stream with the * librdf_free_stream() destructor. * * This method is for debugging and the format of the output should * not be relied on. * * @Deprecated: Use librdf_stream_write() to write to * #raptor_iostream which can be made to write to a string. Use a * #librdf_serializer to write proper syntax formats. * **/ void librdf_stream_print(librdf_stream *stream, FILE *fh) { raptor_iostream *iostr; if(!stream) return; iostr = raptor_new_iostream_to_file_handle(stream->world->raptor_world_ptr, fh); if(!iostr) return; while(!librdf_stream_end(stream)) { librdf_statement* statement = librdf_stream_get_object(stream); librdf_node* context_node = librdf_stream_get_context2(stream); if(!statement) break; fputs(" ", fh); librdf_statement_write(statement, iostr); if(context_node) { fputs(" with context ", fh); librdf_node_print(context_node, fh); } fputs("\n", fh); librdf_stream_next(stream); } raptor_free_iostream(iostr); }
/** * librdf_statement_print: * @statement: the statement * @fh: file handle * * Pretty print the statement to a file descriptor. * * This method is for debugging and the format of the output should * not be relied on. * **/ void librdf_statement_print(librdf_statement *statement, FILE *fh) { raptor_iostream *iostr; LIBRDF_ASSERT_OBJECT_POINTER_RETURN(statement, librdf_statement); if(!statement) return; iostr = raptor_new_iostream_to_file_handle(statement->world->raptor_world_ptr, fh); if(!iostr) return; librdf_statement_write(statement, iostr); raptor_free_iostream(iostr); }
/** * librdf_statement_to_string: * @statement: the statement * * Format the librdf_statement as a string. * * Formats the statement as a newly allocate string that must be freed by * the caller. * * @Deprecated: Use librdf_statement_write() to write to * #raptor_iostream which can be made to write to a string. Use a * #librdf_serializer to write proper syntax formats. * * Return value: the string or NULL on failure. **/ unsigned char * librdf_statement_to_string(librdf_statement *statement) { raptor_iostream* iostr; unsigned char *s; int rc; LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(statement, librdf_statement, NULL); iostr = raptor_new_iostream_to_string(statement->world->raptor_world_ptr, (void**)&s, NULL, malloc); if(!iostr) return NULL; rc = librdf_statement_write(statement, iostr); raptor_free_iostream(iostr); if(rc) { free(s); s = NULL; } return s; }
int main(int argc, char *argv[]) { librdf_statement *statement, *statement2; int size, size2; const char *program=librdf_basename((const char*)argv[0]); char *s, *buffer; librdf_world *world; raptor_iostream *iostr; world=librdf_new_world(); librdf_world_open(world); iostr = raptor_new_iostream_to_file_handle(world->raptor_world_ptr, stdout); fprintf(stdout, "%s: Creating statement\n", program); statement=librdf_new_statement(world); fprintf(stdout, "%s: Empty statement: ", program); librdf_statement_write(statement, iostr); fputs("\n", stdout); librdf_statement_set_subject(statement, librdf_new_node_from_uri_string(world, (const unsigned char*)"http://purl.org/net/dajobe/")); librdf_statement_set_predicate(statement, librdf_new_node_from_uri_string(world, (const unsigned char*)"http://purl.org/dc/elements/1.1/#Creator")); librdf_statement_set_object(statement, librdf_new_node_from_literal(world, (const unsigned char*)"Dave Beckett", NULL, 0)); fprintf(stdout, "%s: Resulting statement: ", program); librdf_statement_write(statement, iostr); fputs("\n", stdout); size = librdf_statement_encode2(world, statement, NULL, 0); fprintf(stdout, "%s: Encoding statement requires %d bytes\n", program, size); buffer=(char*)LIBRDF_MALLOC(cstring, size); fprintf(stdout, "%s: Encoding statement in buffer\n", program); size2 = librdf_statement_encode2(world, statement, (unsigned char*)buffer, size); if(size2 != size) { fprintf(stdout, "%s: Encoding statement used %d bytes, expected it to use %d\n", program, size2, size); return(1); } fprintf(stdout, "%s: Creating new statement\n", program); statement2=librdf_new_statement(world); fprintf(stdout, "%s: Decoding statement from buffer\n", program); if(!librdf_statement_decode2(world, statement2, NULL, (unsigned char*)buffer, size)) { fprintf(stdout, "%s: Decoding statement failed\n", program); return(1); } LIBRDF_FREE(cstring, buffer); fprintf(stdout, "%s: New statement is: ", program); librdf_statement_write(statement, iostr); fputs("\n", stdout); fprintf(stdout, "%s: Freeing statements\n", program); librdf_free_statement(statement2); librdf_free_statement(statement); librdf_free_world(world); /* keep gcc -Wall happy */ return(0); }
/* * librdf_parser_raptor_new_statement_handler - helper callback function for raptor RDF when a new triple is asserted * @context: context for callback * @statement: raptor_statement * * Adds the statement to the list of statements. */ static void librdf_parser_raptor_new_statement_handler(void *context, raptor_statement *rstatement) { librdf_parser_raptor_stream_context* scontext=(librdf_parser_raptor_stream_context*)context; librdf_node* node; librdf_statement* statement; librdf_world* world=scontext->pcontext->parser->world; int rc; statement=librdf_new_statement(world); if(!statement) return; if(rstatement->subject->type == RAPTOR_TERM_TYPE_BLANK) { node = librdf_new_node_from_blank_identifier(world, (const unsigned char*)rstatement->subject->value.blank.string); } else if (rstatement->subject->type == RAPTOR_TERM_TYPE_URI) { node = librdf_new_node_from_uri(world, (librdf_uri*)rstatement->subject->value.uri); } else { librdf_log(world, 0, LIBRDF_LOG_ERROR, LIBRDF_FROM_PARSER, NULL, "Unknown Raptor subject identifier type %d", rstatement->subject->type); librdf_free_statement(statement); return; } if(!node) { librdf_log(world, 0, LIBRDF_LOG_FATAL, LIBRDF_FROM_PARSER, NULL, "Cannot create subject node"); librdf_free_statement(statement); return; } librdf_statement_set_subject(statement, node); if(rstatement->predicate->type == RAPTOR_TERM_TYPE_URI) { node = librdf_new_node_from_uri(world, (librdf_uri*)rstatement->predicate->value.uri); } else { librdf_log(world, 0, LIBRDF_LOG_ERROR, LIBRDF_FROM_PARSER, NULL, "Unknown Raptor predicate identifier type %d", rstatement->predicate->type); librdf_free_statement(statement); return; } if(!node) { librdf_log(world, 0, LIBRDF_LOG_FATAL, LIBRDF_FROM_PARSER, NULL, "Cannot create predicate node"); librdf_free_statement(statement); return; } librdf_statement_set_predicate(statement, node); if(rstatement->object->type == RAPTOR_TERM_TYPE_LITERAL) { node = librdf_new_node_from_typed_literal(world, rstatement->object->value.literal.string, (const char *)rstatement->object->value.literal.language, (librdf_uri*)rstatement->object->value.literal.datatype); } else if(rstatement->object->type == RAPTOR_TERM_TYPE_BLANK) { node = librdf_new_node_from_blank_identifier(world, rstatement->object->value.blank.string); } else if(rstatement->object->type == RAPTOR_TERM_TYPE_URI) { node = librdf_new_node_from_uri(world, (librdf_uri*)rstatement->object->value.uri); } else { librdf_log(world, 0, LIBRDF_LOG_ERROR, LIBRDF_FROM_PARSER, NULL, "Unknown Raptor object identifier type %d", rstatement->object->type); librdf_free_statement(statement); return; } if(!node) { librdf_log(world, 0, LIBRDF_LOG_FATAL, LIBRDF_FROM_PARSER, NULL, "Cannot create object node"); librdf_free_statement(statement); return; } librdf_statement_set_object(statement, node); #if defined(LIBRDF_DEBUG) && LIBRDF_DEBUG > 1 if(1) { raptor_iostream *iostr; iostr = raptor_new_iostream_to_file_handle(world->raptor_world_ptr, stderr); librdf_statement_write(statement, iostr); raptor_free_iostream(iostr); } #endif if(scontext->model) { rc=librdf_model_add_statement(scontext->model, statement); librdf_free_statement(statement); } else { rc=librdf_list_add(scontext->statements, statement); if(rc) librdf_free_statement(statement); } if(rc) { librdf_log(world, 0, LIBRDF_LOG_FATAL, LIBRDF_FROM_PARSER, NULL, "Cannot add statement to model"); } }