diff options
author | Dave Beckett <dave@dajobe.org> | 2001-07-22 22:56:16 +0000 |
---|---|---|
committer | Dave Beckett <dave@dajobe.org> | 2001-07-22 22:56:16 +0000 |
commit | 3b709d9cc3f56502f2910dc041fe0ce2f49cdea8 (patch) | |
tree | afa501504b0277b28d474e6c1c8637ad24e8349a | |
parent | c19dea92c9911a1391399134137c055dde26fccc (diff) | |
download | raptor-3b709d9cc3f56502f2910dc041fe0ce2f49cdea8.tar.gz |
(raptor_print_statement_as_ntriples): Added.
(raptor_make_uri_from_id): No longer uses base_uri. Probably need
to do this differently later.
Throughout - always store uri_source in parent when copying uris up.
Fix some mistakes in uri_source tracking.
-rw-r--r-- | src/raptor_general.c | 109 | ||||
-rw-r--r-- | src/raptor_parse.c | 109 | ||||
-rw-r--r-- | src/raptor_rdfxml.c | 109 |
3 files changed, 207 insertions, 120 deletions
diff --git a/src/raptor_general.c b/src/raptor_general.c index c9e1ddb1..2c46ea2d 100644 --- a/src/raptor_general.c +++ b/src/raptor_general.c @@ -2399,11 +2399,19 @@ raptor_generate_statement(raptor_parser *rdf_parser, raptor_statement *statement=&rdf_parser->statement; statement->subject=subject; - statement->subject_type=subject_type; + if(subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->subject_type=RAPTOR_SUBJECT_TYPE_ANONYMOUS; + else + statement->subject_type=subject_type; + statement->predicate=predicate; statement->predicate_type=predicate_type; + statement->object=object; - statement->object_type=object_type; + if(object_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->object_type=RAPTOR_OBJECT_TYPE_ANONYMOUS; + else + statement->object_type=object_type; #ifdef RAPTOR_DEBUG fprintf(stderr, "raptor_generate_statement: Generating statement: "); @@ -2531,6 +2539,41 @@ raptor_print_statement(const raptor_statement * const statement, FILE *stream) } +void +raptor_print_statement_as_ntriples(const raptor_statement * statement, + FILE *stream) +{ + if(statement->subject_type == RAPTOR_SUBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->subject); + else + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->subject)); + fputc(' ', stream); + + if(statement->predicate_type == RAPTOR_PREDICATE_TYPE_ORDINAL) + fprintf(stream, "<http://www.w3.org/1999/02/22-rdf-syntax-ns#_%d>", + *((int*)statement->predicate)); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->predicate)); + fputc(' ', stream); + + if(statement->object_type == RAPTOR_OBJECT_TYPE_LITERAL || + statement->object_type == RAPTOR_OBJECT_TYPE_XML_LITERAL) + fprintf(stream, "\"%s\"", (const char*)statement->object); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_XML_NAME) + fputs((const char*)statement->object, stream); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->object); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->object)); + + fputs(" .", stream); +} + + + static const char * raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) @@ -2553,7 +2596,7 @@ raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) static raptor_uri* -raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) +raptor_make_uri_from_id(raptor_parser *rdf_parser, const char *id) { #ifdef LIBRDF_INTERNAL librdf_uri *new_uri; @@ -2565,9 +2608,7 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) #endif #if defined(RAPTOR_DEBUG) && RAPTOR_DEBUG > 1 - LIBRDF_DEBUG3(raptor_make_uri_from_id, - "Using base URI %s and ID %s\n", - base_uri, id); + LIBRDF_DEBUG2(raptor_make_uri_from_id, "Using ID %s\n", id); #endif #ifdef LIBRDF_INTERNAL @@ -2578,15 +2619,15 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) return NULL; *local_name='#'; strcpy(local_name+1, id); - new_uri=librdf_new_uri_from_uri_local_name(base_uri, local_name); + new_uri=librdf_new_uri(local_name); LIBRDF_FREE(cstring, local_name); return new_uri; #else - len=strlen(base_uri)+1+strlen(id)+1; + len=strlen(id)+1; new_uri=(char*)LIBRDF_MALLOC(cstring, len); if(!new_uri) return NULL; - sprintf(new_uri, "%s#%s", base_uri, id); + strncpy(new_uri, id, len); return new_uri; #endif } @@ -2934,7 +2975,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_type=RAPTOR_SUBJECT_TYPE_RESOURCE; element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->rdf_attr[RDF_ATTR_about]) { @@ -2952,13 +2993,10 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2966,7 +3004,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2978,7 +3016,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, */ if (state == RAPTOR_STATE_PARSETYPE_DAML_COLLECTION) { const char * idList = raptor_generate_id(rdf_parser, 0); - const char * uriList = raptor_make_uri_from_id(rdf_parser->base_uri, idList); + const char * uriList = raptor_make_uri_from_id(rdf_parser, idList); LIBRDF_FREE(cstring, idList); /* <uriList> rdf:type daml:List */ @@ -3049,10 +3087,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } } @@ -3111,18 +3146,15 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3134,10 +3166,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } @@ -3265,7 +3294,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) @@ -3362,7 +3391,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) { @@ -3390,7 +3419,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } #endif @@ -3406,7 +3435,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, * this bagID */ if(element->bag_id) { - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3657,7 +3686,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, } else { char *object_id=(char*)raptor_generate_id(rdf_parser, 0); if(object_id) { - element->object_uri=raptor_make_uri_from_id(rdf_parser->base_uri, + element->object_uri=raptor_make_uri_from_id(rdf_parser, (const char*)object_id); element->object_uri_source=RAPTOR_URI_SOURCE_GENERATED; element->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; @@ -3692,7 +3721,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3703,7 +3732,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_ELEMENT, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else { @@ -3726,7 +3755,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3737,7 +3766,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); break; diff --git a/src/raptor_parse.c b/src/raptor_parse.c index c9e1ddb1..2c46ea2d 100644 --- a/src/raptor_parse.c +++ b/src/raptor_parse.c @@ -2399,11 +2399,19 @@ raptor_generate_statement(raptor_parser *rdf_parser, raptor_statement *statement=&rdf_parser->statement; statement->subject=subject; - statement->subject_type=subject_type; + if(subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->subject_type=RAPTOR_SUBJECT_TYPE_ANONYMOUS; + else + statement->subject_type=subject_type; + statement->predicate=predicate; statement->predicate_type=predicate_type; + statement->object=object; - statement->object_type=object_type; + if(object_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->object_type=RAPTOR_OBJECT_TYPE_ANONYMOUS; + else + statement->object_type=object_type; #ifdef RAPTOR_DEBUG fprintf(stderr, "raptor_generate_statement: Generating statement: "); @@ -2531,6 +2539,41 @@ raptor_print_statement(const raptor_statement * const statement, FILE *stream) } +void +raptor_print_statement_as_ntriples(const raptor_statement * statement, + FILE *stream) +{ + if(statement->subject_type == RAPTOR_SUBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->subject); + else + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->subject)); + fputc(' ', stream); + + if(statement->predicate_type == RAPTOR_PREDICATE_TYPE_ORDINAL) + fprintf(stream, "<http://www.w3.org/1999/02/22-rdf-syntax-ns#_%d>", + *((int*)statement->predicate)); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->predicate)); + fputc(' ', stream); + + if(statement->object_type == RAPTOR_OBJECT_TYPE_LITERAL || + statement->object_type == RAPTOR_OBJECT_TYPE_XML_LITERAL) + fprintf(stream, "\"%s\"", (const char*)statement->object); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_XML_NAME) + fputs((const char*)statement->object, stream); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->object); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->object)); + + fputs(" .", stream); +} + + + static const char * raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) @@ -2553,7 +2596,7 @@ raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) static raptor_uri* -raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) +raptor_make_uri_from_id(raptor_parser *rdf_parser, const char *id) { #ifdef LIBRDF_INTERNAL librdf_uri *new_uri; @@ -2565,9 +2608,7 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) #endif #if defined(RAPTOR_DEBUG) && RAPTOR_DEBUG > 1 - LIBRDF_DEBUG3(raptor_make_uri_from_id, - "Using base URI %s and ID %s\n", - base_uri, id); + LIBRDF_DEBUG2(raptor_make_uri_from_id, "Using ID %s\n", id); #endif #ifdef LIBRDF_INTERNAL @@ -2578,15 +2619,15 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) return NULL; *local_name='#'; strcpy(local_name+1, id); - new_uri=librdf_new_uri_from_uri_local_name(base_uri, local_name); + new_uri=librdf_new_uri(local_name); LIBRDF_FREE(cstring, local_name); return new_uri; #else - len=strlen(base_uri)+1+strlen(id)+1; + len=strlen(id)+1; new_uri=(char*)LIBRDF_MALLOC(cstring, len); if(!new_uri) return NULL; - sprintf(new_uri, "%s#%s", base_uri, id); + strncpy(new_uri, id, len); return new_uri; #endif } @@ -2934,7 +2975,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_type=RAPTOR_SUBJECT_TYPE_RESOURCE; element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->rdf_attr[RDF_ATTR_about]) { @@ -2952,13 +2993,10 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2966,7 +3004,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2978,7 +3016,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, */ if (state == RAPTOR_STATE_PARSETYPE_DAML_COLLECTION) { const char * idList = raptor_generate_id(rdf_parser, 0); - const char * uriList = raptor_make_uri_from_id(rdf_parser->base_uri, idList); + const char * uriList = raptor_make_uri_from_id(rdf_parser, idList); LIBRDF_FREE(cstring, idList); /* <uriList> rdf:type daml:List */ @@ -3049,10 +3087,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } } @@ -3111,18 +3146,15 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3134,10 +3166,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } @@ -3265,7 +3294,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) @@ -3362,7 +3391,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) { @@ -3390,7 +3419,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } #endif @@ -3406,7 +3435,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, * this bagID */ if(element->bag_id) { - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3657,7 +3686,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, } else { char *object_id=(char*)raptor_generate_id(rdf_parser, 0); if(object_id) { - element->object_uri=raptor_make_uri_from_id(rdf_parser->base_uri, + element->object_uri=raptor_make_uri_from_id(rdf_parser, (const char*)object_id); element->object_uri_source=RAPTOR_URI_SOURCE_GENERATED; element->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; @@ -3692,7 +3721,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3703,7 +3732,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_ELEMENT, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else { @@ -3726,7 +3755,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3737,7 +3766,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); break; diff --git a/src/raptor_rdfxml.c b/src/raptor_rdfxml.c index c9e1ddb1..2c46ea2d 100644 --- a/src/raptor_rdfxml.c +++ b/src/raptor_rdfxml.c @@ -2399,11 +2399,19 @@ raptor_generate_statement(raptor_parser *rdf_parser, raptor_statement *statement=&rdf_parser->statement; statement->subject=subject; - statement->subject_type=subject_type; + if(subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->subject_type=RAPTOR_SUBJECT_TYPE_ANONYMOUS; + else + statement->subject_type=subject_type; + statement->predicate=predicate; statement->predicate_type=predicate_type; + statement->object=object; - statement->object_type=object_type; + if(object_uri_source == RAPTOR_URI_SOURCE_GENERATED) + statement->object_type=RAPTOR_OBJECT_TYPE_ANONYMOUS; + else + statement->object_type=object_type; #ifdef RAPTOR_DEBUG fprintf(stderr, "raptor_generate_statement: Generating statement: "); @@ -2531,6 +2539,41 @@ raptor_print_statement(const raptor_statement * const statement, FILE *stream) } +void +raptor_print_statement_as_ntriples(const raptor_statement * statement, + FILE *stream) +{ + if(statement->subject_type == RAPTOR_SUBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->subject); + else + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->subject)); + fputc(' ', stream); + + if(statement->predicate_type == RAPTOR_PREDICATE_TYPE_ORDINAL) + fprintf(stream, "<http://www.w3.org/1999/02/22-rdf-syntax-ns#_%d>", + *((int*)statement->predicate)); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->predicate)); + fputc(' ', stream); + + if(statement->object_type == RAPTOR_OBJECT_TYPE_LITERAL || + statement->object_type == RAPTOR_OBJECT_TYPE_XML_LITERAL) + fprintf(stream, "\"%s\"", (const char*)statement->object); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_XML_NAME) + fputs((const char*)statement->object, stream); + else if(statement->object_type == RAPTOR_OBJECT_TYPE_ANONYMOUS) + fprintf(stream, "_:%s", (const char*)statement->object); + else /* must be URI */ + fprintf(stream, "<%s>", + RAPTOR_URI_AS_STRING((raptor_uri*)statement->object)); + + fputs(" .", stream); +} + + + static const char * raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) @@ -2553,7 +2596,7 @@ raptor_generate_id(raptor_parser *rdf_parser, const int id_for_bag) static raptor_uri* -raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) +raptor_make_uri_from_id(raptor_parser *rdf_parser, const char *id) { #ifdef LIBRDF_INTERNAL librdf_uri *new_uri; @@ -2565,9 +2608,7 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) #endif #if defined(RAPTOR_DEBUG) && RAPTOR_DEBUG > 1 - LIBRDF_DEBUG3(raptor_make_uri_from_id, - "Using base URI %s and ID %s\n", - base_uri, id); + LIBRDF_DEBUG2(raptor_make_uri_from_id, "Using ID %s\n", id); #endif #ifdef LIBRDF_INTERNAL @@ -2578,15 +2619,15 @@ raptor_make_uri_from_id(raptor_uri *base_uri, const char *id) return NULL; *local_name='#'; strcpy(local_name+1, id); - new_uri=librdf_new_uri_from_uri_local_name(base_uri, local_name); + new_uri=librdf_new_uri(local_name); LIBRDF_FREE(cstring, local_name); return new_uri; #else - len=strlen(base_uri)+1+strlen(id)+1; + len=strlen(id)+1; new_uri=(char*)LIBRDF_MALLOC(cstring, len); if(!new_uri) return NULL; - sprintf(new_uri, "%s#%s", base_uri, id); + strncpy(new_uri, id, len); return new_uri; #endif } @@ -2934,7 +2975,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_type=RAPTOR_SUBJECT_TYPE_RESOURCE; element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->rdf_attr[RDF_ATTR_about]) { @@ -2952,13 +2993,10 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2966,7 +3004,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -2978,7 +3016,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, */ if (state == RAPTOR_STATE_PARSETYPE_DAML_COLLECTION) { const char * idList = raptor_generate_id(rdf_parser, 0); - const char * uriList = raptor_make_uri_from_id(rdf_parser->base_uri, idList); + const char * uriList = raptor_make_uri_from_id(rdf_parser, idList); LIBRDF_FREE(cstring, idList); /* <uriList> rdf:type daml:List */ @@ -3049,10 +3087,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } } @@ -3111,18 +3146,15 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_ID]) { element->id=element->rdf_attr[RDF_ATTR_ID]; element->rdf_attr[RDF_ATTR_ID]=NULL; - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_ID; } else if (element->parent && element->parent->object_uri) { /* copy from parent, it has a URI for us */ element->subject_uri=raptor_copy_uri(element->parent->object_uri); - if(element->parent->object_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->subject_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->subject_uri_source=element->parent->object_uri_source; + element->subject_uri_source=element->parent->object_uri_source; } else { element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3134,10 +3166,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, element->parent->object_uri=raptor_copy_uri(element->subject_uri); element->parent->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; - if(element->subject_uri_source == RAPTOR_URI_SOURCE_GENERATED) - element->parent->object_uri_source=RAPTOR_URI_SOURCE_URI; - else - element->parent->object_uri_source=element->subject_uri_source; + element->parent->object_uri_source=element->subject_uri_source; } @@ -3265,7 +3294,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) @@ -3362,7 +3391,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, state=RAPTOR_STATE_PARSETYPE_RESOURCE; element->child_state=RAPTOR_STATE_PROPERTYELT; element->id=raptor_generate_id(rdf_parser, 0); - element->subject_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->id); + element->subject_uri=raptor_make_uri_from_id(rdf_parser, element->id); element->subject_uri_source=RAPTOR_URI_SOURCE_GENERATED; } else { if(rdf_parser->feature_allow_other_parseTypes) { @@ -3390,7 +3419,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, if(element->rdf_attr[RDF_ATTR_bagID]) { element->bag_id=element->rdf_attr[RDF_ATTR_bagID]; element->rdf_attr[RDF_ATTR_bagID]=NULL; - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } #endif @@ -3406,7 +3435,7 @@ raptor_start_element_grammar(raptor_parser *rdf_parser, * this bagID */ if(element->bag_id) { - element->bag_uri=raptor_make_uri_from_id(rdf_parser->base_uri, element->bag_id); + element->bag_uri=raptor_make_uri_from_id(rdf_parser, element->bag_id); element->bag_uri_source=RAPTOR_URI_SOURCE_GENERATED; } @@ -3657,7 +3686,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, } else { char *object_id=(char*)raptor_generate_id(rdf_parser, 0); if(object_id) { - element->object_uri=raptor_make_uri_from_id(rdf_parser->base_uri, + element->object_uri=raptor_make_uri_from_id(rdf_parser, (const char*)object_id); element->object_uri_source=RAPTOR_URI_SOURCE_GENERATED; element->content_type = RAPTOR_ELEMENT_CONTENT_TYPE_RESOURCE; @@ -3692,7 +3721,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3703,7 +3732,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_ELEMENT, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else { @@ -3726,7 +3755,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); } else raptor_generate_named_statement(rdf_parser, @@ -3737,7 +3766,7 @@ raptor_end_element_grammar(raptor_parser *rdf_parser, RAPTOR_URI_SOURCE_NOT_URI, object, object_type, - element->subject_uri_source, + element->object_uri_source, element->bag_uri); break; |