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.4.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.4-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.4.tar.gz
Algorithm Hash digest
SHA256 d0bcb9fafb2e1a4aee034c3da33e11735da4fadd0df3ebfe14e8187eeeaa5b38
MD5 9b4d4fc6099db2e7502dc483cd59feef
BLAKE2b-256 8ef182fe51301dc24513377cc66fb2633714f6203234a4bb7c4b8c8c38beac44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3c398ff4959c055bed590c314f2ac75a5d01f7203b9c4427ebda0528f413b152
MD5 8bca03fabba05433e690f63253b12610
BLAKE2b-256 f23460d8b1834428e4bc165279455fe395a24c072abcf54cd58e5a8096ffc02f

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