Package: cheka
CHEKAA profile hierarchy-based RDF graph validation tool written in PythonInstallationUseTestingLicenseCitationContactsThis tool validates a data graph against a set of SHACL shape graphs that it extracts from a hierarchy of Profiles (Standards/Specifications and/or profiles of them). It uses conformance claims in the data graph to a Profile to collate and then use all thevalidatorSHACL files within the hierarchy of other Profiles and Standards to which that Profile profiles.Cheka usesProfiles Vocabulary (PROF)descriptions of Profiles and Standards and both
traverses up a Profile hierarchy (followingprof:isProfileOfproperties) and across fromprof:Profiless toprof:ResourceDescriptorsthat describe the constraints implemented for them. These constraints are currently limited
toShapes Constraint Language (SHACL)files and must have theprof:Roleofrole:validationto be recognised by Cheka. ThepySHACLPython SHACL validator is
used to perform SHACL validation.InstallationEnsure Python 3 in available on your systemClone this repoInstall requirements inrequirements.txt, e.g.~$ pip3 install -r requirements.txtExecute scripts as perUsebelowUseInput requirementsTo use Cheka, you must supply it with both a data (an RDF graph) to be validated and a profiles hierarchy (another RDF graph). It will then use
one of several selected strategies to validate objects within the data using validating resources it locates using the
profiles hierarchy.Youmaysupply it with a couple of other flags too for other functions.The command line arguments (Python & BASH) are:FlagInput valuesRequirementNotes-d/--dataan RDF file's pathmandatoryCan be in most RDF formats with conventional file endings (e.g..ttlfor Turtle,.jsonldfor JSON-LD)-p/--profilesa profile file's pathmandatoryAs above. Profiles description must be formulated according toPROF-s/--strategy'shacl' or 'profile'optional, 'shacl' defaultWhich strategy to use. SeeStrategiesdescription below-u/--profile-urithe URI of a profile in the profile hierarchysometimes mandatoryIf strategy 'profile' is selected, a profile URI must be give. The data is then validated using validators within that profile's hierarchy only-r/--get-remotesnoneoptional, default FalseIf True, Cheka will pull in profile and validating SHACL artifacts referenced, but not described, in the profiles hierarchy, i.e. remote profiles onlineData graphThis must be an RDF file with the part(s) to be validated indicating their conformance to aprofileas per the
Profiles Vocabulary.Typically this will look like this:@prefix dct: <http://purl.org/dc/terms/> .

<Object_X>
    a <Class_Y> ;
    dct:conformsTo <Profile_Z> ;
    ...This says that<Object_X>is meant to conform to<Profile_Z>.See thetests/folder for example data graphs.Profiles hierarchyThis must also be an RDF file that contains a hierarchy ofprof:Profileobjects (includingdct:Standardobjects)
that are related to one another via theprof:isProfileOfproperty and each of which has a validating resource
indicated by relating it to aprof:Profilevia aprof:ResourceDescriptorlike this:@prefix dct: <http://purl.org/dc/terms/> .
@prefix prof: <http://www.w3.org/ns/dx/prof/> .
@prefix role:  <http://www.w3.org/ns/dx/prof/role/> .


<Standard_A>
    a dct:Standard ;
    prof:hasResource [
        a prof:ResourceDescriptor ;
        prof:hasRole role:validation ;
        prof:hasArtifact <File_or_Uri_J> ;
    ]
.

<Profile_B>
    a prof:Profile ;
    prof:isProfileOf <Standard_A> ;
    prof:hasResource <Resource_Descriptor_P> ;
.   

<Resource_Descriptor_P>
    a prof:ResourceDescriptor ;
    prof:hasRole role:validation ;
    prof:hasArtifact <File_or_Uri_K> ;
.

<Profile_C>
    a prof:Profile ; 
    prof:isProfileOf <Profile_B> ;    
    prof:hasResource [
        a prof:ResourceDescriptor ;
        prof:hasRole role:validation ;
        prof:hasArtifact <File_or_Uri_L> ;
    ] ;
