@shexjs/util
Version:
Shape Expressions validation and utilities.
155 lines (123 loc) • 6.96 kB
Markdown
[](https://npmjs.org/package/shex)
[](https://gitter.im/shapeExpressions/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://doi.org/10.5281/zenodo.1213693)
# @shexjs/writer
Utility functions to work with [ShExJ](https://shex.io/shex-semantics/#shexj) schemas
## install
``` shell
npm install --save @shexjs/writer
```
## Invocation
Using `Partition(<schema>, [<URL>s])` as an example, an illustrative way to invoke from it from the command line uses `@shexjs/parser` and `@shexjs/writer`:
``` sh
node -e 'const base = "http://a.example/"
const schema = require("@shexjs/parser")
.construct(base, {v: "http://a.example/vocab#"})
.parse("<S1> { <p1> .; <p2> @<S2>? } <S2> { <p3> @<S3> } <S3> { <p4> @<S1> } <S4> { <p5> . }")
const partition = require("@shexjs/util").partition(schema, [base + "S2"])
new (require("@shexjs/writer"))({ base, simplifyParentheses: true })
.writeSchema(partition,
(error, text, prefixes) => {
if (error)
throw error;
console.log(text);
})'
```
The result is a ShExJ expression of the input schema:
``` shex
BASE <http://a.example/>
<S2> {
<p3> @<S3>
}
<S3> {
<p4> @<S1>
}
<S1> {
<p1> . ;
<p2> @<S2>?
}
```
Note that `<S2>` in the input schema has no references to `<S1>`:
``` shex
<S1> {
<p1> .;
<p2> @<S2>?
}
<S2> {
<p3> @<S3>
}
<S3> {
<p4> @<S1>
}
<S4> {
<p5> .
}
```
## ShExJtoAS(schema)
Parse a ShExJ schema and add `._prefixes` and `._index` for efficient processing within shexj.js
## ShExAStoJ(schema)
Remove `._prefixes` and `._index` from internal schema structure and add `schema["@context"] || "http://www.w3.org/ns/shex.jsonld"`
## ShExRVisitor:(knownShapeExprs), ShExRtoShExJ(schema-like-object)
Internal functions for parsing ShExR
## canonicalize(schema, trimIRI)
Normalize ShExJ by moving all tripleExpression references to their first expression.
## BiDiClosure
construct an object with this api:
* **needs**: {} - mapping from needer to needie
* **neededBy**: {} - reverse mapping of `needs`
* add(needer, needie, negated) - record that needer referenced needied, possibly in a negation
## nestShapes(schema, options = {})
See which shape declarations have no coreferences and can be nested inside their sole referrer.
### options
* **no**: don't do anything; just report nestable shapes
* **transform**: function to change shape labels
## getPredicateUsage(schema, untyped = {})
Return which predicates appear in which shapes, what their common type is, and whether they are polymorphic.
## getDependencies(schema, ret)
Find which shappes depend on other shapes by inheritance or inclusion.
## Partition(<schema>, [<URL>s])
Create subset of a schema with only desired shapes and their dependencies.
## merge(left, right, overwrite, inPlace)
Merge right schema onto left schema if `inPlace` is true; otherwise return a new merged schema.
`overwrite`: boolean specifies whether to replace and old shape declaration with a new one of the same name.
## absolutizeResults(res, base)
In validation resutls with some relative URLs in it, re-evaluate all [`shape`, `reference`, `node`, `subject`, `predicate`, `object`] property values against `base`.
## getProofGraph(res, db, dataFactory)
Parse a validation result and call `db.addQuad()` with each triple involved in validation.
**Note**, this may call `db.addQuad()` multiple times with the same triple if that triple appears more than once in the validation results.
## isWellDefined(schema)
Verify that schema has all necessary referents and conforms to ShEx's stratified negation rules.
## valuesToSchema(values)
Convert the results of validating an instance of ShExR against ShExR.shex into a ShExJ schema.
## errsToSimple(failure)
Attempt to make a validation failure human-readable.
## executeQuery(query, endpoint, dataFactory)
Synchronously Execute a SPARQL query against and endpoint.
## executeQueryPromise(query, endpoint, dataFactory)
Asynchronously Execute a SPARQL query against and endpoint.
## parseSparqlJsonResults (jsonObject)
Parse JSON results to internal RDF term representations.
## parseSparqlXmlResults_dom(doc)
Parse XML results in a DOM to internal RDF term representations.
## parseSparqlXmlResults_jquery(jqObj)
Parse XML results to internal RDF term representations using JQuery.
# Lerna Monorepo
This repo uses [lerna](https://github.com/lerna/lerna) to manage multiple NPM packages. These packages are located in `packages/*`:
- [`shape-map`](../shape-map#readme) -- a [ShapeMap](https://shexspec.github.io/shape-map/) parser
- [`@shexjs/parser`](../shex-parser#readme) -- parse ShExC into ShExJ
- [`@shexjs/writer`](../shex-writer#readme) -- serialize ShExK as ShExC
- [`@shexjs/term`](../shex-term#readme) -- RDF terms uses in ShEx
- [`@shexjs/util`](../shex-util#readme) -- some utilities for transforming schemas or validation output
- [`@shexjs/visitor`](../shex-visitor#readme) -- a [visitor](https://en.wikipedia.org/wiki/Visitor_pattern) for schemas
- [`@shexjs/validator`](../shex-validator#readme) -- validate nodes in an RDF graph against shapes in a schema
- [`@shexjs/eval-validator-api`](../eval-validator-api#readme) -- API called by [`@shexjs/validator`](../shex-validator#readme) for validating Shapes, with tripleExpressions and EXTENDS etc.
- [`@shexjs/eval-simple-1err`](../eval-simple-1err#readme) -- Implementation of [`@shexjs/eval-validator-api`](../eval-validator-api#readme) which reports only one error.
- [`@shexjs/eval-threaded-nerr`](../eval-threaded-nerr#readme) -- Implementation of [`@shexjs/eval-validator-api`](../eval-validator-api#readme) which exhaustively enumerate combinations of ways the data fails to satisfy a shape's expression.
- [`@shexjs/loader`](../shex-loader#readme) -- an API for loading and using ShEx schemas
- [`@shexjs/node`](../shex-node#readme) -- additional API functionality for a node environment
- [`@shexjs/cli`](../shex-cli#readme) -- a set of command line tools for transformaing and validating with schemas
- [`@shexjs/webapp`](../shex-webapp#readme) -- the shex-simple WEBApp
- [`@shexjs/shape-path-query`](../shex-shape-path-query#readme) -- traverse ShEx schemas with a path language
- [`@shexjs/extension-test`](../extension-test#readme) -- a small language for testing semantic actions in ShEx implementations ([more](http://shex.io/extensions/Test/))
- [`@shexjs/extension-map`](../extension-map#readme) -- an extension for transforming data from one schema to another ([more](http://shex.io/extensions/Map/))
- [`@shexjs/extension-eval`](../extension-eval#readme) -- simple extension which evaluates Javascript semantic action code ([more](http://shex.io/extensions/Eval/))