Skip to content

Run approval tests against SHACL shapes and graph data

Notifications You must be signed in to change notification settings

zazuko/shacl-test

Repository files navigation

SHACL-test

Runs SHACL shapes against a set of positive and negative test cases (data graphs).

Positive test cases are a simple fail/pass. Negative test cases are expected to fail and the validation report is compared against the expectation using approvals.

In case of failures, a SHACL Playground link is provided for further investigation.

Usage

npx shacl-test \
  --shapes=${SHAPES} \
  --valid-cases="${VALID_CASES_GLOB}" \
  --invalid-cases="${INVALID_CASES_GLOB}" \
  --filter="${FILTER}" \
  --approve \
  --debug \
  --prefixes=${PREFIXES} \
  --command="${COMMAND}"

The --shapes option is required. Also, you must provide at least --valid-cases or --invalid-cases, lest no tests are run. The rest are optional.

--shapes can be a filesystem path or URL and include code:imports.

--valid-cases and --invalid-cases are globs that match the test cases. Make sure to put them in quotes to avoid shell expansion.

--filter is a regular expression to filter the test cases.

--approve will approve the validation reports for the negative test cases instead of failing.

--debug will print the validation report for each test case.

--prefixes is a comma-separated list of prefix declarations to be used in the SHACL shapes. For example, --prefixes=schema,qudt,cube=https://cube.link/, will declare the prefixes schema, qudt and cube with the respective URIs. In the case of schema and qudt, their URIs are taken from the list provided by the @zazuko/prefixes package (and, by extension, the Zazuko prefix server).

--command is a command to run for each test case. It will be passed the shapes path as argument and the test case on standard input. The default is npx barnard59 shacl validate --shapes, which translates to npx barnard59 shacl validate --shapes ${shapes} < $testCase. The script must return a non-zero exit code if the test case is invalid.