rdf-ext / shacl-engine

A fast RDF/JS SHACL engine
MIT License
29 stars 0 forks source link

shacl-engine

build status npm version

A fast SHACL engine for data provided as RDF/JS objects.

Features

SHACL consists of multiple modules. Here is an overview of the features this library implements and planned features:

Install

npm install --save shacl-engine

Usage

Validator

The Validator class can be imported from the main package:

import { Validator } from 'shacl-engine'

Or from the class file:

import Validator from 'shacl-engine/Validator.js'

The constructor must be called with the shapes as an RDF/JS DatasetCore object. The second argument is an object for various options:

The validations can be executed with the .validate(data, shapes) method. The data must have the following structure:

The shapes object is optional, but if given must have the following structure:

Example

The following example reads the shapes and data from the list coverage test, creates a Validator instance, and runs the validation:

import rdfDataModel from '@rdfjs/data-model'
import rdfDataset from '@rdfjs/dataset'
import toNT from '@rdfjs/to-ntriples'
import fromFile from 'rdf-utils-fs/fromFile.js'
import Validator from 'shacl-engine/Validator.js'

async function main () {
  // read the shape and data from the list coverage test
  const filename = new URL('../test/assets/coverage/list.ttl', import.meta.url)
  const dataset = rdfDataset.dataset()

  for await (const quad of fromFile(filename.pathname)) {
    dataset.add(quad)
  }

  // create a validator instance for the shapes in the given dataset
  const validator = new Validator(dataset, { factory: rdfDataModel })

  // run the validation process
  const report = await validator.validate({ dataset })

  // check if the data conforms to the given shape
  console.log(`conforms: ${report.conforms}`)
}

main()

See the examples folders for more examples.

SPARQL Support

The Validator comes with the core SHACL validations out-of-the-box. Additional validations must be added for SPARQL support. The validations can be imported from shacl-engine/sparql.js as shown below:

import rdfDataModel from '@rdfjs/data-model'
import { validations as sparqlValidations } from 'shacl-engine/sparql.js'

const validator = new Validator(dataset, {
  factory: rdfDataModel,
  validations: sparqlValidations
})