diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 604c1a1..3845a6e 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -1,11 +1,14 @@ +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/Makefile b/Makefile index a96ebcd..3d5560f 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/case_utils/__init__.py b/case_utils/__init__.py index a9456fb..c98638f 100644 --- a/case_utils/__init__.py +++ b/case_utils/__init__.py @@ -1,16 +1,19 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. -__version__ = "0.11.0" +__version__ = "0.12.0" from . import local_uuid # noqa: F401 diff --git a/case_utils/case_file/__init__.py b/case_utils/case_file/__init__.py index 051e07d..5f797fc 100644 --- a/case_utils/case_file/__init__.py +++ b/case_utils/case_file/__init__.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -15,7 +18,7 @@ This module creates a graph object that provides a basic UCO characterization of a single file. The gathered metadata is among the more "durable" file characteristics, i.e. characteristics that would remain consistent when transferring a file between locations. """ -__version__ = "0.5.0" +__version__ = "0.5.1" import argparse import datetime diff --git a/case_utils/case_sparql_construct/__init__.py b/case_utils/case_sparql_construct/__init__.py index 2ac367f..46072c0 100644 --- a/case_utils/case_sparql_construct/__init__.py +++ b/case_utils/case_sparql_construct/__init__.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -15,7 +18,7 @@ This script executes a SPARQL CONSTRUCT query, returning a graph of the generated triples. """ -__version__ = "0.2.5" +__version__ = "0.2.6" import argparse import logging diff --git a/case_utils/case_sparql_select/__init__.py b/case_utils/case_sparql_select/__init__.py index be6268d..f1c7bb7 100644 --- a/case_utils/case_sparql_select/__init__.py +++ b/case_utils/case_sparql_select/__init__.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -26,7 +29,7 @@ Should a more complex query be necessary, an outer, wrapping SELECT query would let this script continue to function. """ -__version__ = "0.5.1" +__version__ = "0.5.2" import argparse import binascii diff --git a/case_utils/case_validate/__init__.py b/case_utils/case_validate/__init__.py index 5ef2952..babea69 100644 --- a/case_utils/case_validate/__init__.py +++ b/case_utils/case_validate/__init__.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -29,46 +32,122 @@ details.) """ -__version__ = "0.3.0" +__version__ = "0.4.0" import argparse -import importlib.resources import logging import os import sys -import typing import warnings +from typing import Any, Dict, List, Optional, Tuple, Union import pyshacl # type: ignore import rdflib +from rdflib import Graph -import case_utils.ontology +from case_utils.case_validate.validate_types import ( + NonExistentCDOConceptWarning, + ValidationResult, +) +from case_utils.case_validate.validate_utils import ( + disable_tbox_review, + get_invalid_cdo_concepts, + get_ontology_graph, +) from case_utils.ontology.version_info import ( CURRENT_CASE_VERSION, built_version_choices_list, ) -NS_OWL = rdflib.OWL -NS_RDF = rdflib.RDF -NS_RDFS = rdflib.RDFS -NS_SH = rdflib.SH - _logger = logging.getLogger(os.path.basename(__file__)) -class NonExistentCDOConceptWarning(UserWarning): +def validate( + input_file: Union[List[str], str], + *args: Any, + case_version: Optional[str] = None, + review_tbox: bool = False, + supplemental_graphs: Optional[List[str]] = None, + **kwargs: Any, +) -> ValidationResult: """ - This class is used when a concept is encountered in the data graph that is not part of CDO ontologies, according to the --built-version flags and --ontology-graph flags. + Validate the given data graph against the given CASE ontology version and supplemental graphs. + + :param *args: The positional arguments to pass to the underlying pyshacl.validate function. + :param input_file: The path to the file containing the data graph to validate. This can also be a list of paths to files containing data graphs to pool together. + :param case_version: The version of the CASE ontology to use (e.g. 1.2.0). If None, the most recent version will be used. + :param review_tbox: If True, SHACL shapes that review OWL Classes, OWL Properties, and SHACL shapes that constrain those classes and properties will be used in the review. Otherwise, those shapes will be deactivated before running validation. Be aware that these shapes are known to significantly increase the validation run time. + :param supplemental_graphs: File paths to supplemental graphs to use. If None, no supplemental graphs will be used. + :param allow_warnings: In addition to affecting the conformance of SHACL validation, this will affect conformance based on unrecognized CDO concepts (likely, misspelled or miscapitalized) in the data graph. If allow_warnings is not True, any unrecognized concept using a CDO IRI prefix will cause conformance to be False. + :param inference: The type of inference to use. If "none" (type str), no inference will be used. If None (type NoneType), pyshacl defaults will be used. Note that at the time of this writing (pySHACL 0.23.0), pyshacl defaults are no inferencing for the data graph, and RDFS inferencing for the SHACL graph, which for case_utils.validate includes the SHACL and OWL graphs. + :param **kwargs: The keyword arguments to pass to the underlying pyshacl.validate function. + :return: The validation result object containing the defined properties. """ + # Convert the data graph string to a rdflib.Graph object. + data_graph = rdflib.Graph() + if isinstance(input_file, str): + data_graph.parse(input_file) + elif isinstance(input_file, list): + for _data_graph_file in input_file: + _logger.debug("_data_graph_file = %r.", _data_graph_file) + if not isinstance(_data_graph_file, str): + raise TypeError("Expected str, received %s." % type(_data_graph_file)) + data_graph.parse(_data_graph_file) + + # Get the ontology graph from the case_version and supplemental_graphs arguments + ontology_graph: Graph = get_ontology_graph(case_version, supplemental_graphs) + + if not review_tbox: + # This is done because, at the time of pyshacl 0.20.0, the + # entirety of the ontology graph is mixed into the data graph. + # UCO 1.0.0 includes some mechanisms to cross-check SHACL + # PropertyShapes versus OWL property definitions. Because of + # the mix-in, all of the ontology graph (.validate ont_graph + # kwarg) is reviewed by the SHACL graph (.validate shacl_graph + # kwarg), so for UCO 1.0.0 that adds around 30 seconds to each + # case_validate call, redundantly reviewing UCO. + disable_tbox_review(ontology_graph) + + # Get the undefined CDO concepts. + undefined_cdo_concepts = get_invalid_cdo_concepts(data_graph, ontology_graph) + + # Warn about typo'd concepts before performing SHACL review. + for undefined_cdo_concept in sorted(undefined_cdo_concepts): + warnings.warn(undefined_cdo_concept, NonExistentCDOConceptWarning) + undefined_cdo_concepts_message = ( + "There were %d concepts with CDO IRIs in the data graph that are not in the ontology graph." + % len(undefined_cdo_concepts) + ) + + # Validate data graph against ontology graph. + validate_result: Tuple[ + bool, Union[Exception, bytes, str, rdflib.Graph], str + ] = pyshacl.validate( + data_graph, + *args, + ont_graph=ontology_graph, + shacl_graph=ontology_graph, + **kwargs, + ) - pass + # Relieve RAM of the data graph after validation has run. + del data_graph + conforms = validate_result[0] + + if len(undefined_cdo_concepts) > 0: + warnings.warn(undefined_cdo_concepts_message) + if not kwargs.get("allow_warnings"): + undefined_cdo_concepts_alleviation_message = "The data graph is SHACL-conformant with the CDO ontologies, but nonexistent-concept references raise Warnings with this tool. Please either correct the concept names in the data graph; use the --ontology-graph flag to pass a corrected CDO ontology file, also using --built-version none; or, use the --allow-warnings flag." + warnings.warn(undefined_cdo_concepts_alleviation_message) + conforms = False -def concept_is_cdo_concept(n_concept: rdflib.URIRef) -> bool: - concept_iri = str(n_concept) - return concept_iri.startswith( - "https://ontology.unifiedcyberontology.org/" - ) or concept_iri.startswith("https://ontology.caseontology.org/") + return ValidationResult( + conforms, + validate_result[1], + validate_result[2], + undefined_cdo_concepts, + ) def main() -> None: @@ -136,12 +215,12 @@ def main() -> None: action="store_true", help="(As with pyshacl CLI) Allow import of sub-graphs defined in statements with owl:imports.", ) + # NOTE: The "ontology graph" in the --inference help is the mix of the SHACL shapes graph and OWL ontology (or RDFS schema) graph. parser.add_argument( "-i", "--inference", choices=("none", "rdfs", "owlrl", "both"), - default="none", - help='(As with pyshacl CLI) Choose a type of inferencing to run against the Data Graph before validating. Default is "none".', + help='(As with pyshacl CLI) Choose a type of inferencing to run against the Data Graph before validating. The default behavior if this flag is not provided is to behave as "none", if not using the --metashacl flag. The default behavior when using the --metashacl flag will apply "rdfs" inferencing to the ontology graph, but the data graph will still have no inferencing applied. If the --inference flag is provided, it will apply to both the ontology graph, and the data graph.', ) parser.add_argument( "-m", @@ -160,128 +239,44 @@ def main() -> None: help='(ALMOST as with pyshacl CLI) Send output to a file. If absent, output will be written to stdout. Difference: If specified, file is expected not to exist. Clarification: Does NOT influence --format flag\'s default value of "human". (I.e., any machine-readable serialization format must be specified with --format.)', default=sys.stdout, ) + parser.add_argument( + "--review-tbox", + action="store_true", + help='Enable rules for reviewing OWL Classes, Properties, and SHACL shapes that constrain them (i.e. the "TBox", or "Theorem box", of the data graph and ontology graph; in contrast, the "ABox", or "Axiom box", contains the declarations of members of those classes, and users of those properties). This should be used when adding extension classes or properties not adopted by UCO or its downstream ontologies, e.g. when using a drafting namespace. Be aware that these rules are known to significantly increase the validation run time.', + ) parser.add_argument("in_graph", nargs="+") args = parser.parse_args() - data_graph = rdflib.Graph() - for in_graph in args.in_graph: - _logger.debug("in_graph = %r.", in_graph) - data_graph.parse(in_graph) - - ontology_graph = rdflib.Graph() - if args.built_version != "none": - ttl_filename = args.built_version + ".ttl" - _logger.debug("ttl_filename = %r.", ttl_filename) - ttl_data = importlib.resources.read_text(case_utils.ontology, ttl_filename) - ontology_graph.parse(data=ttl_data, format="turtle") - if args.ontology_graph: - for arg_ontology_graph in args.ontology_graph: - _logger.debug("arg_ontology_graph = %r.", arg_ontology_graph) - ontology_graph.parse(arg_ontology_graph) - - # Construct set of CDO concepts for data graph concept-existence review. - cdo_concepts: typing.Set[rdflib.URIRef] = set() - - for n_structural_class in [ - NS_OWL.Class, - NS_OWL.AnnotationProperty, - NS_OWL.DatatypeProperty, - NS_OWL.ObjectProperty, - NS_RDFS.Datatype, - NS_SH.NodeShape, - NS_SH.PropertyShape, - NS_SH.Shape, - ]: - for ontology_triple in ontology_graph.triples( - (None, NS_RDF.type, n_structural_class) - ): - if not isinstance(ontology_triple[0], rdflib.URIRef): - continue - if concept_is_cdo_concept(ontology_triple[0]): - cdo_concepts.add(ontology_triple[0]) - for n_ontology_predicate in [ - NS_OWL.backwardCompatibleWith, - NS_OWL.imports, - NS_OWL.incompatibleWith, - NS_OWL.priorVersion, - NS_OWL.versionIRI, - ]: - for ontology_triple in ontology_graph.triples( - (None, n_ontology_predicate, None) - ): - assert isinstance(ontology_triple[0], rdflib.URIRef) - assert isinstance(ontology_triple[2], rdflib.URIRef) - cdo_concepts.add(ontology_triple[0]) - cdo_concepts.add(ontology_triple[2]) - for ontology_triple in ontology_graph.triples((None, NS_RDF.type, NS_OWL.Ontology)): - if not isinstance(ontology_triple[0], rdflib.URIRef): - continue - cdo_concepts.add(ontology_triple[0]) - - # Also load historical ontology and version IRIs. - ontology_and_version_iris_data = importlib.resources.read_text( - case_utils.ontology, "ontology_and_version_iris.txt" - ) - for line in ontology_and_version_iris_data.split("\n"): - cleaned_line = line.strip() - if cleaned_line == "": - continue - cdo_concepts.add(rdflib.URIRef(cleaned_line)) - - data_cdo_concepts: typing.Set[rdflib.URIRef] = set() - for data_triple in data_graph.triples((None, None, None)): - for data_triple_member in data_triple: - if isinstance(data_triple_member, rdflib.URIRef): - if concept_is_cdo_concept(data_triple_member): - data_cdo_concepts.add(data_triple_member) - elif isinstance(data_triple_member, rdflib.Literal): - if isinstance(data_triple_member.datatype, rdflib.URIRef): - if concept_is_cdo_concept(data_triple_member.datatype): - data_cdo_concepts.add(data_triple_member.datatype) - - undefined_cdo_concepts = data_cdo_concepts - cdo_concepts - for undefined_cdo_concept in sorted(undefined_cdo_concepts): - warnings.warn(undefined_cdo_concept, NonExistentCDOConceptWarning) - undefined_cdo_concepts_message = ( - "There were %d concepts with CDO IRIs in the data graph that are not in the ontology graph." - % len(undefined_cdo_concepts) - ) - # Determine output format. # pySHACL's determination of output formatting is handled solely # through the -f flag. Other CASE CLI tools handle format # determination by output file extension. case_validate will defer # to pySHACL behavior, as other CASE tools don't (at the time of # this writing) have the value "human" as an output format. - validator_kwargs: typing.Dict[str, str] = dict() + validator_kwargs: Dict[str, str] = dict() if args.format != "human": validator_kwargs["serialize_report_graph"] = args.format - validate_result: typing.Tuple[ - bool, typing.Union[Exception, bytes, str, rdflib.Graph], str - ] - validate_result = pyshacl.validate( - data_graph, - shacl_graph=ontology_graph, - ont_graph=ontology_graph, - inference=args.inference, - meta_shacl=args.metashacl, + validation_result: ValidationResult = validate( + args.in_graph, abort_on_first=args.abort, allow_infos=True if args.allow_infos else False, allow_warnings=True if args.allow_warnings else False, + case_version=args.built_version, debug=True if args.debug else False, do_owl_imports=True if args.imports else False, - **validator_kwargs + inference=args.inference, + meta_shacl=args.metashacl, + review_tbox=True if args.review_tbox else False, + supplemental_graphs=args.ontology_graph, + **validator_kwargs, ) - # Relieve RAM of the data graph after validation has run. - del data_graph - - conforms = validate_result[0] - validation_graph = validate_result[1] - validation_text = validate_result[2] + conforms = validation_result.conforms + validation_graph = validation_result.graph + validation_text = validation_result.text # NOTE: The output logistics code is adapted from pySHACL's file # pyshacl/cli.py. This section should be monitored for code drift. @@ -303,13 +298,6 @@ def main() -> None: % type(validation_graph) ) - if len(undefined_cdo_concepts) > 0: - warnings.warn(undefined_cdo_concepts_message) - if not args.allow_warnings: - undefined_cdo_concepts_alleviation_message = "The data graph is SHACL-conformant with the CDO ontologies, but nonexistent-concept references raise Warnings with this tool. Please either correct the concept names in the data graph; use the --ontology-graph flag to pass a corrected CDO ontology file, also using --built-version none; or, use the --allow-warnings flag." - warnings.warn(undefined_cdo_concepts_alleviation_message) - conforms = False - sys.exit(0 if conforms else 1) diff --git a/case_utils/case_validate/validate_types.py b/case_utils/case_validate/validate_types.py new file mode 100644 index 0000000..8ca825f --- /dev/null +++ b/case_utils/case_validate/validate_types.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +# Portions of this file contributed by NIST are governed by the following +# statement: +# +# This software was developed at the National Institute of Standards +# and Technology by employees of the Federal Government in the course +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. +# +# We would appreciate acknowledgement if the software is used. + +__version__ = "0.1.0" + +from typing import Set, Union + +import rdflib + + +class ValidationResult: + def __init__( + self, + conforms: bool, + graph: Union[Exception, bytes, str, rdflib.Graph], + text: str, + undefined_concepts: Set[rdflib.URIRef], + ) -> None: + self.conforms = conforms + self.graph = graph + self.text = text + self.undefined_concepts = undefined_concepts + + +class NonExistentCDOConceptWarning(UserWarning): + """ + This class is used when a concept is encountered in the data graph that is not part of CDO ontologies, according to the --built-version flags and --ontology-graph flags. + """ + + pass + + +class NonExistentCASEVersionError(Exception): + """ + This class is used when an invalid CASE version is requested that is not supported by the library. + """ + + pass diff --git a/case_utils/case_validate/validate_utils.py b/case_utils/case_validate/validate_utils.py new file mode 100644 index 0000000..4f711e0 --- /dev/null +++ b/case_utils/case_validate/validate_utils.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python3 + +# Portions of this file contributed by NIST are governed by the following +# statement: +# +# This software was developed at the National Institute of Standards +# and Technology by employees of the Federal Government in the course +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. +# +# We would appreciate acknowledgement if the software is used. + +__version__ = "0.1.0" + +import importlib +import logging +import os +from typing import List, Optional, Set + +import rdflib + +import case_utils +from case_utils.case_validate.validate_types import NonExistentCASEVersionError +from case_utils.ontology.version_info import CURRENT_CASE_VERSION + +NS_OWL = rdflib.OWL +NS_RDF = rdflib.RDF +NS_RDFS = rdflib.RDFS +NS_SH = rdflib.SH + +_logger = logging.getLogger(os.path.basename(__file__)) + + +def concept_is_cdo_concept(n_concept: rdflib.URIRef) -> bool: + """ + Determine if a concept is part of the CDO ontology. + + :param n_concept: The concept to check. + :return: whether the concept is part of the CDO ontologies. + """ + concept_iri = str(n_concept) + return concept_iri.startswith( + "https://ontology.unifiedcyberontology.org/" + ) or concept_iri.startswith("https://ontology.caseontology.org/") + + +def get_invalid_cdo_concepts( + data_graph: rdflib.Graph, ontology_graph: rdflib.Graph +) -> Set[rdflib.URIRef]: + """ + Get the set of concepts in the data graph that are not part of the CDO ontologies as specified with the ontology_graph argument. + + :param data_graph: The data graph to validate. + :param ontology_graph: The ontology graph to use for validation. + :return: The list of concepts in the data graph that are not part of the CDO ontology. + + >>> from case_utils.namespace import NS_RDF, NS_OWL, NS_UCO_CORE + >>> from rdflib import Graph, Literal, Namespace, URIRef + >>> # Define a namespace for a knowledge base, and a namespace for custom extensions. + >>> ns_kb = Namespace("http://example.org/kb/") + >>> ns_ex = Namespace("http://example.org/ontology/") + >>> dg = Graph() + >>> og = Graph() + >>> # Use an ontology graph in review that includes only a single class and a single property excerpted from UCO, but also a single custom property. + >>> _ = og.add((NS_UCO_CORE.UcoObject, NS_RDF.type, NS_OWL.Class)) + >>> _ = og.add((NS_UCO_CORE.name, NS_RDF.type, NS_OWL.DatatypeProperty)) + >>> _ = og.add((ns_ex.ourCustomProperty, NS_RDF.type, NS_OWL.DatatypeProperty)) + >>> # Define an individual. + >>> n_uco_object = ns_kb["UcoObject-f494d239-d9fd-48da-bc07-461ba86d8c6c"] + >>> n_uco_object + rdflib.term.URIRef('http://example.org/kb/UcoObject-f494d239-d9fd-48da-bc07-461ba86d8c6c') + >>> # Review a data graph that includes only the single individual, class typo'd (capitalized incorrectly), but property OK. + >>> _ = dg.add((n_uco_object, NS_RDF.type, NS_UCO_CORE.UCOObject)) + >>> _ = dg.add((n_uco_object, NS_UCO_CORE.name, Literal("Test"))) + >>> _ = dg.add((n_uco_object, ns_ex.customProperty, Literal("Custom Value"))) + >>> invalid_cdo_concepts = get_invalid_cdo_concepts(dg, og) + >>> invalid_cdo_concepts + {rdflib.term.URIRef('https://ontology.unifiedcyberontology.org/uco/core/UCOObject')} + >>> # Note that the property "ourCustomProperty" was typo'd in the data graph, but this was not reported. + >>> assert ns_ex.ourCustomProperty not in invalid_cdo_concepts + """ + # Construct set of CDO concepts for data graph concept-existence review. + cdo_concepts: Set[rdflib.URIRef] = set() + + for n_structural_class in [ + NS_OWL.Class, + NS_OWL.AnnotationProperty, + NS_OWL.DatatypeProperty, + NS_OWL.ObjectProperty, + NS_RDFS.Datatype, + NS_SH.NodeShape, + NS_SH.PropertyShape, + NS_SH.Shape, + ]: + for ontology_triple in ontology_graph.triples( + (None, NS_RDF.type, n_structural_class) + ): + if not isinstance(ontology_triple[0], rdflib.URIRef): + continue + if concept_is_cdo_concept(ontology_triple[0]): + cdo_concepts.add(ontology_triple[0]) + for n_ontology_predicate in [ + NS_OWL.backwardCompatibleWith, + NS_OWL.imports, + NS_OWL.incompatibleWith, + NS_OWL.priorVersion, + NS_OWL.versionIRI, + ]: + for ontology_triple in ontology_graph.triples( + (None, n_ontology_predicate, None) + ): + assert isinstance(ontology_triple[0], rdflib.URIRef) + assert isinstance(ontology_triple[2], rdflib.URIRef) + cdo_concepts.add(ontology_triple[0]) + cdo_concepts.add(ontology_triple[2]) + for ontology_triple in ontology_graph.triples((None, NS_RDF.type, NS_OWL.Ontology)): + if not isinstance(ontology_triple[0], rdflib.URIRef): + continue + cdo_concepts.add(ontology_triple[0]) + + # Also load historical ontology and version IRIs. + ontology_and_version_iris_data = importlib.resources.read_text( + case_utils.ontology, "ontology_and_version_iris.txt" + ) + for line in ontology_and_version_iris_data.split("\n"): + cleaned_line = line.strip() + if cleaned_line == "": + continue + cdo_concepts.add(rdflib.URIRef(cleaned_line)) + + data_cdo_concepts: Set[rdflib.URIRef] = set() + for data_triple in data_graph.triples((None, None, None)): + for data_triple_member in data_triple: + if isinstance(data_triple_member, rdflib.URIRef): + if concept_is_cdo_concept(data_triple_member): + data_cdo_concepts.add(data_triple_member) + elif isinstance(data_triple_member, rdflib.Literal): + if isinstance(data_triple_member.datatype, rdflib.URIRef): + if concept_is_cdo_concept(data_triple_member.datatype): + data_cdo_concepts.add(data_triple_member.datatype) + + return data_cdo_concepts - cdo_concepts + + +def get_ontology_graph( + case_version: Optional[str] = None, supplemental_graphs: Optional[List[str]] = None +) -> rdflib.Graph: + """ + Get the ontology graph for the given case_version and any supplemental graphs. + + :param case_version: the version of the CASE ontology to use. If None (i.e. null), the most recent version will be used. If "none" (the string), no pre-built version of CASE will be used. + :param supplemental_graphs: a list of supplemental graphs to use. If None, no supplemental graphs will be used. + :return: the ontology graph against which to validate the data graph. + """ + ontology_graph = rdflib.Graph() + + if case_version != "none": + # Load bundled CASE ontology at requested version. + if case_version is None or case_version == "": + case_version = CURRENT_CASE_VERSION + # If the first character case_version is numeric, prepend case- to it. This allows for the version to be passed + # by the library as both case-1.2.0 and 1.2.0 + if case_version[0].isdigit(): + case_version = "case-" + case_version + ttl_filename = case_version + ".ttl" + _logger.debug("ttl_filename = %r.", ttl_filename) + # Ensure the requested version of the CASE ontology is available and if not, throw an appropriate exception + # that can be returned in a user-friendly message. + if not importlib.resources.is_resource(case_utils.ontology, ttl_filename): + raise NonExistentCASEVersionError( + f"The requested version ({case_version}) of the CASE ontology is not available. Please choose a " + f"different version. The latest supported version is: {CURRENT_CASE_VERSION}" + ) + ttl_data = importlib.resources.read_text(case_utils.ontology, ttl_filename) + ontology_graph.parse(data=ttl_data, format="turtle") + + if supplemental_graphs: + for arg_ontology_graph in supplemental_graphs: + _logger.debug("arg_ontology_graph = %r.", arg_ontology_graph) + ontology_graph.parse(arg_ontology_graph) + + return ontology_graph + + +def disable_tbox_review(graph: rdflib.Graph) -> None: + l_true = rdflib.Literal(True) + ns_uco_owl = rdflib.Namespace("https://ontology.unifiedcyberontology.org/owl/") + + for tbox_shape_basename in { + "DataOneOf-shape", + "DatatypeProperty-shacl-constraints-shape", + "Disjointedness-AP-DP-shape", + "Disjointedness-AP-OP-shape", + "Disjointedness-C-DT-shape", + "Disjointedness-DP-OP-shape", + "ObjectProperty-shacl-constraints-shape", + "ontologyIRI-versionIRI-prerequisite-shape", + "versionIRI-nodeKind-shape", + }: + n_tbox_shape = ns_uco_owl[tbox_shape_basename] + graph.add((n_tbox_shape, NS_SH.deactivated, l_true)) diff --git a/case_utils/inherent_uuid.py b/case_utils/inherent_uuid.py index 667a8d1..cdcba73 100644 --- a/case_utils/inherent_uuid.py +++ b/case_utils/inherent_uuid.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -54,7 +57,7 @@ >>> assert str(n_file_facet)[-36:] == str(n_file_facet_2)[-36:] """ -__version__ = "0.1.0" +__version__ = "0.1.1" import binascii import re diff --git a/case_utils/local_uuid.py b/case_utils/local_uuid.py index 85801b3..2df5fcb 100644 --- a/case_utils/local_uuid.py +++ b/case_utils/local_uuid.py @@ -1,21 +1,28 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. """ This library is a wrapper for uuid, provided to generate repeatable UUIDs if requested. + +The function local_uuid() should be used in code where a user could be expected to opt in to non-random UUIDs. """ -__version__ = "0.3.2" +__version__ = "0.4.0" + +__all__ = ["configure", "local_uuid"] import logging import os @@ -34,13 +41,13 @@ def configure() -> None: """ - This function is part of setting up demo_uuid() to generate non-random UUIDs. See demo_uuid() documentation for further setup notes. + This function is part of setting up _demo_uuid() to generate non-random UUIDs. See _demo_uuid() documentation for further setup notes. """ global DEMO_UUID_BASE if os.getenv("DEMO_UUID_REQUESTING_NONRANDOM") == "NONRANDOM_REQUESTED": warnings.warn( - "Environment variable DEMO_UUID_REQUESTING_NONRANDOM is deprecated. See case_utils.local_uuid.demo_uuid for usage notes on its replacement, CASE_DEMO_NONRANDOM_UUID_BASE. Proceeding with random UUIDs.", + "Environment variable DEMO_UUID_REQUESTING_NONRANDOM is deprecated. See case_utils.local_uuid._demo_uuid for usage notes on its replacement, CASE_DEMO_NONRANDOM_UUID_BASE. Proceeding with random UUIDs.", FutureWarning, ) return @@ -109,10 +116,12 @@ def configure() -> None: DEMO_UUID_BASE = "/".join(demo_uuid_base_parts) -def demo_uuid() -> str: +def _demo_uuid() -> str: """ This function generates a repeatable UUID, drawing on non-varying elements of the environment and process call for entropy. + This function is not intended to be called outside of this module. Instead, local_uuid() should be called. + WARNING: This function was developed for use ONLY for reducing (but not eliminating) version-control edits to identifiers when generating sample data. It creates UUIDs that are decidedly NOT random, and should remain consistent on repeated calls to the importing script. To prevent accidental non-random UUID usage, two setup steps need to be done before calling this function: @@ -148,4 +157,4 @@ def local_uuid() -> str: if DEMO_UUID_BASE is None: return str(uuid.uuid4()) else: - return demo_uuid() + return _demo_uuid() diff --git a/case_utils/namespace.py b/case_utils/namespace.py index 0e02b9c..62e9475 100644 --- a/case_utils/namespace.py +++ b/case_utils/namespace.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -17,7 +20,7 @@ To use, add "from case_utils.namespace import *". Namespace variables starting with "NS_" are imported. As needs are demonstrated in CASE tooling (both in case_utils and from downstream requests), namespaces will also be imported from rdflib for a consistent "NS_*" spelling. """ -__version__ = "0.2.1" +__version__ = "0.2.2" import rdflib diff --git a/case_utils/ontology/Makefile b/case_utils/ontology/Makefile index c4cd60d..8c6028c 100644 --- a/case_utils/ontology/Makefile +++ b/case_utils/ontology/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/case_utils/ontology/__init__.py b/case_utils/ontology/__init__.py index d1430d2..0eafc5c 100644 --- a/case_utils/ontology/__init__.py +++ b/case_utils/ontology/__init__.py @@ -1,17 +1,20 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. -__version__ = "0.1.1" +__version__ = "0.1.2" import importlib.resources import logging diff --git a/case_utils/ontology/src/ontology_and_version_iris.py b/case_utils/ontology/src/ontology_and_version_iris.py index f0139ed..9b86deb 100644 --- a/case_utils/ontology/src/ontology_and_version_iris.py +++ b/case_utils/ontology/src/ontology_and_version_iris.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -15,7 +18,7 @@ This script creates a list of all ontology and version IRIs that have ever existed in a CDO ontology to describe a CDO ontology. I.e. the subject of triples with owl:Ontology as predicate are included, as are the objects of version-referencing triples (owl:versionIRI, owl:incompatibleWith, etc.). """ -__version__ = "0.1.1" +__version__ = "0.1.2" import argparse import typing diff --git a/case_utils/ontology/src/subclasses_ttl.py b/case_utils/ontology/src/subclasses_ttl.py index f7a25b5..1bc03ca 100644 --- a/case_utils/ontology/src/subclasses_ttl.py +++ b/case_utils/ontology/src/subclasses_ttl.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -15,7 +18,7 @@ This script creates an excerpt of an ontology graph that consists solely of all rdfs:subClassOf statements. """ -__version__ = "0.1.0" +__version__ = "0.1.1" import argparse diff --git a/case_utils/ontology/version_info.py b/case_utils/ontology/version_info.py index e603eb7..7bdf9a3 100644 --- a/case_utils/ontology/version_info.py +++ b/case_utils/ontology/version_info.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -19,7 +22,7 @@ When preparing to build a new monolithic ontology, please edit this variable to match the new respective version. """ -__version__ = "0.6.0" +__version__ = "0.6.1" __all__ = ["CURRENT_CASE_VERSION", "built_version_choices_list"] diff --git a/case_utils/py.typed b/case_utils/py.typed index 3ecd1f5..38c5320 100644 --- a/case_utils/py.typed +++ b/case_utils/py.typed @@ -1,11 +1,14 @@ +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/setup.cfg b/setup.cfg index e5ffda7..7420867 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,7 +21,7 @@ include_package_data = true install_requires = pandas pyshacl - rdflib >= 6.2.0 + rdflib >= 6.2.0, < 7.0.0 requests tabulate packages = find: diff --git a/setup.py b/setup.py index 3a15d74..037c408 100644 --- a/setup.py +++ b/setup.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/Makefile b/tests/Makefile index f38243d..f89c724 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -23,6 +26,7 @@ all: \ .PHONY: \ all-case_utils \ check-case_utils \ + check-doctest \ check-isomorphic_diff \ check-mypy \ download @@ -57,13 +61,9 @@ all-case_utils: \ # These check calls are provided in preferred run-order. check: \ check-mypy \ + check-doctest \ check-isomorphic_diff \ check-case_utils - source venv/bin/activate \ - && pytest \ - --doctest-modules \ - --log-level=DEBUG \ - $(top_srcdir)/case_utils source venv/bin/activate \ && pytest \ --ignore case_utils \ @@ -76,6 +76,14 @@ check-case_utils: \ --directory case_utils \ check +check-doctest: \ + .venv.done.log + source venv/bin/activate \ + && pytest \ + --doctest-modules \ + --log-level=DEBUG \ + $(top_srcdir)/case_utils + check-isomorphic_diff: \ .venv.done.log $(MAKE) \ diff --git a/tests/case_utils/Makefile b/tests/case_utils/Makefile index 3c65a40..0139fc6 100644 --- a/tests/case_utils/Makefile +++ b/tests/case_utils/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_file/Makefile b/tests/case_utils/case_file/Makefile index 91bf6d6..d65fb40 100644 --- a/tests/case_utils/case_file/Makefile +++ b/tests/case_utils/case_file/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -82,6 +85,9 @@ kb.ttl: \ #TODO - kb.json has a conversion error with context dictionary construction and custom datatypes. kb_validation.ttl: \ + $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ kb.ttl source $(tests_srcdir)/venv/bin/activate \ && case_validate \ diff --git a/tests/case_utils/case_file/sample_txt.py b/tests/case_utils/case_file/sample_txt.py index 625caa9..d72b57f 100644 --- a/tests/case_utils/case_file/sample_txt.py +++ b/tests/case_utils/case_file/sample_txt.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_file/test_case_file.py b/tests/case_utils/case_file/test_case_file.py index 9194f7d..5aa8673 100644 --- a/tests/case_utils/case_file/test_case_file.py +++ b/tests/case_utils/case_file/test_case_file.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_sparql_construct/Makefile b/tests/case_utils/case_sparql_construct/Makefile index d749fe7..7aa4c9c 100644 --- a/tests/case_utils/case_sparql_construct/Makefile +++ b/tests/case_utils/case_sparql_construct/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_sparql_construct/test_case_sparql_construct.py b/tests/case_utils/case_sparql_construct/test_case_sparql_construct.py index 2c3f37c..dd801d6 100644 --- a/tests/case_utils/case_sparql_construct/test_case_sparql_construct.py +++ b/tests/case_utils/case_sparql_construct/test_case_sparql_construct.py @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_sparql_select/Makefile b/tests/case_utils/case_sparql_select/Makefile index cf13029..153e28a 100644 --- a/tests/case_utils/case_sparql_select/Makefile +++ b/tests/case_utils/case_sparql_select/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_sparql_select/test_data_frame_to_table_text_json.py b/tests/case_utils/case_sparql_select/test_data_frame_to_table_text_json.py index 8fc160d..545666c 100644 --- a/tests/case_utils/case_sparql_select/test_data_frame_to_table_text_json.py +++ b/tests/case_utils/case_sparql_select/test_data_frame_to_table_text_json.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_validate/Makefile b/tests/case_utils/case_validate/Makefile index aa5a489..df9c6ff 100644 --- a/tests/case_utils/case_validate/Makefile +++ b/tests/case_utils/case_validate/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_validate/case_test_examples/Makefile b/tests/case_utils/case_validate/case_test_examples/Makefile index 089c840..c6d4b38 100644 --- a/tests/case_utils/case_validate/case_test_examples/Makefile +++ b/tests/case_utils/case_validate/case_test_examples/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -44,6 +47,8 @@ all: \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f __$@ _$@ source $(tests_srcdir)/venv/bin/activate \ diff --git a/tests/case_utils/case_validate/cli/Makefile b/tests/case_utils/case_validate/cli/Makefile index dc78c50..b63204e 100644 --- a/tests/case_utils/case_validate/cli/Makefile +++ b/tests/case_utils/case_validate/cli/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -23,6 +26,11 @@ tests_srcdir := $(top_srcdir)/tests RDF_TOOLKIT_JAR := $(case_srcdir)/lib/rdf-toolkit.jar +case_validate_sources := \ + $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py + files_to_generate := \ errant_cdo_concept_PASS.txt \ errant_cdo_concept_XFAIL.txt \ @@ -62,9 +70,9 @@ clean: $(files_to_generate) errant_cdo_concept_PASS.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ errant_cdo_concept.ttl rm -f _$@ @@ -77,9 +85,9 @@ errant_cdo_concept_PASS.txt: \ mv _$@ $@ errant_cdo_concept_XFAIL.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ errant_cdo_concept.ttl rm -f _$@ @@ -94,9 +102,9 @@ errant_cdo_concept_XFAIL.txt: \ format_human_output_%: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -109,9 +117,9 @@ format_human_output_%: \ format_human_output_unspecified.txt: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -126,9 +134,9 @@ format_human_output_unspecified.txt: \ # blank node ID that does not serve to inform the example. format_jsonld_output_%: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f __$@ _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -146,9 +154,9 @@ format_jsonld_output_%: \ format_jsonld_output_unspecified.jsonld: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f __$@ _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -166,9 +174,9 @@ format_jsonld_output_unspecified.jsonld: \ format_turtle_output_%: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -181,9 +189,9 @@ format_turtle_output_%: \ format_turtle_output_unspecified.ttl: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -196,9 +204,9 @@ format_turtle_output_unspecified.ttl: \ format_unspecified_output_%: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -210,9 +218,9 @@ format_unspecified_output_%: \ format_unspecified_output_unspecified.txt: \ $(examples_srcdir)/investigative_action_PASS_validation.ttl \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py rm -f _$@ source $(tests_srcdir)/venv/bin/activate \ @@ -223,9 +231,9 @@ format_unspecified_output_unspecified.txt: \ mv _$@ $@ past_version_reference_PASS.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ $(top_srcdir)/case_utils/ontology/ontology_and_version_iris.txt \ past_version_reference_PASS.ttl @@ -237,9 +245,9 @@ past_version_reference_PASS.txt: \ mv _$@ $@ past_version_reference_XFAIL.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ $(top_srcdir)/case_utils/ontology/ontology_and_version_iris.txt \ past_version_reference_XFAIL.ttl @@ -253,9 +261,9 @@ past_version_reference_XFAIL.txt: \ mv _$@ $@ split_data_graph_PASS.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ split_data_graph_1.json \ split_data_graph_2.json @@ -269,9 +277,9 @@ split_data_graph_PASS.txt: \ mv _$@ $@ split_data_graph_XFAIL.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ split_data_graph_1.json rm -f _$@ @@ -285,9 +293,9 @@ split_data_graph_XFAIL.txt: \ mv _$@ $@ thing_metashacl_PASS.txt: \ + $(case_validate_sources) \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ - $(top_srcdir)/case_utils/case_validate/__init__.py \ $(top_srcdir)/case_utils/ontology/__init__.py \ thing.ttl rm -f _$@ diff --git a/tests/case_utils/case_validate/cli/test_format_output_flags.py b/tests/case_utils/case_validate/cli/test_format_output_flags.py index 381c6f3..43d7307 100644 --- a/tests/case_utils/case_validate/cli/test_format_output_flags.py +++ b/tests/case_utils/case_validate/cli/test_format_output_flags.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/case_validate/shape_disabling/Makefile b/tests/case_utils/case_validate/shape_disabling/Makefile index b9603ac..bb10f52 100644 --- a/tests/case_utils/case_validate/shape_disabling/Makefile +++ b/tests/case_utils/case_validate/shape_disabling/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -32,6 +35,9 @@ clean: validation_with_uuid_shape_disabled.txt: \ $(tests_srcdir)/.venv.done.log \ + $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ disable_shape.ttl \ example.ttl source $(tests_srcdir)/venv/bin/activate \ @@ -43,6 +49,9 @@ validation_with_uuid_shape_disabled.txt: \ validation_with_uuid_shape_enabled.txt: \ $(tests_srcdir)/.venv.done.log \ + $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ example.ttl source $(tests_srcdir)/venv/bin/activate \ && case_validate \ diff --git a/tests/case_utils/case_validate/uco_test_examples/Makefile b/tests/case_utils/case_validate/uco_test_examples/Makefile index 2d4550b..563b0eb 100644 --- a/tests/case_utils/case_validate/uco_test_examples/Makefile +++ b/tests/case_utils/case_validate/uco_test_examples/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -76,12 +79,45 @@ all: \ $(tests_srcdir)/.venv.done.log \ $(top_srcdir)/.ontology.done.log \ $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ + $(top_srcdir)/case_utils/ontology/__init__.py + source $(tests_srcdir)/venv/bin/activate \ + && case_validate \ + --allow-warnings \ + --debug \ + --format turtle \ + $< \ + > __$@ \ + ; rc=$$? ; test 0 -eq $$rc -o 1 -eq $$rc + @#Fail if output is empty. + @test -s __$@ \ + || exit 1 + java -jar $(RDF_TOOLKIT_JAR) \ + --inline-blank-nodes \ + --source __$@ \ + --source-format turtle \ + --target _$@ \ + --target-format turtle + rm __$@ + mv _$@ $@ + +# NOTE - this more-specific recipe enables "tbox" review, but otherwise +# matches the wildcarded recipe. +owl_properties_XFAIL_validation.ttl: \ + $(examples_srcdir)/owl_properties_XFAIL.json \ + $(tests_srcdir)/.venv.done.log \ + $(top_srcdir)/.ontology.done.log \ + $(top_srcdir)/case_utils/case_validate/__init__.py \ + $(top_srcdir)/case_utils/case_validate/validate_types.py \ + $(top_srcdir)/case_utils/case_validate/validate_utils.py \ $(top_srcdir)/case_utils/ontology/__init__.py source $(tests_srcdir)/venv/bin/activate \ && case_validate \ --allow-warnings \ --debug \ --format turtle \ + --review-tbox \ $< \ > __$@ \ ; rc=$$? ; test 0 -eq $$rc -o 1 -eq $$rc diff --git a/tests/case_utils/ontology/test_version_info.py b/tests/case_utils/ontology/test_version_info.py index 3f8e6aa..1718d5d 100644 --- a/tests/case_utils/ontology/test_version_info.py +++ b/tests/case_utils/ontology/test_version_info.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/test_guess_format.py b/tests/case_utils/test_guess_format.py index bbfe7d8..5d45cda 100644 --- a/tests/case_utils/test_guess_format.py +++ b/tests/case_utils/test_guess_format.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/case_utils/test_local_uuid.py b/tests/case_utils/test_local_uuid.py index d610cdf..40969fb 100644 --- a/tests/case_utils/test_local_uuid.py +++ b/tests/case_utils/test_local_uuid.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/hexbinary/test_hexbinary.py b/tests/hexbinary/test_hexbinary.py index 7c52fbe..5488c51 100644 --- a/tests/hexbinary/test_hexbinary.py +++ b/tests/hexbinary/test_hexbinary.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/isomorphic_diff/Makefile b/tests/isomorphic_diff/Makefile index 3326a4b..802cda2 100644 --- a/tests/isomorphic_diff/Makefile +++ b/tests/isomorphic_diff/Makefile @@ -1,13 +1,16 @@ #!/usr/bin/make -f +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. diff --git a/tests/src/compact.py b/tests/src/compact.py index e3613a4..96c2828 100644 --- a/tests/src/compact.py +++ b/tests/src/compact.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -18,7 +21,7 @@ https://www.w3.org/TR/json-ld11/#terms """ -__version__ = "0.2.1" +__version__ = "0.2.2" import json import logging diff --git a/tests/src/isomorphic_diff.py b/tests/src/isomorphic_diff.py index 5caa698..b2f3b7d 100644 --- a/tests/src/isomorphic_diff.py +++ b/tests/src/isomorphic_diff.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 +# Portions of this file contributed by NIST are governed by the following +# statement: +# # This software was developed at the National Institute of Standards # and Technology by employees of the Federal Government in the course -# of their official duties. Pursuant to title 17 Section 105 of the -# United States Code this software is not subject to copyright -# protection and is in the public domain. NIST assumes no -# responsibility whatsoever for its use by other parties, and makes -# no guarantees, expressed or implied, about its quality, -# reliability, or any other characteristic. +# of their official duties. Pursuant to Title 17 Section 105 of the +# United States Code, this software is not subject to copyright +# protection within the United States. NIST assumes no responsibility +# whatsoever for its use by other parties, and makes no guarantees, +# expressed or implied, about its quality, reliability, or any other +# characteristic. # # We would appreciate acknowledgement if the software is used. @@ -27,7 +30,7 @@ On resolution of rdflib issue 812, and on adding some format-support flexibility, isomorphic_diff.py is likely to be deprecated in favor of using the upstream rdfgraphisomorphism command. """ -__version__ = "0.2.1" +__version__ = "0.2.2" import argparse import logging