URI

## URI URI — URI class and relative URI computation |

## Synopsis

    typedef     raptor_uri;
                raptor_uri_handler;
    raptor_uri* raptor_new_uri                  (unsigned char *uri_string);
    raptor_uri* raptor_new_uri_from_uri_local_name
                                                (raptor_uri *uri,
                                                 unsigned char *local_name);
    raptor_uri* raptor_new_uri_relative_to_base (raptor_uri *base_uri,
                                                 unsigned char *uri_string);
    raptor_uri* raptor_new_uri_from_id          (raptor_uri *base_uri,
                                                 unsigned char *id);
    raptor_uri* raptor_new_uri_for_rdf_concept  (const char *name);
    void        raptor_free_uri                 (raptor_uri *uri);
    int         raptor_uri_equals               (raptor_uri *uri1,
                                                 raptor_uri *uri2);
    raptor_uri* raptor_uri_copy                 (raptor_uri *uri);
    unsigned char* raptor_uri_as_string         (raptor_uri *uri);
    unsigned char* raptor_uri_as_counted_string (raptor_uri *uri,
                                                 size_t *len_p);
    raptor_uri* raptor_new_uri_for_xmlbase      (raptor_uri *old_uri);
    raptor_uri* raptor_new_uri_for_retrieval    (raptor_uri *old_uri);
    void        raptor_uri_resolve_uri_reference
                                                (unsigned char *base_uri,
                                                 unsigned char *reference_uri,
                                                 unsigned char *buffer,
                                                 size_t length);
    unsigned char* raptor_uri_filename_to_uri_string
                                                (const char *filename);
    char*       raptor_uri_uri_string_to_filename
                                                (unsigned char *uri_string);
    char*       raptor_uri_uri_string_to_filename_fragment
                                                (unsigned char *uri_string,
                                                 unsigned char **fragment_p);
    int         raptor_uri_uri_string_is_file_uri
                                                (unsigned char *uri_string);
    int         raptor_uri_is_file_uri          (unsigned char *uri_string);
    unsigned char* raptor_uri_to_relative_counted_uri_string
                                                (raptor_uri *base_uri,
                                                 raptor_uri *reference_uri,
                                                 size_t *length_p);
    unsigned char* raptor_uri_to_relative_uri_string
                                                (raptor_uri *base_uri,
                                                 raptor_uri *reference_uri);
    void        raptor_uri_print                (const raptor_uri *uri,
                                                 FILE *stream);
    unsigned char* raptor_uri_to_counted_string (raptor_uri *uri,
                                                 size_t *len_p);
    unsigned char* raptor_uri_to_string         (raptor_uri *uri);
    void        raptor_uri_set_handler          (const raptor_uri_handler *handler,
                                                 void *context);
    void        raptor_uri_get_handler          (raptor_uri_handler **handler,
                                                 void **context);
    int         raptor_iostream_write_uri       (raptor_iostream *iostr,
                                                 raptor_uri *uri);

## Description

A class for absolute URIs used inside raptor and relative URI computation utility functions used inside the main Redland librdf_uri class. Only absolute URIs are provided, with no current access to internals of URIs such as URI scheme, path, authority.

## Details

### raptor_uri

    raptor_uri* raptor_uri;

Raptor URI Class.

### raptor_uri_handler

    typedef struct {
      /* constructors */
      raptor_new_uri_func                     new_uri;
      raptor_new_uri_from_uri_local_name_func new_uri_from_uri_local_name;
      raptor_new_uri_relative_to_base_func    new_uri_relative_to_base;
      raptor_new_uri_for_rdf_concept_func     new_uri_for_rdf_concept;
      /* destructor */
      raptor_free_uri_func                    free_uri;
      /* methods */
      raptor_uri_equals_func                  uri_equals;
      raptor_uri_copy_func                    uri_copy; /* well, copy constructor */
      raptor_uri_as_string_func               uri_as_string;
      raptor_uri_as_counted_string_func       uri_as_counted_string;
      int initialised;
    } raptor_uri_handler;

URI implementation handler structure.

raptor_new_uri_func `new_uri`; | function for `raptor_new_uri()`
raptor_new_uri_from_uri_local_name_func `new_uri_from_uri_local_name`; | function for `raptor_new_uri_from_uri_local_name()`
raptor_new_uri_relative_to_base_func `new_uri_relative_to_base`; | function for `raptor_new_uri_relative_to_base()`
raptor_new_uri_for_rdf_concept_func `new_uri_for_rdf_concept`; | function for `raptor_new_uri_for_rdf_concept()`
raptor_free_uri_func `free_uri`; | function for `raptor_free_uri()`
raptor_uri_equals_func `uri_equals`; | function for `raptor_uri_equals()`
raptor_uri_copy_func `uri_copy`; | function for `raptor_uri_copy()`
raptor_uri_as_string_func `uri_as_string`; | function for `raptor_uri_as_string()`
raptor_uri_as_counted_string_func `uri_as_counted_string`; | function for `raptor_uri_as_counted_string()`
int `initialised`; | Internal

