npm.io
2.0.0 • Published 7 months ago

shaclc-parse

Licence
MIT
Version
2.0.0
Deps
2
Size
57 kB
Vulns
0
Weekly
0
Stars
2

shaclc-parse

A parser for files written with SHACL compact syntax

Usage

import { parse } from 'shaclc-parse'

const quads = parse(`
PREFIX ex: <http://example.org/test#>

shape ex:TestShape -> ex:TestClass1 ex:TestClass2 {
	targetNode=ex:TestNode targetSubjectsOf=ex:subjectProperty targetObjectsOf=ex:objectProperty .
}
`, { baseIRI: "http://example.org/basic-shape-with-targets" })

Extended SHACL Compact Syntax

The SHACL Compact Syntax specification is not expressive enough to make any RDF 1.0 statement. This package includes an opt-in extended syntax that allows users to make any RDF 1.0 statement. Parsing of this extended syntax can be enabled via an option in the parse function

const quads = parse(/*shaclc extended string*/, { extendedSyntax: true })
Making additional statements about the NodeShape

Additional statements can be made about NodeShapes by using a turtle-like syntax before the body of the shape. For instance we can add the following statements to the above ex:TestShape.

ex:TestShape ex:myCustomAnnotation ex:myCustomValue ;
	ex:myCustomBlankNodeAnnotation [
		ex:myCustomList ( 1 ex:myCustomValue )
	] .

by doing the following:

shape ex:TestShape -> ex:TestClass1 ex:TestClass2 ;
	ex:myCustomAnnotation ex:myCustomValue ;
	ex:myCustomBlankNodeAnnotation [
		ex:myCustomList ( 1 ex:myCustomValue )
	] {
		targetNode=ex:TestNode targetSubjectsOf=ex:subjectProperty targetObjectsOf=ex:objectProperty .
	}
Making additional statements about the sh:property

additional statements can be made about each blank node property as follows:

shape ex:TestShape -> ex:TestClass1 ex:TestClass2 {
	ex:myPath [0..1] %
		ex:myCustomPropertyAnnotation ex:myCustomPropertyValue ;
		ex:myCustomPropertyAnnotation2 ex:myCustomPropertyValue2 ;
	% .
}
Making arbitrary statements

Finally we permit the use of turtle syntax at the end of the file to make any additional statements

shape ex:TestShape -> ex:TestClass1 ex:TestClass2 {
	targetNode=ex:TestNode targetSubjectsOf=ex:subjectProperty targetObjectsOf=ex:objectProperty .
}

ex:bob a ex:Person .

License

2022–present Jesse Wright, MIT License.

Keywords