defmodule JSON.LD.Error do @moduledoc """ The base exception for all JSON-LD errors. See """ @enforce_keys [:code, :message] defexception [:code, :message] def message(%__MODULE__{code: code, message: message}) do "#{code}: #{message}" end @doc """ Two properties which expand to the same keyword have been detected. This might occur if a keyword and an alias thereof are used at the same time. """ def colliding_keywords(keyword) do exception( code: "colliding keywords", message: "#{keyword} already exists in result" ) end @doc """ Multiple conflicting indexes have been found for the same node. """ def conflicting_indexes(index1, index2) do exception( code: "conflicting indexes", message: "Conflicting indexes #{inspect(index1)} and #{inspect(index2)}" ) end @doc """ Maximum number of `@context` URLs exceeded. """ def context_overflow(context) do exception( code: "context overflow", message: "Maximum number of @context URLs exceeded: #{inspect(context)}" ) end @doc """ A cycle in IRI mappings has been detected. """ def cyclic_iri_mapping(term) do exception( code: "cyclic IRI mapping", message: "Cyclical term dependency found: #{inspect(term)}" ) end @doc """ An `@id` entry was encountered whose value was not a string. """ def invalid_id_value(value) do exception( code: "invalid @id value", message: "#{inspect(value)} is not a valid @id value" ) end @doc """ An invalid value for `@import` has been found. """ def invalid_import_value(value) do exception( code: "invalid @import value", message: "#{inspect(value)} is not a valid @import value" ) end @doc """ An included block contains an invalid value. """ def invalid_included_value(value \\ nil) do message = "values of @included must expand to node objects" exception( code: "invalid @included value", message: if(value, do: "#{inspect(value)} is not a valid @included value; #{message}", else: message ) ) end @doc """ An `@index` member was encountered whose value was not a string. """ def invalid_index_value(value) do exception( code: "invalid @index value", message: "#{inspect(value)} is not a valid @index value" ) end @doc """ An invalid value for `@nest` has been found. """ def invalid_nest_value(message) do exception( code: "invalid @nest value", message: message ) end @doc """ An invalid value for `@prefix` has been found. """ def invalid_prefix_value(value) do exception( code: "invalid @prefix value", message: "#{inspect(value)} is not a valid @prefix value; must be a boolean" ) end @doc """ An invalid value for `@propagate` has been found. """ def invalid_propagate_value(value) do exception( code: "invalid @propagate value", message: "#{inspect(value)} is not a valid @propagate value; must be a boolean" ) end @doc """ An invalid value for `@protected` has been found. """ def invalid_protected_value(value) do exception( code: "invalid @protected value", message: "#{inspect(value)} is not a valid @protected value; must be a boolean" ) end @doc """ An invalid value for an `@reverse` entry has been detected, i.e., the value was not a map. """ def invalid_reverse_value(value) do exception( code: "invalid @reverse value", message: "#{inspect(value)} is not a valid @reverse value; must be a map" ) end @doc """ The `@version` entry was used in a context with an out of range value. """ def invalid_version_value(value) do exception( code: "invalid @version value", message: "#{inspect(value)} is not a valid @version value" ) end @doc """ The value of @direction is not "ltr", "rtl", or null and thus invalid. """ def invalid_base_direction(direction) do exception( code: "invalid base direction", message: "#{inspect(direction)} is not a valid base direction; must be 'ltr', 'rtl', or null" ) end @doc """ An invalid base IRI has been detected, i.e., it is neither an absolute IRI nor null. """ def invalid_base_iri(base) do exception( code: "invalid base IRI", message: "#{inspect(base)} is not a valid absolute IRI" ) end def invalid_base_iri(base, :relative_without_active_base) do exception( code: "invalid base IRI", message: "#{inspect(base)} is a relative IRI, but no active base IRI defined" ) end @doc """ An `@container` entry was encountered whose value was not one of the following strings: `@list`, `@set`, `@language`, `@index`, `@id`, `@graph`, or `@type`. """ def invalid_container_mapping(message) do exception( code: "invalid container mapping", message: message ) end @doc """ An entry in a context is invalid due to processing mode incompatibility. """ def invalid_context_entry(message) do exception( code: "invalid context entry", message: message ) end @doc """ An attempt was made to nullify a context containing protected term definitions. """ def invalid_context_nullification do exception( code: "invalid context nullification", message: "Cannot nullify a context containing protected term definitions" ) end @doc """ The value of the default language is not a string or null and thus invalid. """ def invalid_default_language(language) do exception( code: "invalid default language", message: "#{inspect(language)} is not a valid language value" ) end @doc """ A local context contains a term that has an invalid or missing IRI mapping. """ def invalid_iri_mapping(message) do exception( code: "invalid IRI mapping", message: message ) end @doc """ An invalid JSON literal was detected. """ def invalid_json_literal(value) do exception( code: "invalid JSON literal", message: "#{inspect(value)} is not a valid JSON literal" ) end @doc """ An invalid keyword alias definition has been encountered. """ def invalid_keyword_alias(message) do exception( code: "invalid keyword alias", message: message ) end @doc """ An invalid value in a language map has been detected. It MUST be a string or an array of strings. """ def invalid_language_map_value(value) do exception( code: "invalid language map value", message: "#{inspect(value)} is not a valid language map value" ) end @doc """ An `@language` entry in a term definition was encountered whose value was neither a string nor null and thus invalid. """ def invalid_language_mapping(language) do exception( code: "invalid language mapping", message: "#{inspect(language)} is not a valid language mapping; @language must be a string or null" ) end @doc """ A language-tagged string with an invalid language value was detected. """ def invalid_language_tagged_string(value) do exception( code: "invalid language-tagged string", message: "#{inspect(value)} has an invalid language tag" ) end @doc """ A number, `true`, or `false` with an associated language tag was detected. """ def invalid_language_tagged_value(value) do exception( code: "invalid language-tagged value", message: "#{inspect(value)} cannot be language-tagged" ) end @doc """ An invalid local context was detected. """ def invalid_local_context(context) do exception( code: "invalid local context", message: "#{inspect(context)} is not a valid local context" ) end @doc """ No valid context document has been found for a referenced remote context. """ def invalid_remote_context(invalid: context) do exception( code: "invalid remote context", message: "Context is not a valid JSON object: #{inspect(context)}" ) end def invalid_remote_context(message) do exception( code: "invalid remote context", message: message ) end @doc """ An invalid reverse property definition has been detected. """ def invalid_reverse_property(message) do exception( code: "invalid reverse property", message: message ) end @doc """ An invalid reverse property map has been detected. No keywords apart from `@context` are allowed in reverse property maps. """ def invalid_reverse_property_map do exception( code: "invalid reverse property map", message: "An invalid reverse property map has been detected. No keywords apart from `@context` are allowed in reverse property maps." ) end @doc """ An invalid value for a reverse property has been detected. The value of an inverse property must be a node object. """ def invalid_reverse_property_value(value) do exception( code: "invalid reverse property value", message: "invalid value for a reverse property in #{inspect(value)}" ) end @doc """ The local context defined within a term definition is invalid. """ def invalid_scoped_context(message) do exception( code: "invalid scoped context", message: message ) end @doc """ A script element in HTML input which is the target of a fragment identifier does not have an appropriate type attribute. """ def invalid_script_element(message) do exception( code: "invalid script element", message: message ) end @doc """ A set object or list object with disallowed members has been detected. """ def invalid_set_or_list_object(value) do exception( code: "invalid set or list object", message: "set or list object with disallowed members: #{inspect(value)}" ) end @doc """ An invalid term definition has been detected. """ def invalid_term_definition(message) do exception( code: "invalid term definition", message: message ) end @doc """ An `@type` entry in a term definition was encountered whose value could not be expanded to an IRI. """ def invalid_type_mapping(message: message) do exception( code: "invalid type mapping", message: message ) end def invalid_type_mapping(type) do exception( code: "invalid type mapping", message: "#{inspect(type)} is not a valid type mapping" ) end @doc """ An invalid value for an `@type` entry has been detected, i.e., the value was neither a string nor an array of strings. """ def invalid_type_value(value) do exception( code: "invalid type value", message: "#{inspect(value)} is not a valid type value" ) end @doc """ A typed value with an invalid type was detected. """ def invalid_typed_value(value, type) do exception( code: "invalid typed value", message: "#{inspect(value)} is not valid for type #{inspect(type)}" ) end @doc """ A value object with disallowed entries has been detected. """ def invalid_value_object(message) do exception( code: "invalid value object", message: message ) end @doc """ An invalid value for the `@value` entry of a value object has been detected, i.e., it is neither a scalar nor `null`. """ def invalid_value_object_value(value) do exception( code: "invalid value object value", message: "#{inspect(value)} is not a valid value object; must be a scalar or null" ) end @doc """ An invalid vocabulary mapping has been detected, i.e., it is neither an IRI nor `null`. """ def invalid_vocab_mapping(message: message) do exception( code: "invalid vocab mapping", message: message ) end def invalid_vocab_mapping(vocab) do exception( code: "invalid vocab mapping", message: "#{inspect(vocab)} is not a valid vocabulary mapping; must be an absolute IRI or null" ) end @doc """ When compacting an IRI would result in an IRI which could be confused with a compact IRI (because its IRI scheme matches a term definition and it has no IRI authority). """ def iri_confused_with_prefix(iri, prefix) do exception( code: "IRI confused with prefix", message: "Absolute IRI '#{iri}' confused with prefix '#{prefix}'" ) end @doc """ A keyword redefinition has been detected. """ def keyword_redefinition(message) do exception( code: "keyword redefinition", message: message ) end @doc """ The document could not be loaded or parsed as JSON. """ def loading_document_failed(message) do exception( code: "loading document failed", message: message ) end @doc """ There was a problem encountered loading a remote context. """ def loading_remote_context_failed(url, reason) do exception( code: "loading remote context failed", message: "Could not load remote context #{url}: #{inspect(reason)}" ) end @doc """ Multiple HTTP Link Headers using the http://www.w3.org/ns/json-ld#context link relation have been detected. """ def multiple_context_link_headers do exception( code: "multiple context link headers", message: "Multiple HTTP Link Headers using the http://www.w3.org/ns/json-ld#context link relation have been detected" ) end @doc """ An attempt was made to change the processing mode which is incompatible with the previous specified version. """ def processing_mode_conflict do exception( code: "processing mode conflict", message: "Processing mode conflict" ) end @doc """ An attempt was made to redefine a protected term. """ def protected_term_redefinition(term) do exception( code: "protected term redefinition", message: "#{inspect(term)} is a protected term and cannot be redefined" ) end end