Skip to content
JSON Hyper-Schema module
JavaScript CSS
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
test
.gitignore
History.md
Makefile
Readme.md
component.json
index.js
package.json

Readme.md

json-schema-hyper

Please note this library is not ready for production use.

JSON Hyper-Schema, as specified in the IETF Draft spec.

This component extends the behavior of JSON Schema, as implemented in json-schema-core, providing

  • parser classes for links (Links, Link).
  • a method for resolving link templates against an instance (resolveLinks)
  • link finder methods for typical cases (links.rel, links.mediaType, links.alternate), as well as generic links.find(fn) and links.select(fn)
  • addressability from the schema (e.g. schema.$('#/links/0'))
  • dereferencing JSON references used in either "links" itself or in individual links or link attributes, or in "media" subtrees.

Note that this component does not deal with aspects of the spec related to HTTP request/response, e.g. schema and targetSchema pre- and post- validation, setting Accept headers, instance correlation via HTTP response headers, etc. For this, see json-schema-agent.

Note also this component does not depend on JSON Schema validation, which is implemented as a separate core plugin (json-schema-valid).

Installation

component:

$ component install ericgj/json-schema-hyper

npm:

$ npm install json-schema-hyper-component

Example

  var core = require('json-schema-core')
    , hyper = require('json-schema-hyper')
    , Schema = core.Schema

  Schema.use(hyper);

  var schema = new Schema().parse( schemaObject );

  // resolve links in root path of instance, returns a Links object
  // or an array of Links objects if the root path of the instance is an array
  var links = schema.resolveLinks( instanceObject );

  // find the first link with rel == 'search'
  var searchLink = links.rel('search');

  // find the first link with mediaType == 'application/xml'
  var altLink = links.mediaType('application/xml');

  // find the first link rel == 'alternate' and mediaType == 'application/xml',
  // with method == 'GET'
  var rssLink = links.alternate('application/atom+xml', {method: 'GET'});


  // or simply use correlation methods as shortcuts to the above

  var correlation = schema.bind(instanceObject);

  correlation.links();
  correlation.rel('search');
  correlation.mediaType('application/xml');
  correlation.alternate('application/atom+xml', {method: 'GET'});

API

TODO

  • Add pre-processing of URI templates, as defined in section 5.1.1.1 of the spec.

License

MIT

Something went wrong with that request. Please try again.