@shexjs/loader
Introduction
This module provides HTTP access functions for @shexjs library. For file:
access or dynamic loading of ShEx extensions, use @shexjs/node
.
Installation
Node.js + npm
npm install @shexjs/loader
const ShExIo = require('@shexjs/loader');
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 data into a graph.
SOURCE may be
- 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:
const N3 = require('n3');
const ShExLoader = require("@shexjs/loader")({
rdfjs: N3,
fetch: require('node-fetch'),
jsonld: require('jsonld')
});
const schemaFromUrl =
"https://shex.io/webapps/packages/shex-cli/test/cli/1dotOr2dot.shex";
const schemaAsText = {
url: "http://a.example/schemaAsText",
text: `
<#ShapeFromText> {
<#p1> @<S1> # reference to Shape loaded from URL
}`
};
const schemaAsShExJ = {
url: "http://a.example/ShExJ",
schema: {
type: "Schema",
shapes: [
{ "type": "ShapeDecl",
"id": "http://a.example/S1",
"shapeExpr": {
"type": "NodeConstraint",
"nodeKind": "iri",
"pattern": "^https?:" } }
] }
};
const graphFromUrl =
"https://shex.io/webapps/packages/shex-cli/test/cli/p1.ttl";
const graphAsText = {
url: "http://a.example/graphAsText",
text: `
<#N2> <#p2> "o2" . # reference to Shape loaded from URL`
};
const { namedNode, literal, defaultGraph, quad } = N3.DataFactory;
const graphFromApi = {
url: "http://a.example/graphFromApi",
graph: new N3.Store()
}
graphFromApi.graph.add(quad(
namedNode('http://a.example/graphFromApi#N3'),
namedNode('http://a.example/p3'),
literal('o3'),
defaultGraph(),
));
function collisionPolicy (type, left, right) {
console.log(type, 'collision between', left, right);
return false;
}
const schemaAndDataP = ShExLoader.load(
{ shexc: [ schemaFromUrl, schemaAsText, schemaAsShExJ ] },
{ turtle: [ graphFromUrl, graphAsText, graphFromApi ] },
{
collisionPolicy
}
);
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 + ' is a ' + s.shapeExpr.type).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:
shapeDecl collision between {
id: 'http://a.example/S1',
type: 'ShapeDecl',
shapeExpr: {
type: 'Shape',
expression: { type: 'OneOf', expressions: [Array] }
}
} {
type: 'ShapeDecl',
id: 'http://a.example/S1',
shapeExpr: { type: 'NodeConstraint', nodeKind: 'iri', pattern: '^https?:' }
}
schemaMeta:
[ { "mediaType": "text/shex", "url": "https:…cli/1dotOr2dot.shex",
"base": "https:…cli/1dotOr2dot.shex", "prefixes": {} },
{ "mediaType": "text/shex", "url": "http://a.example/schemaAsText",
"base": "http://a.example/schemaAsText", "prefixes": {} },
{ "mediaType": "text/shex", "url": "http://a.example/ShExJ",
"prefixes": {}, "_prefixes": {} }
]
shapes:
http://a.example/schemaAsText#ShapeFromText is a Shape
http://a.example/S1 is a NodeConstraint
dataMeta:
[ { "mediaType": "text/turtle", "url": "http://a.example/graphFromApi",
"base": "http://a.example/graphFromApi", "prefixes": {} },
{ "mediaType": "text/turtle", "url": "http://a.example/graphAsText",
"base": "http://a.example/graphAsText", "prefixes": {} },
{ "mediaType": "text/turtle", "url": "https:…cli/p1.ttl",
"base": "https:…cli/p1.ttl", "prefixes": { "": "http://a.example/" } }
]
triples:
http://a.example/graphFromApi#N3 http://a.example/p3 o3
http://a.example/graphAsText#N2 http://a.example/graphAsText#p2 o2
https:…cli/x http://a.example/p1 p1-0
loadExtensions function(globs[])
prototype of loadExtensions. does nothing
GET function(url, mediaType)
return promise of {contents, url}
Examples
Use @shexjs/loader
directly:
const ShExIo = require("@shexjs/loader")({
rdfjs: N3,
fetch: require('node-fetch')
});
Extend @shexjs/loader
with jsonld and a non-standard jsonld document loader:
const ShExIo = require("@shexjs/loader")({
rdfjs: N3,
fetch: require('node-fetch'),
jsonld: require('jsonld'),
jsonLdOptions: { documentLoader }
});
async function documentLoader (url, options) {
# see https:
}
Lerna Monorepo
This repo uses lerna to manage multiple NPM packages. These packages are located in packages/*
: