Nature's Powerful Meme

    TypeScript icon, indicating that this package has built-in type declarations

    1.0.0-alpha.24 • Public • Published

    NPM Version ShapeExpressions Gitter chat DOI


    Utility functions to work with ShExJ schemas


    npm install --save @shexjs/writer


    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:

    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 })
          (error, text, prefixes) => {
            if (error)
              throw error;

    The result is a ShExJ expression of the input schema:

    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>:

    <S1> {
      <p1> .;
      <p2> @<S2>?
    <S2> {
      <p3> @<S3>
    <S3> {
      <p4> @<S1>
    <S4> {
      <p5> .


    Parse a ShExJ schema and add ._prefixes and ._index for efficient processing within shexj.js


    Remove ._prefixes and ._index from internal schema structure and add schema["@context"] || ""

    ShExRVisitor:(knownShapeExprs), ShExRtoShExJ(schema-like-object)

    Internal functions for parsing ShExR

    n3jsToTurtle(), valToN3js(res, factory), n3jsToTurtle(n3js)

    Internal functions for mapping between ShExJ terms and n3.js terms

    canonicalize(schema, trimIRI)

    Normalize ShExJ by moving all tripleExpression references to their first expression.


    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.


    • 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(, [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.


    Verify that schema has all necessary referents and conforms to ShEx's stratified negation rules.


    Convert the results of validating an instance of ShExR against ShExR.shex into a ShExJ schema.


    Attempt to make a validation failure human-readable.

    executeQuery(query, endpoint)

    Synchronously Execute a SPARQL query against and endpoint.

    executeQueryPromise(query, endpoint)

    Asynchronously Execute a SPARQL query against and endpoint.

    parseSparqlJsonResults (jsonObject)

    Parse JSON results to internal RDF term representations.


    Parse XML results in a DOM to internal RDF term representations.


    Parse XML results to internal RDF term representations using JQuery.

    Lerna Monorepo

    This repo uses lerna to manage multiple NPM packages. These packages are located in packages/*:


    npm i @shexjs/util

    DownloadsWeekly Downloads






    Unpacked Size

    104 kB

    Total Files


    Last publish


    • ericprud
    • justinwb