Skip to main content

Translate SHACL complex paths into SPARQL CONSTRUCT queries with intermediate variable expansion.

Project description


SHACL Path Query Generator

Parse and flatten SHACL path expressions into executable SPARQL triple patterns.

Features

  • ✅ Parses all standard SHACL path constructs:
    • sh:path
    • sh:inversePath
    • sh:zeroOrMorePath, sh:oneOrMorePath, sh:zeroOrOnePath
    • sh:alternativePath
    • sequences (rdf:List)
  • ✅ Converts parsed paths into a list of triple patterns with fresh variables.
  • ✅ Allows optional unrolling depth for repetitive paths (*, +).
  • 🧪 Fully tested with nested and edge-case paths.
  • 🧩 Outputs raw SPARQL triple patterns, ready for flexible usage (e.g. WHERE, CONSTRUCT, INSERT, etc.).

Installation

pip install shacl-path-query-generator

Requires: rdflib>=7.1.4

Example Usage

from rdflib import Graph, Namespace
from shacl_path_query import path_to_sparql_pattern

EX = Namespace("http://ex.org/")
SH = Namespace("http://www.w3.org/ns/shacl#")

turtle = """
PREFIX ex: <http://ex.org/>
PREFIX sh: <http://www.w3.org/ns/shacl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

[] a sh:NodeShape ;
   sh:targetClass ex:Thing ;
   sh:property [
     sh:path (
       ex:p1
       [ sh:inversePath ex:p2 ]
     ) ;
     sh:datatype xsd:string ;
   ] .
"""

g = Graph()
g.parse(data=turtle, format="turtle")

# Get the path node (blank node for the list)
path_node = g.value(predicate=SH.path)
pattern = path_to_sparql_pattern(path_node, g)
print(pattern)

Sample Output

?s <http://ex.org/p1> ?v0 .
?o <http://ex.org/p2> ?v0 .

Example in a SPARQL CONSTRUCT

CONSTRUCT {
  ?s <http://ex.org/p1> ?v0 .
  ?o <http://ex.org/p2> ?v0 .
}
WHERE {
  VALUES ?s { <http://ex.org/a> <http://ex.org/b> }
  ?s <http://ex.org/p1> ?v0 .
  ?o <http://ex.org/p2> ?v0 .
}

License

MIT


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shacl_path_query_generator-0.1.3.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shacl_path_query_generator-0.1.3-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file shacl_path_query_generator-0.1.3.tar.gz.

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0f79595ba2ad6327aa45d32592e169ff6fd8f425042c3aa74b5f424b0bb581b7
MD5 e28d80e702a2c6ead2bdd0235d825c68
BLAKE2b-256 578003afbc03a4a147c8b053b1fda0981c33094bd82672bfc6132c5aab80afda

See more details on using hashes here.

File details

Details for the file shacl_path_query_generator-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 128781b2f7f9b7918b5431e18f150b4fd64e5526cc9a74f2c067344b252d47a8
MD5 ca06e0052265e89502853dda2aa207c1
BLAKE2b-256 85226ac1aca386e46dd212eb14a9fe40dfee8a64250457ff0540c90bee226962

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page