.This says<Profile_C>is a profile of<Profile_B>which is, in turn, a profile of<Standard_A>. The two profiles
and the standard have resources<File_or_Uri_J>,<File_or_Uri_K>&<File_or_Uri_L>respectively which are
indicated to be validators by theprof:ResourceDescriptorclasses that associate them with their profiles/standard.See thetests/folder for example profiles graphs.StrategiesThe following different strategies may be selected for use.NameDescriptionshaclStandard SHACL validation: all the SHACL validators from all the profiles found in the profiles hierarchy are used to validate the the given data using the SHACL validators' targeting (usually per class)profileValidates given data using the validators found linked to a profile and all the profiles in that profile's hierarchy. This is the "main" Cheka strategy, as opposed toshaclwhich is "normal" SHACL validationclaimsNot implemented yet, likely February 2021shaclis the default strategyNote that the strategy is applied using the-sflag. When using Cheka as a Python module, a different strategy may be applied per call toCheka.validate().RunningCheka uses the profiles graph to find all the SHACL validators it needs to validate a data graph. It returns a pySHACL
result with an additional element - the URI of the profile used for validation: [conforms, results_graph, results_text, profile_uri].conformsis either True or False.As a Python moduleA Python program can import Cheka (import cheka) after installing it (pip install cheka). Then Cheka can be called in code like this:importchekac=cheka.Cheka("data.ttl","profiles_hierarchy.ttl")# to tell Cheka to pull in profiles/validators# referenced but not defined in the profiles_hierarchy.ttlc.get_remote_profiles=True# a simple validation - basic, default, shacl-only (no use of profiles)c.validate()# profile-based vaidation, starting with the profile Profile_Cc.validate(strategy="profile",profile_uri="http://example.org/profile/Profile_C")As a Python command line utility~$ python3 cli.py -d DATA-GRAPH-FILE -p PROFILES-GRAPH-FILE(and potentially other optional args)If you make the cli.py script executable (sudo chmod a+x cli.py) then you can run it like this:~$ ./cli.py -d DATA-GRAPH-FILE -p PROFILES-GRAPH-FILEAs a BASH scriptThe filechekain thebin/directory is a BASH shell script that callscli.py. Make it executable
(sudo chmod a+x cheka) then you can run it like this:~$ ./cheka -d DATA-GRAPH-FILE -p PROFILES-GRAPH-FILE(and potentially other optional args)As a Windows executablecoming!TestingTests are included in thetests/directory. They usepytestshould be able to be run from the command line. They have
no dependencies, other than pytest and Cheka itself.Tests are annotated with what they are testing.Test profile hierarchyThe profiles and validators used for the tests in this code are combined in the filetest-profile.hierarchy.ttl. This hierarchy can be used in other applications as an example of a profile hierarchy.LicenseThis code is licensed using the GPL v3 licence. See theLICENSE filefor the deed.NoteCitationbelow for attribution.CitationTo cite this software, please use the following BibTex:@software{10.5281/zenodo.3676330,
  author = {{Nicholas J. Car}},
  title = {Cheka: A profile hierarchy-based RDF graph validation tool written in Python},
  version = {0.5},
  date = {2020},
  publisher = "SURROUND Australia Pty. Ltd.",
  doi = {10.5281/zenodo.3676330},
  url = {https://doi.org/10.5281/zenodo.3676330}
}Or the following RDF:@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix sdo: <https://schema.org/> .
@prefix wiki: <https://www.wikidata.org/wiki/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://doi.org/10.5281/zenodo.3676330>
    a sdo:SoftwareSourceCode , owl:NamedIndividual ;
    sdo:codeRepository <https://github.com/surroundaustralia/cheka> ;
    dcterms:type wiki:Q7397 ; # "software"
    dcterms:creator "Nicholas J. Car" ;
    dcterms:date "2020"^^xsd:gYear ;
    dcterms:title "Cheka: A profile hierarchy-based RDF graph validation tool written in Python" ;
    sdo:version "0.5" ;
    dcterms:publisher [
        a sdo:Organization ;
        sdo:name "SURROUND Pty Ltd" ;
        sdo:url <https://surroundaustralia.com> ;
    ]
.Contactspublisher:SURROUND Australia Pty. Ltd.https://surroundaustralia.comcreator:Dr Nicholas J. CarData Systems ArchitectSURROUND Australia Pty. Ltd.nicholas.car@surroudaustralia.com