### raptor_new_uri ()

    raptor_uri* raptor_new_uri                  (unsigned char *uri_string);

Constructor - create a raptor URI from a UTF-8 encoded Unicode string.

`uri_string` : | URI string.
Returns : | a new raptor_uri object or NULL on failure.

### raptor_new_uri_from_uri_local_name ()

    raptor_uri* raptor_new_uri_from_uri_local_name
                                                (raptor_uri *uri,
                                                 unsigned char *local_name);

Constructor - create a raptor URI from an existing URI and a local name.

Creates a new URI from the concatenation of the `local_name` to the `uri`. This is NOT relative URI resolution, which is done by the `raptor_new_uri_relative_to_base()` constructor.

`uri` : | existing raptor_uri
`local_name` : | local name
Returns : | a new raptor_uri object or NULL on failure.

### raptor_new_uri_relative_to_base ()

    raptor_uri* raptor_new_uri_relative_to_base (raptor_uri *base_uri,
                                                 unsigned char *uri_string);

Constructor - create a raptor URI from a base URI and a relative URI string.

`base_uri` : | existing base URI
`uri_string` : | relative URI string
Returns : | a new raptor_uri object or NULL on failure.

### raptor_new_uri_from_id ()

    raptor_uri* raptor_new_uri_from_id          (raptor_uri *base_uri,
                                                 unsigned char *id);

Constructor - create a new URI from a base URI and RDF ID.

This creates a URI equivalent to concatenating `base_uri` with ## and `id`.

`base_uri` : | existing base URI
`id` : | RDF ID
Returns : | a new raptor_uri object or NULL on failure.

### raptor_new_uri_for_rdf_concept ()

    raptor_uri* raptor_new_uri_for_rdf_concept  (const char *name);

Constructor - create a raptor URI for the RDF namespace concept name.

Example: u=raptor_new_uri_for_rdf_concept("value") creates a new URI for the rdf:value term.

`name` : | RDF namespace concept
Returns : | a new raptor_uri object or NULL on failure

### raptor_free_uri ()

    void        raptor_free_uri                 (raptor_uri *uri);

Destructor - destroy a raptor_uri object

`uri` : | URI to destroy

### raptor_uri_equals ()

    int         raptor_uri_equals               (raptor_uri *uri1,
                                                 raptor_uri *uri2);

Check if two URIs are equal.

A NULL URI is not equal to a non-NULL URI.

`uri1` : | URI 1 (may be NULL)
`uri2` : | URI 2 (may be NULL)
Returns : | non-0 if the URIs are equal

### raptor_uri_copy ()

    raptor_uri* raptor_uri_copy                 (raptor_uri *uri);

Constructor - get a copy of a URI.

`uri` : | URI object
Returns : | a new raptor_uri object or NULL on failure

### raptor_uri_as_string ()

    unsigned char* raptor_uri_as_string         (raptor_uri *uri);

Get a string representation of a URI.

Returns a shared pointer to a string representation of `uri`. This string is shared and must not be freed, otherwise see use the `raptor_uri_to_string()` or `raptor_uri_to_counted_string()` methods.

`uri` : | raptor_uri object
Returns : | shared string representation of URI

### raptor_uri_as_counted_string ()

    unsigned char* raptor_uri_as_counted_string (raptor_uri *uri,
                                                 size_t *len_p);

Get a string representation of a URI with count.

Returns a shared pointer to a string representation of `uri` along with the length of the string in `len_p`, if not NULL. This string is shared and must not be freed, otherwise see use the `raptor_uri_to_string()` or `raptor_uri_to_counted_string()` methods.

`uri` : | URI object
`len_p` : | address of length variable or NULL
Returns : | shared string representation of URI

### raptor_new_uri_for_xmlbase ()

    raptor_uri* raptor_new_uri_for_xmlbase      (raptor_uri *old_uri);

Constructor - create a URI suitable for use as an XML Base.

Takes an existing URI and ensures it has a path (default /) and has no fragment or query arguments - XML base does not use these.

`old_uri` : | URI to transform
Returns : | new raptor_uri object or NULL on failure.

### raptor_new_uri_for_retrieval ()

    raptor_uri* raptor_new_uri_for_retrieval    (raptor_uri *old_uri);

Constructor - create a URI suitable for retrieval.

Takes an existing URI and ensures it has a path (default /) and has no fragment - URI retrieval does not use the fragment part.

`old_uri` : | URI to transform
Returns : | new raptor_uri object or NULL on failure.

### raptor_uri_resolve_uri_reference ()

    void        raptor_uri_resolve_uri_reference
                                                (unsigned char *base_uri,
                                                 unsigned char *reference_uri,
                                                 unsigned char *buffer,
                                                 size_t length);

Resolve a URI to a base URI.

