Shape Expressions - convert ShExJ to ShExC.
npm install @shexjs/writer


`` shell`
npm install --save @shexjs/writer
sh
node -e 'new (require("@shexjs/writer"))()
.writeSchema(
{
"type": "Schema",
"shapes": [
{
"id": "http://a.example/S1",
"type": "Shape",
"expression": {
"type": "TripleConstraint",
"predicate": "http://a.example/p1",
"valueExpr": {
"type": "NodeConstraint",
"values": [
{
"value": "1",
"type": "http://www.w3.org/2001/XMLSchema#integer"
},
{
"value": "2",
"type": "http://www.w3.org/2001/XMLSchema#integer"
}
]
}
}
}
]
},
(error, text, prefixes) => {
if (error)
throw error;
console.log(text);
})'
`
The result is a ShExJ expression of the input schema:
` shex
{
[1 2]
}
`option: base - Base IRI for terse relative URLs
Providing a Base IRI (see MDN docs for URL) allows you to parse schemas with relative URLs for e.g. shape and property names:
` sh
node -e 'new (require("@shexjs/writer"))({
base: "http://a.example/"
})
.writeSchema(
{
"type": "Schema",
"shapes": [
{
"id": "http://a.example/S1",
"type": "Shape",
"expression": {
"type": "TripleConstraint",
"predicate": "http://a.example/p1",
"valueExpr": {
"type": "NodeConstraint",
"values": [
{
"value": "1",
"type": "http://www.w3.org/2001/XMLSchema#integer"
},
{
"value": "2",
"type": "http://www.w3.org/2001/XMLSchema#integer"
}
]
}
}
}
]
},
(error, text, prefixes) => {
if (error)
throw error;
console.log(text);
})'
`
` shex
BASE
{
[1 2]
}
`option: prefixes - Pre-loaded namespace prefixes
A second parameter to construct is a map for prefixes that are not defined in the schema:
` sh
node -e 'new (require("@shexjs/writer"))({
base: "http://a.example/",
prefixes: {
"": "http://a.example/path/path3#",
v: "http://a.example/vocab#"
}
})
.writeSchema(
{
"type": "Schema",
"shapes": [
{
"id": "http://a.example/path/S1",
"type": "Shape",
"expression": {
"type": "TripleConstraint",
"predicate": "http://a.example/path/path3#p1",
"valueExpr": {
"type": "NodeConstraint",
"values": [
"http://a.example/vocab#v1",
"http://a.example/vocab#v2"
]
}
}
}
]
},
(error, text, prefixes) => {
if (error)
throw error;
console.log(text);
})'
`
` shex
PREFIX :
PREFIX v: BASE
{
:p1 [v:v1 v:v2]
}
`option: simplifyParentheses
simplifyParentheses: true eliminates ()s to the degree possible using the ShExC parsing precedunce rules. For example, a ()'d EachOf expression:` shex
{
( . ;
@?)
}
`
will be serialized without the ()s:
` shex
{
. ;
@?
}
`Lerna Monorepo
This repo uses lerna to manage multiple NPM packages. These packages are located in
packages/*:shape-map -- a ShapeMap parser
- @shexjs/parser -- parse ShExC into ShExJ
- @shexjs/writer -- serialize ShExK as ShExC
- @shexjs/term -- RDF terms uses in ShEx
- @shexjs/util -- some utilities for transforming schemas or validation output
- @shexjs/visitor -- a visitor for schemas
- @shexjs/validator -- validate nodes in an RDF graph against shapes in a schema
- @shexjs/eval-validator-api -- API called by @shexjs/validator for validating Shapes, with tripleExpressions and EXTENDS etc.
- @shexjs/eval-simple-1err -- Implementation of @shexjs/eval-validator-api which reports only one error.
- @shexjs/eval-threaded-nerr -- Implementation of @shexjs/eval-validator-api which exhaustively enumerate combinations of ways the data fails to satisfy a shape's expression.
- @shexjs/loader -- an API for loading and using ShEx schemas
- @shexjs/node -- additional API functionality for a node environment
- @shexjs/cli -- a set of command line tools for transformaing and validating with schemas
- @shexjs/webapp -- the shex-simple WEBApp
- @shexjs/shape-path-query -- traverse ShEx schemas with a path language
- @shexjs/extension-test -- a small language for testing semantic actions in ShEx implementations (more)
- @shexjs/extension-map -- an extension for transforming data from one schema to another (more)
- @shexjs/extension-eval` -- simple extension which evaluates Javascript semantic action code (more)