Giter Site home page Giter Site logo

kami-juan / ans-schema Goto Github PK

View Code? Open in Web Editor NEW

This project forked from washingtonpost/ans-schema

0.0 0.0 0.0 2.71 MB

JSON schema definition and supporting example/validation code for The Washington Post's ANS specification

License: MIT License

JavaScript 100.00%

ans-schema's Introduction

ans-schema

JSON schema definition and supporting example/validation code for The Washington Post's ANS specification

NOTE This schema is in development and subject to change.

Overview

ANS ("Arc Native Specification") is the collection of schema documents that comprise the Washington Post's definition of "content", in so far as content is passed back and forth between systems in the Arc ecosystem of applications.

The current production version of ANS is 0.10.9

The current development version of ANS is 0.10.10

Schema files

ANS Schema files are defined with the JSON Schema specification. Schemas are defined in individual files under the src/main/resrouces/schema/ans/version/ directory.

Small, self-contained, attributes such as "had copyright" or "had unique id" are modeled as traits, which are combined together or applied directly to more complicated schema objects for the purpose of re-usability. The "content.json" schema, for example, composes the traits "credit", "locale", "location", and "copyright".

One can use a variety of third party tools to validate their content against the schema files hosted here on github publicly, such as Ajv.

Examples

A few examples are provided of content documents that validate against the Washington Post ANS schema:

  1. An Example Story
  2. An Example Video
  3. An Example Image

Contributing

See the contributing documentation for information about how to suggest changes to the ANS schema.

Validating Locally

This project contains a node library that can be used to validate ANS documents locally. It is the same validator used in the ANS Service: http://ans.arc2.nile.works/validate/0.9.0

You can run the validator on the command line from the project directory to validate an ANS document:

npm install
npm run-script ans -- --ansdata='{"type":"story", "version":"0.8.1"}' --version=0.10.3 validate

[
  {
    "keyword": "enum",
    "dataPath": ".version",
    "schemaPath": "https://raw.githubusercontent.com/washingtonpost/ans-schema/master/src/main/resources/schema/ans/0.10.3/traits/trait_version.json/enum",
    "params": {},
    "message": "should be equal to one of values"
  }
]

A file can also be used as input:

npm run-script ans -- --ansfile=test.json --version=0.10.3 validate

You can also load the validator as a library in your node project:

var ans = require('@washingtonpost/ans-schema');

ans.getValidatorForVersion('0.10.3', function(err, validator) {
  var errors = validator.validate({"type":"story", "version":"0.5.8"});

  if (errors.length > 0) {
    console.log("There were some errors: " + JSON.stringify(errors));
  }
  else {
    console.log("It's valid!");
  }
});

Other Commands

upvert

Converts a valid document in an old version of ANS to newer version.

npm run-script ans -- --ansdata='{"type":"story", "version":"0.5.0", "content_elements":[{"type":"text", "content": "Foo!", "additonal_properties": { "foo":"bar"}}], "taxonomy":{"sections":[{ "type": "section", "version":"0.5.0"}]}}' upvert

{
  "type": "story",
  "version": "0.10.3",
  "content_elements": [
    {
      "type": "text",
      "content": "Foo!",
      "additional_properties": {
        "foo": "bar"
      }
    }
  ],
  "taxonomy": {
    "sites": [
      {
        "additional_properties": {
          "type": "section"
        },
        "version": "0.10.3",
        "type": "site",
        "name": "(unnamed)",
        "primary": false
      }
    ],
    "tags": []
  }
}

sync

Fixes an invalid document composed of valid sub-documents of differing ANS versions. Essentially this converts a very specific kind of invalid document to a valid one by selective upverting.

npm run-script ans -- --ansdata='{"type":"story", "version":"0.10.3", "content_elements":[{"type":"gallery", "version":"0.8.1", "content_elements":[ {"type":"image", "version":"0.8.1", "url":"http://foo.com/img.jpg"}]}]}' sync

{
  "type": "story",
  "version": "0.10.3",
  "content_elements": [
    {
      "type": "gallery",
      "version": "0.10.3",
      "content_elements": [
        {
          "type": "image",
          "version": "0.10.3",
          "url": "http://foo.com/img.jpg"
        }
      ]
    }
  ]
}

Creating a new ANS version

The script to create a new version: npm run-script ans -- --version=x.xx.x create

After running this, if you've created a new major or minor version, you'll need to update line 19 in this file so that the validate endpoint will work: lib/validator.js.

Make sure to also add a test file here: tests/fixtures/schema/. You can copy over the previous test file (schema-tests-xx.js) and rename it with your version number. When people open PRs for new schema changes, they can add tests to that file.

ans-schema's People

Contributors

anaisfelt avatar brendaneamon avatar chenghsinw avatar cselvaraj avatar darful avatar epascarello avatar fenstamaker avatar gengel avatar hartmanc-wp avatar jimas14 avatar jpblair avatar manginav avatar meg-delaunay avatar mfattoru avatar michaelguild13 avatar michaelholm avatar nwdavis avatar paoamaralwz avatar rgfindl avatar robpc avatar ryangladstone avatar taiweituan avatar tbrick855 avatar tvaughan77 avatar vgritsenko avatar wapo-omar-khan avatar williamslm avatar willvanwazer avatar wmtylerdavis avatar yury-sannikov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.