Shaclgen takes either an instance graph/data graph (or multiple graphs) or schema(s) as input and generates a basic shape file based on the classes and properties present.
Shape files from instance data: By default, the input graph is processed as a data graph (instance data).
Shape files from ontologies: If the input is a schema or ontology, shaclgen generates a nested shape file: properties with rdfs:domain defined in the ontology will be nested within the appropriate NodeShape. rdfs:range definitions for XML and rdfs datatypes are included.
Added support for OWL constructions is planned.
Using pip: :
pip install shaclgen
$ shaclgen [graph] [optional arguments]
Example usage: :
$ shaclgen https://www.lib.washington.edu/static/public/cams/data/datasets/uwSemWebParts/webResource-1-0-0.nt
Command line arguments: :
positional arguments:
graph The data graph(s).
optional arguments:
-h, --help show this help message and exit
-o, --ontology input file(s) or URL(s) is a schema or ontology
-ns, --namespace optional shape namespace declaration. ex: http://www.example.com exam
-i, --implicit use implicit class targets with RDFS
-s SERIALIZATION, --serialization SERIALIZATION
result graph serialization, default is turtle. example:. -s nt
Serialization options: turtle = turtle ntriples = nt rdfxml = xml n3 = n3
Namespace Example usage: :
$ shaclgen https://www.lib.washington.edu/static/public/cams/data/datasets/uwSemWebParts/webResource-1-0-0.nt -s nt
Namespace argument: The namespace argument is takes a full URL and prefix.
Namespace Example usage: :
$ shaclgen https://www.lib.washington.edu/static/public/cams/data/datasets/uwSemWebParts/webResource-1-0-0.nt -ns http://www.example.org uwlib
Implicit class usage :
SHACL interprets shapes typed as rdfs:Class
as the target class of that shape. This is called Implicit Class Targets.
By setting -i
or --implicit
, shaclgen will reuse the class definitions in the ontology (ie. instances of rdfs:Class
or owl:Class
) as shapes and not create new URIs.
Instances of owl:Class
will be typed as rdfs:Class
in the output.
Triples that tie the class to one of its parent classes with rdfs:subclassOf
will be copied by default.
Example ontology input:
ex:Person a owl:Class.
Example output without -i
:
ex:PersonShape a sh:NodeShape;
sh:targetClass ex:Person .
Example output with -i
:
ex:Person a rdfs:Class; sh:NodeShape.
This project is still in development. Comments, questions, and issues are welcome!
Contact alexiskeelie at gmail.com