示例#1
0
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;
}