void statement_handler(void* user_data, raptor_statement* statement) { typedef std::pair<turtle_input::triples_t*, raptor_uri*> user_data_t; user_data_t* u_data = (user_data_t*)user_data; turtle_input::triples_t* triples = u_data->first; raptor_uri* base_uri = u_data->second; raptor_term* subject = statement->subject; raptor_term* predicate = statement->predicate; raptor_term* object = statement->object; unsigned char *subject_name_w, *object_name_w, *predicate_name_w; switch (subject->type) { case RAPTOR_TERM_TYPE_URI: subject_name_w = raptor_uri_to_relative_uri_string(base_uri, subject->value.uri); break; case RAPTOR_TERM_TYPE_LITERAL: subject_name_w = subject->value.literal.string; break; case RAPTOR_TERM_TYPE_BLANK: subject_name_w = subject->value.blank.string; break; default: break; } switch (object->type) { case RAPTOR_TERM_TYPE_URI: object_name_w = raptor_uri_to_relative_uri_string(base_uri, object->value.uri); break; case RAPTOR_TERM_TYPE_LITERAL: object_name_w = object->value.literal.string; break; case RAPTOR_TERM_TYPE_BLANK: object_name_w = object->value.blank.string; break; default: break; } switch (predicate->type) { case RAPTOR_TERM_TYPE_URI: predicate_name_w = raptor_uri_to_relative_uri_string(base_uri, predicate->value.uri); break; case RAPTOR_TERM_TYPE_LITERAL: predicate_name_w = predicate->value.literal.string; break; case RAPTOR_TERM_TYPE_BLANK: predicate_name_w = predicate->value.blank.string; break; default: break; } std::stringstream subject_sstr, object_sstr, predicate_sstr; subject_sstr << subject_name_w; object_sstr << object_name_w; predicate_sstr << predicate_name_w; std::string subject_name = subject_sstr.str(); std::string object_name = object_sstr.str(); std::string predicate_name = predicate_sstr.str(); if (triples->find(subject_name) == triples->end()) (*triples)[subject_name] = turtle_input::predicates_t(); (*triples)[subject_name][predicate_name] = object_name; }
/* * raptor_rdfxmla_emit_resource_uri: * @serializer: #raptor_serializer object * @element: XML Element * @uri: URI object * @depth: depth into tree * * Emit a description of a resource using an XML Element * * Return value: non-0 on failure **/ static int raptor_rdfxmla_emit_resource_uri(raptor_serializer *serializer, raptor_xml_element *element, raptor_uri* uri, int depth) { raptor_rdfxmla_context* context = (raptor_rdfxmla_context*)serializer->context; raptor_xml_writer *xml_writer = context->xml_writer; raptor_qname **attrs; unsigned char *attr_name; unsigned char *attr_value; RAPTOR_DEBUG2("Emitting resource predicate URI %s\n", raptor_uri_as_string(uri)); attrs = RAPTOR_CALLOC(raptor_qname**, 1, sizeof(raptor_qname*)); if(!attrs) return 1; attr_name = (unsigned char *)"resource"; if(RAPTOR_OPTIONS_GET_NUMERIC(serializer, RAPTOR_OPTION_RELATIVE_URIS)) /* newly allocated string */ attr_value = raptor_uri_to_relative_uri_string(serializer->base_uri, uri); else attr_value = raptor_uri_as_string(uri); attrs[0] = raptor_new_qname_from_namespace_local_name(serializer->world, context->rdf_nspace, attr_name, attr_value); if(RAPTOR_OPTIONS_GET_NUMERIC(serializer, RAPTOR_OPTION_RELATIVE_URIS)) RAPTOR_FREE(char*, attr_value); if(!attrs[0]) { RAPTOR_FREE(qnamearray, attrs); return 1; } raptor_xml_element_set_attributes(element, attrs, 1); raptor_xml_writer_start_element(xml_writer, element); raptor_xml_writer_end_element(context->xml_writer, element); RAPTOR_DEBUG2("Emitted resource predicate URI %s\n", raptor_uri_as_string(uri)); return 0; }