The Axiell Schema Project provides a small library for validating JSON
documents against a JSON Schema. The library conforms to the
JSON Schema Draft #7
specification.
The library is based on a few simple principles, namely:
referential transparency. Each of the methods in the library is
referentially transparent, that is if the method is called with the
same arguments it will always return the same value and the method
does not have any side effect (e.g. update globals, change the operating
environment, etc).
minimal functionality. The library is designed to be small
incorporating a small number of dependencies. The number of methods
associated with a class/object is restricted to those that provide
a base level of functionality.
support multiple JSON libraries. It should be possible to use
the library with any number of different JSON library packages (e.g
json4s, jackson, etc). The current library only supports json4s, but
a facade approach should be added to hide individual library
implementations.
generic "format" implementations. The JSON Schema
specification mandates a standard set of "format" types that
can be used to validate string values. Each "format" type
is implemented as a class with the components of the type available.
full error handling. Error resulting from the validation
process are returned as a list of validation failures. All possible
errors should be returned for a single call, eliminating the need to
fix a single error and then recall a method.
Package structure
The com.axiell.schema packages consists of a number of utilities, where
each utility provides a single piece of functionality. Since the library
validates JSON structures two main components are provided. The first
component (com.axiell.schema.Schema) allows JSON documents
conforming to the JSON Schema specification to be read. Once read a
resolution process may be required to resolve any external references
defined in the document.
The second component (com.axiell.schema.SchemaValidator) takes a
resolved schema and allows JSON documents to be validated against that
schema. When creating a validator it is also possible to incorporate
your own "format" types for validation.
A set of auxiliary components implement parsers for many of the "format"
types and can be used independently of the validator itself.
Notable utilities are:
Schema wrapper around a JSON document
containing the document itself, its $id value and resolution mappings
for all $id and $ref directives.
SchemaValidator takes a
Schema and an optional handler for "format" types and provides
a validation method for arbitrary JSON documents.
Implicits implements
implicit methods and classes used to convert one class to another
or pimp methods onto existing classes (e.g. same() method to
JValue class).
various auxiliary classes for handling "format" types including:
Axiell Util Library
provides error handling classes and methods that allow multilingual
error messages to be generated.
JSON for Scala Library
provides mthods for dealing with JSON structures. The routines
work around an AST (Abstract Syntax Tree) used to represent a
JSON document.
Cats Functional Programming Library
provides various traits, classes and methods that simplify
functional programming in Scala. Also provides the Validated class
used to return lists of validation errors.
Documentation for the Axiell Schema Project
Overview
The Axiell Schema Project provides a small library for validating JSON documents against a JSON Schema. The library conforms to the JSON Schema Draft #7 specification.
The library is based on a few simple principles, namely:
Package structure
The
packages consists of a number of utilities, where each utility provides a single piece of functionality. Since the library validates JSON structures two main components are provided. The first component (com.axiell.schema
) allows JSON documents conforming to the JSON Schema specification to be read. Once read a resolution process may be required to resolve any external references defined in the document.com.axiell.schema.Schema
The second component (
) takes a resolved schema and allows JSON documents to be validated against that schema. When creating a validator it is also possible to incorporate your own "format" types for validation.com.axiell.schema.SchemaValidator
A set of auxiliary components implement parsers for many of the "format" types and can be used independently of the validator itself.
Notable utilities are:
Schema
wrapper around a JSON document containing the document itself, its$id
value and resolution mappings for all$id
and$ref
directives.SchemaValidator
takes aSchema
and an optional handler for "format" types and provides a validation method for arbitrary JSON documents.Implicits
implements implicit methods and classes used to convert one class to another or pimp methods onto existing classes (e.g.same()
method toJValue
class).EmailAddress
Hostname
Ipv4Address
Ipv6Address
JsonPointer
RelativeJsonPointer
Dependencies
The list of dependencies are:
Axiell Util Library
provides error handling classes and methods that allow multilingual error messages to be generated.JSON for Scala Library
provides mthods for dealing with JSON structures. The routines work around an AST (Abstract Syntax Tree) used to represent a JSON document.Cats Functional Programming Library
provides various traits, classes and methods that simplify functional programming in Scala. Also provides theValidated
class used to return lists of validation errors.