JCR

JSON Content Rules


Overview

JSON Content Rules (JCR) is a language for describing and testing the interchange of data in JSON [RFC7159] format used by computer protocols and processes. The syntax of JCR is not JSON but is "JSON-like", possessing the conciseness and utility that has made JSON popular.

As an example, the following JSON taken from RFC 7159:

      {
        "Image": {
            "Width":  800,
            "Height": 600,
            "Title":  "View from 15th Floor",
            "Thumbnail": {
                "Url":    "http://www.example.com/image/481989943",
                "Height": 125,
                "Width":  100
            },
            "Animated" : false,
            "IDs": [116, 943, 234, 38793]
          }
      }

can be described using JCR as:

       {
           "Image" : {
               "Width" : 0..1280,
               "Height" : 0..1024,
               "Title" : string,
               "Thumbnail" : {
                   "Url" : uri
                   "Width" : 0..1280,
                   "Height" : 0..1024,
               },
               "Animated" : boolean,
               "IDs" : [ *:integer ]
           }
       }

or alternatively, using named rules to avoid some of the type repetition, as:

       {
           "Image" : {
               width, height,
               "Title" : string,
               "Thumbnail" : {
                   "Url" : uri,
                   width, height
               },
               "Animated" : boolean,
               "IDs" : [ *:integer ]
           }
       }

       width = "Width" : 0..1280
       height = "Height" : 0..1024

Specification

For more details read the latest specification at draft-newton-json-content-rules-06.txt.

JCR can also have co-constraints added to it via directives and annotations. These are described in draft-cordell-jcr-co-constraints-00.txt.

Implementations

A number of implementations are under development to verify the JCR syntax. These include:

Ruby jcrvalidator (Work in Progress)
C++ cl-jcr-parser (Work in Progress)

Get Involved

Like JCR and want to know more? Know of an implementation we can list? Need help making JCR work for you? Contact us at .