/node-schema-org

A node.js library that retrieves, parses and provides all schemas from schema.org

Primary LanguageJavaScript

node-schema-org

A node.js library that retrieves, parses and provides all schemas from schema.org

Installation

Installing npm (node package manager)

  curl http://npmjs.org/install.sh | sh

Installing node-schema-org

  [sudo] npm install schema-org

Motivation

Although there is some debate from the W3C et al right now, when I came across schema.org I thought: "wow, what a gold mine of potential data formats to use in my applications." Then I looked at the site and thought: "Y U NO GIVE ME JSON FORMAT!?!?!" So I wrote this. It uses some other awesome node.js libraries:

  • jsdom: CommonJS implementation of the DOM intended to be platform independent and as minimal/light as possible while completely adhering to the w3c DOM specifications.
  • neuron: The simplest possible event driven job manager, FIFO queue, and "task based cache" in node.js
  • optimist: Light-weight option parsing for node.js
  • request: Simplified HTTP request client.
  • winston: A multi-transport async logging library for node.js

Usage

Right now, node-schema-org is implemented as a bin script which can be run after you install this module:

  $ read-schema-org

Here is a sample of the output (all of the pre-parsed schemas are available here):

  warn:   Removing all schemas in /path/to/node-schema-org/schemas
  info:   Spawning: node /path/to/node-schema-org/list-schemas.js
  info:   Contacting: http://schema.org/docs/full.html
  info:   Parsing: http://schema.org/docs/full.html
  info:   Reading: http://schema.org/docs/full.html
  info:   Saving results to: /path/to/node-schema-org/schemas/schema-list.json
  info:   Done creating /path/to/node-schema-org/schemas/schema-list.json from http://schema.org/docs/full.html
  info:   node /path/to/node-schema-org/list-schemas.js has exited.
  info:   Spawning: node /path/to/node-schema-org/read-schema.js --type DataType
  info:   Spawning: node /path/to/node-schema-org/read-schema.js --type Boolean
  info:   Spawning: node /path/to/node-schema-org/read-schema.js --type Date
  (....)
  info:   Parsing Type: Place
  info:   Parsing Type: Organization
  info:   Parsing Type: LocalBusiness
  info:   Writing schema: /path/to/node-schema-org/schemas/localbusiness.json
  info:   Done parsing schema: /path/to/node-schema-org/schemas/localbusiness.json
  info:   node /path/to/node-schema-org/read-schema.js --type LocalBusiness has exited.
  info:   
  info:   Done parsing all schemas from schema.org
  info:   They are located in: /path/to/node-schema-org/schemas
  info:   

Sample Schema

  {
    "type": "Place",
    "bases": {
      "Thing": [
        {
          "name": "description",
          "description": "A short description of the item.",
          "type": "Text"
        },
        {
          "name": "image",
          "description": "URL of an image of the item.",
          "type": "URL"
        },
        {
          "name": "name",
          "description": "The name of the item.",
          "type": "Text"
        },
        {
          "name": "url",
          "description": "URL of the item.",
          "type": "Text"
        }
      ]
    },
    "properties": [
      {
        "name": "address",
        "description": "Physical address of the item.",
        "type": "PostalAddress"
      },
      {
        "name": "aggregateRating",
        "description": "The overall rating, based on a collection of reviews or ratings, of the item.",
        "type": "AggregateRating"
      },
      {
        "name": "containedIn",
        "description": "The basic containment relation between places.",
        "type": "Place"
      },
      {
        "name": "events",
        "description": "The events held at this place or organization.",
        "type": "Event"
      },
      {
        "name": "faxNumber",
        "description": "The fax number.",
        "type": "Text"
      },
      {
        "name": "geo",
        "description": "The geo coordinates of the place.",
        "type": "GeoCoordinates"
      },
      {
        "name": "interactionCount",
        "description": "A count of a specific user interactions with this item—for example, 20 UserLikes, 5 UserComments, or 300 UserDownloads. The user interaction type should be one of the sub types of UserInteraction.",
        "type": "Text"
      },
      {
        "name": "maps",
        "description": "A URL to a map of the place.",
        "type": "Text"
      },
      {
        "name": "photos",
        "description": "Photographs of this place.",
        "type": [
          "Photograph",
          "ImageObject"
        ]
      },
      {
        "name": "reviews",
        "description": "Review of the item.",
        "type": "Review"
      },
      {
        "name": "telephone",
        "description": "The telephone number.",
        "type": "Text"
      }
    ]
  }