Motivation
- Improve accessibility for viewing and editing data on the Semantic Web.
Architecture
- NodeShape => Form
- PropertyShape => Field
Implementation
- (1) Load data for relevant shape(s) using SHACL Query
SHACL Query package converts a SHACL constraint into a SPARQL construct query to extract all data relevant to a particular shape. To extract a SHACL shape we use the NodeShape Shape. Comunica is used to issue and federate the query over given sources (SPARQL endpoints, local files, linked data fragments etc.). By providing the shaclcjs parser as an actor to a custom comunica configuration we can load files written in (extended) shaclc syntax.
- (2) Merge Relevant constraints using the Merge SHACL package
Implementation
- (3) Provide inference over the new constraints using the SPARQL Inferenced package which extends on the Hylar Engine (lightweight version) to allow for inferences based on construct queries (using the comunica engine).
- (4) Load the merged & inferenced shape as an object using RDF Object Proxy with on2ts used to provide type restrictions & assumptions.
Since the inferencing applies all default values to the shapes, and adds all class relationships etc. this makes it much easier to program against the shape. For instance `sh:closed` will always have a boolean object `true` or `false`.
Note: As a personal opensource project (when time allows) I intend to integrate steps (1) - (4) in an extension to on2ts. I also have several other projects which I intend to use such tooling for.
Implementation
- (5) The SHACL Form React packages then generates the form structure given the resource for the SHAPE from RDF Object Proxy, and an LDflex object for the entity which we wish to modify
- (6) SHACL Form React also takes custom field generator (LDfields) and SHACL validator as input
- (7) When a submit event is triggered, SHACL Form React can be used to emit two sets of triples, (a set of triples to be added to the graph, and a set of triples to be removed from the graph). Comunica is then used to issue the relevant DELETEINSERT query over the given sources (internally to comunica, the deletion is applied to all source, the addition is applied to a designated primary source).