https://github.com/juxt/jinx
jinx is not xml-schema (it's json-schema!)
https://github.com/juxt/jinx
Last synced: 5 months ago
JSON representation
jinx is not xml-schema (it's json-schema!)
- Host: GitHub
- URL: https://github.com/juxt/jinx
- Owner: juxt
- License: mit
- Created: 2019-05-11T23:22:24.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-27T22:35:40.000Z (about 2 years ago)
- Last Synced: 2024-11-14T12:06:23.780Z (5 months ago)
- Language: Clojure
- Homepage:
- Size: 682 KB
- Stars: 101
- Watchers: 8
- Forks: 10
- Open Issues: 11
-
Metadata Files:
- Readme: README.adoc
- License: LICENSE
Awesome Lists containing this project
README
= jinx
jinx is a recursive acronym: jinx is not xml-schema
jinx is json-schema!
image:https://img.shields.io/clojars/v/jinx.svg["Clojars",link="https://clojars.org/jinx"]
image:https://circleci.com/gh/juxt/jinx.svg?style=shield["CircleCI", link="https://circleci.com/gh/juxt/jinx"]== Introduction
Almost all Clojure implementations of https://json-schema.org/[json
schema validators] wrap Java libraries. This is generally a good idea.However, there are some reasons why a _native_ Clojure implementation
can be useful:* Java libraries compile jsonschema to object graphs, making them
inaccessible to many of the data functions in the Clojure core
library.* On the front-end, it can be painful to have to convert Clojure data
to JavaScript objects simply for the purposes of calling a
jsonschema validation such as
https://github.com/epoberezkin/ajv[Ajv].* Extensibility: JSON Schema is designed to be extended with additional
vocabularies. Clojure has some nice open-for-extension mechanisms.* Size: Implementing JSON Schema is not that scary in a language as
nice as Clojure. There's not so much code to read, understand and
possibly extend.== Scope
This library implements JSON Schema 'draft7'
(draft-handrews-json-schema-validation-01).== Status
CAUTION: This is a new project, of alpha status. There may be future
incompatible changes ahead.Most core features are working but there is more work yet to do:
* Improved Error messages
* Relative json-pointer
* Patterns for uri-template and idn-emailThis library is tested with the official
https://github.com/json-schema-org/JSON-Schema-Test-Suite[JSON-Schema-Test-Suite].JSON Schema provides an official test suite, of which jinx passes all
the non-optional tests, and all but two of the optional tests.== Usage
=== Require
[source,clojure]
----
(require '[juxt.jinx-alpha-2 :as jinx])
----=== Create a schema
[source,clojure]
----
(jinx/schema {"type" "array" "items" {"type" "string"}})
----=== Create a schema (short-hand)
[source,clojure]
----
(jinx/clj->jsch ['string])
----=== Validate a document
[source,clojure]
----
(jinx/validate
{}
(jinx/schema {"type" "object"}))
----== Schemas
A schema is a Clojure map (or boolean) that should be augmented with
metadata by calling `juxt.jinx.schema/schema` on the schema data:[source,clojure]
----
(juxt.jinx.schema/schema {"type" "object"})
----== Resolvers
Validation can take an optional options map.
The `:resolvers` entry should be a collection of resolvers.
* `:juxt.jinx.resolve/built-in` is the built-in resolver which will resolve schemas contained in the library, such as the draft7 meta-schema.
* `:juxt.jinx.resolve/default-resolver` is a resolver which takes an argument of a map of URIs (or regexes) to values.
+
A value can be a schema (which should be pre-processed with schema metadata by calling `juxt.jinx.schema/schema`).
+
A value may also be a function (called with the URI or, in the case of a regex, the result of the regex match):
+
[source,clojure]
----
{#"http://example.com/schemas/(.*)" (fn [match] {:type "object"
:path (second match)})}
----== Developing
When you clone this repository, use the `--recursive` option to ensure
that the official json schema repo is also cloned (as a submodule).----
git clone --recursive https://github.com/juxt/jinx
----== Alternative implementations
* https://github.com/niquola/json-schema.clj