11"""CMEM plugin for SHACl validation using pySHACL"""
22
3+ import re
34from collections import OrderedDict
45from datetime import UTC , datetime
56from tempfile import NamedTemporaryFile
@@ -352,6 +353,14 @@ def __init__( # noqa: PLR0913
352353 self .remove_shape_catalog_graph_type = remove_shape_catalog_graph_type
353354 self .max_validation_depth = max_validation_depth
354355
356+ @staticmethod
357+ def is_valid_uri (uri : str | None ) -> bool :
358+ """Validate URI"""
359+ if not isinstance (uri , str ):
360+ return False
361+ urn_pattern = r"^urn:[a-zA-Z][a-zA-Z0-9-]{0,31}:.+$"
362+ return validators .url (uri ) is True or bool (re .match (urn_pattern , uri , re .IGNORECASE ))
363+
355364 def add_prov (self , validation_graph : Graph , utctime : str ) -> Graph :
356365 """Add provenance data"""
357366 self .log .info ("Adding PROV information validation graph" )
@@ -551,14 +560,14 @@ def check_parameters( # noqa: C901 PLR0912
551560 raise ValueError (
552561 "Generate validation graph or Output values parameter needs to be set to true"
553562 )
554- if not validators . url (self .data_graph_uri ):
563+ if not self . is_valid_uri (self .data_graph_uri ):
555564 raise ValueError ("Data graph URI parameter is invalid" )
556- if not validators . url (self .shacl_graph_uri ):
565+ if not self . is_valid_uri (self .shacl_graph_uri ):
557566 raise ValueError ("SHACL graph URI parameter is invalid" )
558567 graphs_dict = {graph ["iri" ]: graph ["assignedClasses" ] for graph in get_graphs_list ()}
559568
560569 if self .ontology_graph_uri :
561- if not validators . url (self .ontology_graph_uri ):
570+ if not self . is_valid_uri (self .ontology_graph_uri ):
562571 raise ValueError ("Ontology graph URI parameter is invalid" )
563572 if self .ontology_graph_uri not in graphs_dict :
564573 raise ValueError (f"Ontology graph <{ self .ontology_graph_uri } > not found" )
@@ -576,7 +585,7 @@ def check_parameters( # noqa: C901 PLR0912
576585 if "https://vocab.eccenca.com/shui/ShapeCatalog" not in graphs_dict [self .shacl_graph_uri ]:
577586 raise ValueError (f"Invalid graph type for SHACL graph <{ self .shacl_graph_uri } >" )
578587 if self .generate_graph :
579- if not validators . url (self .validation_graph_uri ):
588+ if not self . is_valid_uri (self .validation_graph_uri ):
580589 raise ValueError ("Validation graph URI parameter is invalid" )
581590 if self .validation_graph_uri in graphs_dict :
582591 self .log .warning (f"Graph <{ self .validation_graph_uri } > already exists" )
0 commit comments