/** * librdf_new_uri_from_uri_local_name: * @old_uri: #librdf_uri object * @local_name: local name to append to URI * * Copy constructor - create a new librdf_uri object from an existing librdf_uri object and a local name. * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_from_uri_local_name (librdf_uri* old_uri, const unsigned char *local_name) { return raptor_new_uri_from_uri_local_name(raptor_uri_get_world(old_uri), old_uri, local_name); }
/** * librdf_new_uri_from_uri_local_name: * @old_uri: #librdf_uri object * @local_name: local name to append to URI * * Copy constructor - create a new librdf_uri object from an existing librdf_uri object and a local name. * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_from_uri_local_name (librdf_uri* old_uri, const unsigned char *local_name) { #ifdef LIBRDF_USE_RAPTOR_URI return raptor_new_uri_from_uri_local_name(raptor_uri_get_world(old_uri), old_uri, local_name); #else int len; unsigned char *new_string; librdf_uri* new_uri; LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(old_uri, librdf_uri, NULL); if(!old_uri) return NULL; len=old_uri->string_length + strlen((const char*)local_name) +1 ; /* +1 for \0 */ new_string=(unsigned char*)LIBRDF_MALLOC(cstring, len); if(!new_string) return NULL; strcpy((char*)new_string, (const char*)old_uri->string); strcat((char*)new_string, (const char*)local_name); new_uri=librdf_new_uri (old_uri->world, new_string); LIBRDF_FREE(cstring, new_string); return new_uri; #endif /* !LIBRDF_USE_RAPTOR_URI */ }
/** * librdf_new_uri_relative_to_base: * @base_uri: absolute base URI * @uri_string: relative URI string * * Constructor - create a new #librdf_uri object from a URI string relative to a base URI. * * An empty uri_string or NULL is equivalent to * librdf_new_uri_from_uri(base_uri) * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_relative_to_base(librdf_uri* base_uri, const unsigned char *uri_string) { return raptor_new_uri_relative_to_base(raptor_uri_get_world(base_uri), base_uri, uri_string); }
/** * librdf_new_uri_relative_to_base: * @base_uri: absolute base URI * @uri_string: relative URI string * * Constructor - create a new #librdf_uri object from a URI string relative to a base URI. * * An empty uri_string or NULL is equivalent to * librdf_new_uri_from_uri(base_uri) * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_relative_to_base(librdf_uri* base_uri, const unsigned char *uri_string) { #ifdef LIBRDF_USE_RAPTOR_URI return raptor_new_uri_relative_to_base(raptor_uri_get_world(base_uri), base_uri, uri_string); #else unsigned char *buffer; int buffer_length; librdf_uri* new_uri; librdf_world *world=base_uri->world; LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(base_uri, librdf_uri, NULL); if(!uri_string) return NULL; /* If URI string is empty, just copy base URI */ if(!*uri_string) return librdf_new_uri_from_uri(base_uri); /* +2 is for \0 plus an extra 1 for adding any missing URI path '/' */ buffer_length=base_uri->string_length + strlen((const char*)uri_string) +2; buffer=(unsigned char*)LIBRDF_MALLOC(cstring, buffer_length); if(!buffer) return NULL; raptor_uri_resolve_uri_reference(base_uri->string, uri_string, buffer, buffer_length); new_uri=librdf_new_uri(world, buffer); LIBRDF_FREE(cstring, buffer); return new_uri; #endif /* !LIBRDF_USE_RAPTOR_URI */ }
/** * librdf_new_uri_normalised_to_base: * @uri_string: URI in string form * @source_uri: source URI to remove * @base_uri: base URI to add * * Constructor - create a new #librdf_uri object from a URI string stripped of the source URI, made relative to the base URI. * * Return value: a new #librdf_uri object or NULL on failure **/ librdf_uri* librdf_new_uri_normalised_to_base(const unsigned char *uri_string, librdf_uri* source_uri, librdf_uri* base_uri) { size_t uri_string_len; size_t len; unsigned char *new_uri_string; librdf_uri *new_uri; unsigned char* source_uri_string; size_t source_uri_string_length; unsigned char* base_uri_string; size_t base_uri_string_length; LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(source_uri, librdf_uri, NULL); LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(base_uri, librdf_uri, NULL); if(!uri_string) return NULL; /* empty URI - easy, just make from base_uri */ if(!*uri_string && base_uri) { return raptor_uri_copy(base_uri); } source_uri_string = librdf_uri_as_counted_string(source_uri, &source_uri_string_length); base_uri_string = librdf_uri_as_counted_string(base_uri, &base_uri_string_length); /* not a fragment, and no match - easy */ if(*uri_string != '#' && strncmp((const char*)uri_string, (const char*)source_uri_string, source_uri_string_length)) { raptor_world* rworld = raptor_uri_get_world(base_uri); return raptor_new_uri(rworld, uri_string); } /* darn - is a fragment or matches, is a prefix of the source URI */ /* move uri_string pointer to first non-matching char * unless a fragment, when all of the uri_string will * be appended */ if(*uri_string != '#') uri_string += source_uri_string_length; /* size of remaining bytes to copy from uri_string */ uri_string_len = strlen((const char*)uri_string); /* total bytes */ len = uri_string_len + 1 + base_uri_string_length; new_uri_string = LIBRDF_MALLOC(unsigned char*, len); if(!new_uri_string) return NULL; strncpy((char*)new_uri_string, (const char*)base_uri_string, base_uri_string_length); /* strcpy not strncpy since I want a \0 on the end */ strcpy((char*)new_uri_string + base_uri_string_length, (const char*)uri_string); new_uri = raptor_new_uri(raptor_uri_get_world(source_uri), new_uri_string); LIBRDF_FREE(char*, new_uri_string); /* always free this even on failure */ return new_uri; /* new URI or NULL from librdf_new_uri failure */ }