Specification
JSchema is a vocabulary that allows you to describe the structure and constraints of JSON documents. It provides a way to define rules for validating the data in a JSON document. With JSchema, you can ensure that your JSON data follows a specific format and adheres to certain rules.
Grammar
JSchema grammar is introduced through a notation similar to what is known as the McKeeman form grammar notation, which is a simplified version of the Backus-Naur form and Extended Backus–Naur form. This form minimizes the usage of complex structures of meta-characters, making the grammar highly readable and easy to understand without requiring extensive prior knowledge of grammar syntax. Moreover, inside the grammar whitespace defining rules are ignored to make it clear and concise.
schema
schema-header-opt defines-opt schema-core defines-opt
validator
schema-header-opt
title-opt version-opt imports-opt pragmas-opt
title-opt
''
'%title' ':' string
version-opt
''
'%version' ':' string
imports-opt
''
imports
imports
import imports
import
'%import' ':' class-identifier
class-identifier
identifier
identifier '.' class-identifier
pragmas-opt
''
pragmas
pragmas
pragma pragmas
pragma
'%pragma' identifier ':' primitive
defines-opt
''
defines
defines
define defines
define
'%define' alias-name ':' validator-main
alias-name
'$' identifier
schema-core
'%schema' ':' validator
validator
validator-main
alias-name
validator-main
value-opt functions-opt datatypes-opt receivers-opt this-opt
value-opt
''
value
value
primitive
object
array
functions-opt
''
functions
functions
function functions
function
function-name function-args-opt
function-name
'@' identifier
'@' identifier '*'
function-args-opt
''
'(' ')'
'(' function-args ')'
function-args
function-arg
function-arg ',' function-args
function-arg
value
receiver
datatypes-opt
''
datatypes
datatypes
datatype datatypes
datatype
datatype-name datatype-arg-opt
datatype-name
'#' alphas
'#' alphas '*'
alphas
alpha alphas
datatype-arg-opt
''
'(' alias-name ')'
receivers-opt
''
receivers
receivers
receiver receivers
receiver
'&' identifier
this-opt
''
'?'
object
'{' '}'
'{' properties '}'
properties
property
property ',' properties
property
string ':' validator
array
'[' ']'
'[' elements ']'
elements
validator
validator ',' elements
primitive
string
number
undefined
'true'
'false'
'null'
undefined
'!'
identifier
alpha
alpha alpha-numerics
alpha-numerics
alpha-numeric alpha-numerics
alpha-numeric
alpha
'0' . '9'
alpha
'A' . 'Z'
'a' . 'z'
'_'
string
'"' characters '"'
characters
''
character characters
character
'0020' . '10FFFF' - '"' - '\'
'\' escape
escape
'"'
'\'
'/'
'b'
'f'
'n'
'r'
't'
'u' hex hex hex hex
hex
digit
'A' . 'F'
'a' . 'f'
number
integer
float
double
integer
positive-integer
negative-integer
float
integer fraction
fraction
'.' digits
double
integer fraction-opt exponent
fraction-opt
''
'.' digits
exponent
'E' sign-opt digits
'e' sign-opt digits
sign-opt
''
'+'
'-'
positive-integer
digit
one-to-nine digits
negative-integer
'-' digit
'-' one-to-nine digits
digits
digit
digit digits
digit
'0'
one-to-nine
one-to-nine
'1' . '9'
To explore more about McKeeman form grammar notation and standard JSON document grammar in McKeeman form notation, please visit this page. The resource offers information regarding JSON specification and implementations in different programming languages.