# 2.7 Environment

typedef struct SerdEnvImpl SerdEnv

  Lexical environment for relative URIs or CURIEs (base URI and namespaces).

SerdStatus serd_env_expand(const SerdEnv *env, const SerdNode *curie, SerdChunk *uri_prefix, SerdChunk *uri_suffix)

  Expand `curie`.

  Errors: SERD_ERR_BAD_ARG if `curie` is not valid, or SERD_ERR_BAD_CURIE if prefix is not defined in `env`.

SerdNode serd_env_expand_node(const SerdEnv *env, const SerdNode *node)

  Expand `node`, which must be a CURIE or URI, to a full URI.

  Returns null if `node` can not be expanded.

void serd_env_foreach(const SerdEnv *env, SerdPrefixSink func, void *handle)

  Call `func` for each prefix defined in `env`.

void serd_env_free(SerdEnv *env)

  Free `env`.

const SerdNode *serd_env_get_base_uri(const SerdEnv *env, SerdURI *out)

  Get the current base URI.

SerdEnv *serd_env_new(const SerdNode *base_uri)

  Create a new environment.

bool serd_env_qualify(const SerdEnv *env, const SerdNode *uri, SerdNode *prefix, SerdChunk *suffix)

  Qualify `uri` into a CURIE if possible.

SerdStatus serd_env_set_base_uri(SerdEnv *env, const SerdNode *uri)

  Set the current base URI.

SerdStatus serd_env_set_prefix(SerdEnv *env, const SerdNode *name, const SerdNode *uri)

  Set a namespace prefix.

  A namespace prefix is used to expand CURIE nodes, for example, with the prefix “xsd” set to “http://www.w3.org/2001/XMLSchema#”, “xsd:decimal” will expand to “http://www.w3.org/2001/XMLSchema#decimal”.

SerdStatus serd_env_set_prefix_from_strings(SerdEnv *env, const uint8_t *name, const uint8_t *uri)

  Set a namespace prefix.