JSONSchex.Compiler (jsonschex v0.11.2)

Copy Markdown View Source

Transforms raw JSON Schema maps into executable Schema structs.

Compilation has two phases:

  1. Node compilation — Recursively converts keywords into Rule structs (serializable rule descriptors), resolves vocabularies, and compiles $defs.
  2. Scope scanning — Discovers all $id and anchor definitions across the schema tree and registers them by absolute URI for reference resolution.

Standard rules execute first; finalizer rules (unevaluatedProperties, unevaluatedItems) run last so they can see which keys were already evaluated.

Examples

iex> {:ok, schema} = JSONSchex.Compiler.compile(%{"type" => "string"})
iex> length(schema.rules)
1

Summary

Functions

Bundles a JSON Schema fragment into a standalone raw schema document.

Compiles a raw JSON Schema into an executable Schema struct.

Compiles a JSON Schema fragment while preserving its surrounding reference context.

Functions

bundle_fragment(document, opts)

@spec bundle_fragment(map() | boolean(), keyword()) ::
  {:ok, map() | boolean()} | {:error, JSONSchex.Types.Error.t()}

Bundles a JSON Schema fragment into a standalone raw schema document.

compile(raw_schema, opts \\ [])

Compiles a raw JSON Schema into an executable Schema struct.

See JSONSchex.compile/2 for options and usage.

compile_fragment(document, opts)

@spec compile_fragment(map() | boolean(), keyword()) ::
  {:ok, JSONSchex.Types.Schema.t()} | {:error, JSONSchex.Types.Error.t()}

Compiles a JSON Schema fragment while preserving its surrounding reference context.

Draft 7 entries inherit ancestor $id bases for node compilation. Discovery retains the containing document and retrieval base, while JSON Pointer lookup uses the entry's owning resource, or the containing document if no new resource is declared.