Understanding SHACL

You might be familiar with Plato’s concept of the world of ideas—abstract, perfect forms that physical objects imitate. SHACL (Shapes Constraint Language) can be loosely compared to this: imagine having a conceptual blueprint of what a “Person” should be, and then validating whether real-world data fits that blueprint.

In Plato’s philosophy, there’s a global, shared library of ideal forms. Similarly, SHACL can serve as a kind of schema library, but tailored to your specific data.

What is SHACL?

At its core, SHACL is a language for describing constraints on RDF (Linked Data) structures. You define shapes—sets of rules—that apply to certain classes, such as schema:Person, an IRI-based class in Linked Data. Each shape can include constraints on the properties of that class—for instance, requiring at least one given name, or limiting the length of a string.

Example Constraints

You could define a SHACL shape stating that instances of schema:Person must have:

These constraints are somewhat analogous to those in relational databases.

However, a key difference is portability: SHACL is itself Linked Data, so you can include shape definitions within your dataset. This makes SHACL especially suitable for web applications, including front-end use cases.

SHACL in Web Development

That’s where ShapeThing SHACL Renderer comes in. Given one or more SHACL shapes, it enables developers to:

This simplifies working with Linked Data, even for developers unfamiliar with RDF or SPARQL.

Additionally, ShapeThing integrates with faker.js to generate dummy data that conforms to your shapes—great for development and testing.

A Step Back: SHACL’s Origins

Originally, SHACL was designed as a validation language. While the specification includes optional UI hints—like human-readable labels and property groupings—its primary purpose has always been validation.

However, the extensibility of Linked Data means SHACL is more flexible than it might seem. You can mix in custom properties and annotations. Even though SHACL was designed for validation, its true power lies in describing the structure of your data.

This extensibility has led to the development of SHACL extensions, such as:

SHACL Ecosystem and Advanced Features

Over time, SHACL has become central to the Linked Data ecosystem. Beyond SHACL Core, there are additional specifications, such as:

SHACL Functions

One of the most interesting features in SHACL Advanced is SHACL Functions. These allow you to define reusable SPARQL-based functions that return a single result.

While limited in scope, they’re quite powerful. For example, you could define a function that parses a datetime string like: 2018-05-23:23:10 into a valid xsd:date.

These functions are IRIs and can be used like so:

ex:label(?resource)