Liking cljdoc? Tell your friends :D

com.blockether.skjema.core

JSON Schema 2020-12 evaluation.

The evaluator answers ANNOTATIONS as well as errors, from the first line and not as a later addition: unevaluatedProperties and unevaluatedItems are defined in terms of what the ADJACENT keywords and the in-place applicators already evaluated, so a validator that answers only true/false cannot grow them without being rewritten. Every evaluation therefore returns {:valid? :props :items :errors} - the property names and item indices that were evaluated AT THIS INSTANCE LOCATION, plus every fault found underneath.

Two kinds of applicator, and the difference is the whole design:

  • IN PLACE ($ref, $dynamicRef, allOf, anyOf, oneOf, if/then/ else, dependentSchemas) apply another schema to the SAME instance location, so their annotations belong to this location and bubble up.
  • CHILD (properties, patternProperties, additionalProperties, items, prefixItems, contains, propertyNames) apply to a location BELOW, so their annotations stay there and this location records only which member was covered.

Identifiers are resolved once, when the schema is compiled: $id moves the base URI, $anchor and $dynamicAnchor name a place inside it, and the index that comes out is what $ref and $dynamicRef read. Nothing is fetched over the network, ever - a schema that references a document the caller did not supply is a compile error, not a silent pass.

JSON Schema 2020-12 evaluation.

The evaluator answers ANNOTATIONS as well as errors, from the first line and
not as a later addition: `unevaluatedProperties` and `unevaluatedItems` are
defined in terms of what the ADJACENT keywords and the in-place applicators
already evaluated, so a validator that answers only true/false cannot grow
them without being rewritten. Every evaluation therefore returns
`{:valid? :props :items :errors}` - the property names and item indices that
were evaluated AT THIS INSTANCE LOCATION, plus every fault found underneath.

Two kinds of applicator, and the difference is the whole design:

- IN PLACE (`$ref`, `$dynamicRef`, `allOf`, `anyOf`, `oneOf`, `if`/`then`/
  `else`, `dependentSchemas`) apply another schema to the SAME instance
  location, so their annotations belong to this location and bubble up.
- CHILD (`properties`, `patternProperties`, `additionalProperties`, `items`,
  `prefixItems`, `contains`, `propertyNames`) apply to a location BELOW, so
  their annotations stay there and this location records only which member
  was covered.

Identifiers are resolved once, when the schema is compiled: `$id` moves the
base URI, `$anchor` and `$dynamicAnchor` name a place inside it, and the
index that comes out is what `$ref` and `$dynamicRef` read. Nothing is
fetched over the network, ever - a schema that references a document the
caller did not supply is a compile error, not a silent pass.
raw docstring

compile-schemaclj

(compile-schema schema)
(compile-schema schema opts)

Compile and index a schema once so repeated validation does not walk its structure. Options: :base, :registry, and :format-assertion. Referenced documents are resolved only from the supplied registry.

Compile and index a schema once so repeated validation does not walk its
structure. Options: `:base`, `:registry`, and `:format-assertion`. Referenced
documents are resolved only from the supplied registry.
sourceraw docstring

compiled-schema?clj

(compiled-schema? x)
source

explainclj

(explain schema instance)
(explain schema instance opts)

Nil when instance satisfies the schema, otherwise JSON Schema BASIC output - {:valid false :errors [...]} - where every error keeps its instance and keyword locations and adds :keyword plus keyword-specific :params, so a caller can render or act on it without parsing the human :error string. The entire answer is a JSON value.

Nil when `instance` satisfies the schema, otherwise JSON Schema BASIC output -
`{:valid false :errors [...]}` - where every error keeps its instance and
keyword locations and adds `:keyword` plus keyword-specific `:params`, so a
caller can render or act on it without parsing the human `:error` string. The
entire answer is a JSON value.
sourceraw docstring

explainerclj

(explainer schema)
(explainer schema opts)

The reasons as a bare function of the instance: nil when it validates, else JSON Schema BASIC output. The counterpart of validator for the same schema.

The reasons as a bare function of the instance: nil when it validates, else
JSON Schema BASIC output. The counterpart of `validator` for the same schema.
sourceraw docstring

read-schemaclj

(read-schema source)

Read a JSON Schema from JSON text, a Path, File, URL/resource, InputStream, or Reader. Objects keep their JSON string keys.

Read a JSON Schema from JSON text, a Path, File, URL/resource, InputStream,
or Reader. Objects keep their JSON string keys.
sourceraw docstring

validateclj

(validate schema instance)
(validate schema instance opts)

True when instance satisfies the schema. validator is the same answer without the per-call dispatch.

True when `instance` satisfies the schema. `validator` is the same answer
without the per-call dispatch.
sourceraw docstring

validatorclj

(validator schema)
(validator schema opts)

The verdict as a bare function of the instance. It closes over the compiled predicate, so a call reaches it without a map lookup - take this when the same schema validates more than once. Evaluation stops at the first keyword that refuses and no error is built on the way.

The verdict as a bare function of the instance. It closes over the compiled
predicate, so a call reaches it without a map lookup - take this when the same
schema validates more than once. Evaluation stops at the first keyword that
refuses and no error is built on the way.
sourceraw docstring

write-schemaclj

(write-schema value)

Render a schema or validation result as compact JSON.

Render a schema or validation result as compact JSON.
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close