mirror of
https://github.com/tristanpenman/valijson.git
synced 2024-12-12 18:20:27 +01:00
4c9864de73
This commit contains the third major design of a C++ library for JSON Schema validation. It is definitely not what I would consider production-ready, but I do think that the overall design of the library is robust.
1570 lines
54 KiB
Plaintext
1570 lines
54 KiB
Plaintext
|
||
|
||
|
||
Internet Engineering Task Force K. Zyp, Ed.
|
||
Internet-Draft SitePen (USA)
|
||
Intended status: Informational G. Court
|
||
Expires: May 26, 2011 November 22, 2010
|
||
|
||
|
||
A JSON Media Type for Describing the Structure and Meaning of JSON
|
||
Documents
|
||
draft-zyp-json-schema-03
|
||
|
||
Abstract
|
||
|
||
JSON (JavaScript Object Notation) Schema defines the media type
|
||
"application/schema+json", a JSON based format for defining the
|
||
structure of JSON data. JSON Schema provides a contract for what
|
||
JSON data is required for a given application and how to interact
|
||
with it. JSON Schema is intended to define validation,
|
||
documentation, hyperlink navigation, and interaction control of JSON
|
||
data.
|
||
|
||
Status of This Memo
|
||
|
||
This Internet-Draft is submitted in full conformance with the
|
||
provisions of BCP 78 and BCP 79.
|
||
|
||
Internet-Drafts are working documents of the Internet Engineering
|
||
Task Force (IETF). Note that other groups may also distribute
|
||
working documents as Internet-Drafts. The list of current Internet-
|
||
Drafts is at http://datatracker.ietf.org/drafts/current/.
|
||
|
||
Internet-Drafts are draft documents valid for a maximum of six months
|
||
and may be updated, replaced, or obsoleted by other documents at any
|
||
time. It is inappropriate to use Internet-Drafts as reference
|
||
material or to cite them other than as "work in progress."
|
||
|
||
This Internet-Draft will expire on May 26, 2011.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2010 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 1]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
|
||
3.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6
|
||
3.2. Design Considerations . . . . . . . . . . . . . . . . . . 6
|
||
4. Schema/Instance Association . . . . . . . . . . . . . . . . . 6
|
||
4.1. Self-Descriptive Schema . . . . . . . . . . . . . . . . . 7
|
||
5. Core Schema Definition . . . . . . . . . . . . . . . . . . . . 7
|
||
5.1. type . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
5.2. properties . . . . . . . . . . . . . . . . . . . . . . . . 9
|
||
5.3. patternProperties . . . . . . . . . . . . . . . . . . . . 9
|
||
5.4. additionalProperties . . . . . . . . . . . . . . . . . . . 9
|
||
5.5. items . . . . . . . . . . . . . . . . . . . . . . . . . . 10
|
||
5.6. additionalItems . . . . . . . . . . . . . . . . . . . . . 10
|
||
5.7. required . . . . . . . . . . . . . . . . . . . . . . . . . 10
|
||
5.8. dependencies . . . . . . . . . . . . . . . . . . . . . . . 10
|
||
5.9. minimum . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.10. maximum . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.11. exclusiveMinimum . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.12. exclusiveMaximum . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.13. minItems . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.14. maxItems . . . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.15. uniqueItems . . . . . . . . . . . . . . . . . . . . . . . 11
|
||
5.16. pattern . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.17. minLength . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.18. maxLength . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.19. enum . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.20. default . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.21. title . . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
5.22. description . . . . . . . . . . . . . . . . . . . . . . . 13
|
||
5.23. format . . . . . . . . . . . . . . . . . . . . . . . . . . 13
|
||
5.24. divisibleBy . . . . . . . . . . . . . . . . . . . . . . . 14
|
||
5.25. disallow . . . . . . . . . . . . . . . . . . . . . . . . . 14
|
||
5.26. extends . . . . . . . . . . . . . . . . . . . . . . . . . 14
|
||
5.27. id . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
|
||
5.28. $ref . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
|
||
5.29. $schema . . . . . . . . . . . . . . . . . . . . . . . . . 15
|
||
6. Hyper Schema . . . . . . . . . . . . . . . . . . . . . . . . . 15
|
||
6.1. links . . . . . . . . . . . . . . . . . . . . . . . . . . 16
|
||
6.1.1. Link Description Object . . . . . . . . . . . . . . . 16
|
||
6.2. fragmentResolution . . . . . . . . . . . . . . . . . . . . 20
|
||
6.2.1. slash-delimited fragment resolution . . . . . . . . . 20
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 2]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
6.2.2. dot-delimited fragment resolution . . . . . . . . . . 21
|
||
6.3. readonly . . . . . . . . . . . . . . . . . . . . . . . . . 21
|
||
6.4. contentEncoding . . . . . . . . . . . . . . . . . . . . . 22
|
||
6.5. pathStart . . . . . . . . . . . . . . . . . . . . . . . . 22
|
||
6.6. mediaType . . . . . . . . . . . . . . . . . . . . . . . . 22
|
||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 22
|
||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23
|
||
8.1. Registry of Link Relations . . . . . . . . . . . . . . . . 24
|
||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24
|
||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 24
|
||
9.2. Informative References . . . . . . . . . . . . . . . . . . 24
|
||
Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 26
|
||
Appendix B. Open Issues . . . . . . . . . . . . . . . . . . . . . 27
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 3]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
1. Introduction
|
||
|
||
JSON (JavaScript Object Notation) Schema is a JSON media type for
|
||
defining the structure of JSON data. JSON Schema provides a contract
|
||
for what JSON data is required for a given application and how to
|
||
interact with it. JSON Schema is intended to define validation,
|
||
documentation, hyperlink navigation, and interaction control of JSON
|
||
data.
|
||
|
||
2. Conventions
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in RFC 2119 [RFC2119].
|
||
|
||
3. Overview
|
||
|
||
JSON Schema defines the media type "application/schema+json" for
|
||
describing the structure of other JSON documents. JSON Schema is
|
||
JSON-based and includes facilities for describing the structure of
|
||
JSON documents in terms of allowable values, descriptions, and
|
||
interpreting relations with other resources.
|
||
|
||
JSON Schema format is organized into several separate definitions.
|
||
The first definition is the core schema specification. This
|
||
definition is primary concerned with describing a JSON structure and
|
||
specifying valid elements in the structure. The second definition is
|
||
the Hyper Schema specification which is intended define elements in a
|
||
structure that can be interpreted as hyperlinks. Hyper Schema builds
|
||
on JSON Schema to describe the hyperlink structure of other JSON
|
||
documents and elements of interaction. This allows user agents to be
|
||
able to successfully navigate JSON documents based on their schemas.
|
||
|
||
Cumulatively JSON Schema acts as a meta-document that can be used to
|
||
define the required type and constraints on property values, as well
|
||
as define the meaning of the property values for the purpose of
|
||
describing a resource and determining hyperlinks within the
|
||
representation.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 4]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
An example JSON Schema that describes products might look like:
|
||
|
||
{
|
||
"name":"Product",
|
||
"properties":{
|
||
"id":{
|
||
"type":"number",
|
||
"description":"Product identifier",
|
||
"required":true
|
||
},
|
||
"name":{
|
||
"description":"Name of the product",
|
||
"type":"string",
|
||
"required":true
|
||
},
|
||
"price":{
|
||
"required":true,
|
||
"type": "number",
|
||
"minimum":0,
|
||
"required":true
|
||
},
|
||
"tags":{
|
||
"type":"array",
|
||
"items":{
|
||
"type":"string"
|
||
}
|
||
}
|
||
},
|
||
"links":[
|
||
{
|
||
"rel":"full",
|
||
"href":"{id}"
|
||
},
|
||
{
|
||
"rel":"comments",
|
||
"href":"comments/?id={id}"
|
||
}
|
||
]
|
||
}
|
||
|
||
This schema defines the properties of the instance JSON documents,
|
||
the required properties (id, name, and price), as well as an optional
|
||
property (tags). This also defines the link relations of the
|
||
instance JSON documents.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 5]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
3.1. Terminology
|
||
|
||
For this specification, *schema* will be used to denote a JSON Schema
|
||
definition, and an *instance* refers to a JSON value that the schema
|
||
will be describing and validating.
|
||
|
||
3.2. Design Considerations
|
||
|
||
The JSON Schema media type does not attempt to dictate the structure
|
||
of JSON representations that contain data, but rather provides a
|
||
separate format for flexibly communicating how a JSON representation
|
||
should be interpreted and validated, such that user agents can
|
||
properly understand acceptable structures and extrapolate hyperlink
|
||
information with the JSON document. It is acknowledged that JSON
|
||
documents come in a variety of structures, and JSON is unique in that
|
||
the structure of stored data structures often prescribes a non-
|
||
ambiguous definite JSON representation. Attempting to force a
|
||
specific structure is generally not viable, and therefore JSON Schema
|
||
allows for a great flexibility in the structure of the JSON data that
|
||
it describes.
|
||
|
||
This specification is protocol agnostic. The underlying protocol
|
||
(such as HTTP) should sufficiently define the semantics of the
|
||
client-server interface, the retrieval of resource representations
|
||
linked to by JSON representations, and modification of those
|
||
resources. The goal of this format is to sufficiently describe JSON
|
||
structures such that one can utilize existing information available
|
||
in existing JSON representations from a large variety of services
|
||
that leverage a representational state transfer architecture using
|
||
existing protocols.
|
||
|
||
4. Schema/Instance Association
|
||
|
||
JSON Schema instances are correlated to their schema by the
|
||
"describedby" relation, where the schema is defined to be the target
|
||
of the relation. Instance representations may be of the
|
||
"application/json" media type or any other subtype. Consequently,
|
||
dictating how an instance representation should specify the relation
|
||
to the schema is beyond the normative scope of this document (since
|
||
this document specifically defines the JSON Schema media type, and no
|
||
other), but it is recommended that instances specify their schema so
|
||
that user agents can interpret the instance representation and
|
||
messages may retain the self-descriptive characteristic, avoiding the
|
||
need for out-of-band information about instance data. Two approaches
|
||
are recommended for declaring the relation to the schema that
|
||
describes the meaning of a JSON instance's (or collection of
|
||
instances) structure. A MIME type parameter named "profile" or a
|
||
relation of "describedby" (which could be defined by a Link header)
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 6]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
may be used:
|
||
|
||
Content-Type: application/my-media-type+json;
|
||
profile=http://json.com/my-hyper-schema
|
||
|
||
or if the content is being transferred by a protocol (such as HTTP)
|
||
that provides headers, a Link header can be used:
|
||
|
||
Link: <http://json.com/my-hyper-schema>; rel="describedby"
|
||
|
||
Instances MAY specify multiple schemas, to indicate all the schemas
|
||
that are applicable to the data, and the data SHOULD be valid by all
|
||
the schemas. The instance data MAY have multiple schemas that it is
|
||
defined by (the instance data SHOULD be valid for those schemas). Or
|
||
if the document is a collection of instances, the collection MAY
|
||
contain instances from different schemas. When collections contain
|
||
heterogeneous instances, the "pathStart" attribute MAY be specified
|
||
in the schema to disambiguate which schema should be applied for each
|
||
item in the collection. However, ultimately, the mechanism for
|
||
referencing a schema is up to the media type of the instance
|
||
documents (if they choose to specify that schemas can be referenced).
|
||
|
||
4.1. Self-Descriptive Schema
|
||
|
||
JSON Schemas can themselves be described using JSON Schemas. A self-
|
||
describing JSON Schema for the core JSON Schema can be found at
|
||
http://json-schema.org/schema for the latest version or
|
||
http://json-schema.org/draft-03/schema for the draft-03 version. The
|
||
hyper schema self-description can be found at
|
||
http://json-schema.org/hyper-schema or
|
||
http://json-schema.org/draft-03/hyper-schema. All schemas used
|
||
within a protocol with media type definitions SHOULD include a MIME
|
||
parameter that refers to the self-descriptive hyper schema or another
|
||
schema that extends this hyper schema:
|
||
|
||
Content-Type: application/json;
|
||
profile=http://json-schema.org/draft-03/hyper-schema
|
||
|
||
5. Core Schema Definition
|
||
|
||
A JSON Schema is a JSON Object that defines various attributes
|
||
(including usage and valid values) of a JSON value. JSON Schema has
|
||
recursive capabilities; there are a number of elements in the
|
||
structure that allow for nested JSON Schemas.
|
||
|
||
An example JSON Schema definition could look like:
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 7]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
{
|
||
"description":"A person",
|
||
"type":"object",
|
||
|
||
"properties":{
|
||
"name":{"type":"string"},
|
||
"age" :{
|
||
"type":"integer",
|
||
"maximum":125
|
||
}
|
||
}
|
||
}
|
||
|
||
A JSON Schema object may have any of the following properties, called
|
||
schema attributes (all attributes are optional):
|
||
|
||
5.1. type
|
||
|
||
This attribute defines what the primitive type or the schema of the
|
||
instance MUST be in order to validate. This attribute can take one
|
||
of two forms:
|
||
|
||
Simple Types A string indicating a primitive or simple type. The
|
||
following are acceptable string values:
|
||
|
||
string Value MUST be a string.
|
||
|
||
number Value MUST be a number, floating point numbers are
|
||
allowed.
|
||
|
||
integer Value MUST be an integer, no floating point numbers are
|
||
allowed. This is a subset of the number type.
|
||
|
||
boolean Value MUST be a boolean.
|
||
|
||
object Value MUST be an object.
|
||
|
||
array Value MUST be an array.
|
||
|
||
null Value MUST be null. Note this is mainly for purpose of
|
||
being able use union types to define nullability. If this type
|
||
is not included in a union, null values are not allowed (the
|
||
primitives listed above do not allow nulls on their own).
|
||
|
||
any Value MAY be of any type including null.
|
||
|
||
If the property is not defined or is not in this list, then any
|
||
type of value is acceptable. Other type values MAY be used for
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 8]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
custom purposes, but minimal validators of the specification
|
||
implementation can allow any instance value on unknown type
|
||
values.
|
||
|
||
Union Types An array of two or more simple type definitions. Each
|
||
item in the array MUST be a simple type definition or a schema.
|
||
The instance value is valid if it is of the same type as one of
|
||
the simple type definitions, or valid by one of the schemas, in
|
||
the array.
|
||
|
||
For example, a schema that defines if an instance can be a string or
|
||
a number would be:
|
||
|
||
{"type":["string","number"]}
|
||
|
||
5.2. properties
|
||
|
||
This attribute is an object with property definitions that define the
|
||
valid values of instance object property values. When the instance
|
||
value is an object, the property values of the instance object MUST
|
||
conform to the property definitions in this object. In this object,
|
||
each property definition's value MUST be a schema, and the property's
|
||
name MUST be the name of the instance property that it defines. The
|
||
instance property value MUST be valid according to the schema from
|
||
the property definition. Properties are considered unordered, the
|
||
order of the instance properties MAY be in any order.
|
||
|
||
5.3. patternProperties
|
||
|
||
This attribute is an object that defines the schema for a set of
|
||
property names of an object instance. The name of each property of
|
||
this attribute's object is a regular expression pattern in the ECMA
|
||
262/Perl 5 format, while the value is a schema. If the pattern
|
||
matches the name of a property on the instance object, the value of
|
||
the instance's property MUST be valid against the pattern name's
|
||
schema value.
|
||
|
||
5.4. additionalProperties
|
||
|
||
This attribute defines a schema for all properties that are not
|
||
explicitly defined in an object type definition. If specified, the
|
||
value MUST be a schema or a boolean. If false is provided, no
|
||
additional properties are allowed beyond the properties defined in
|
||
the schema. The default value is an empty schema which allows any
|
||
value for additional properties.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 9]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
5.5. items
|
||
|
||
This attribute defines the allowed items in an instance array, and
|
||
MUST be a schema or an array of schemas. The default value is an
|
||
empty schema which allows any value for items in the instance array.
|
||
|
||
When this attribute value is a schema and the instance value is an
|
||
array, then all the items in the array MUST be valid according to the
|
||
schema.
|
||
|
||
When this attribute value is an array of schemas and the instance
|
||
value is an array, each position in the instance array MUST conform
|
||
to the schema in the corresponding position for this array. This
|
||
called tuple typing. When tuple typing is used, additional items are
|
||
allowed, disallowed, or constrained by the "additionalItems"
|
||
(Section 5.6) attribute using the same rules as
|
||
"additionalProperties" (Section 5.4) for objects.
|
||
|
||
5.6. additionalItems
|
||
|
||
This provides a definition for additional items in an array instance
|
||
when tuple definitions of the items is provided. This can be false
|
||
to indicate additional items in the array are not allowed, or it can
|
||
be a schema that defines the schema of the additional items.
|
||
|
||
5.7. required
|
||
|
||
This attribute indicates if the instance must have a value, and not
|
||
be undefined. This is false by default, making the instance
|
||
optional.
|
||
|
||
5.8. dependencies
|
||
|
||
This attribute is an object that defines the requirements of a
|
||
property on an instance object. If an object instance has a property
|
||
with the same name as a property in this attribute's object, then the
|
||
instance must be valid against the attribute's property value
|
||
(hereafter referred to as the "dependency value").
|
||
|
||
The dependency value can take one of two forms:
|
||
|
||
Simple Dependency If the dependency value is a string, then the
|
||
instance object MUST have a property with the same name as the
|
||
dependency value. If the dependency value is an array of strings,
|
||
then the instance object MUST have a property with the same name
|
||
as each string in the dependency value's array.
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 10]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
Schema Dependency If the dependency value is a schema, then the
|
||
instance object MUST be valid against the schema.
|
||
|
||
5.9. minimum
|
||
|
||
This attribute defines the minimum value of the instance property
|
||
when the type of the instance value is a number.
|
||
|
||
5.10. maximum
|
||
|
||
This attribute defines the maximum value of the instance property
|
||
when the type of the instance value is a number.
|
||
|
||
5.11. exclusiveMinimum
|
||
|
||
This attribute indicates if the value of the instance (if the
|
||
instance is a number) can not equal the number defined by the
|
||
"minimum" attribute. This is false by default, meaning the instance
|
||
value can be greater then or equal to the minimum value.
|
||
|
||
5.12. exclusiveMaximum
|
||
|
||
This attribute indicates if the value of the instance (if the
|
||
instance is a number) can not equal the number defined by the
|
||
"maximum" attribute. This is false by default, meaning the instance
|
||
value can be less then or equal to the maximum value.
|
||
|
||
5.13. minItems
|
||
|
||
This attribute defines the minimum number of values in an array when
|
||
the array is the instance value.
|
||
|
||
5.14. maxItems
|
||
|
||
This attribute defines the maximum number of values in an array when
|
||
the array is the instance value.
|
||
|
||
5.15. uniqueItems
|
||
|
||
This attribute indicates that all items in an array instance MUST be
|
||
unique (contains no two identical values).
|
||
|
||
Two instance are consider equal if they are both of the same type
|
||
and:
|
||
|
||
are null; or
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 11]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
are booleans/numbers/strings and have the same value; or
|
||
|
||
are arrays, contains the same number of items, and each item in
|
||
the array is equal to the corresponding item in the other array;
|
||
or
|
||
|
||
are objects, contains the same property names, and each property
|
||
in the object is equal to the corresponding property in the other
|
||
object.
|
||
|
||
5.16. pattern
|
||
|
||
When the instance value is a string, this provides a regular
|
||
expression that a string instance MUST match in order to be valid.
|
||
Regular expressions SHOULD follow the regular expression
|
||
specification from ECMA 262/Perl 5
|
||
|
||
5.17. minLength
|
||
|
||
When the instance value is a string, this defines the minimum length
|
||
of the string.
|
||
|
||
5.18. maxLength
|
||
|
||
When the instance value is a string, this defines the maximum length
|
||
of the string.
|
||
|
||
5.19. enum
|
||
|
||
This provides an enumeration of all possible values that are valid
|
||
for the instance property. This MUST be an array, and each item in
|
||
the array represents a possible value for the instance value. If
|
||
this attribute is defined, the instance value MUST be one of the
|
||
values in the array in order for the schema to be valid. Comparison
|
||
of enum values uses the same algorithm as defined in "uniqueItems"
|
||
(Section 5.15).
|
||
|
||
5.20. default
|
||
|
||
This attribute defines the default value of the instance when the
|
||
instance is undefined.
|
||
|
||
5.21. title
|
||
|
||
This attribute is a string that provides a short description of the
|
||
instance property.
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 12]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
5.22. description
|
||
|
||
This attribute is a string that provides a full description of the of
|
||
purpose the instance property.
|
||
|
||
5.23. format
|
||
|
||
This property defines the type of data, content type, or microformat
|
||
to be expected in the instance property values. A format attribute
|
||
MAY be one of the values listed below, and if so, SHOULD adhere to
|
||
the semantics describing for the format. A format SHOULD only be
|
||
used to give meaning to primitive types (string, integer, number, or
|
||
boolean). Validators MAY (but are not required to) validate that the
|
||
instance values conform to a format. The following formats are
|
||
predefined:
|
||
|
||
date-time This SHOULD be a date in ISO 8601 format of YYYY-MM-
|
||
DDThh:mm:ssZ in UTC time. This is the recommended form of date/
|
||
timestamp.
|
||
|
||
date This SHOULD be a date in the format of YYYY-MM-DD. It is
|
||
recommended that you use the "date-time" format instead of "date"
|
||
unless you need to transfer only the date part.
|
||
|
||
time This SHOULD be a time in the format of hh:mm:ss. It is
|
||
recommended that you use the "date-time" format instead of "time"
|
||
unless you need to transfer only the time part.
|
||
|
||
utc-millisec This SHOULD be the difference, measured in
|
||
milliseconds, between the specified time and midnight, 00:00 of
|
||
January 1, 1970 UTC. The value SHOULD be a number (integer or
|
||
float).
|
||
|
||
regex A regular expression, following the regular expression
|
||
specification from ECMA 262/Perl 5.
|
||
|
||
color This is a CSS color (like "#FF0000" or "red"), based on CSS
|
||
2.1 [W3C.CR-CSS21-20070719].
|
||
|
||
style This is a CSS style definition (like "color: red; background-
|
||
color:#FFF"), based on CSS 2.1 [W3C.CR-CSS21-20070719].
|
||
|
||
phone This SHOULD be a phone number (format MAY follow E.123).
|
||
|
||
uri This value SHOULD be a URI..
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 13]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
email This SHOULD be an email address.
|
||
|
||
ip-address This SHOULD be an ip version 4 address.
|
||
|
||
ipv6 This SHOULD be an ip version 6 address.
|
||
|
||
host-name This SHOULD be a host-name.
|
||
|
||
Additional custom formats MAY be created. These custom formats MAY
|
||
be expressed as an URI, and this URI MAY reference a schema of that
|
||
format.
|
||
|
||
5.24. divisibleBy
|
||
|
||
This attribute defines what value the number instance must be
|
||
divisible by with no remainder (the result of the division must be an
|
||
integer.) The value of this attribute SHOULD NOT be 0.
|
||
|
||
5.25. disallow
|
||
|
||
This attribute takes the same values as the "type" attribute, however
|
||
if the instance matches the type or if this value is an array and the
|
||
instance matches any type or schema in the array, then this instance
|
||
is not valid.
|
||
|
||
5.26. extends
|
||
|
||
The value of this property MUST be another schema which will provide
|
||
a base schema which the current schema will inherit from. The
|
||
inheritance rules are such that any instance that is valid according
|
||
to the current schema MUST be valid according to the referenced
|
||
schema. This MAY also be an array, in which case, the instance MUST
|
||
be valid for all the schemas in the array. A schema that extends
|
||
another schema MAY define additional attributes, constrain existing
|
||
attributes, or add other constraints.
|
||
|
||
Conceptually, the behavior of extends can be seen as validating an
|
||
instance against all constraints in the extending schema as well as
|
||
the extended schema(s). More optimized implementations that merge
|
||
schemas are possible, but are not required. An example of using
|
||
"extends":
|
||
|
||
{
|
||
"description":"An adult",
|
||
"properties":{"age":{"minimum": 21}},
|
||
"extends":"person"
|
||
}
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 14]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
{
|
||
"description":"Extended schema",
|
||
"properties":{"deprecated":{"type": "boolean"}},
|
||
"extends":"http://json-schema.org/draft-03/schema"
|
||
}
|
||
|
||
5.27. id
|
||
|
||
This attribute defines the current URI of this schema (this attribute
|
||
is effectively a "self" link). This URI MAY be relative or absolute.
|
||
If the URI is relative it is resolved against the current URI of the
|
||
parent schema it is contained in. If this schema is not contained in
|
||
any parent schema, the current URI of the parent schema is held to be
|
||
the URI under which this schema was addressed. If id is missing, the
|
||
current URI of a schema is defined to be that of the parent schema.
|
||
The current URI of the schema is also used to construct relative
|
||
references such as for $ref.
|
||
|
||
5.28. $ref
|
||
|
||
This attribute defines a URI of a schema that contains the full
|
||
representation of this schema. When a validator encounters this
|
||
attribute, it SHOULD replace the current schema with the schema
|
||
referenced by the value's URI (if known and available) and re-
|
||
validate the instance. This URI MAY be relative or absolute, and
|
||
relative URIs SHOULD be resolved against the URI of the current
|
||
schema.
|
||
|
||
5.29. $schema
|
||
|
||
This attribute defines a URI of a JSON Schema that is the schema of
|
||
the current schema. When this attribute is defined, a validator
|
||
SHOULD use the schema referenced by the value's URI (if known and
|
||
available) when resolving Hyper Schema (Section 6) links
|
||
(Section 6.1).
|
||
|
||
A validator MAY use this attribute's value to determine which version
|
||
of JSON Schema the current schema is written in, and provide the
|
||
appropriate validation features and behavior. Therefore, it is
|
||
RECOMMENDED that all schema authors include this attribute in their
|
||
schemas to prevent conflicts with future JSON Schema specification
|
||
changes.
|
||
|
||
6. Hyper Schema
|
||
|
||
The following attributes are specified in addition to those
|
||
attributes that already provided by the core schema with the specific
|
||
purpose of informing user agents of relations between resources based
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 15]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
on JSON data. Just as with JSON schema attributes, all the
|
||
attributes in hyper schemas are optional. Therefore, an empty object
|
||
is a valid (non-informative) schema, and essentially describes plain
|
||
JSON (no constraints on the structures). Addition of attributes
|
||
provides additive information for user agents.
|
||
|
||
6.1. links
|
||
|
||
The value of the links property MUST be an array, where each item in
|
||
the array is a link description object which describes the link
|
||
relations of the instances.
|
||
|
||
6.1.1. Link Description Object
|
||
|
||
A link description object is used to describe link relations. In the
|
||
context of a schema, it defines the link relations of the instances
|
||
of the schema, and can be parameterized by the instance values. The
|
||
link description format can be used on its own in regular (non-schema
|
||
documents), and use of this format can be declared by referencing the
|
||
normative link description schema as the the schema for the data
|
||
structure that uses the links. The URI of the normative link
|
||
description schema is: http://json-schema.org/links (latest version)
|
||
or http://json-schema.org/draft-03/links (draft-03 version).
|
||
|
||
6.1.1.1. href
|
||
|
||
The value of the "href" link description property indicates the
|
||
target URI of the related resource. The value of the instance
|
||
property SHOULD be resolved as a URI-Reference per RFC 3986 [RFC3986]
|
||
and MAY be a relative URI. The base URI to be used for relative
|
||
resolution SHOULD be the URI used to retrieve the instance object
|
||
(not the schema) when used within a schema. Also, when links are
|
||
used within a schema, the URI SHOULD be parametrized by the property
|
||
values of the instance object, if property values exist for the
|
||
corresponding variables in the template (otherwise they MAY be
|
||
provided from alternate sources, like user input).
|
||
|
||
Instance property values SHOULD be substituted into the URIs where
|
||
matching braces ('{', '}') are found surrounding zero or more
|
||
characters, creating an expanded URI. Instance property value
|
||
substitutions are resolved by using the text between the braces to
|
||
denote the property name from the instance to get the value to
|
||
substitute. For example, if an href value is defined:
|
||
|
||
http://somesite.com/{id}
|
||
|
||
Then it would be resolved by replace the value of the "id" property
|
||
value from the instance object. If the value of the "id" property
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 16]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
was "45", the expanded URI would be:
|
||
|
||
http://somesite.com/45
|
||
|
||
If matching braces are found with the string "@" (no quotes) between
|
||
the braces, then the actual instance value SHOULD be used to replace
|
||
the braces, rather than a property value. This should only be used
|
||
in situations where the instance is a scalar (string, boolean, or
|
||
number), and not for objects or arrays.
|
||
|
||
6.1.1.2. rel
|
||
|
||
The value of the "rel" property indicates the name of the relation to
|
||
the target resource. The relation to the target SHOULD be
|
||
interpreted as specifically from the instance object that the schema
|
||
(or sub-schema) applies to, not just the top level resource that
|
||
contains the object within its hierarchy. If a resource JSON
|
||
representation contains a sub object with a property interpreted as a
|
||
link, that sub-object holds the relation with the target. A relation
|
||
to target from the top level resource MUST be indicated with the
|
||
schema describing the top level JSON representation.
|
||
|
||
Relationship definitions SHOULD NOT be media type dependent, and
|
||
users are encouraged to utilize existing accepted relation
|
||
definitions, including those in existing relation registries (see RFC
|
||
4287 [RFC4287]). However, we define these relations here for clarity
|
||
of normative interpretation within the context of JSON hyper schema
|
||
defined relations:
|
||
|
||
self If the relation value is "self", when this property is
|
||
encountered in the instance object, the object represents a
|
||
resource and the instance object is treated as a full
|
||
representation of the target resource identified by the specified
|
||
URI.
|
||
|
||
full This indicates that the target of the link is the full
|
||
representation for the instance object. The object that contains
|
||
this link possibly may not be the full representation.
|
||
|
||
describedby This indicates the target of the link is the schema for
|
||
the instance object. This MAY be used to specifically denote the
|
||
schemas of objects within a JSON object hierarchy, facilitating
|
||
polymorphic type data structures.
|
||
|
||
root This relation indicates that the target of the link SHOULD be
|
||
treated as the root or the body of the representation for the
|
||
purposes of user agent interaction or fragment resolution. All
|
||
other properties of the instance objects can be regarded as meta-
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 17]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
data descriptions for the data.
|
||
|
||
The following relations are applicable for schemas (the schema as the
|
||
"from" resource in the relation):
|
||
|
||
instances This indicates the target resource that represents
|
||
collection of instances of a schema.
|
||
|
||
create This indicates a target to use for creating new instances of
|
||
a schema. This link definition SHOULD be a submission link with a
|
||
non-safe method (like POST).
|
||
|
||
For example, if a schema is defined:
|
||
|
||
{
|
||
"links": [
|
||
{
|
||
"rel": "self"
|
||
"href": "{id}"
|
||
},
|
||
{
|
||
"rel": "up"
|
||
"href": "{upId}"
|
||
},
|
||
{
|
||
"rel": "children"
|
||
"href": "?upId={id}"
|
||
}
|
||
]
|
||
}
|
||
|
||
And if a collection of instance resource's JSON representation was
|
||
retrieved:
|
||
|
||
GET /Resource/
|
||
|
||
[
|
||
{
|
||
"id": "thing",
|
||
"upId": "parent"
|
||
},
|
||
{
|
||
"id": "thing2",
|
||
"upId": "parent"
|
||
}
|
||
]
|
||
|
||
This would indicate that for the first item in the collection, its
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 18]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
own (self) URI would resolve to "/Resource/thing" and the first
|
||
item's "up" relation SHOULD be resolved to the resource at
|
||
"/Resource/parent". The "children" collection would be located at
|
||
"/Resource/?upId=thing".
|
||
|
||
6.1.1.3. targetSchema
|
||
|
||
This property value is a schema that defines the expected structure
|
||
of the JSON representation of the target of the link.
|
||
|
||
6.1.1.4. Submission Link Properties
|
||
|
||
The following properties also apply to link definition objects, and
|
||
provide functionality analogous to HTML forms, in providing a means
|
||
for submitting extra (often user supplied) information to send to a
|
||
server.
|
||
|
||
6.1.1.4.1. method
|
||
|
||
This attribute defines which method can be used to access the target
|
||
resource. In an HTTP environment, this would be "GET" or "POST"
|
||
(other HTTP methods such as "PUT" and "DELETE" have semantics that
|
||
are clearly implied by accessed resources, and do not need to be
|
||
defined here). This defaults to "GET".
|
||
|
||
6.1.1.4.2. enctype
|
||
|
||
If present, this property indicates a query media type format that
|
||
the server supports for querying or posting to the collection of
|
||
instances at the target resource. The query can be suffixed to the
|
||
target URI to query the collection with property-based constraints on
|
||
the resources that SHOULD be returned from the server or used to post
|
||
data to the resource (depending on the method). For example, with
|
||
the following schema:
|
||
|
||
{
|
||
"links":[
|
||
{
|
||
"enctype":"application/x-www-form-urlencoded",
|
||
"method":"GET",
|
||
"href":"/Product/",
|
||
"properties":{
|
||
"name":{"description":"name of the product"}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 19]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
This indicates that the client can query the server for instances
|
||
that have a specific name:
|
||
|
||
/Product/?name=Slinky
|
||
|
||
If no enctype or method is specified, only the single URI specified
|
||
by the href property is defined. If the method is POST,
|
||
"application/json" is the default media type.
|
||
|
||
6.1.1.4.3. schema
|
||
|
||
This attribute contains a schema which defines the acceptable
|
||
structure of the submitted request (for a GET request, this schema
|
||
would define the properties for the query string and for a POST
|
||
request, this would define the body).
|
||
|
||
6.2. fragmentResolution
|
||
|
||
This property indicates the fragment resolution protocol to use for
|
||
resolving fragment identifiers in URIs within the instance
|
||
representations. This applies to the instance object URIs and all
|
||
children of the instance object's URIs. The default fragment
|
||
resolution protocol is "slash-delimited", which is defined below.
|
||
Other fragment resolution protocols MAY be used, but are not defined
|
||
in this document.
|
||
|
||
The fragment identifier is based on RFC 2396, Sec 5 [RFC2396], and
|
||
defines the mechanism for resolving references to entities within a
|
||
document.
|
||
|
||
6.2.1. slash-delimited fragment resolution
|
||
|
||
With the slash-delimited fragment resolution protocol, the fragment
|
||
identifier is interpreted as a series of property reference tokens
|
||
that start with and are delimited by the "/" character (\x2F). Each
|
||
property reference token is a series of unreserved or escaped URI
|
||
characters. Each property reference token SHOULD be interpreted,
|
||
starting from the beginning of the fragment identifier, as a path
|
||
reference in the target JSON structure. The final target value of
|
||
the fragment can be determined by starting with the root of the JSON
|
||
structure from the representation of the resource identified by the
|
||
pre-fragment URI. If the target is a JSON object, then the new
|
||
target is the value of the property with the name identified by the
|
||
next property reference token in the fragment. If the target is a
|
||
JSON array, then the target is determined by finding the item in
|
||
array the array with the index defined by the next property reference
|
||
token (which MUST be a number). The target is successively updated
|
||
for each property reference token, until the entire fragment has been
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 20]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
traversed.
|
||
|
||
Property names SHOULD be URI-encoded. In particular, any "/" in a
|
||
property name MUST be encoded to avoid being interpreted as a
|
||
property delimiter.
|
||
|
||
For example, for the following JSON representation:
|
||
|
||
{
|
||
"foo":{
|
||
"anArray":[
|
||
{"prop":44}
|
||
],
|
||
"another prop":{
|
||
"baz":"A string"
|
||
}
|
||
}
|
||
}
|
||
|
||
The following fragment identifiers would be resolved:
|
||
|
||
fragment identifier resolution
|
||
------------------- ----------
|
||
# self, the root of the resource itself
|
||
#/foo the object referred to by the foo property
|
||
#/foo/another%20prop the object referred to by the "another prop"
|
||
property of the object referred to by the
|
||
"foo" property
|
||
#/foo/another%20prop/baz the string referred to by the value of "baz"
|
||
property of the "another prop" property of
|
||
the object referred to by the "foo" property
|
||
#/foo/anArray/0 the first object in the "anArray" array
|
||
|
||
6.2.2. dot-delimited fragment resolution
|
||
|
||
The dot-delimited fragment resolution protocol is the same as slash-
|
||
delimited fragment resolution protocol except that the "." character
|
||
(\x2E) is used as the delimiter between property names (instead of
|
||
"/") and the path does not need to start with a ".". For example,
|
||
#.foo and #foo are a valid fragment identifiers for referencing the
|
||
value of the foo propery.
|
||
|
||
6.3. readonly
|
||
|
||
This attribute indicates that the instance property SHOULD NOT be
|
||
changed. Attempts by a user agent to modify the value of this
|
||
property are expected to be rejected by a server.
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 21]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
6.4. contentEncoding
|
||
|
||
If the instance property value is a string, this attribute defines
|
||
that the string SHOULD be interpreted as binary data and decoded
|
||
using the encoding named by this schema property. RFC 2045, Sec 6.1
|
||
[RFC2045] lists the possible values for this property.
|
||
|
||
6.5. pathStart
|
||
|
||
This attribute is a URI that defines what the instance's URI MUST
|
||
start with in order to validate. The value of the "pathStart"
|
||
attribute MUST be resolved as per RFC 3986, Sec 5 [RFC3986], and is
|
||
relative to the instance's URI.
|
||
|
||
When multiple schemas have been referenced for an instance, the user
|
||
agent can determine if this schema is applicable for a particular
|
||
instance by determining if the URI of the instance begins with the
|
||
the value of the "pathStart" attribute. If the URI of the instance
|
||
does not start with this URI, or if another schema specifies a
|
||
starting URI that is longer and also matches the instance, this
|
||
schema SHOULD NOT be applied to the instance. Any schema that does
|
||
not have a pathStart attribute SHOULD be considered applicable to all
|
||
the instances for which it is referenced.
|
||
|
||
6.6. mediaType
|
||
|
||
This attribute defines the media type of the instance representations
|
||
that this schema is defining.
|
||
|
||
7. Security Considerations
|
||
|
||
This specification is a sub-type of the JSON format, and consequently
|
||
the security considerations are generally the same as RFC 4627
|
||
[RFC4627]. However, an additional issue is that when link relation
|
||
of "self" is used to denote a full representation of an object, the
|
||
user agent SHOULD NOT consider the representation to be the
|
||
authoritative representation of the resource denoted by the target
|
||
URI if the target URI is not equivalent to or a sub-path of the the
|
||
URI used to request the resource representation which contains the
|
||
target URI with the "self" link. For example, if a hyper schema was
|
||
defined:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 22]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
{
|
||
"links":[
|
||
{
|
||
"rel":"self",
|
||
"href":"{id}"
|
||
}
|
||
]
|
||
}
|
||
|
||
And a resource was requested from somesite.com:
|
||
|
||
GET /foo/
|
||
|
||
With a response of:
|
||
|
||
Content-Type: application/json; profile=/schema-for-this-data
|
||
[
|
||
{"id":"bar", "name":"This representation can be safely treated \
|
||
as authoritative "},
|
||
{"id":"/baz", "name":"This representation should not be treated as \
|
||
authoritative the user agent should make request the resource\
|
||
from "/baz" to ensure it has the authoritative representation"},
|
||
{"id":"http://othersite.com/something", "name":"This representation\
|
||
should also not be treated as authoritative and the target\
|
||
resource representation should be retrieved for the\
|
||
authoritative representation"}
|
||
]
|
||
|
||
8. IANA Considerations
|
||
|
||
The proposed MIME media type for JSON Schema is "application/
|
||
schema+json".
|
||
|
||
Type name: application
|
||
|
||
Subtype name: schema+json
|
||
|
||
Required parameters: profile
|
||
|
||
The value of the profile parameter SHOULD be a URI (relative or
|
||
absolute) that refers to the schema used to define the structure of
|
||
this structure (the meta-schema). Normally the value would be
|
||
http://json-schema.org/draft-03/hyper-schema, but it is allowable to
|
||
use other schemas that extend the hyper schema's meta- schema.
|
||
|
||
Optional parameters: pretty
|
||
|
||
The value of the pretty parameter MAY be true or false to indicate if
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 23]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
additional whitespace has been included to make the JSON
|
||
representation easier to read.
|
||
|
||
8.1. Registry of Link Relations
|
||
|
||
This registry is maintained by IANA per RFC 4287 [RFC4287] and this
|
||
specification adds four values: "full", "create", "instances",
|
||
"root". New assignments are subject to IESG Approval, as outlined in
|
||
RFC 5226 [RFC5226]. Requests should be made by email to IANA, which
|
||
will then forward the request to the IESG, requesting approval.
|
||
|
||
9. References
|
||
|
||
9.1. Normative References
|
||
|
||
[RFC2045] Freed, N. and N. Borenstein,
|
||
"Multipurpose Internet Mail
|
||
Extensions (MIME) Part One: Format
|
||
of Internet Message Bodies",
|
||
RFC 2045, November 1996.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in
|
||
RFCs to Indicate Requirement
|
||
Levels", BCP 14, RFC 2119,
|
||
March 1997.
|
||
|
||
[RFC2396] Berners-Lee, T., Fielding, R., and
|
||
L. Masinter, "Uniform Resource
|
||
Identifiers (URI): Generic
|
||
Syntax", RFC 2396, August 1998.
|
||
|
||
[RFC3339] Klyne, G., Ed. and C. Newman,
|
||
"Date and Time on the Internet:
|
||
Timestamps", RFC 3339, July 2002.
|
||
|
||
[RFC3986] Berners-Lee, T., Fielding, R., and
|
||
L. Masinter, "Uniform Resource
|
||
Identifier (URI): Generic Syntax",
|
||
STD 66, RFC 3986, January 2005.
|
||
|
||
[RFC4287] Nottingham, M., Ed. and R. Sayre,
|
||
Ed., "The Atom Syndication
|
||
Format", RFC 4287, December 2005.
|
||
|
||
9.2. Informative References
|
||
|
||
[RFC2616] Fielding, R., Gettys, J., Mogul,
|
||
J., Frystyk, H., Masinter, L.,
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 24]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
Leach, P., and T. Berners-Lee,
|
||
"Hypertext Transfer Protocol --
|
||
HTTP/1.1", RFC 2616, June 1999.
|
||
|
||
[RFC4627] Crockford, D., "The application/
|
||
json Media Type for JavaScript
|
||
Object Notation (JSON)", RFC 4627,
|
||
July 2006.
|
||
|
||
[RFC5226] Narten, T. and H. Alvestrand,
|
||
"Guidelines for Writing an IANA
|
||
Considerations Section in RFCs",
|
||
BCP 26, RFC 5226, May 2008.
|
||
|
||
[I-D.hammer-discovery] Hammer-Lahav, E., "LRDD: Link-
|
||
based Resource Descriptor
|
||
Discovery",
|
||
draft-hammer-discovery-06 (work in
|
||
progress), May 2010.
|
||
|
||
[I-D.gregorio-uritemplate] Gregorio, J., Fielding, R.,
|
||
Hadley, M., and M. Nottingham,
|
||
"URI Template",
|
||
draft-gregorio-uritemplate-04
|
||
(work in progress), March 2010.
|
||
|
||
[I-D.nottingham-http-link-header] Nottingham, M., "Web Linking", dra
|
||
ft-nottingham-http-link-header-10
|
||
(work in progress), May 2010.
|
||
|
||
[W3C.REC-html401-19991224] Raggett, D., Hors, A., and I.
|
||
Jacobs, "HTML 4.01 Specification",
|
||
World Wide Web Consortium Recommen
|
||
dation REC-html401-19991224,
|
||
December 1999, <http://www.w3.org/
|
||
TR/1999/REC-html401-19991224>.
|
||
|
||
[W3C.CR-CSS21-20070719] Hickson, I., Lie, H., Celik, T.,
|
||
and B. Bos, "Cascading Style
|
||
Sheets Level 2 Revision 1 (CSS
|
||
2.1) Specification", World Wide
|
||
Web Consortium CR CR-CSS21-
|
||
20070719, July 2007, <http://
|
||
www.w3.org/TR/2007/
|
||
CR-CSS21-20070719>.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 25]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
Appendix A. Change Log
|
||
|
||
draft-03
|
||
|
||
* Added example and verbiage to "extends" attribute.
|
||
|
||
* Defined slash-delimited to use a leading slash.
|
||
|
||
* Made "root" a relation instead of an attribute.
|
||
|
||
* Removed address values, and MIME media type from format to
|
||
reduce confusion (mediaType already exists, so it can be used
|
||
for MIME types).
|
||
|
||
* Added more explanation of nullability.
|
||
|
||
* Removed "alternate" attribute.
|
||
|
||
* Upper cased many normative usages of must, may, and should.
|
||
|
||
* Replaced the link submission "properties" attribute to "schema"
|
||
attribute.
|
||
|
||
* Replaced "optional" attribute with "required" attribute.
|
||
|
||
* Replaced "maximumCanEqual" attribute with "exclusiveMaximum"
|
||
attribute.
|
||
|
||
* Replaced "minimumCanEqual" attribute with "exclusiveMinimum"
|
||
attribute.
|
||
|
||
* Replaced "requires" attribute with "dependencies" attribute.
|
||
|
||
* Moved "contentEncoding" attribute to hyper schema.
|
||
|
||
* Added "additionalItems" attribute.
|
||
|
||
* Added "id" attribute.
|
||
|
||
* Switched self-referencing variable substitution from "-this" to
|
||
"@" to align with reserved characters in URI template.
|
||
|
||
* Added "patternProperties" attribute.
|
||
|
||
* Schema URIs are now namespace versioned.
|
||
|
||
* Added "$ref" and "$schema" attributes.
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 26]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
draft-02
|
||
|
||
* Replaced "maxDecimal" attribute with "divisibleBy" attribute.
|
||
|
||
* Added slash-delimited fragment resolution protocol and made it
|
||
the default.
|
||
|
||
* Added language about using links outside of schemas by
|
||
referencing its normative URI.
|
||
|
||
* Added "uniqueItems" attribute.
|
||
|
||
* Added "targetSchema" attribute to link description object.
|
||
|
||
draft-01
|
||
|
||
* Fixed category and updates from template.
|
||
|
||
draft-00
|
||
|
||
* Initial draft.
|
||
|
||
Appendix B. Open Issues
|
||
|
||
Should we give a preference to MIME headers over Link headers (or
|
||
only use one)?
|
||
|
||
Should "root" be a MIME parameter?
|
||
|
||
Should "format" be renamed to "mediaType" or "contentType" to
|
||
reflect the usage MIME media types that are allowed?
|
||
|
||
How should dates be handled?
|
||
|
||
Authors' Addresses
|
||
|
||
Kris Zyp (editor)
|
||
SitePen (USA)
|
||
530 Lytton Avenue
|
||
Palo Alto, CA 94301
|
||
USA
|
||
|
||
Phone: +1 650 968 8787
|
||
EMail: kris@sitepen.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 27]
|
||
|
||
Internet-Draft JSON Schema Media Type November 2010
|
||
|
||
|
||
Gary Court
|
||
Calgary, AB
|
||
Canada
|
||
|
||
EMail: gary.court@gmail.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Zyp & Court Expires May 26, 2011 [Page 28]
|
||
|
||
|