`base_uri` : | Base URI string
`reference_uri` : | Reference URI string
`buffer` : | Destination buffer URI
`length` : | Length of destination buffer

### raptor_uri_filename_to_uri_string ()

    unsigned char* raptor_uri_filename_to_uri_string
                                                (const char *filename);

Converts a filename to a file: URI.

Handles the OS-specific escaping on turning filenames into URIs and returns a new buffer that the caller must `free()`. Turns a space in the filname into `20` and '%' into `25`.

`filename` : | The filename to convert
Returns : | A newly allocated string with the URI or NULL on failure

### raptor_uri_uri_string_to_filename ()

    char*       raptor_uri_uri_string_to_filename
                                                (unsigned char *uri_string);

Convert a file: URI to a filename.

Handles the OS-specific file: URIs to filename mappings. Returns a new buffer containing the filename that the caller must free.

`uri_string` : | The file: URI to convert
Returns : | A newly allocated string with the filename or NULL on failure

### raptor_uri_uri_string_to_filename_fragment ()

    char*       raptor_uri_uri_string_to_filename_fragment
                                                (unsigned char *uri_string,
                                                 unsigned char **fragment_p);

Convert a file: URI to a filename and fragment.

Handles the OS-specific file: URIs to filename mappings. Returns a new buffer containing the filename that the caller must free.

If `fragment_p` is given, a new string containing the URI fragment is returned, or NULL if none is present

`uri_string` : | The file: URI to convert
`fragment_p` : | Address of pointer to store any URI fragment or NULL
Returns : | A newly allocated string with the filename or NULL on failure

### raptor_uri_uri_string_is_file_uri ()

    int         raptor_uri_uri_string_is_file_uri
                                                (unsigned char *uri_string);

Check if a URI string is a file: URI.

`uri_string` : | The URI string to check
Returns : | Non zero if URI string is a file: URI

### raptor_uri_is_file_uri ()

    int         raptor_uri_is_file_uri          (unsigned char *uri_string);

`Deprecated`: use raptor_uri_uri_string_is_file_uri

Check if a URI string is a file: URI.

`uri_string` : | The URI string to check
Returns : | Non zero if URI string is a file: URI

### raptor_uri_to_relative_counted_uri_string ()

    unsigned char* raptor_uri_to_relative_counted_uri_string
                                                (raptor_uri *base_uri,
                                                 raptor_uri *reference_uri,
                                                 size_t *length_p);

Get the counted relative URI string of a URI against a base URI.

`base_uri` : | The base absolute URI to resolve against (or NULL)
`reference_uri` : | The reference absolute URI to use
`length_p` : | Location to store the length of the relative URI string or NULL
Returns : | A newly allocated relative URI string or NULL on failure

### raptor_uri_to_relative_uri_string ()

    unsigned char* raptor_uri_to_relative_uri_string
                                                (raptor_uri *base_uri,
                                                 raptor_uri *reference_uri);

Get the relative URI string of a URI against a base URI.

`base_uri` : | The base absolute URI to resolve against
`reference_uri` : | The reference absolute URI to use
Returns : | A newly allocated relative URI string or NULL on failure

### raptor_uri_print ()

    void        raptor_uri_print                (const raptor_uri *uri,
                                                 FILE *stream);

Print a URI to a file handle.

`uri` : | URI to print
`stream` : | The file handle to print to

### raptor_uri_to_counted_string ()

    unsigned char* raptor_uri_to_counted_string (raptor_uri *uri,
                                                 size_t *len_p);

Get a new counted string for a URI.

If `len_p` is not NULL, the length of the string is stored in it.

The memory allocated must be freed by the caller and `raptor_free_memory()` should be used for best portability.

`uri` : | raptor_uri object
`len_p` : | Pointer to length (or NULL)
Returns : | new string or NULL on failure

### raptor_uri_to_string ()

    unsigned char* raptor_uri_to_string         (raptor_uri *uri);

Get a new string for a URI.

The memory allocated must be freed by the caller and `raptor_free_memory()` should be used for best portability.

`uri` : | raptor_uri object
Returns : | new string or NULL on failure

### raptor_uri_set_handler ()

    void        raptor_uri_set_handler          (const raptor_uri_handler *handler,
                                                 void *context);

Change the URI class implementation to the functions provided by the `handler` URI implementation.

`handler` : | URI handler structure
`context` : | URI handler context

### raptor_uri_get_handler ()

    void        raptor_uri_get_handler          (raptor_uri_handler **handler,
                                                 void **context);

Return the current raptor URI class implementation `handler` and `context`

`handler` : | URI handler to return
`context` : | URI context to return

### raptor_iostream_write_uri ()

    int         raptor_iostream_write_uri       (raptor_iostream *iostr,
                                                 raptor_uri *uri);

Write a raptor URI to the iostream.

`iostr` : | raptor iostream
`uri` : | URI
Returns : | non-0 on failure