@shexjs/node
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-alpha.28 • Public • Published

NPM Version ShapeExpressions Gitter chat https://gitter.im/shapeExpressions/Lobby DOI

@shexjs/node

Introduction

This module extends @shexjs/loader with file: access. This modules is probably not appropriate for use in a browser.

Installation

Node.js + npm

npm install @shexjs/node
const ShExIo = require('@shexjs/node');

Used with @shexjs suite:

core functions

parse and write ShExC

exectuables

  • @shexjs/cli - command line interface for validation and format conversion
  • @shexjs/webapp - webpacks and the shex-simple interface

validation

extensions

ShapePath

Methods

load(schema, data, schemaOptions = {}, dataOptions = {})

load shex and json files into a single ShEx schema and turtle into a graph.

@shexjs/node extends the @shexjs/loader load method to allow the source to be a file path.

SOURCE may be

  • file path or URL - where to load item.
  • object: {text: string, url: string} - text and URL of already-loaded resource.
  • (schema) ShExJ object
  • (data) RdfJs data store

parameters:

  • schema - { shexc: [ShExC SOURCE], json: [JSON SOURCE] }
  • data - { turtle: [Turtle SOURCE], jsonld: [JSON-LD SOURCE] }
  • schemaOptions
  • dataOptions

returns: {Promise<{schema: any, dataMeta: [], data: (|null), schemaMeta: *[]}>}

example (same as @shexjs/loader example, but using file paths):

// Initialize @shexjs/loader with implementations of APIs.
const ShExLoader = require("@shexjs/node")({
  rdfjs: require('n3'),         // use N3 as an RdfJs implementation
  fetch: require('node-fetch'), // fetch implementation
  jsonld: require('jsonld')     // JSON-LD (if you need it)
});

// Schemas from URL and filepath:
const schemaFromUrl =
      "https://shex.io/webapps/packages/shex-cli/test/cli/1dotOr2dot.shex";
const schemaFromFile =
      "../shex-cli/test/cli/1dotOr2dot.shex";

// Data graphs from URL, text and graph API:
const graphFromUrl =
      "https://shex.io/webapps/packages/shex-cli/test/cli/p1.ttl";
const graphFromFile =
      "../shex-cli/test/cli/p2p3.ttl";

// ShExLoader.load returns a promise to load and merge schema and data.
const schemaAndDataP = ShExLoader.load(
  { shexc: [ schemaFromUrl, schemaFromFile ] },
  { turtle: [ graphFromUrl, graphFromFile ] }
);

// Print out results to show off returned structure.
schemaAndDataP.then(({schema, schemaMeta, data, dataMeta}) => {
  console.log('schemaMeta:\n' + JSON.stringify(schemaMeta, null, 2));
  console.log('shapes:\n' + schema.shapes.map(s => '  ' + s.id).join('\n'));
  console.log('dataMeta:\n' + JSON.stringify(dataMeta, null, 2));
  console.log('triples:\n' + data.getQuads().map(
    q => '  ' +
      (['subject', 'predicate', 'object'])
      .map(t => q[t].value).join(' ')).join('\n'));
});

output:

schemaMeta:
[ { "mediaType": "text/shex", "url": "file:…cli/1dotOr2dot.shex",
    "base": "file:…cli/1dotOr2dot.shex", "prefixes": {} },
  { "mediaType": "text/shex", "url": "https:…cli/1dotOr2dot.shex",
    "base": "https:…cli/1dotOr2dot.shex", "prefixes": {} }
]
shapes:
  http://a.example/S1
dataMeta:
[ { "mediaType": "text/turtle", "url": "file:…cli/p2p3.ttl",
    "base": "file:…cli/p2p3.ttl", "prefixes": {
      "": "http://a.example/",
      "xsd": "http://www.w3.org/2001/XMLSchema#" } },
  { "mediaType": "text/turtle", "url": "https:…cli/p1.ttl",
    "base": "https:…cli/p1.ttl", "prefixes": {
      "": "http://a.example/"
    } }
]
triples:
  file:…cli/x http://a.example/p2 p2-0
  file:…cli/x http://a.example/p3 p3-0
  https:…cli/x http://a.example/p1 p1-0

See @shexjs/loader load method for more description.

loadExtensions function(globs[])

prototype of loadExtensions. does nothing

GET function(url, mediaType)

return promise of {contents, url}

Examples

Use @shexjs/node directly:

const ShExIo = require("@shexjs/node")({
  rdfjs: N3,
  fetch: require('node-fetch')
});

Extend @shexjs/node with jsonld and a non-standard jsonld document loader:

const ShExIo = require("@shexjs/node")({
  rdfjs: N3,
  fetch: require('node-fetch'),
  jsonld: require('jsonld'),
  jsonLdOptions: { documentLoader }
});

async function documentLoader (url, options) {
  # see https://github.com/digitalbazaar/jsonld.js#custom-document-loader
}

Lerna Monorepo

This repo uses lerna to manage multiple NPM packages. These packages are located in packages/*:

Package Sidebar

Install

npm i @shexjs/node

Weekly Downloads

289

Version

1.0.0-alpha.28

License

MIT

Unpacked Size

29.2 kB

Total Files

6

Last publish

Collaborators

  • ericprud
  • justinwb