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

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7b5a69a56828a26f754f7f5cea43b7b77827a0b0c8663b31b9be9a9ff0bab269
MD5 0916d56cace81da97c91d8475c0884ff
BLAKE2b-256 73fe9f5a865180afb5db429fb2d0b3f5396789eb5fa1eccee68907ea4e9fc6af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for shacl_path_query_generator-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 30c0389579fa522cd4026af99a23dbb89f8c22c0c35d80d0adbe67983daf9565
MD5 918ea2b5b4fec830746a425e6f23a528
BLAKE2b-256 04cb005907f9b072bc2f8372f827eb56f8dd23d07d10b3a728dc355b27970450

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