Parses a ShEx schema and RDF data file and validates the resources in the data against the shapes in the schema.
A standalone Node module with a command line interface and validate() function as described below
It is built on Eric Prud'hommeaux's ShEx validator and parser
npm install HW-SWeL/ShEx-validator
var ShEx = require('ShEx-validator');
var schemaText = "...";
var dataText = "...";
var startingResources = {
"RESOURCE" : "SHAPE",
...
};
var callbacks = {
schemaParsed: function (schema) {...},
schemaParseError: function (errorMessage) {...},
dataParsed: function (data) {...},
dataParseError: function (errorMessage) {...},
validationResult: function (validationResult) {...},
findShapesResult: function(shapes) {...}
};
var options = {
closedShapes: true|false,
};
var validator = new ShEx.Validator(schemaText, dataText, callbacks, options);
validator.findShapes();
validator.validate(startingResources);
Not nearly finished or perfected but it is the current implementation.
schemaParsed = {
shapes: ["SHAPE", ...]
}
dataParsed = {
resources: ["RESOURCE"],
triples: [RDF.Triple]
}
validationResult = {
passed: true|false,
startingResource: RDF.RDFLiteral|RDF.IRI,
matches: [{
rule: RDF.Triple,
triple: RDF.Triple
]},
errors: [{
name: string,
triple: RDF.Triple,
req_lev: string
]}
}
shapeFindingResult = {
"RESOURCE" : "SHAPE" | null,
...
};
While developing: node commandLine.js samples/hcls_2014.shex samples/chembl_2014.ttl http://rdf.ebi.ac.uk/chembl/chembl=SummaryLevelShape
In future when globally installed:
Usage:
ShEx-validator [options] SCHEMA DATA RESOURCE=SHAPE [RESOURCE=SHAPE ...]
ShEx-validator [options] SCHEMA DATA -f
Options:
-c, --closed-shape All properties must be in shape
-h, --help Print usage information
-f, --find-shapes Find shapes which match the resources
The main access point is index.js
.
Currently only n3.js is used for parsing the data but others can easily be added in dataParser.js
.
Validation is still performed by a combination of Erics PEG generated includes/shexParser
and includes/RDF.js
.
Requirement levels have been added to the ShEx syntax to a allow sematics such as "should" and "should not". The following example shows the syntax.
PREFIX foaf: <http://xmlns.com/foaf/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema>
start = <PersonShape>
<PersonShape> {
`should` foaf:name rdf:langString,
`should not` !foaf:age rdfs:Literal
}
Tests are done using Jasmine, and the test specifications are located in specs/.
To run the tests do:
npm test
- minimist: parse argument options
- n3: Lightning fast, asynchronous, streaming Turtle / N3 / RDF library.
- promise: Bare bones Promises/A+ implementation
- jasmine-node: DOM-less simple JavaScript BDD testing framework for Node
- pegjs: Parser generator for JavaScript
MIT