dsp-tools 0.9.13__py3-none-any.whl → 18.3.0.post13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dsp_tools/__init__.py +5 -0
- dsp_tools/cli/args.py +47 -0
- dsp_tools/cli/call_action.py +85 -0
- dsp_tools/cli/call_action_files_only.py +101 -0
- dsp_tools/cli/call_action_with_network.py +207 -0
- dsp_tools/cli/create_parsers.py +479 -0
- dsp_tools/cli/entry_point.py +322 -0
- dsp_tools/cli/utils.py +87 -0
- dsp_tools/clients/CLAUDE.md +420 -0
- dsp_tools/clients/authentication_client.py +14 -0
- dsp_tools/clients/authentication_client_live.py +66 -0
- dsp_tools/clients/connection.py +35 -0
- dsp_tools/clients/connection_live.py +233 -0
- dsp_tools/clients/fuseki_metrics.py +60 -0
- dsp_tools/clients/group_user_clients.py +35 -0
- dsp_tools/clients/group_user_clients_live.py +181 -0
- dsp_tools/clients/legal_info_client.py +23 -0
- dsp_tools/clients/legal_info_client_live.py +132 -0
- dsp_tools/clients/list_client.py +49 -0
- dsp_tools/clients/list_client_live.py +166 -0
- dsp_tools/clients/metadata_client.py +24 -0
- dsp_tools/clients/metadata_client_live.py +47 -0
- dsp_tools/clients/ontology_clients.py +49 -0
- dsp_tools/clients/ontology_create_client_live.py +166 -0
- dsp_tools/clients/ontology_get_client_live.py +80 -0
- dsp_tools/clients/permissions_client.py +68 -0
- dsp_tools/clients/project_client.py +16 -0
- dsp_tools/clients/project_client_live.py +66 -0
- dsp_tools/commands/create/communicate_problems.py +24 -0
- dsp_tools/commands/create/create.py +134 -0
- dsp_tools/commands/create/create_on_server/cardinalities.py +111 -0
- dsp_tools/commands/create/create_on_server/classes.py +99 -0
- dsp_tools/commands/create/create_on_server/complete_ontologies.py +116 -0
- dsp_tools/commands/create/create_on_server/default_permissions.py +134 -0
- dsp_tools/commands/create/create_on_server/group_users.py +165 -0
- dsp_tools/commands/create/create_on_server/lists.py +163 -0
- dsp_tools/commands/create/create_on_server/mappers.py +12 -0
- dsp_tools/commands/create/create_on_server/onto_utils.py +74 -0
- dsp_tools/commands/create/create_on_server/ontology.py +52 -0
- dsp_tools/commands/create/create_on_server/project.py +68 -0
- dsp_tools/commands/create/create_on_server/properties.py +119 -0
- dsp_tools/commands/create/exceptions.py +29 -0
- dsp_tools/commands/create/lists_only.py +66 -0
- dsp_tools/commands/create/models/create_problems.py +87 -0
- dsp_tools/commands/create/models/parsed_ontology.py +88 -0
- dsp_tools/commands/create/models/parsed_project.py +81 -0
- dsp_tools/commands/create/models/rdf_ontology.py +12 -0
- dsp_tools/commands/create/models/server_project_info.py +100 -0
- dsp_tools/commands/create/parsing/parse_lists.py +45 -0
- dsp_tools/commands/create/parsing/parse_ontology.py +243 -0
- dsp_tools/commands/create/parsing/parse_project.py +149 -0
- dsp_tools/commands/create/parsing/parsing_utils.py +40 -0
- dsp_tools/commands/create/project_validate.py +595 -0
- dsp_tools/commands/create/serialisation/ontology.py +119 -0
- dsp_tools/commands/create/serialisation/project.py +44 -0
- dsp_tools/commands/excel2json/CLAUDE.md +101 -0
- dsp_tools/commands/excel2json/json_header.py +321 -0
- dsp_tools/commands/excel2json/lists/__init__.py +0 -0
- dsp_tools/commands/excel2json/lists/compliance_checks.py +292 -0
- dsp_tools/commands/excel2json/lists/make_lists.py +247 -0
- dsp_tools/commands/excel2json/lists/models/__init__.py +0 -0
- dsp_tools/commands/excel2json/lists/models/deserialise.py +30 -0
- dsp_tools/commands/excel2json/lists/models/input_error.py +216 -0
- dsp_tools/commands/excel2json/lists/models/serialise.py +57 -0
- dsp_tools/commands/excel2json/lists/utils.py +81 -0
- dsp_tools/commands/excel2json/models/__init__.py +0 -0
- dsp_tools/commands/excel2json/models/input_error.py +416 -0
- dsp_tools/commands/excel2json/models/json_header.py +175 -0
- dsp_tools/commands/excel2json/models/list_node_name.py +16 -0
- dsp_tools/commands/excel2json/models/ontology.py +76 -0
- dsp_tools/commands/excel2json/old_lists.py +328 -0
- dsp_tools/commands/excel2json/project.py +280 -0
- dsp_tools/commands/excel2json/properties.py +370 -0
- dsp_tools/commands/excel2json/resources.py +336 -0
- dsp_tools/commands/excel2json/utils.py +352 -0
- dsp_tools/commands/excel2xml/__init__.py +7 -0
- dsp_tools/commands/excel2xml/excel2xml_cli.py +523 -0
- dsp_tools/commands/excel2xml/excel2xml_lib.py +1953 -0
- dsp_tools/commands/excel2xml/propertyelement.py +47 -0
- dsp_tools/commands/get/__init__.py +0 -0
- dsp_tools/commands/get/get.py +166 -0
- dsp_tools/commands/get/get_permissions.py +257 -0
- dsp_tools/commands/get/get_permissions_legacy.py +89 -0
- dsp_tools/commands/get/legacy_models/__init__.py +0 -0
- dsp_tools/commands/get/legacy_models/context.py +318 -0
- dsp_tools/commands/get/legacy_models/group.py +241 -0
- dsp_tools/commands/get/legacy_models/helpers.py +47 -0
- dsp_tools/commands/get/legacy_models/listnode.py +390 -0
- dsp_tools/commands/get/legacy_models/model.py +12 -0
- dsp_tools/commands/get/legacy_models/ontology.py +324 -0
- dsp_tools/commands/get/legacy_models/project.py +366 -0
- dsp_tools/commands/get/legacy_models/propertyclass.py +417 -0
- dsp_tools/commands/get/legacy_models/resourceclass.py +676 -0
- dsp_tools/commands/get/legacy_models/user.py +438 -0
- dsp_tools/commands/get/models/__init__.py +0 -0
- dsp_tools/commands/get/models/permissions_models.py +10 -0
- dsp_tools/commands/id2iri.py +258 -0
- dsp_tools/commands/ingest_xmlupload/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/bulk_ingest_client.py +178 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/apply_ingest_id.py +69 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py +166 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/user_information.py +121 -0
- dsp_tools/commands/ingest_xmlupload/ingest_files/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/ingest_files/ingest_files.py +64 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/filechecker.py +20 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/input_error.py +57 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_failures.py +66 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_files.py +67 -0
- dsp_tools/commands/resume_xmlupload/__init__.py +0 -0
- dsp_tools/commands/resume_xmlupload/resume_xmlupload.py +96 -0
- dsp_tools/commands/start_stack.py +428 -0
- dsp_tools/commands/update_legal/CLAUDE.md +344 -0
- dsp_tools/commands/update_legal/__init__.py +0 -0
- dsp_tools/commands/update_legal/core.py +182 -0
- dsp_tools/commands/update_legal/csv_operations.py +135 -0
- dsp_tools/commands/update_legal/models.py +87 -0
- dsp_tools/commands/update_legal/xml_operations.py +247 -0
- dsp_tools/commands/validate_data/CLAUDE.md +159 -0
- dsp_tools/commands/validate_data/__init__.py +0 -0
- dsp_tools/commands/validate_data/constants.py +59 -0
- dsp_tools/commands/validate_data/mappers.py +143 -0
- dsp_tools/commands/validate_data/models/__init__.py +0 -0
- dsp_tools/commands/validate_data/models/api_responses.py +45 -0
- dsp_tools/commands/validate_data/models/input_problems.py +119 -0
- dsp_tools/commands/validate_data/models/rdf_like_data.py +117 -0
- dsp_tools/commands/validate_data/models/validation.py +106 -0
- dsp_tools/commands/validate_data/prepare_data/__init__.py +0 -0
- dsp_tools/commands/validate_data/prepare_data/get_rdf_like_data.py +296 -0
- dsp_tools/commands/validate_data/prepare_data/make_data_graph.py +91 -0
- dsp_tools/commands/validate_data/prepare_data/prepare_data.py +184 -0
- dsp_tools/commands/validate_data/process_validation_report/__init__.py +0 -0
- dsp_tools/commands/validate_data/process_validation_report/get_user_validation_message.py +358 -0
- dsp_tools/commands/validate_data/process_validation_report/query_validation_result.py +507 -0
- dsp_tools/commands/validate_data/process_validation_report/reformat_validation_results.py +150 -0
- dsp_tools/commands/validate_data/shacl_cli_validator.py +70 -0
- dsp_tools/commands/validate_data/sparql/__init__.py +0 -0
- dsp_tools/commands/validate_data/sparql/cardinality_shacl.py +209 -0
- dsp_tools/commands/validate_data/sparql/construct_shacl.py +92 -0
- dsp_tools/commands/validate_data/sparql/legal_info_shacl.py +36 -0
- dsp_tools/commands/validate_data/sparql/value_shacl.py +357 -0
- dsp_tools/commands/validate_data/utils.py +59 -0
- dsp_tools/commands/validate_data/validate_data.py +283 -0
- dsp_tools/commands/validate_data/validation/__init__.py +0 -0
- dsp_tools/commands/validate_data/validation/check_duplicate_files.py +55 -0
- dsp_tools/commands/validate_data/validation/check_for_unknown_classes.py +67 -0
- dsp_tools/commands/validate_data/validation/get_validation_report.py +94 -0
- dsp_tools/commands/validate_data/validation/validate_ontology.py +107 -0
- dsp_tools/commands/xmlupload/CLAUDE.md +292 -0
- dsp_tools/commands/xmlupload/__init__.py +0 -0
- dsp_tools/commands/xmlupload/iri_resolver.py +21 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/__init__.py +0 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/constants.py +63 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/jsonld_utils.py +44 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_file_value.py +77 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_resource_and_values.py +114 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_values.py +262 -0
- dsp_tools/commands/xmlupload/models/__init__.py +0 -0
- dsp_tools/commands/xmlupload/models/bitstream_info.py +18 -0
- dsp_tools/commands/xmlupload/models/formatted_text_value.py +10 -0
- dsp_tools/commands/xmlupload/models/ingest.py +143 -0
- dsp_tools/commands/xmlupload/models/input_problems.py +58 -0
- dsp_tools/commands/xmlupload/models/lookup_models.py +21 -0
- dsp_tools/commands/xmlupload/models/permission.py +45 -0
- dsp_tools/commands/xmlupload/models/permissions_parsed.py +93 -0
- dsp_tools/commands/xmlupload/models/processed/__init__.py +0 -0
- dsp_tools/commands/xmlupload/models/processed/file_values.py +29 -0
- dsp_tools/commands/xmlupload/models/processed/res.py +27 -0
- dsp_tools/commands/xmlupload/models/processed/values.py +101 -0
- dsp_tools/commands/xmlupload/models/rdf_models.py +26 -0
- dsp_tools/commands/xmlupload/models/upload_clients.py +14 -0
- dsp_tools/commands/xmlupload/models/upload_state.py +20 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/__init__.py +0 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/ark2iri.py +55 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/get_processed_resources.py +252 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/iiif_uri_validator.py +50 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/list_client.py +120 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/prepare_xml_input.py +67 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/read_validate_xml_file.py +58 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/transform_input_values.py +118 -0
- dsp_tools/commands/xmlupload/resource_create_client.py +25 -0
- dsp_tools/commands/xmlupload/richtext_id2iri.py +37 -0
- dsp_tools/commands/xmlupload/stash/__init__.py +0 -0
- dsp_tools/commands/xmlupload/stash/analyse_circular_reference_graph.py +236 -0
- dsp_tools/commands/xmlupload/stash/create_info_for_graph.py +53 -0
- dsp_tools/commands/xmlupload/stash/graph_models.py +87 -0
- dsp_tools/commands/xmlupload/stash/stash_circular_references.py +68 -0
- dsp_tools/commands/xmlupload/stash/stash_models.py +109 -0
- dsp_tools/commands/xmlupload/stash/upload_stashed_resptr_props.py +106 -0
- dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py +196 -0
- dsp_tools/commands/xmlupload/upload_config.py +76 -0
- dsp_tools/commands/xmlupload/write_diagnostic_info.py +27 -0
- dsp_tools/commands/xmlupload/xmlupload.py +516 -0
- dsp_tools/config/__init__.py +0 -0
- dsp_tools/config/logger_config.py +69 -0
- dsp_tools/config/warnings_config.py +32 -0
- dsp_tools/error/__init__.py +0 -0
- dsp_tools/error/custom_warnings.py +39 -0
- dsp_tools/error/exceptions.py +204 -0
- dsp_tools/error/problems.py +10 -0
- dsp_tools/error/xmllib_errors.py +20 -0
- dsp_tools/error/xmllib_warnings.py +54 -0
- dsp_tools/error/xmllib_warnings_util.py +159 -0
- dsp_tools/error/xsd_validation_error_msg.py +19 -0
- dsp_tools/legacy_models/__init__.py +0 -0
- dsp_tools/legacy_models/datetimestamp.py +81 -0
- dsp_tools/legacy_models/langstring.py +253 -0
- dsp_tools/legacy_models/projectContext.py +49 -0
- dsp_tools/py.typed +0 -0
- dsp_tools/resources/schema/data.xsd +648 -0
- dsp_tools/resources/schema/lists-only.json +72 -0
- dsp_tools/resources/schema/project.json +1258 -0
- dsp_tools/resources/schema/properties-only.json +874 -0
- dsp_tools/resources/schema/resources-only.json +140 -0
- dsp_tools/resources/start-stack/docker-compose.override-host.j2 +11 -0
- dsp_tools/resources/start-stack/docker-compose.override.yml +11 -0
- dsp_tools/resources/start-stack/docker-compose.yml +88 -0
- dsp_tools/resources/start-stack/dsp-app-config.json +45 -0
- dsp_tools/resources/start-stack/dsp-app-config.override-host.j2 +26 -0
- dsp_tools/resources/validate_data/api-shapes-resource-cardinalities.ttl +191 -0
- dsp_tools/resources/validate_data/api-shapes.ttl +804 -0
- dsp_tools/resources/validate_data/shacl-cli-image.yml +4 -0
- dsp_tools/resources/validate_data/validate-ontology.ttl +99 -0
- dsp_tools/utils/__init__.py +0 -0
- dsp_tools/utils/ansi_colors.py +32 -0
- dsp_tools/utils/data_formats/__init__.py +0 -0
- dsp_tools/utils/data_formats/date_util.py +166 -0
- dsp_tools/utils/data_formats/iri_util.py +30 -0
- dsp_tools/utils/data_formats/shared.py +81 -0
- dsp_tools/utils/data_formats/uri_util.py +76 -0
- dsp_tools/utils/fuseki_bloating.py +63 -0
- dsp_tools/utils/json_parsing.py +22 -0
- dsp_tools/utils/rdf_constants.py +42 -0
- dsp_tools/utils/rdflib_utils.py +10 -0
- dsp_tools/utils/replace_id_with_iri.py +66 -0
- dsp_tools/utils/request_utils.py +238 -0
- dsp_tools/utils/xml_parsing/__init__.py +0 -0
- dsp_tools/utils/xml_parsing/get_lookups.py +32 -0
- dsp_tools/utils/xml_parsing/get_parsed_resources.py +325 -0
- dsp_tools/utils/xml_parsing/models/__init__.py +0 -0
- dsp_tools/utils/xml_parsing/models/parsed_resource.py +76 -0
- dsp_tools/utils/xml_parsing/parse_clean_validate_xml.py +137 -0
- dsp_tools/xmllib/CLAUDE.md +302 -0
- dsp_tools/xmllib/__init__.py +49 -0
- dsp_tools/xmllib/general_functions.py +877 -0
- dsp_tools/xmllib/internal/__init__.py +0 -0
- dsp_tools/xmllib/internal/checkers.py +162 -0
- dsp_tools/xmllib/internal/circumvent_circular_imports.py +36 -0
- dsp_tools/xmllib/internal/constants.py +46 -0
- dsp_tools/xmllib/internal/input_converters.py +155 -0
- dsp_tools/xmllib/internal/serialise_file_value.py +57 -0
- dsp_tools/xmllib/internal/serialise_resource.py +177 -0
- dsp_tools/xmllib/internal/serialise_values.py +152 -0
- dsp_tools/xmllib/internal/type_aliases.py +11 -0
- dsp_tools/xmllib/models/__init__.py +0 -0
- dsp_tools/xmllib/models/config_options.py +28 -0
- dsp_tools/xmllib/models/date_formats.py +48 -0
- dsp_tools/xmllib/models/dsp_base_resources.py +1542 -0
- dsp_tools/xmllib/models/internal/__init__.py +0 -0
- dsp_tools/xmllib/models/internal/file_values.py +172 -0
- dsp_tools/xmllib/models/internal/geometry.py +162 -0
- dsp_tools/xmllib/models/internal/migration_metadata.py +55 -0
- dsp_tools/xmllib/models/internal/serialise_permissions.py +66 -0
- dsp_tools/xmllib/models/internal/values.py +342 -0
- dsp_tools/xmllib/models/licenses/__init__.py +0 -0
- dsp_tools/xmllib/models/licenses/other.py +59 -0
- dsp_tools/xmllib/models/licenses/recommended.py +107 -0
- dsp_tools/xmllib/models/permissions.py +41 -0
- dsp_tools/xmllib/models/res.py +1782 -0
- dsp_tools/xmllib/models/root.py +348 -0
- dsp_tools/xmllib/value_checkers.py +434 -0
- dsp_tools/xmllib/value_converters.py +777 -0
- dsp_tools-18.3.0.post13.dist-info/METADATA +90 -0
- dsp_tools-18.3.0.post13.dist-info/RECORD +286 -0
- dsp_tools-18.3.0.post13.dist-info/WHEEL +4 -0
- dsp_tools-18.3.0.post13.dist-info/entry_points.txt +3 -0
- dsp_tools-0.9.13.dist-info/LICENSE +0 -674
- dsp_tools-0.9.13.dist-info/METADATA +0 -144
- dsp_tools-0.9.13.dist-info/RECORD +0 -71
- dsp_tools-0.9.13.dist-info/WHEEL +0 -5
- dsp_tools-0.9.13.dist-info/entry_points.txt +0 -3
- dsp_tools-0.9.13.dist-info/top_level.txt +0 -1
- dsplib/models/connection.py +0 -272
- dsplib/models/group.py +0 -296
- dsplib/models/helpers.py +0 -505
- dsplib/models/langstring.py +0 -277
- dsplib/models/listnode.py +0 -578
- dsplib/models/model.py +0 -20
- dsplib/models/ontology.py +0 -448
- dsplib/models/permission.py +0 -112
- dsplib/models/project.py +0 -547
- dsplib/models/propertyclass.py +0 -505
- dsplib/models/resource.py +0 -366
- dsplib/models/resourceclass.py +0 -810
- dsplib/models/sipi.py +0 -30
- dsplib/models/user.py +0 -731
- dsplib/models/value.py +0 -1000
- dsplib/utils/knora-data-schema.xsd +0 -454
- dsplib/utils/knora-schema-lists.json +0 -83
- dsplib/utils/knora-schema.json +0 -434
- dsplib/utils/onto_commons.py +0 -24
- dsplib/utils/onto_create_lists.py +0 -73
- dsplib/utils/onto_create_ontology.py +0 -442
- dsplib/utils/onto_get.py +0 -58
- dsplib/utils/onto_validate.py +0 -33
- dsplib/utils/xml_upload.py +0 -539
- dsplib/widgets/doublepassword.py +0 -80
- knora/MLS-import-libraries.py +0 -84
- knora/dsp_tools.py +0 -96
- knora/dsplib/models/connection.py +0 -272
- knora/dsplib/models/group.py +0 -296
- knora/dsplib/models/helpers.py +0 -506
- knora/dsplib/models/langstring.py +0 -277
- knora/dsplib/models/listnode.py +0 -578
- knora/dsplib/models/model.py +0 -20
- knora/dsplib/models/ontology.py +0 -448
- knora/dsplib/models/permission.py +0 -112
- knora/dsplib/models/project.py +0 -583
- knora/dsplib/models/propertyclass.py +0 -505
- knora/dsplib/models/resource.py +0 -416
- knora/dsplib/models/resourceclass.py +0 -811
- knora/dsplib/models/sipi.py +0 -35
- knora/dsplib/models/user.py +0 -731
- knora/dsplib/models/value.py +0 -1000
- knora/dsplib/utils/knora-data-schema.xsd +0 -464
- knora/dsplib/utils/knora-schema-lists.json +0 -83
- knora/dsplib/utils/knora-schema.json +0 -444
- knora/dsplib/utils/onto_commons.py +0 -24
- knora/dsplib/utils/onto_create_lists.py +0 -73
- knora/dsplib/utils/onto_create_ontology.py +0 -451
- knora/dsplib/utils/onto_get.py +0 -58
- knora/dsplib/utils/onto_validate.py +0 -33
- knora/dsplib/utils/xml_upload.py +0 -540
- knora/dsplib/widgets/doublepassword.py +0 -80
- knora/knora.py +0 -2108
- knora/test.py +0 -99
- knora/testit.py +0 -76
- knora/xml2knora.py +0 -633
- {dsplib → dsp_tools/cli}/__init__.py +0 -0
- {dsplib/models → dsp_tools/clients}/__init__.py +0 -0
- {dsplib/utils → dsp_tools/commands}/__init__.py +0 -0
- {dsplib/widgets → dsp_tools/commands/create}/__init__.py +0 -0
- {knora → dsp_tools/commands/create/create_on_server}/__init__.py +0 -0
- {knora/dsplib → dsp_tools/commands/create/models}/__init__.py +0 -0
- {knora/dsplib/models → dsp_tools/commands/create/parsing}/__init__.py +0 -0
- {knora/dsplib/utils → dsp_tools/commands/create/serialisation}/__init__.py +0 -0
- {knora/dsplib/widgets → dsp_tools/commands/excel2json}/__init__.py +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
from rdflib import RDF
|
|
2
|
+
from rdflib import RDFS
|
|
3
|
+
from rdflib import XSD
|
|
4
|
+
|
|
5
|
+
from dsp_tools.commands.validate_data.constants import ARCHIVE_FILE_VALUE
|
|
6
|
+
from dsp_tools.commands.validate_data.constants import AUDIO_FILE_VALUE
|
|
7
|
+
from dsp_tools.commands.validate_data.constants import DOCUMENT_FILE_VALUE
|
|
8
|
+
from dsp_tools.commands.validate_data.constants import IIIF_URI_VALUE
|
|
9
|
+
from dsp_tools.commands.validate_data.constants import MOVING_IMAGE_FILE_VALUE
|
|
10
|
+
from dsp_tools.commands.validate_data.constants import STILL_IMAGE_FILE_VALUE
|
|
11
|
+
from dsp_tools.commands.validate_data.constants import TEXT_FILE_VALUE
|
|
12
|
+
from dsp_tools.commands.validate_data.models.input_problems import ProblemType
|
|
13
|
+
from dsp_tools.commands.validate_data.models.rdf_like_data import TripleObjectType
|
|
14
|
+
from dsp_tools.commands.validate_data.models.rdf_like_data import TriplePropertyType
|
|
15
|
+
from dsp_tools.commands.validate_data.models.validation import ViolationType
|
|
16
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import BOOLEAN_PROP_TYPE_INFO
|
|
17
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import COLOR_PROP_TYPE_INFO
|
|
18
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import DECIMAL_PROP_TYPE_INFO
|
|
19
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import GEOMETRY_PROP_TYPE_INFO
|
|
20
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import GEONAME_PROP_TYPE_INFO
|
|
21
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import INT_PROP_TYPE_INFO
|
|
22
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import RICHTEXT_PROP_TYPE_INFO
|
|
23
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import SIMPLE_TEXT_PROP_TYPE_INFO
|
|
24
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import TIME_PROP_TYPE_INFO
|
|
25
|
+
from dsp_tools.commands.xmlupload.make_rdf_graph.constants import URI_PROP_TYPE_INFO
|
|
26
|
+
from dsp_tools.commands.xmlupload.models.rdf_models import RDFPropTypeInfo
|
|
27
|
+
from dsp_tools.utils.rdf_constants import API_SHAPES
|
|
28
|
+
from dsp_tools.utils.rdf_constants import KNORA_API
|
|
29
|
+
from dsp_tools.utils.rdf_constants import KNORA_API_PREFIX
|
|
30
|
+
from dsp_tools.utils.xml_parsing.models.parsed_resource import KnoraValueType
|
|
31
|
+
|
|
32
|
+
FILE_TYPE_TO_PROP = {
|
|
33
|
+
KnoraValueType.ARCHIVE_FILE: f"{KNORA_API_PREFIX}hasArchiveFileValue",
|
|
34
|
+
KnoraValueType.AUDIO_FILE: f"{KNORA_API_PREFIX}hasAudioFileValue",
|
|
35
|
+
KnoraValueType.DOCUMENT_FILE: f"{KNORA_API_PREFIX}hasDocumentFileValue",
|
|
36
|
+
KnoraValueType.MOVING_IMAGE_FILE: f"{KNORA_API_PREFIX}hasMovingImageFileValue",
|
|
37
|
+
KnoraValueType.STILL_IMAGE_FILE: f"{KNORA_API_PREFIX}hasStillImageFileValue",
|
|
38
|
+
KnoraValueType.STILL_IMAGE_IIIF: f"{KNORA_API_PREFIX}hasStillImageFileValue",
|
|
39
|
+
KnoraValueType.TEXT_FILE: f"{KNORA_API_PREFIX}hasTextFileValue",
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Mappers from internal representation to API format
|
|
43
|
+
XML_TAG_TO_VALUE_TYPE_MAPPER = {
|
|
44
|
+
"boolean-prop": KnoraValueType.BOOLEAN_VALUE,
|
|
45
|
+
"color-prop": KnoraValueType.COLOR_VALUE,
|
|
46
|
+
"date-prop": KnoraValueType.DATE_VALUE,
|
|
47
|
+
"decimal-prop": KnoraValueType.DECIMAL_VALUE,
|
|
48
|
+
"geometry-prop": KnoraValueType.GEOM_VALUE,
|
|
49
|
+
"geoname-prop": KnoraValueType.GEONAME_VALUE,
|
|
50
|
+
"list-prop": KnoraValueType.LIST_VALUE,
|
|
51
|
+
"integer-prop": KnoraValueType.INT_VALUE,
|
|
52
|
+
"resptr-prop": KnoraValueType.LINK_VALUE,
|
|
53
|
+
"time-prop": KnoraValueType.TIME_VALUE,
|
|
54
|
+
"uri-prop": KnoraValueType.URI_VALUE,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
TRIPLE_PROP_TYPE_TO_IRI_MAPPER = {
|
|
58
|
+
TriplePropertyType.RDF_TYPE: RDF.type,
|
|
59
|
+
TriplePropertyType.RDFS_LABEL: RDFS.label,
|
|
60
|
+
TriplePropertyType.KNORA_COMMENT_ON_VALUE: KNORA_API.valueHasComment,
|
|
61
|
+
TriplePropertyType.KNORA_PERMISSIONS: KNORA_API.hasPermissions,
|
|
62
|
+
TriplePropertyType.KNORA_INTERVAL_START: KNORA_API.intervalValueHasStart,
|
|
63
|
+
TriplePropertyType.KNORA_INTERVAL_END: KNORA_API.intervalValueHasEnd,
|
|
64
|
+
TriplePropertyType.KNORA_STANDOFF_LINK: KNORA_API.hasStandoffLinkTo,
|
|
65
|
+
TriplePropertyType.KNORA_LICENSE: KNORA_API.hasLicense,
|
|
66
|
+
TriplePropertyType.KNORA_AUTHORSHIP: KNORA_API.hasAuthorship,
|
|
67
|
+
TriplePropertyType.KNORA_COPYRIGHT_HOLDER: KNORA_API.hasCopyrightHolder,
|
|
68
|
+
TriplePropertyType.KNORA_DATE_START: API_SHAPES.dateHasStart,
|
|
69
|
+
TriplePropertyType.KNORA_DATE_END: API_SHAPES.dateHasEnd,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
VALUE_INFO_TO_RDF_MAPPER = {
|
|
73
|
+
KnoraValueType.BOOLEAN_VALUE: BOOLEAN_PROP_TYPE_INFO,
|
|
74
|
+
KnoraValueType.COLOR_VALUE: COLOR_PROP_TYPE_INFO,
|
|
75
|
+
KnoraValueType.DATE_VALUE: RDFPropTypeInfo(KNORA_API.DateValue, KNORA_API.valueAsString, XSD.string),
|
|
76
|
+
KnoraValueType.DECIMAL_VALUE: DECIMAL_PROP_TYPE_INFO,
|
|
77
|
+
KnoraValueType.GEONAME_VALUE: GEONAME_PROP_TYPE_INFO,
|
|
78
|
+
KnoraValueType.GEOM_VALUE: GEOMETRY_PROP_TYPE_INFO,
|
|
79
|
+
KnoraValueType.LIST_VALUE: RDFPropTypeInfo(KNORA_API.ListValue, KNORA_API.listValueAsListNode, XSD.string),
|
|
80
|
+
KnoraValueType.LINK_VALUE: RDFPropTypeInfo(KNORA_API.LinkValue, API_SHAPES.linkValueHasTargetID, XSD.string),
|
|
81
|
+
KnoraValueType.INT_VALUE: INT_PROP_TYPE_INFO,
|
|
82
|
+
KnoraValueType.INTERVAL_VALUE: RDFPropTypeInfo(KNORA_API.IntervalValue, KNORA_API.hasSegmentBounds),
|
|
83
|
+
KnoraValueType.SIMPLETEXT_VALUE: SIMPLE_TEXT_PROP_TYPE_INFO,
|
|
84
|
+
KnoraValueType.RICHTEXT_VALUE: RICHTEXT_PROP_TYPE_INFO,
|
|
85
|
+
KnoraValueType.TIME_VALUE: TIME_PROP_TYPE_INFO,
|
|
86
|
+
KnoraValueType.URI_VALUE: URI_PROP_TYPE_INFO,
|
|
87
|
+
KnoraValueType.ARCHIVE_FILE: ARCHIVE_FILE_VALUE,
|
|
88
|
+
KnoraValueType.AUDIO_FILE: AUDIO_FILE_VALUE,
|
|
89
|
+
KnoraValueType.DOCUMENT_FILE: DOCUMENT_FILE_VALUE,
|
|
90
|
+
KnoraValueType.MOVING_IMAGE_FILE: MOVING_IMAGE_FILE_VALUE,
|
|
91
|
+
KnoraValueType.STILL_IMAGE_FILE: STILL_IMAGE_FILE_VALUE,
|
|
92
|
+
KnoraValueType.STILL_IMAGE_IIIF: IIIF_URI_VALUE,
|
|
93
|
+
KnoraValueType.TEXT_FILE: TEXT_FILE_VALUE,
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
VALUE_INFO_TRIPLE_OBJECT_TYPE = {
|
|
97
|
+
KnoraValueType.BOOLEAN_VALUE: TripleObjectType.BOOLEAN,
|
|
98
|
+
KnoraValueType.COLOR_VALUE: TripleObjectType.STRING,
|
|
99
|
+
KnoraValueType.DATE_VALUE: TripleObjectType.STRING,
|
|
100
|
+
KnoraValueType.DECIMAL_VALUE: TripleObjectType.DECIMAL,
|
|
101
|
+
KnoraValueType.GEOM_VALUE: TripleObjectType.STRING,
|
|
102
|
+
KnoraValueType.GEONAME_VALUE: TripleObjectType.STRING,
|
|
103
|
+
KnoraValueType.LIST_VALUE: TripleObjectType.STRING,
|
|
104
|
+
KnoraValueType.LINK_VALUE: TripleObjectType.IRI,
|
|
105
|
+
KnoraValueType.INT_VALUE: TripleObjectType.INTEGER,
|
|
106
|
+
KnoraValueType.SIMPLETEXT_VALUE: TripleObjectType.STRING,
|
|
107
|
+
KnoraValueType.RICHTEXT_VALUE: TripleObjectType.STRING,
|
|
108
|
+
KnoraValueType.TIME_VALUE: TripleObjectType.DATETIME,
|
|
109
|
+
KnoraValueType.URI_VALUE: TripleObjectType.URI,
|
|
110
|
+
KnoraValueType.ARCHIVE_FILE: TripleObjectType.STRING,
|
|
111
|
+
KnoraValueType.AUDIO_FILE: TripleObjectType.STRING,
|
|
112
|
+
KnoraValueType.DOCUMENT_FILE: TripleObjectType.STRING,
|
|
113
|
+
KnoraValueType.MOVING_IMAGE_FILE: TripleObjectType.STRING,
|
|
114
|
+
KnoraValueType.STILL_IMAGE_FILE: TripleObjectType.STRING,
|
|
115
|
+
KnoraValueType.STILL_IMAGE_IIIF: TripleObjectType.URI,
|
|
116
|
+
KnoraValueType.TEXT_FILE: TripleObjectType.STRING,
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
TRIPLE_OBJECT_TYPE_TO_XSD = {
|
|
120
|
+
TripleObjectType.BOOLEAN: XSD.boolean,
|
|
121
|
+
TripleObjectType.DATETIME: XSD.dateTimeStamp,
|
|
122
|
+
TripleObjectType.DECIMAL: XSD.decimal,
|
|
123
|
+
TripleObjectType.INTEGER: XSD.int,
|
|
124
|
+
TripleObjectType.STRING: XSD.string,
|
|
125
|
+
TripleObjectType.URI: XSD.anyURI,
|
|
126
|
+
TripleObjectType.DATE_YYYY_MM_DD: XSD.date,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# validation results
|
|
130
|
+
|
|
131
|
+
RESULT_TO_PROBLEM_MAPPER = {
|
|
132
|
+
ViolationType.SEQNUM_IS_PART_OF: ProblemType.GENERIC,
|
|
133
|
+
ViolationType.UNIQUE_VALUE: ProblemType.DUPLICATE_VALUE,
|
|
134
|
+
ViolationType.VALUE_TYPE: ProblemType.VALUE_TYPE_MISMATCH,
|
|
135
|
+
ViolationType.PATTERN: ProblemType.INPUT_REGEX,
|
|
136
|
+
ViolationType.GENERIC: ProblemType.GENERIC,
|
|
137
|
+
ViolationType.LINK_TARGET: ProblemType.LINK_TARGET_TYPE_MISMATCH,
|
|
138
|
+
ViolationType.MAX_CARD: ProblemType.MAX_CARD,
|
|
139
|
+
ViolationType.MIN_CARD: ProblemType.MIN_CARD,
|
|
140
|
+
ViolationType.NON_EXISTING_CARD: ProblemType.NON_EXISTING_CARD,
|
|
141
|
+
ViolationType.FILE_VALUE_PROHIBITED: ProblemType.FILE_VALUE_PROHIBITED,
|
|
142
|
+
ViolationType.FILE_VALUE_MISSING: ProblemType.FILE_VALUE_MISSING,
|
|
143
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from rdflib import Graph
|
|
6
|
+
from rdflib import URIRef
|
|
7
|
+
|
|
8
|
+
from dsp_tools.clients.list_client import OneList
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class SHACLValidationReport:
|
|
13
|
+
conforms: bool
|
|
14
|
+
validation_graph: Graph
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class ProjectDataFromApi:
|
|
19
|
+
all_lists: list[OneList]
|
|
20
|
+
enabled_licenses: EnabledLicenseIris
|
|
21
|
+
resource_iris_in_db: list[InfoForResourceInDB]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class ListLookup:
|
|
26
|
+
lists: dict[tuple[str, str], str]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class SHACLListInfo:
|
|
31
|
+
list_iri: URIRef
|
|
32
|
+
sh_path: URIRef
|
|
33
|
+
sh_message: str
|
|
34
|
+
sh_in: list[str]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@dataclass
|
|
38
|
+
class EnabledLicenseIris:
|
|
39
|
+
enabled_licenses: list[str]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class InfoForResourceInDB:
|
|
44
|
+
res_iri: str
|
|
45
|
+
res_type: str
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
from enum import auto
|
|
7
|
+
|
|
8
|
+
import pandas as pd
|
|
9
|
+
import regex
|
|
10
|
+
|
|
11
|
+
from dsp_tools.commands.validate_data.models.validation import UnexpectedComponent
|
|
12
|
+
from dsp_tools.commands.validate_data.models.validation import ValidationReportGraphs
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class ValidateDataResult:
|
|
17
|
+
no_problems: bool
|
|
18
|
+
problems: None | UnknownClassesInData | OntologyValidationProblem | SortedProblems
|
|
19
|
+
report_graphs: None | ValidationReportGraphs
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class OntologyValidationProblem:
|
|
24
|
+
problems: list[OntologyResourceProblem]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class OntologyResourceProblem:
|
|
29
|
+
res_iri: str
|
|
30
|
+
msg: str
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class UnknownClassesInData:
|
|
35
|
+
unknown_classes: set[str]
|
|
36
|
+
defined_classes: set[str]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class DuplicateFileWarning:
|
|
41
|
+
problems: list[InputProblem]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@dataclass
|
|
45
|
+
class AllProblems:
|
|
46
|
+
problems: list[InputProblem]
|
|
47
|
+
unexpected_results: list[UnexpectedComponent]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@dataclass
|
|
51
|
+
class SortedProblems:
|
|
52
|
+
unique_violations: list[InputProblem]
|
|
53
|
+
user_warnings: list[InputProblem]
|
|
54
|
+
user_info: list[InputProblem]
|
|
55
|
+
unexpected_shacl_validation_components: list[str]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass
|
|
59
|
+
class MessageComponents:
|
|
60
|
+
message_header: str
|
|
61
|
+
message_body: str | None
|
|
62
|
+
message_df: pd.DataFrame | None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass
|
|
66
|
+
class UserPrintMessages:
|
|
67
|
+
violations: MessageComponents | None
|
|
68
|
+
warnings: MessageComponents | None
|
|
69
|
+
infos: MessageComponents | None
|
|
70
|
+
unexpected_violations: MessageComponents | None
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@dataclass
|
|
74
|
+
class InputProblem:
|
|
75
|
+
problem_type: ProblemType
|
|
76
|
+
res_id: str | None
|
|
77
|
+
res_type: str | None
|
|
78
|
+
prop_name: str
|
|
79
|
+
severity: Severity
|
|
80
|
+
message: str | None = None
|
|
81
|
+
input_value: str | None = None
|
|
82
|
+
input_type: str | None = None
|
|
83
|
+
expected: str | None = None
|
|
84
|
+
|
|
85
|
+
def __post_init__(self) -> None:
|
|
86
|
+
self.message = self._clean_input(self.message)
|
|
87
|
+
self.expected = self._clean_input(self.expected)
|
|
88
|
+
|
|
89
|
+
def _clean_input(self, to_clean: str | None) -> str | None:
|
|
90
|
+
if not to_clean:
|
|
91
|
+
return None
|
|
92
|
+
if not regex.search(r"\S+", to_clean):
|
|
93
|
+
return None
|
|
94
|
+
str_split = [content for x in to_clean.split(" ") if (content := x.strip())]
|
|
95
|
+
return " ".join(str_split)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class Severity(Enum):
|
|
99
|
+
VIOLATION = auto()
|
|
100
|
+
WARNING = auto()
|
|
101
|
+
INFO = auto()
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class ProblemType(StrEnum):
|
|
105
|
+
GENERIC = "generic"
|
|
106
|
+
FILE_VALUE_MISSING = "file problem"
|
|
107
|
+
FILE_DUPLICATE = "Duplicate Filepath / IIIF-URI"
|
|
108
|
+
FILE_VALUE_PROHIBITED = "A file was added to the resource. This resource type must not have a file."
|
|
109
|
+
MAX_CARD = "Maximum Cardinality Violation"
|
|
110
|
+
MIN_CARD = "Minimum Cardinality Violation"
|
|
111
|
+
NON_EXISTING_CARD = "The resource class does not have a cardinality for this property."
|
|
112
|
+
VALUE_TYPE_MISMATCH = "Value Type Mismatch"
|
|
113
|
+
INPUT_REGEX = "Wrong Format of Input"
|
|
114
|
+
LINK_TARGET_TYPE_MISMATCH = "Linked Resource Type Mismatch"
|
|
115
|
+
LINK_TARGET_OF_ANOTHER_PROJECT = "Linked Resource is from another project"
|
|
116
|
+
LINK_TARGET_IS_IRI_OF_PROJECT = "Linked resource is an IRI of the project"
|
|
117
|
+
LINK_TARGET_NOT_FOUND_IN_DB = "Linked resource is an IRI and could not be found in the database."
|
|
118
|
+
INEXISTENT_LINKED_RESOURCE = "Linked Resource does not exist"
|
|
119
|
+
DUPLICATE_VALUE = "Your input is duplicated"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from dataclasses import field
|
|
5
|
+
from enum import Enum
|
|
6
|
+
from enum import auto
|
|
7
|
+
from uuid import uuid4
|
|
8
|
+
|
|
9
|
+
from dsp_tools.legacy_models.datetimestamp import DateTimeStamp
|
|
10
|
+
from dsp_tools.utils.xml_parsing.models.parsed_resource import KnoraValueType
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class RdfLikeData:
|
|
15
|
+
resources: list[RdfLikeResource]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class RdfLikeResource:
|
|
20
|
+
"""
|
|
21
|
+
Represents a user facing project-specific resource.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
res_id: resource ID provided by the user in the XML
|
|
25
|
+
property_objects: A list of properties and objects where the subject is the resource itself.
|
|
26
|
+
They are non-reified triples (not values).
|
|
27
|
+
For example, the label of a resource is here.
|
|
28
|
+
values: a list of user-facing values (e.g. BooleanValue)
|
|
29
|
+
migration_metadata: Metadata used for salsah migration
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
res_id: str
|
|
33
|
+
property_objects: list[PropertyObject]
|
|
34
|
+
values: list[RdfLikeValue]
|
|
35
|
+
migration_metadata: MigrationMetadata
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass
|
|
39
|
+
class MigrationMetadata:
|
|
40
|
+
iri: str | None = None
|
|
41
|
+
ark: str | None = None
|
|
42
|
+
creation_date: DateTimeStamp | None = None
|
|
43
|
+
|
|
44
|
+
def any(self) -> bool:
|
|
45
|
+
return any([self.iri, self.ark, self.creation_date])
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class PropertyObject:
|
|
50
|
+
"""
|
|
51
|
+
Property and object of a triple.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
property_type: maps to a specific knora-api or rdf(s) property
|
|
55
|
+
object_value: object of the triple, may be user facing (e.g. label) or metadata (e.g. permissions)
|
|
56
|
+
object_type: datatype for literals (e.g. boolean) or that it is an IRI (not a literal)
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
property_type: TriplePropertyType
|
|
60
|
+
object_value: str | None
|
|
61
|
+
object_type: TripleObjectType
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@dataclass
|
|
65
|
+
class RdfLikeValue:
|
|
66
|
+
"""
|
|
67
|
+
Contains information about a user-facing value, for example BooleanValue.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
user_facing_prop: Absolute IRI of the property as defined in the ontology
|
|
71
|
+
user_facing_value: User-facing value, for example a number
|
|
72
|
+
knora_type: Maps to a knora value type (e.g. BooleanValue)
|
|
73
|
+
value_metadata: metadata of the value for example permissions, comments, etc.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
user_facing_prop: str
|
|
77
|
+
user_facing_value: str | None
|
|
78
|
+
knora_type: KnoraValueType
|
|
79
|
+
value_metadata: list[PropertyObject]
|
|
80
|
+
value_uuid: str = field(default_factory=lambda: str(uuid4()))
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class TriplePropertyType(Enum):
|
|
84
|
+
"""
|
|
85
|
+
Maps to a specific knora-api or rdf(s) property.
|
|
86
|
+
For example: KNORA_COMMENT_ON_VALUE -> knora-api:valueHasComment
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
RDFS_LABEL = auto()
|
|
90
|
+
RDF_TYPE = auto()
|
|
91
|
+
KNORA_PERMISSIONS = auto()
|
|
92
|
+
KNORA_COMMENT_ON_VALUE = auto()
|
|
93
|
+
KNORA_INTERVAL_START = auto()
|
|
94
|
+
KNORA_INTERVAL_END = auto()
|
|
95
|
+
KNORA_STANDOFF_LINK = auto()
|
|
96
|
+
KNORA_LICENSE = auto()
|
|
97
|
+
KNORA_AUTHORSHIP = auto()
|
|
98
|
+
KNORA_COPYRIGHT_HOLDER = auto()
|
|
99
|
+
KNORA_DATE_START = auto()
|
|
100
|
+
KNORA_DATE_END = auto()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class TripleObjectType(Enum):
|
|
104
|
+
"""
|
|
105
|
+
Maps to an xsd data type in case of literals, for example: BOOLEAN -> xsd:boolean
|
|
106
|
+
Or Indicates that it is an IRI, in which case it is not an RDF Literal
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
BOOLEAN = auto()
|
|
110
|
+
DATETIME = auto()
|
|
111
|
+
DECIMAL = auto()
|
|
112
|
+
INTEGER = auto()
|
|
113
|
+
IRI = auto()
|
|
114
|
+
INTERNAL_ID = auto()
|
|
115
|
+
STRING = auto()
|
|
116
|
+
URI = auto()
|
|
117
|
+
DATE_YYYY_MM_DD = auto()
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from enum import auto
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from rdflib import Graph
|
|
9
|
+
|
|
10
|
+
from dsp_tools.utils.rdf_constants import SubjectObjectTypeAlias
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class SHACLGraphs:
|
|
15
|
+
cardinality: Graph
|
|
16
|
+
content: Graph
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class RDFGraphs:
|
|
21
|
+
data: Graph
|
|
22
|
+
ontos: Graph
|
|
23
|
+
cardinality_shapes: Graph
|
|
24
|
+
content_shapes: Graph
|
|
25
|
+
knora_api: Graph
|
|
26
|
+
resources_in_db_graph: Graph
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class ValidationFilePaths:
|
|
31
|
+
directory: Path
|
|
32
|
+
data_file: str
|
|
33
|
+
shacl_file: str
|
|
34
|
+
report_file: str
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@dataclass
|
|
38
|
+
class ValidationReportGraphs:
|
|
39
|
+
conforms: bool
|
|
40
|
+
validation_graph: Graph
|
|
41
|
+
shacl_graph: Graph
|
|
42
|
+
onto_graph: Graph
|
|
43
|
+
data_graph: Graph
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@dataclass
|
|
47
|
+
class QueryInfo:
|
|
48
|
+
validation_bn: SubjectObjectTypeAlias
|
|
49
|
+
focus_iri: SubjectObjectTypeAlias
|
|
50
|
+
focus_rdf_type: SubjectObjectTypeAlias
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class UnexpectedComponent:
|
|
55
|
+
component_type: str
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass
|
|
59
|
+
class ValidationResultBaseInfo:
|
|
60
|
+
result_bn: SubjectObjectTypeAlias
|
|
61
|
+
source_constraint_component: SubjectObjectTypeAlias
|
|
62
|
+
focus_node_iri: SubjectObjectTypeAlias
|
|
63
|
+
focus_node_type: SubjectObjectTypeAlias
|
|
64
|
+
result_path: SubjectObjectTypeAlias
|
|
65
|
+
severity: SubjectObjectTypeAlias
|
|
66
|
+
detail: DetailBaseInfo | None = None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@dataclass
|
|
70
|
+
class DetailBaseInfo:
|
|
71
|
+
detail_bn: SubjectObjectTypeAlias
|
|
72
|
+
source_constraint_component: SubjectObjectTypeAlias
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@dataclass
|
|
76
|
+
class ValidationResult:
|
|
77
|
+
violation_type: ViolationType
|
|
78
|
+
res_iri: SubjectObjectTypeAlias
|
|
79
|
+
res_class: SubjectObjectTypeAlias
|
|
80
|
+
severity: SubjectObjectTypeAlias
|
|
81
|
+
property: SubjectObjectTypeAlias | None = None
|
|
82
|
+
message: SubjectObjectTypeAlias | None = None
|
|
83
|
+
input_value: SubjectObjectTypeAlias | None = None
|
|
84
|
+
input_type: SubjectObjectTypeAlias | None = None
|
|
85
|
+
expected: SubjectObjectTypeAlias | None = None
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class ViolationType(Enum):
|
|
89
|
+
SEQNUM_IS_PART_OF = auto()
|
|
90
|
+
UNIQUE_VALUE = auto()
|
|
91
|
+
VALUE_TYPE = auto()
|
|
92
|
+
PATTERN = auto()
|
|
93
|
+
GENERIC = auto()
|
|
94
|
+
LINK_TARGET = auto()
|
|
95
|
+
MAX_CARD = auto()
|
|
96
|
+
MIN_CARD = auto()
|
|
97
|
+
NON_EXISTING_CARD = auto()
|
|
98
|
+
FILE_VALUE_PROHIBITED = auto()
|
|
99
|
+
FILE_VALUE_MISSING = auto()
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@dataclass
|
|
103
|
+
class ReformattedIRI:
|
|
104
|
+
res_id: str
|
|
105
|
+
res_type: str
|
|
106
|
+
prop_name: str
|
|
File without changes
|