s3dgraphy 1.6.0.dev24__tar.gz → 1.6.0.dev25__tar.gz
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.
- {s3dgraphy-1.6.0.dev24/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev25}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_qualia_types.json +6 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/node_registry.generated.json +1 -1
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +20 -10
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +39 -15
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/api.py +29 -0
- s3dgraphy-1.6.0.dev25/src/s3dgraphy/datamodel.py +267 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/rdf_exporter.py +23 -9
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/emdb/usm_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/template_emdb_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +4 -4
- s3dgraphy-1.6.0.dev25/src/s3dgraphy/tools/consumer_drift.py +315 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy.egg-info/SOURCES.txt +3 -0
- s3dgraphy-1.6.0.dev25/tests/test_consumer_drift.py +219 -0
- s3dgraphy-1.6.0.dev25/tests/test_datamodel_fingerprint.py +175 -0
- s3dgraphy-1.6.0.dev25/tests/test_em_ttl_matches_the_datamodels.py +156 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_qualia_dai_d7_d8.py +3 -2
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_file_node.py +5 -4
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_revision.py +3 -1
- s3dgraphy-1.6.0.dev24/src/s3dgraphy/tools/consumer_drift.py +0 -188
- s3dgraphy-1.6.0.dev24/tests/test_consumer_drift.py +0 -99
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/README.md +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em.ttl +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_minio_backend.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/tests/test_zero_hour.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: s3dgraphy
|
|
3
|
-
Version: 1.6.0.
|
|
3
|
+
Version: 1.6.0.dev25
|
|
4
4
|
Summary: 3D Stratigraphic Graph Management Library for archaeological and heritage applications
|
|
5
5
|
Author-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
6
6
|
Maintainer-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "s3dgraphy"
|
|
7
|
-
version = "1.6.0.
|
|
7
|
+
version = "1.6.0.dev25"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
{s3dgraphy-1.6.0.dev24 → s3dgraphy-1.6.0.dev25}/src/s3dgraphy/JSON_config/em_qualia_types.json
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"metadata": {
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"last_updated": "2026-
|
|
3
|
+
"version": "1.6.3",
|
|
4
|
+
"last_updated": "2026-10-01",
|
|
5
5
|
"maintainers": ["Emanuel Demetrescu"],
|
|
6
6
|
"license": "CC-BY-SA-4.0",
|
|
7
7
|
"license_note": "Share-alike per allinearsi agli strumenti terminologici da cui questo datamodel prende gli ancoraggi (ICCD CC BY-SA 3.0 IT) e perche' una derivazione resti aperta. Gli identificatori AAT/CIDOC citati nei `mappings` sono RIFERIMENTI, non contenuto incorporato: lo share-alike non si propaga ai vocabolari altrui, che mantengono i propri termini.",
|
|
8
|
-
"changelog": "v1.6.2: added two descriptive qualia of the stratigraphic unit asked for by the DAI record (iDAI.field Layer, D7/D8) — proposte da Cowork per E.D., 28 set 2026, dalla scheda DAI: `feature_shape` (spatial; the shape in plan or section named with a term, AAT 300056273, E55_Type) and `boundary_distinctness` (material; how sharp the limits are: abrupt / clear / gradual / diffuse, E55_Type, no AAT evident). Both controlled vocabularies with indicative seed values; templates declare their own. v1.6.1: added the spatial qualia `geometry` — the PROXY as a quale. The geometry-without-material of a unit becomes a PropertyNode whose payload is a SemanticShapeNode (has_semantic_shape), so the proxy inherits the paradata chain a lone node could not have, and one proxy can be synthesised from several sources. CIDOC default crmgeo:SP5_Geometric_Place_Expression, flagged `confirm_with: Felicetti` (E36 is the alternative, to be decided together with em:AnnotationRegion). v1.6.0: version realigned to the EM language version (EM 1.6) — supersedes the standalone 4.x line (last was 4.2), so all EM JSON config files now share the 1.6.x scheme. Added optional `rationale` + `example` fields to qualia entries (a plain-language why + a concrete case), shown by the EMStudio vocabulary picker when creating a PropertyNode. Seeded for the temporal qualia (absolute_time_start / absolute_time_end / dating_method); to be filled in for the rest incrementally. Prior (4.x) history: v4.2 added rationale/example scaffolding; v4.1: expanded spatial elevation qualia for pyArchInit us_table quote (all E54_Dimension): elevation_relative, elevation_min_absolute, elevation_max_absolute, elevation_min_relative, elevation_max_relative, elevation_min_usm, elevation_max_usm (the generic 'elevation' = absolute MASL, used by quota_abs). Each pyArchInit quota column maps to its own qualia id so they don't collide on the single-PropertyNode-per-property_name rule. v4.0: verified all v3.0 CIDOC-CRM mappings (correct). Expanded with: volume, area, circumference in dimensional; color, texture, finish, patina, hardness, porosity in material; damage_type, fragility, completeness in state; tool_marks, joining_technique in technical; bounding_box, footprint_area in spatial; duration, terminus_post_quem, terminus_ante_quem, relative_chronology in temporal; ceremonial_function, ritual_function, defensive_function, domestic_function, symbolic_function in telic; school, workshop, period_attribution in stylistic. NEW subcategories: iconographic + semantic under cultural_interpretive (iconographic_subject, narrative_content, iconographic_program, aesthetic_value, religious_significance, monumental_status, attribution). Added provenance_history, exhibition_history, publication_history under administrative; NEW ownership subcategory (current_custodian, ownership_chain). NEW CATEGORY epistemic — meta-qualia central to EM paradata model (confidence_level, certainty_level, uncertainty_factors, methodology_used, validation_method, source_quality, primary_contributor, review_status, last_modified)."
|
|
8
|
+
"changelog": "v1.6.3 (MICRO em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — every em: term of em.ttl is cited by a datamodel): epistemic.confidence.confidence_level.mappings gains specialised_alternative 'em:confidenceLevel', the em.ttl literal form of the same scalar, declared and NOT emitted (the exporter keeps crminf:I6_Belief_Value via J5). Mapping text only, no quale changed. v1.6.2: added two descriptive qualia of the stratigraphic unit asked for by the DAI record (iDAI.field Layer, D7/D8) — proposte da Cowork per E.D., 28 set 2026, dalla scheda DAI: `feature_shape` (spatial; the shape in plan or section named with a term, AAT 300056273, E55_Type) and `boundary_distinctness` (material; how sharp the limits are: abrupt / clear / gradual / diffuse, E55_Type, no AAT evident). Both controlled vocabularies with indicative seed values; templates declare their own. v1.6.1: added the spatial qualia `geometry` — the PROXY as a quale. The geometry-without-material of a unit becomes a PropertyNode whose payload is a SemanticShapeNode (has_semantic_shape), so the proxy inherits the paradata chain a lone node could not have, and one proxy can be synthesised from several sources. CIDOC default crmgeo:SP5_Geometric_Place_Expression, flagged `confirm_with: Felicetti` (E36 is the alternative, to be decided together with em:AnnotationRegion). v1.6.0: version realigned to the EM language version (EM 1.6) — supersedes the standalone 4.x line (last was 4.2), so all EM JSON config files now share the 1.6.x scheme. Added optional `rationale` + `example` fields to qualia entries (a plain-language why + a concrete case), shown by the EMStudio vocabulary picker when creating a PropertyNode. Seeded for the temporal qualia (absolute_time_start / absolute_time_end / dating_method); to be filled in for the rest incrementally. Prior (4.x) history: v4.2 added rationale/example scaffolding; v4.1: expanded spatial elevation qualia for pyArchInit us_table quote (all E54_Dimension): elevation_relative, elevation_min_absolute, elevation_max_absolute, elevation_min_relative, elevation_max_relative, elevation_min_usm, elevation_max_usm (the generic 'elevation' = absolute MASL, used by quota_abs). Each pyArchInit quota column maps to its own qualia id so they don't collide on the single-PropertyNode-per-property_name rule. v4.0: verified all v3.0 CIDOC-CRM mappings (correct). Expanded with: volume, area, circumference in dimensional; color, texture, finish, patina, hardness, porosity in material; damage_type, fragility, completeness in state; tool_marks, joining_technique in technical; bounding_box, footprint_area in spatial; duration, terminus_post_quem, terminus_ante_quem, relative_chronology in temporal; ceremonial_function, ritual_function, defensive_function, domestic_function, symbolic_function in telic; school, workshop, period_attribution in stylistic. NEW subcategories: iconographic + semantic under cultural_interpretive (iconographic_subject, narrative_content, iconographic_program, aesthetic_value, religious_significance, monumental_status, attribution). Added provenance_history, exhibition_history, publication_history under administrative; NEW ownership subcategory (current_custodian, ownership_chain). NEW CATEGORY epistemic — meta-qualia central to EM paradata model (confidence_level, certainty_level, uncertainty_factors, methodology_used, validation_method, source_quality, primary_contributor, review_status, last_modified)."
|
|
9
9
|
},
|
|
10
10
|
"qualia_categories": [
|
|
11
11
|
{
|
|
@@ -1218,7 +1218,9 @@
|
|
|
1218
1218
|
"name": "Confidence Level",
|
|
1219
1219
|
"description": "Numerical confidence in the assertion (0-100%). The EM-canonical scalar for paradata-supported claims. CRM mapping changed 2026-07-10: was E54_Dimension; a confidence is the value a belief is held with, i.e. crminf:I6_Belief_Value (see WP3 coverage analysis G5 / Appendix C). The RDF exporter's qualia-precedence rule types the PropertyNode accordingly.",
|
|
1220
1220
|
"mappings": {
|
|
1221
|
-
"cidoc_crm": "crminf:I6_Belief_Value"
|
|
1221
|
+
"cidoc_crm": "crminf:I6_Belief_Value",
|
|
1222
|
+
"specialised_alternative": "em:confidenceLevel",
|
|
1223
|
+
"specialised_alternative_note": "1.6.3: em:confidenceLevel (em.ttl, xsd:decimal on any E1) is the plain-literal form of the same number, declared for a reader that wants the scalar without the CRMinf belief. NOT emitted: the RDF exporter types the PropertyNode crminf:I6_Belief_Value and links it with J5_holds_to_be (_emit_belief_propositions). Putting it in cidoc_crm's place would be the switch, and is E.D.'s decision."
|
|
1222
1224
|
},
|
|
1223
1225
|
"data_type": "percentage",
|
|
1224
1226
|
"range": [0, 100],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "by `python -m s3dgraphy.tools.sync_node_datamodel` — DO NOT hand-edit. The flat class hierarchy (parent/node_type/description) is derived from the Python Node subclasses; hand-authored semantics and CIDOC mappings live in s3Dgraphy_node_datamodel.json.",
|
|
3
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
+
"s3Dgraphy_data_model_version": "1.6.18",
|
|
4
4
|
"node_types": {
|
|
5
5
|
"ActivityNodeGroup": {
|
|
6
6
|
"parent": "GroupNode",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_connections_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.31 (LA REVISIONE DELLA RISORSA, 2026-10-20, decision of E.D. 2026-09-30): NEW was_revision_of / had_revision — ResourceNode → ResourceNode, prov:wasRevisionOf (CIDOC projection crmdig:L21_used_as_derivation_source, as dtc_derived_from, because CRMdig has no term of its own for a revision). The name is the one the em.json container already uses for a ProjectVersion (container.py ProjectVersion.was_revision_of, projected as prov:wasRevisionOf by the RDF exporter): until now it was a FIELD of a document version, never an edge; it is widened here to resources. replace_file makes a NEW resource (same fields, the same files but the replaced one, the new file dtc_derived_from the old file) that was_revision_of the old one; the old one stays as it was, citable, and what pointed at it does not move by itself. No ui_phrase: a revision is made by replace_file, never picked from a menu. ADDITIVE: nothing narrowed. v1.6.30 (LA RISORSA E I SUOI FILE, 2026-10-18, decision of E.D. 2026-09-30): NEW has_file / is_file_of — ResourceNode → ResourceFileNode (node datamodel 1.6.17), crm:P106_is_composed_of + prov:hadMember; the edge `attributes` carry role (entry_point | member) and the path relative to the entry point, because one file sits in several resources under different paths. dtc_derived_from.source/target += ResourceFileNode, so a corrected texture declares the texture it comes from. Representations of the same thing (the datablock in the .blend as master, an OBJ export as distribution) are sibling ResourceNodes tied by dtc_derived_from: no new edge. NO REVISION EDGE exists for resources (measured: none of the 56 edges says «is a revision of»); replace_file keeps the old file and declares the new one derived from it, and the missing edge is reported, not invented. ADDITIVE: nothing narrowed. v1.6.29 (LA GEOMETRIA PER ORIGINE, 2026-10-11, decision of E.D. 2026-09-30): the vertices of a point / line / polyline reading are data of the region (node datamodel 1.6.15, data.coords); has_semantic_shape no longer carries a reading's .glb (the 1.6.27 hinge is migrated on opening). has_linked_resource.source += AnnotationRegionNode: above coords.inline_max_vertices (500) the vertices go to a .glb RESOURCE the region reaches with has_linked_resource (P67), as a proxy's shape and an RM do. ADDITIVE: nothing narrowed. v1.6.28 (IL PROXY COME RISORSA, 2026-10-11, decision of E.D. 2026-09-30): the proxy is a property of the US and its .glb is a RESOURCE. has_linked_resource.source += SemanticShapeNode: the shape reaches its glb with has_linked_resource -> ResourceNode(url_type proxy_model), the same hinge a Representation Model uses for its bytes (P67_refers_to), instead of carrying the path in its own url. SemanticShape.url is READ, never written: on opening, a shape with a url and no resource gets one (geometry/migrate.py, uuid5, idempotent), which also covers the older form EMtools still writes (US -has_semantic_shape-> shape with url proxies/<US>.glb). Convex hulls and spheres stay in the shape's data and ask for no resource. ADDITIVE: nothing narrowed. v1.6.27 (LA GEOMETRIA DELLA LETTURA, 2026-10-06, decision of E.D. 2026-09-29): the place of a reading is ONE node, AnnotationRegion with geometry_kind (region2d | passage | point | line | polyline; node datamodel 1.6.10). The chain is extractor -extracted_from-> region -is_on_resource-> what it is on, for every kind. is_on_resource.target += RepresentationModelNode, RepresentationModelDocNode, RepresentationModelSpecialFindNode: a point/line/polyline sits on a 3D model — the one edge that was missing. NO NEW EDGE for the .glb: the region reaches it with has_semantic_shape (source 'Node', already legal), the hinge a proxy uses (Property(geometry) -> SemanticShape.url). has_linked_resource was measured and NOT used: its source does not admit an AnnotationRegion, and it is the RM's hinge to a file, not a proxy's. ADDITIVE: nothing narrowed. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.26 (DUE FRASI, 2026-10-04, E.D. 2026-09-29): combines.ui_phrase.as_source «{node} combining {x}» → «{node} of {x}» — the new node is the combiner and {x} the extractor it combines, and «Combiner combining D.3.1» said the verb twice; the eight other languages already read «di/de/von…». has_property.ui_phrase.as_source «{node} with {x}» CHECKED for every owner the edge admits (US and every stratigraphic unit, Document, RMDoc, Epoch, Graph): «US with material», «Document with height», «Epoch with absolute_time_start», «Graph with license» all read; kept. With more than one owner (v1.6.23) the same phrase names an inheriting owner created from an existing property. v1.6.25 (SUPPORTO AI E VERIFICA SUI NODI, 2026-10-04, decision of E.D. 2026-09-29): human authorship with AI support — an AI proposal a person accepts stays signed by the person, with the mark «supporto AI»; what was made with AI stays among the warnings until a person verifies it with their ORCID. On NODES this lives in `data`, with the names of the narrative blocks: `ai_assisted` {model, by (AuthorAINode id), prompt_ref, fields?}, `validated_by` (AuthorNode id with data.orcid), `validated_at`. See validated_by `node_verification_note` and s3dgraphy.ai_validation. NO EDGE CHANGED: the validated_by EDGE keeps source NarrativeNode; em.ttl widens em:validatedBy's domain to crm:E1 and adds em:aiAssistedBy/aiModel/aiPromptRef/aiAssistedField/validatedAt. v1.6.24 (L'ESTRATTORE LEGGE UN'UNITA', 2026-10-04, decision of E.D. 2026-09-29, extending the proposal of 2026-09-28 on SF/RSF): extracted_from.target += StratigraphicNode — an extractor may read FROM A UNIT that itself has the property it feeds (a reused find whose material is read off the unit it comes from), and not only from a document or an annotation region. The whole StratigraphicNode family, matched by class MRO (US, USV/s, USV/n, SF, RSF, VSF, USD, serSU…). A SUGGESTION, NOT AN ERROR: when the unit read from has no property of the same name as the property the extractor feeds, api.validate reports it under `info` (diagnostics.extraction_source_hints). The extractor keeps the name <source>.<ordinal> whatever its source is (the unit's name in place of the document's). ADDITIVE: nothing narrowed, no mapping changed. v1.6.23 (PIU' PROPRIETARI, 2026-10-04, decision of E.D. 2026-09-29, revisione della scrivania v7): a PropertyNode may have MORE THAN ONE incoming has_property — one unit INSTANTIATES another's property (a USV/s takes the material of the US it completes). The property stays ONE (one value, one paradata chain) with several owners. The inheritance is DECLARED, never automatic: the inheriting has_property carries the edge attribute `inherited: true`. The property stays in the ParadataNodeGroup of its ORIGINAL owner (the one that created it); the others refer to it through their own has_property, never through a group. See has_property `owners_note`. ADDITIVE: no edge, rule or mapping changed (has_property had no cardinality). v1.6.22 (FRASI DEGLI ARCHI, 2026-09-29, decision of E.D. 2026-09-29): `ui_phrase` {as_source, as_target} on the 34 edge types an interface proposes in a menu — the phrase that names a NEW node created linked to an existing one («US above X», «Property of X», «Document for X»). It is EM language, so it lives here and not in a consumer's i18n; the translations are in datamodel_translations.json, section `edge_types` (fields `ui_phrase_as_source` / `ui_phrase_as_target`). See `_ui_phrase_note`. ADDITIVE: no edge, rule or mapping changed. v1.6.21 (PROPRIETA' DIRETTE, 2026-09-28, decision of E.D. revising v1.6.1): has_property.source += EpochNode, GraphNode. Principle: every node that accepts properties receives them DIRECTLY. The sources are now the graph itself (GraphNode), the documents (DocumentNode, RepresentationModelDocNode), every stratigraphic unit (StratigraphicNode, matched by class MRO so SF, RSF, serSU, USD, USN, USNt... are included; the USNt node_type_restriction has scope stratigraphic and does not narrow has_property) and the epochs (EpochNode). v1.6.1 had routed an epoch's absolute_time_start/end through a ParadataNodeGroup because has_property refused an EpochNode (StratiMiner epoch claims degraded to generic_connection). The ParadataNodeGroup (DP-60, E89) is NOT a mandatory passage: it is a grouping, which can be created on the fly, useful to connect something to the whole set of a node's properties (connecting to the group equals connecting to each member PropertyNode) or to one property inside it. Coherence rule (validator, not datamodel): a PropertyNode in the PNG of X (is_in_paradata_nodegroup + X has_paradata_nodegroup PNG) requires X has_property that PropertyNode. has_paradata_nodegroup.source keeps EpochNode. NOT TOUCHED, question for E.D.: the cidoc P43_has_dimension has domain E70 Thing; A8/E31/E73 satisfy it, an E4 Period does not. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.20 (UNA GRAFIA SOLA, 2026-09-27): NEW optional field `spelling_of` on an edge entry, naming the canonical entry of which this one is an OLDER SPELLING. Meaning: the SAME relation, the SAME RDF projection, ACCEPTED WHEN READ, NEVER WRITTEN — every writer (importers, exporters, merge, inference, sync) asks the datamodel for the canonical name (connections_loader: canonical_name / is_canonical False / normalize_edge_name) instead of keeping its own list. It is NOT `deprecated`: `deprecated` drops the edge from RDF on export AND import (measured: an is_bonded_to marked deprecated leaves 0 em:bondedTo triples), which is right for has_timebranch that nobody writes and wrong for a spelling pyArchInit writes every day. Set on the two legacy physical bonds: is_bonded_to spelling_of bonded_to, is_physically_equal_to spelling_of equals. em.ttl is unchanged: it already has ONE property per pair (em:bondedTo, em:physicallyEquals) and its `Maps to:` names both spellings. The datamodel is the source of truth for names (docs/SOURCE_OF_TRUTH.md). s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.18 (CRMem WIRING, 2026-09-24): il prefisso CIDOC-S3D esce dal datamodel. Non era un namespace: era una stringa che _resolve_prefixed non risolve, quindi nessuna tripla veniva emessa da quei campi. Disposizione termine per termine: incompatibleWith -> em:contrastsWith; belongsToAlternative -> em:belongsToAlternative (is_in_timebranch e has_timebranch); hasSymbolicSpatialRepresentation -> em:hasSemanticShape; isPartOfParadataGroup e hasParadataDocumentation RIMOSSI, perche' crm:P106i_forms_part_of e crm:P129i_is_subject_of dicono gia' quello che serve una volta tipizzato il gruppo; has3DRepresentation RIMOSSO sui tre archi di rappresentazione, perche' crm:P138i_has_representation con la co-tipizzazione del target a E36_Visual_Item basta e il '3D' sta nel rdf:type del bersaglio, non nella relazione. INOLTRE contrasts_with perde crm:P15_was_influenced_by: dominio E7_Activity contro un E4_Period, e comunque un'altra proposizione. Esce sulla sola em:contrastsWith. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.17 (CIDOC REPAIR, 2026-09-21): a pass over IRIs that do not exist. An undeclared IRI raises no error anywhere — it makes a well-formed triple that no reasoner uses and no query finds — so these were found by parsing the official releases (CIDOC CRM 7.1.3 + Supplement, CRMarchaeo 2.1.1, CRMinf 1.2.1, CRMsci 3.2, CRMdig 5.0, CRMgeo) and checking every term this file cites against them. FIXED: the nine physical-relation edges (abuts, cuts, fills, overlies, bonded_to, is_bonded_to, equals, is_physically_equal_to, generic_connection) moved from AP11_has_physical_relation to AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0 — the old one exists only in 1.4.1. is_after: crm:P120_occurs_before is not declared in CRM 7.1.3, so crmarchaeo:AP28_occurs_before — already the extension_mapping, and the same proposition — is promoted to `cidoc` and the extension_mapping cleared; rdf_subject=target is UNCHANGED and still right. has_same_time: crm:P114_is_equal_in_time_to undeclared, same promotion of AP22. changed_from: P123_resulted_from -> P123i_resulted_from (the «i» of the inverse was missing). has_geoposition: the crmgeo:Q4 extension_mapping removed, P53 alone being valid and sufficient. THREE PROJECTIONS RAN BACKWARDS, none of them declaring rdf_subject, so the exporter wrote source-first and the proposition came out reversed: is_in_paradata_nodegroup P106_is_composed_of -> P106i_forms_part_of, has_paradata_nodegroup P70_documents -> P129i_is_subject_of (the reason ParadataNodeGroup becomes E89 in the node datamodel), and is_in_activity, where P9_consists_of is removed and NOTHING replaces it: neither P9i (needs an E4 Period as subject) nor P129i (needs an E89 as object; ActivityNodeGroup is E7) holds, and the empty field is a question for E.D., not an omission. Inverse properties were preferred to rdf_subject throughout: one indirection less. ALSO, by decision of E.D.: has_first_epoch and survive_in_epoch both accept FunctionalUnitNodeGroup, so a functional unit carries its own temporal index — the asymmetry with ActivityNodeGroup, which takes the first and never the second, is meant, because an activity is an event and a functional unit is a thing that persists. «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). NOT TOUCHED and still open: the seven CIDOC-S3D properties and their extension_mappings, the E36 co-typing on has_representation_model*, and the direction of has_sub_epoch's P10_falls_within, which the repair report of the same day records as a decision for E.D. v1.6.15 (HW1, 2026-09-16): the act of acquisition gets a BODY. NEW dtc_happened_on_device — DTCNode -> DTCDeviceNode, crmdig:L12_happened_on_device — because until today the apparatus was a STRING inside how.acquisition, and a string cannot be asked «what did this machine produce», «which surveys used that scanner», «that lens was distorted, which models are affected». It attaches to the EVENT and not to the input or the output: the three dtc_kinds axes are the FLOW (what went in, what happened, what came out) and a device is what it happened ON — the distinction CRMdig draws between L12 and L10, and the one that makes the three questions askable. It is CONTEXT and carries no dtc_role, so a provenance walk does not enter it (per _dtc_role_note below). It has NO PROV-O projection on purpose: prov:used is taken by dtc_had_input and prov:Agent ranges over things that bear responsibility, which a camera does not — same honesty as the 2026-08-17 note on wasInformedBy. NOTHING IS REMOVED and nothing is narrowed. NOT DONE, and named so it is not forgotten: a rig (a sensor ON a drone) is an assembly of two devices and has no edge yet; the glyph family says it by drawing their connectors touching, which is a picture and not a statement. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.14 (EM16-RMNG, 2026-09-10): the RM container becomes a first-class group in the graph. NEW is_in_representation_model_group — membership of a representation model in a RepresentationModelNodeGroup, on the is_in_* tag convention (is_in_activity / is_in_location / is_in_timebranch / is_in_paradata_nodegroup / is_in_functional_unit), 1:1 instead of m:n because a mesh belongs to exactly one container. WIDENED has_representation_model.target += RepresentationModelNodeGroup, so a Document points at the named set as well as at each model. NOTHING IS REMOVED: the epoch↔RM edges and the direct Document→RM edges stay written as before, without a flag and without a mode — the group sits beside and never in between (D1, resolved by E.D. on 2026-09-10). s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.11 (batch ingestion, 2026-08-17): two widenings for bulk assets. has_author.source DTCProcessNode -> DTCNode, so an ACQUISITION event (D12) can carry the author of a whole lot; dtc_had_input.target += DTCNode, so a DECLARED derivation can name a whole acquisition as its input (one input, not 500 edges) — that case projects as prov:wasInformedBy, not prov:used/L10, which range over digital objects and would be wrong for an event. v1.6.8 (MIG1-A): graph-scope rights metadata become first-class nodes (DP-65). is_in_paradata_nodegroup.source += AuthorNode/LicenseNode/EmbargoNode and has_paradata_nodegroup.source += GraphNode, so the graph-self node (GraphNode) owns a graph-scope ParadataNodeGroup whose members are the AuthorNode/LicenseNode/EmbargoNode (+ the DP-65 GeoPositionNode shift), replacing the legacy graph.data['author_name'/'license'/'embargo'] fields. The Data Funnel canvas tier now reads these member nodes (one reader per scope); a one-shot load-time migration materialises the legacy fields into nodes. v1.6.7 (BUGFIX-CONN3): closes the two silent follow-ups of CONN2. has_documentation.source gains PropertyNode (judicious widening): the honest reading of a legacy yEd dashed PropertyNode→Document connector is P70i_is_documented_in ('the property is documented in this source'), NOT has_visual_reference (which CONN2 moved to PropertyNode→ResourceNode). The import heuristic (import_graphml.enhance_edge_type) now routes PropertyNode→Document to has_documentation and the rarer CombinerNode/ParadataNode→Document to generic_connection+warning (a combiner aggregates extractors and cites no document; the DTC chain is NOT synthesised at import). Shelf: hat_as_document no longer offers has_visual_reference (a Document attaches via has_documentation/extracted_from); a new hat_as_visual_resource attaches a ResourceNode image via has_visual_reference from a PropertyNode — the correct home after CONN2. No illegal edge is produced or expected. v1.6.6 (BUGFIX-CONN2): closes the two open domain questions on has_visual_reference (E.D. 2026-08-05). SOURCE narrowed to exactly [PropertyNode]: only a property (an asserted quale) is what a visual reference illustrates; the generic ParadataNode entry is dropped, which — because ExtractorNode, CombinerNode and DocumentNode are all subclasses of ParadataNode — now excludes them by class hierarchy (a PropertyNode is neither a sibling nor a parent of the others). The extractor/combiner denied_edges from v1.6.5 are therefore REDUNDANT for this edge but are KEPT as a defensive guard (they still bite if the source is ever broadened back to ParadataNode). TARGET changed from [DocumentNode] to [ResourceNode]: the oddity was that a visual reference pointed at a source-document (E31) rather than at a visual resource. It now points at the resource-layer image node (ResourceNode = E73 Information Object / ExternalResourceReference — the same P67 hinge RM/RMDoc use via has_linked_resource), keeping DocumentNode = fonte. CIDOC stays P138i_has_representation with the target co-typed E36 Visual Item: E36 is a subclass of E73, so co-typing a ResourceNode as E36 is range-consistent (it was NOT, strictly, for an E31 Document). FOLLOW-UPS flagged for E.D. (see end-of report): (a) import_graphml.enhance_edge_type still hardcodes PropertyNode/Combiner/Paradata→DocumentNode ⇒ has_visual_reference (legacy yEd heuristic, now produces an edge this datamodel refuses) — needs a domain decision on what legacy paradata→document edges become; (b) shelf.hat_as_document lists has_visual_reference among the Document-attach edges — it can no longer validate (target is ResourceNode), so a paradata attach silently no longer attaches; a hat_as_visual_resource(ResourceNode)+has_visual_reference path is the proper home. v1.6.5 (BUGFIX-CONN): has_visual_reference is no longer offered FROM an ExtractorNode or a CombinerNode. An extractor toward a document expresses ONLY extracted_from (its relation to the source is the extraction, not an illustration); a combiner aggregates extractors and illustrates nothing. Because ExtractorNode, CombinerNode and PropertyNode are all subclasses of ParadataNode, and has_visual_reference.source lists ParadataNode, simply dropping the two subtypes from the source list would not exclude them (they still match via the parent class). So this is expressed with node_type_restrictions (keyed by RUNTIME node_type, like USNt) using a new denied_edges blacklist (the mirror of allowed_edges): extractor/combiner deny has_visual_reference. PropertyNode and any other legitimate ParadataNode source keep it unchanged. OPEN domain question for E.D.: which paradata node-types may legitimately have a visual reference (today source = PropertyNode/ExtractorNode/CombinerNode/ParadataNode) — extractor/combiner removed; the rest left as-is, not invented. v1.6.1: has_paradata_nodegroup source extended to include EpochNode — an epoch can now own a ParadataNodeGroup holding its temporal-definition properties (e.g. absolute_time_start/end as PropertyNodes with paradata provenance), mirroring how a StratigraphicNode carries its paradata group. v1.6.0 (paired with node datamodel v1.6.0) introduces: bug fix on is_in_paradata_nodegroup (typo 'ProperrtyNOde' → 'PropertyNode'); semantic fix on has_documentation (P104_is_subject_to → P70i_is_documented_in — P104 means 'subject to a legal right', not 'has documentation'); deprecation of has_timebranch as duplicate of is_in_timebranch (the latter is the canonical one — used by import_graphml.py and graphml_patcher.py; the former exists only in config JSON); component list aligned with node datamodel (HDT-O, PROV-O added). HDT-O containment properties (hdto:contains_HDT, hdto:contains_SU, hdto:isPrimary) and physical-relation discriminator subproperties (em:abuts, em:cuts, em:fills, em:overlies, em:bonded_to, em:equals as rdfs:subPropertyOf crmarchaeo:AP11_has_physical_relation) to be added in v1.6.1. v1.5.3 introduced canonical/reverse directionality with verb-based labels for clear socket identification in node editors. v1.5.4 added 'has_visual_reference' edge type. v1.5.5 added 'is_in_location' edge type with context-sensitive CIDOC mapping (P53 for node→location, P89 for the recursive location→location hierarchy) and an optional 'is_primary' boolean attribute (s3d:isPrimary, proposed). v1.6.3: added node_type_restrictions — a per-node-type narrowing of the class-level edge rules (POL5): USN (the NEUTRAL stratigraphic unit, a risparmio) takes is_after/is_before and nothing else, because a void cannot cut, fill, abut or bond. v1.6.4 (POL6): the same restriction, moved to USNt — the tokens went back to their conventional meanings, USN = US negativa (all relations, it is a unit of the sequence) and USNt = US neutra (sequence only).",
|
|
2
|
+
"s3Dgraphy_connections_model_version": "1.6.32",
|
|
3
|
+
"description": "v1.6.32 (MICRO i termini di em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01): the eight edges of the AP11 physical family (abuts, cuts, fills, overlies, bonded_to, is_bonded_to, equals, is_physically_equal_to) gain mapping.subproperty, the em: subproperty of crmarchaeo:AP11_has_physical_relation_to they are written with (em:abuts, em:cuts, em:fills, em:overlies, em:bondedTo, em:physicallyEquals). Until now the pairing type_tag -> subproperty lived only in rdf_exporter.AP11_SUBPROPS; the exporter and the importer now BUILD that table from here, so a new physical relation is a datamodel change and not a code change. has_property.mapping gains when_inherited em:inheritsQualia, the subproperty the exporter already writes for an inherited owner (ownership.py). Mapping only: no edge added, nothing emitted differently. v1.6.31 (LA REVISIONE DELLA RISORSA, 2026-10-20, decision of E.D. 2026-09-30): NEW was_revision_of / had_revision — ResourceNode → ResourceNode, prov:wasRevisionOf (CIDOC projection crmdig:L21_used_as_derivation_source, as dtc_derived_from, because CRMdig has no term of its own for a revision). The name is the one the em.json container already uses for a ProjectVersion (container.py ProjectVersion.was_revision_of, projected as prov:wasRevisionOf by the RDF exporter): until now it was a FIELD of a document version, never an edge; it is widened here to resources. replace_file makes a NEW resource (same fields, the same files but the replaced one, the new file dtc_derived_from the old file) that was_revision_of the old one; the old one stays as it was, citable, and what pointed at it does not move by itself. No ui_phrase: a revision is made by replace_file, never picked from a menu. ADDITIVE: nothing narrowed. v1.6.30 (LA RISORSA E I SUOI FILE, 2026-10-18, decision of E.D. 2026-09-30): NEW has_file / is_file_of — ResourceNode → ResourceFileNode (node datamodel 1.6.17), crm:P106_is_composed_of + prov:hadMember; the edge `attributes` carry role (entry_point | member) and the path relative to the entry point, because one file sits in several resources under different paths. dtc_derived_from.source/target += ResourceFileNode, so a corrected texture declares the texture it comes from. Representations of the same thing (the datablock in the .blend as master, an OBJ export as distribution) are sibling ResourceNodes tied by dtc_derived_from: no new edge. NO REVISION EDGE exists for resources (measured: none of the 56 edges says «is a revision of»); replace_file keeps the old file and declares the new one derived from it, and the missing edge is reported, not invented. ADDITIVE: nothing narrowed. v1.6.29 (LA GEOMETRIA PER ORIGINE, 2026-10-11, decision of E.D. 2026-09-30): the vertices of a point / line / polyline reading are data of the region (node datamodel 1.6.15, data.coords); has_semantic_shape no longer carries a reading's .glb (the 1.6.27 hinge is migrated on opening). has_linked_resource.source += AnnotationRegionNode: above coords.inline_max_vertices (500) the vertices go to a .glb RESOURCE the region reaches with has_linked_resource (P67), as a proxy's shape and an RM do. ADDITIVE: nothing narrowed. v1.6.28 (IL PROXY COME RISORSA, 2026-10-11, decision of E.D. 2026-09-30): the proxy is a property of the US and its .glb is a RESOURCE. has_linked_resource.source += SemanticShapeNode: the shape reaches its glb with has_linked_resource -> ResourceNode(url_type proxy_model), the same hinge a Representation Model uses for its bytes (P67_refers_to), instead of carrying the path in its own url. SemanticShape.url is READ, never written: on opening, a shape with a url and no resource gets one (geometry/migrate.py, uuid5, idempotent), which also covers the older form EMtools still writes (US -has_semantic_shape-> shape with url proxies/<US>.glb). Convex hulls and spheres stay in the shape's data and ask for no resource. ADDITIVE: nothing narrowed. v1.6.27 (LA GEOMETRIA DELLA LETTURA, 2026-10-06, decision of E.D. 2026-09-29): the place of a reading is ONE node, AnnotationRegion with geometry_kind (region2d | passage | point | line | polyline; node datamodel 1.6.10). The chain is extractor -extracted_from-> region -is_on_resource-> what it is on, for every kind. is_on_resource.target += RepresentationModelNode, RepresentationModelDocNode, RepresentationModelSpecialFindNode: a point/line/polyline sits on a 3D model — the one edge that was missing. NO NEW EDGE for the .glb: the region reaches it with has_semantic_shape (source 'Node', already legal), the hinge a proxy uses (Property(geometry) -> SemanticShape.url). has_linked_resource was measured and NOT used: its source does not admit an AnnotationRegion, and it is the RM's hinge to a file, not a proxy's. ADDITIVE: nothing narrowed. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.26 (DUE FRASI, 2026-10-04, E.D. 2026-09-29): combines.ui_phrase.as_source «{node} combining {x}» → «{node} of {x}» — the new node is the combiner and {x} the extractor it combines, and «Combiner combining D.3.1» said the verb twice; the eight other languages already read «di/de/von…». has_property.ui_phrase.as_source «{node} with {x}» CHECKED for every owner the edge admits (US and every stratigraphic unit, Document, RMDoc, Epoch, Graph): «US with material», «Document with height», «Epoch with absolute_time_start», «Graph with license» all read; kept. With more than one owner (v1.6.23) the same phrase names an inheriting owner created from an existing property. v1.6.25 (SUPPORTO AI E VERIFICA SUI NODI, 2026-10-04, decision of E.D. 2026-09-29): human authorship with AI support — an AI proposal a person accepts stays signed by the person, with the mark «supporto AI»; what was made with AI stays among the warnings until a person verifies it with their ORCID. On NODES this lives in `data`, with the names of the narrative blocks: `ai_assisted` {model, by (AuthorAINode id), prompt_ref, fields?}, `validated_by` (AuthorNode id with data.orcid), `validated_at`. See validated_by `node_verification_note` and s3dgraphy.ai_validation. NO EDGE CHANGED: the validated_by EDGE keeps source NarrativeNode; em.ttl widens em:validatedBy's domain to crm:E1 and adds em:aiAssistedBy/aiModel/aiPromptRef/aiAssistedField/validatedAt. v1.6.24 (L'ESTRATTORE LEGGE UN'UNITA', 2026-10-04, decision of E.D. 2026-09-29, extending the proposal of 2026-09-28 on SF/RSF): extracted_from.target += StratigraphicNode — an extractor may read FROM A UNIT that itself has the property it feeds (a reused find whose material is read off the unit it comes from), and not only from a document or an annotation region. The whole StratigraphicNode family, matched by class MRO (US, USV/s, USV/n, SF, RSF, VSF, USD, serSU…). A SUGGESTION, NOT AN ERROR: when the unit read from has no property of the same name as the property the extractor feeds, api.validate reports it under `info` (diagnostics.extraction_source_hints). The extractor keeps the name <source>.<ordinal> whatever its source is (the unit's name in place of the document's). ADDITIVE: nothing narrowed, no mapping changed. v1.6.23 (PIU' PROPRIETARI, 2026-10-04, decision of E.D. 2026-09-29, revisione della scrivania v7): a PropertyNode may have MORE THAN ONE incoming has_property — one unit INSTANTIATES another's property (a USV/s takes the material of the US it completes). The property stays ONE (one value, one paradata chain) with several owners. The inheritance is DECLARED, never automatic: the inheriting has_property carries the edge attribute `inherited: true`. The property stays in the ParadataNodeGroup of its ORIGINAL owner (the one that created it); the others refer to it through their own has_property, never through a group. See has_property `owners_note`. ADDITIVE: no edge, rule or mapping changed (has_property had no cardinality). v1.6.22 (FRASI DEGLI ARCHI, 2026-09-29, decision of E.D. 2026-09-29): `ui_phrase` {as_source, as_target} on the 34 edge types an interface proposes in a menu — the phrase that names a NEW node created linked to an existing one («US above X», «Property of X», «Document for X»). It is EM language, so it lives here and not in a consumer's i18n; the translations are in datamodel_translations.json, section `edge_types` (fields `ui_phrase_as_source` / `ui_phrase_as_target`). See `_ui_phrase_note`. ADDITIVE: no edge, rule or mapping changed. v1.6.21 (PROPRIETA' DIRETTE, 2026-09-28, decision of E.D. revising v1.6.1): has_property.source += EpochNode, GraphNode. Principle: every node that accepts properties receives them DIRECTLY. The sources are now the graph itself (GraphNode), the documents (DocumentNode, RepresentationModelDocNode), every stratigraphic unit (StratigraphicNode, matched by class MRO so SF, RSF, serSU, USD, USN, USNt... are included; the USNt node_type_restriction has scope stratigraphic and does not narrow has_property) and the epochs (EpochNode). v1.6.1 had routed an epoch's absolute_time_start/end through a ParadataNodeGroup because has_property refused an EpochNode (StratiMiner epoch claims degraded to generic_connection). The ParadataNodeGroup (DP-60, E89) is NOT a mandatory passage: it is a grouping, which can be created on the fly, useful to connect something to the whole set of a node's properties (connecting to the group equals connecting to each member PropertyNode) or to one property inside it. Coherence rule (validator, not datamodel): a PropertyNode in the PNG of X (is_in_paradata_nodegroup + X has_paradata_nodegroup PNG) requires X has_property that PropertyNode. has_paradata_nodegroup.source keeps EpochNode. NOT TOUCHED, question for E.D.: the cidoc P43_has_dimension has domain E70 Thing; A8/E31/E73 satisfy it, an E4 Period does not. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.20 (UNA GRAFIA SOLA, 2026-09-27): NEW optional field `spelling_of` on an edge entry, naming the canonical entry of which this one is an OLDER SPELLING. Meaning: the SAME relation, the SAME RDF projection, ACCEPTED WHEN READ, NEVER WRITTEN — every writer (importers, exporters, merge, inference, sync) asks the datamodel for the canonical name (connections_loader: canonical_name / is_canonical False / normalize_edge_name) instead of keeping its own list. It is NOT `deprecated`: `deprecated` drops the edge from RDF on export AND import (measured: an is_bonded_to marked deprecated leaves 0 em:bondedTo triples), which is right for has_timebranch that nobody writes and wrong for a spelling pyArchInit writes every day. Set on the two legacy physical bonds: is_bonded_to spelling_of bonded_to, is_physically_equal_to spelling_of equals. em.ttl is unchanged: it already has ONE property per pair (em:bondedTo, em:physicallyEquals) and its `Maps to:` names both spellings. The datamodel is the source of truth for names (docs/SOURCE_OF_TRUTH.md). s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.18 (CRMem WIRING, 2026-09-24): il prefisso CIDOC-S3D esce dal datamodel. Non era un namespace: era una stringa che _resolve_prefixed non risolve, quindi nessuna tripla veniva emessa da quei campi. Disposizione termine per termine: incompatibleWith -> em:contrastsWith; belongsToAlternative -> em:belongsToAlternative (is_in_timebranch e has_timebranch); hasSymbolicSpatialRepresentation -> em:hasSemanticShape; isPartOfParadataGroup e hasParadataDocumentation RIMOSSI, perche' crm:P106i_forms_part_of e crm:P129i_is_subject_of dicono gia' quello che serve una volta tipizzato il gruppo; has3DRepresentation RIMOSSO sui tre archi di rappresentazione, perche' crm:P138i_has_representation con la co-tipizzazione del target a E36_Visual_Item basta e il '3D' sta nel rdf:type del bersaglio, non nella relazione. INOLTRE contrasts_with perde crm:P15_was_influenced_by: dominio E7_Activity contro un E4_Period, e comunque un'altra proposizione. Esce sulla sola em:contrastsWith. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.17 (CIDOC REPAIR, 2026-09-21): a pass over IRIs that do not exist. An undeclared IRI raises no error anywhere — it makes a well-formed triple that no reasoner uses and no query finds — so these were found by parsing the official releases (CIDOC CRM 7.1.3 + Supplement, CRMarchaeo 2.1.1, CRMinf 1.2.1, CRMsci 3.2, CRMdig 5.0, CRMgeo) and checking every term this file cites against them. FIXED: the nine physical-relation edges (abuts, cuts, fills, overlies, bonded_to, is_bonded_to, equals, is_physically_equal_to, generic_connection) moved from AP11_has_physical_relation to AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0 — the old one exists only in 1.4.1. is_after: crm:P120_occurs_before is not declared in CRM 7.1.3, so crmarchaeo:AP28_occurs_before — already the extension_mapping, and the same proposition — is promoted to `cidoc` and the extension_mapping cleared; rdf_subject=target is UNCHANGED and still right. has_same_time: crm:P114_is_equal_in_time_to undeclared, same promotion of AP22. changed_from: P123_resulted_from -> P123i_resulted_from (the «i» of the inverse was missing). has_geoposition: the crmgeo:Q4 extension_mapping removed, P53 alone being valid and sufficient. THREE PROJECTIONS RAN BACKWARDS, none of them declaring rdf_subject, so the exporter wrote source-first and the proposition came out reversed: is_in_paradata_nodegroup P106_is_composed_of -> P106i_forms_part_of, has_paradata_nodegroup P70_documents -> P129i_is_subject_of (the reason ParadataNodeGroup becomes E89 in the node datamodel), and is_in_activity, where P9_consists_of is removed and NOTHING replaces it: neither P9i (needs an E4 Period as subject) nor P129i (needs an E89 as object; ActivityNodeGroup is E7) holds, and the empty field is a question for E.D., not an omission. Inverse properties were preferred to rdf_subject throughout: one indirection less. ALSO, by decision of E.D.: has_first_epoch and survive_in_epoch both accept FunctionalUnitNodeGroup, so a functional unit carries its own temporal index — the asymmetry with ActivityNodeGroup, which takes the first and never the second, is meant, because an activity is an event and a functional unit is a thing that persists. «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). NOT TOUCHED and still open: the seven CIDOC-S3D properties and their extension_mappings, the E36 co-typing on has_representation_model*, and the direction of has_sub_epoch's P10_falls_within, which the repair report of the same day records as a decision for E.D. v1.6.15 (HW1, 2026-09-16): the act of acquisition gets a BODY. NEW dtc_happened_on_device — DTCNode -> DTCDeviceNode, crmdig:L12_happened_on_device — because until today the apparatus was a STRING inside how.acquisition, and a string cannot be asked «what did this machine produce», «which surveys used that scanner», «that lens was distorted, which models are affected». It attaches to the EVENT and not to the input or the output: the three dtc_kinds axes are the FLOW (what went in, what happened, what came out) and a device is what it happened ON — the distinction CRMdig draws between L12 and L10, and the one that makes the three questions askable. It is CONTEXT and carries no dtc_role, so a provenance walk does not enter it (per _dtc_role_note below). It has NO PROV-O projection on purpose: prov:used is taken by dtc_had_input and prov:Agent ranges over things that bear responsibility, which a camera does not — same honesty as the 2026-08-17 note on wasInformedBy. NOTHING IS REMOVED and nothing is narrowed. NOT DONE, and named so it is not forgotten: a rig (a sensor ON a drone) is an assembly of two devices and has no edge yet; the glyph family says it by drawing their connectors touching, which is a picture and not a statement. s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.14 (EM16-RMNG, 2026-09-10): the RM container becomes a first-class group in the graph. NEW is_in_representation_model_group — membership of a representation model in a RepresentationModelNodeGroup, on the is_in_* tag convention (is_in_activity / is_in_location / is_in_timebranch / is_in_paradata_nodegroup / is_in_functional_unit), 1:1 instead of m:n because a mesh belongs to exactly one container. WIDENED has_representation_model.target += RepresentationModelNodeGroup, so a Document points at the named set as well as at each model. NOTHING IS REMOVED: the epoch↔RM edges and the direct Document→RM edges stay written as before, without a flag and without a mode — the group sits beside and never in between (D1, resolved by E.D. on 2026-09-10). s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.11 (batch ingestion, 2026-08-17): two widenings for bulk assets. has_author.source DTCProcessNode -> DTCNode, so an ACQUISITION event (D12) can carry the author of a whole lot; dtc_had_input.target += DTCNode, so a DECLARED derivation can name a whole acquisition as its input (one input, not 500 edges) — that case projects as prov:wasInformedBy, not prov:used/L10, which range over digital objects and would be wrong for an event. v1.6.8 (MIG1-A): graph-scope rights metadata become first-class nodes (DP-65). is_in_paradata_nodegroup.source += AuthorNode/LicenseNode/EmbargoNode and has_paradata_nodegroup.source += GraphNode, so the graph-self node (GraphNode) owns a graph-scope ParadataNodeGroup whose members are the AuthorNode/LicenseNode/EmbargoNode (+ the DP-65 GeoPositionNode shift), replacing the legacy graph.data['author_name'/'license'/'embargo'] fields. The Data Funnel canvas tier now reads these member nodes (one reader per scope); a one-shot load-time migration materialises the legacy fields into nodes. v1.6.7 (BUGFIX-CONN3): closes the two silent follow-ups of CONN2. has_documentation.source gains PropertyNode (judicious widening): the honest reading of a legacy yEd dashed PropertyNode→Document connector is P70i_is_documented_in ('the property is documented in this source'), NOT has_visual_reference (which CONN2 moved to PropertyNode→ResourceNode). The import heuristic (import_graphml.enhance_edge_type) now routes PropertyNode→Document to has_documentation and the rarer CombinerNode/ParadataNode→Document to generic_connection+warning (a combiner aggregates extractors and cites no document; the DTC chain is NOT synthesised at import). Shelf: hat_as_document no longer offers has_visual_reference (a Document attaches via has_documentation/extracted_from); a new hat_as_visual_resource attaches a ResourceNode image via has_visual_reference from a PropertyNode — the correct home after CONN2. No illegal edge is produced or expected. v1.6.6 (BUGFIX-CONN2): closes the two open domain questions on has_visual_reference (E.D. 2026-08-05). SOURCE narrowed to exactly [PropertyNode]: only a property (an asserted quale) is what a visual reference illustrates; the generic ParadataNode entry is dropped, which — because ExtractorNode, CombinerNode and DocumentNode are all subclasses of ParadataNode — now excludes them by class hierarchy (a PropertyNode is neither a sibling nor a parent of the others). The extractor/combiner denied_edges from v1.6.5 are therefore REDUNDANT for this edge but are KEPT as a defensive guard (they still bite if the source is ever broadened back to ParadataNode). TARGET changed from [DocumentNode] to [ResourceNode]: the oddity was that a visual reference pointed at a source-document (E31) rather than at a visual resource. It now points at the resource-layer image node (ResourceNode = E73 Information Object / ExternalResourceReference — the same P67 hinge RM/RMDoc use via has_linked_resource), keeping DocumentNode = fonte. CIDOC stays P138i_has_representation with the target co-typed E36 Visual Item: E36 is a subclass of E73, so co-typing a ResourceNode as E36 is range-consistent (it was NOT, strictly, for an E31 Document). FOLLOW-UPS flagged for E.D. (see end-of report): (a) import_graphml.enhance_edge_type still hardcodes PropertyNode/Combiner/Paradata→DocumentNode ⇒ has_visual_reference (legacy yEd heuristic, now produces an edge this datamodel refuses) — needs a domain decision on what legacy paradata→document edges become; (b) shelf.hat_as_document lists has_visual_reference among the Document-attach edges — it can no longer validate (target is ResourceNode), so a paradata attach silently no longer attaches; a hat_as_visual_resource(ResourceNode)+has_visual_reference path is the proper home. v1.6.5 (BUGFIX-CONN): has_visual_reference is no longer offered FROM an ExtractorNode or a CombinerNode. An extractor toward a document expresses ONLY extracted_from (its relation to the source is the extraction, not an illustration); a combiner aggregates extractors and illustrates nothing. Because ExtractorNode, CombinerNode and PropertyNode are all subclasses of ParadataNode, and has_visual_reference.source lists ParadataNode, simply dropping the two subtypes from the source list would not exclude them (they still match via the parent class). So this is expressed with node_type_restrictions (keyed by RUNTIME node_type, like USNt) using a new denied_edges blacklist (the mirror of allowed_edges): extractor/combiner deny has_visual_reference. PropertyNode and any other legitimate ParadataNode source keep it unchanged. OPEN domain question for E.D.: which paradata node-types may legitimately have a visual reference (today source = PropertyNode/ExtractorNode/CombinerNode/ParadataNode) — extractor/combiner removed; the rest left as-is, not invented. v1.6.1: has_paradata_nodegroup source extended to include EpochNode — an epoch can now own a ParadataNodeGroup holding its temporal-definition properties (e.g. absolute_time_start/end as PropertyNodes with paradata provenance), mirroring how a StratigraphicNode carries its paradata group. v1.6.0 (paired with node datamodel v1.6.0) introduces: bug fix on is_in_paradata_nodegroup (typo 'ProperrtyNOde' → 'PropertyNode'); semantic fix on has_documentation (P104_is_subject_to → P70i_is_documented_in — P104 means 'subject to a legal right', not 'has documentation'); deprecation of has_timebranch as duplicate of is_in_timebranch (the latter is the canonical one — used by import_graphml.py and graphml_patcher.py; the former exists only in config JSON); component list aligned with node datamodel (HDT-O, PROV-O added). HDT-O containment properties (hdto:contains_HDT, hdto:contains_SU, hdto:isPrimary) and physical-relation discriminator subproperties (em:abuts, em:cuts, em:fills, em:overlies, em:bonded_to, em:equals as rdfs:subPropertyOf crmarchaeo:AP11_has_physical_relation) to be added in v1.6.1. v1.5.3 introduced canonical/reverse directionality with verb-based labels for clear socket identification in node editors. v1.5.4 added 'has_visual_reference' edge type. v1.5.5 added 'is_in_location' edge type with context-sensitive CIDOC mapping (P53 for node→location, P89 for the recursive location→location hierarchy) and an optional 'is_primary' boolean attribute (s3d:isPrimary, proposed). v1.6.3: added node_type_restrictions — a per-node-type narrowing of the class-level edge rules (POL5): USN (the NEUTRAL stratigraphic unit, a risparmio) takes is_after/is_before and nothing else, because a void cannot cut, fill, abut or bond. v1.6.4 (POL6): the same restriction, moved to USNt — the tokens went back to their conventional meanings, USN = US negativa (all relations, it is a unit of the sequence) and USNt = US neutra (sequence only).",
|
|
4
4
|
"components": [
|
|
5
5
|
"CIDOC-CRM",
|
|
6
6
|
"CRMarchaeo",
|
|
@@ -150,7 +150,8 @@
|
|
|
150
150
|
"cidoc_extension": "CRMarchaeo",
|
|
151
151
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
152
152
|
"extension_name": "CRMarchaeo",
|
|
153
|
-
"type_tag": "abuts"
|
|
153
|
+
"type_tag": "abuts",
|
|
154
|
+
"subproperty": "em:abuts"
|
|
154
155
|
},
|
|
155
156
|
"allowed_connections": {
|
|
156
157
|
"source": [
|
|
@@ -178,7 +179,8 @@
|
|
|
178
179
|
"cidoc_extension": "CRMarchaeo",
|
|
179
180
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
180
181
|
"extension_name": "CRMarchaeo",
|
|
181
|
-
"type_tag": "cuts"
|
|
182
|
+
"type_tag": "cuts",
|
|
183
|
+
"subproperty": "em:cuts"
|
|
182
184
|
},
|
|
183
185
|
"allowed_connections": {
|
|
184
186
|
"source": [
|
|
@@ -206,7 +208,8 @@
|
|
|
206
208
|
"cidoc_extension": "CRMarchaeo",
|
|
207
209
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
208
210
|
"extension_name": "CRMarchaeo",
|
|
209
|
-
"type_tag": "fills"
|
|
211
|
+
"type_tag": "fills",
|
|
212
|
+
"subproperty": "em:fills"
|
|
210
213
|
},
|
|
211
214
|
"allowed_connections": {
|
|
212
215
|
"source": [
|
|
@@ -234,7 +237,8 @@
|
|
|
234
237
|
"cidoc_extension": "CRMarchaeo",
|
|
235
238
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
236
239
|
"extension_name": "CRMarchaeo",
|
|
237
|
-
"type_tag": "overlies"
|
|
240
|
+
"type_tag": "overlies",
|
|
241
|
+
"subproperty": "em:overlies"
|
|
238
242
|
},
|
|
239
243
|
"allowed_connections": {
|
|
240
244
|
"source": [
|
|
@@ -256,7 +260,8 @@
|
|
|
256
260
|
"cidoc_extension": "CRMarchaeo",
|
|
257
261
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
258
262
|
"extension_name": "CRMarchaeo",
|
|
259
|
-
"type_tag": "is bonded to"
|
|
263
|
+
"type_tag": "is bonded to",
|
|
264
|
+
"subproperty": "em:bondedTo"
|
|
260
265
|
},
|
|
261
266
|
"allowed_connections": {
|
|
262
267
|
"source": [
|
|
@@ -281,7 +286,8 @@
|
|
|
281
286
|
"cidoc_extension": "CRMarchaeo",
|
|
282
287
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
283
288
|
"extension_name": "CRMarchaeo",
|
|
284
|
-
"type_tag": "bonded to"
|
|
289
|
+
"type_tag": "bonded to",
|
|
290
|
+
"subproperty": "em:bondedTo"
|
|
285
291
|
},
|
|
286
292
|
"allowed_connections": {
|
|
287
293
|
"source": [
|
|
@@ -303,7 +309,8 @@
|
|
|
303
309
|
"cidoc_extension": "CRMarchaeo",
|
|
304
310
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
305
311
|
"extension_name": "CRMarchaeo",
|
|
306
|
-
"type_tag": "equals"
|
|
312
|
+
"type_tag": "equals",
|
|
313
|
+
"subproperty": "em:physicallyEquals"
|
|
307
314
|
},
|
|
308
315
|
"allowed_connections": {
|
|
309
316
|
"source": [
|
|
@@ -328,7 +335,8 @@
|
|
|
328
335
|
"cidoc_extension": "CRMarchaeo",
|
|
329
336
|
"extension_mapping": "AP11_has_physical_relation_to",
|
|
330
337
|
"extension_name": "CRMarchaeo",
|
|
331
|
-
"type_tag": "equals"
|
|
338
|
+
"type_tag": "equals",
|
|
339
|
+
"subproperty": "em:physicallyEquals"
|
|
332
340
|
},
|
|
333
341
|
"allowed_connections": {
|
|
334
342
|
"source": [
|
|
@@ -613,6 +621,8 @@
|
|
|
613
621
|
"cidoc_extension": "CIDOC-CRM",
|
|
614
622
|
"extension_mapping": "em:hasQualia",
|
|
615
623
|
"extension_name": "EM",
|
|
624
|
+
"when_inherited": "em:inheritsQualia",
|
|
625
|
+
"when_inherited_note": "1.6.32: a has_property whose edge carries attributes.inherited (ownership.py, a property with several owners) is ALSO written as em:inheritsQualia, a subproperty of em:hasQualia, from the inheriting owner to the property (rdf_exporter, post-pass after the edges); the RDF importer reads it back to put the declaration on the edge. The original owner's edge carries no flag and leaves as em:hasQualia only.",
|
|
616
626
|
"_comment": "Changed 2026-07-10: AP9_took_matter_from removed (invalid: A4 Stratigraphic Genesis -> S10 Material Substantial, unrelated to property attribution). em:hasQualia is the EM-native predicate declared in em.ttl. See WP3 coverage analysis section 10. SOURCE WIDENED 2026-08-11 (v1.6.10) to RepresentationModelDocNode: an RMDoc is the SPATIALISATION of a document (the historical photograph put back where it was taken from, with its camera), and a spatialisation is a reconstruction — therefore a claim, and a claim must be able to say how it is known. Giving the RMDoc its own properties is what lets it declare the pose and, through the ordinary paradata chain, where the pose came from (a measurement, a feature matching, a known point). Only the STRUCTURAL permission is granted here: the mathematics of camera and pose belongs to the tool that computes it, not to the datamodel."
|
|
617
627
|
},
|
|
618
628
|
"allowed_connections": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.17 (MICRO la risorsa e i suoi file, 2026-10-18, decided by E.D. 2026-09-30): NEW ResourceFileNode (FILE, crmdig:D1_Digital_Object) — the ResourceNode is the set, the ResourceFileNode is each file, reached by has_file (connections 1.6.30) with role and relative path on the edge. With one file the node is implicit (url and checksum stay on the ResourceNode, as today). ResourceNode.PACKAGINGS += file_set (a few files that call each other: obj → mtl → textures, gltf → bin, shp and companions) and datablock (one object inside a file, a blend:// locator). Representations of the same thing are sibling ResourceNodes tied by dtc_derived_from and chosen by tier and packaging. ADDITIVE: nothing narrowed, no graph changes. v1.6.16 (MICRO le annotazioni ATON sull'asset, 2026-10-15, decided by E.D.): AnnotationRegionNode gains geometry_kind 'volume' — an annotation that encloses a part of a 3D model (ATON / Hathor convex hulls and spheres) and is the proxy of no unit. The region carries no vertices: it reaches a SemanticShapeNode (convexshapes, spheres) with has_semantic_shape and the model with is_on_resource. geometry.aton.import_aton_scene makes one for every semantic id no EM node is named after (a stratigraphic unit only with an explicit create_type); api.promote_region_to_proxy turns it into the proxy of a unit later. RDF: P2_has_type 'volume', no selector, no WKT; the shape travels as itself. Additive. v1.6.15 (MICRO la geometria per origine, 2026-10-11, decided by E.D. 2026-09-30): AnnotationRegionNode's point / line / polyline keep their vertices IN THE NODE, data.coords [[x, y, z], ...] (scene-local, glTF Y-up, metres) with crs and, for a line or a polyline, length and unit — no .glb and no SemanticShape for a reading. New block coords (inline_max_vertices 500: above it the vertices go to a .glb resource via has_linked_resource, with a warning). RDF: geo:hasGeometry -> <region>/geometry geo:asWKT (POINT Z / LINESTRING Z, GeoSPARQL). The readings/<id>.glb of 2026-10-06 are migrated on opening. v1.6.14 (MICRO la cattura in RDF, 2026-09-30): DTCAcquisitionNode.mapping.by_kind — its D12 is the class of a retrieval; a capture takes the class its kind declares in em_visual_rules 1.6.24 (D2 / D11 / E65). Mapping text only, no field changed. v1.6.13 (MICRO i generi delle US, 2026-09-30, decided by E.D. the same day): stratigraphic_kind gains 'coating' — the USR (rivestimento) and its English translation USS (surface): plaster, floors, revetments — with `labels`, `codes` and `default_code` per kind; new node element `source_code` (data.source_code) keeps the code a unit came in with when it is not its kind's default, so the way back to pyArchInit gives the same code. A legacy node_type 'USR' / 'USS' opens as US + coating. v1.6.12 (MICRO la cattura nel DTC e le murature, 2026-09-30): StratigraphicUnit (US) gains the node element `stratigraphic_kind` (em.json data.stratigraphic_kind; today one value, 'masonry'): a USM is a US + masonry, and the legacy node_type 'USM' — never a type of this datamodel — opens as that. DTCAcquisitionNode's description names the two families of the acquisition axis (em_visual_rules 1.6.22: capture / retrieval). v1.6.11 (MICRO la misura in RDF, 2026-10-07): AnnotationRegionNode.properties says how the fields left unprojected by 1.6.10 now travel — the quote of a passage as oa:TextQuoteSelector, the length of a line/polyline as crm:E54_Dimension (P90 value, P91 QUDT unit, em:crs), vertex_count as em:vertexCount. CRMem (em.ttl) 1.6.5 -> 1.6.6. Mapping text only, no field changed. v1.6.10 (MICRO la geometria della lettura, 2026-10-06, decided by E.D. on 2026-09-29): AnnotationRegionNode becomes the node of THE PLACE A READING LOOKED AT, with a new field geometry_kind: region2d (default, every older region), passage (start, end, text), point, line, polyline. The three 3D kinds keep their coordinates in a .glb (glTF POINTS / LINES / LINE_STRIP) linked with has_semantic_shape exactly like a proxy's payload, never in the em.json; the node keeps vertex_count and, for line/polyline, length + unit + crs (api.measure). See the entry's geometry_kinds and glb_payload. Paired with connections 1.6.27 (is_on_resource.target += the representation models). Additive: a region without geometry_kind reads as region2d. v1.6.9 (MICRO la definizione dell'unita', 2026-10-20, decided by E.D. on 2026-09-27): StratigraphicNode.properties gains `definition`, the DEFINIZIONE of the US sheet, as an element of the node like name and description and NOT a qualia. Value = a controlled-vocabulary concept {concept, label}; em.json carries it as data.definition (CRDT field 'data.definition', no change to the frozen em.json v1 node shape); inherited by every stratigraphic subtype. The RDF projection is declared in the entry itself (`rdf`): crm:P2_has_type -> crm:E55_Type when a concept URI is present, nothing when only a label is (`label_only: null`). CRMem 1.6.4 -> 1.6.5 for the companion em:hasDefinition (subproperty of crm:P2_has_type, declared, not emitted by default). Additive only. v1.6.7 (CRMem WIRING, 2026-09-24): rimosso il campo legacy `cidoc_s3d` da tutte le mapping. Non era letto da nessuna parte del codice e portava quattro nomi di classe senza namespace, mai dichiarati e mai emessi: EpochNode = StratigraphicTimeframe; ActivityNodeGroup = StratigraphicActivity; ParadataNodeGroup = ParadataCollection; ResourceNode = ExternalResourceReference. Il prefisso CIDOC-S3D non esiste piu' in nessuno dei due datamodel. v1.6.6 (CIDOC REPAIR, 2026-09-21): classes that pointed at IRIs nobody declares. Checked by parsing the official releases, not from memory. crm:E78_Collection is gone from CIDOC CRM 7.1.3 — renamed E78_Curated_Holding — and E.D. decided NOT to follow the rename, because E78_Curated_Holding is a subclass of E24 Physical Human-Made Thing and a group of nodes is not a physical thing. The three classes that carried it therefore split, each to the class it actually is: GroupNode and RepresentationModelNodeGroup to crm:E73_Information_Object (a conceptual set, and an E90 Symbolic Object, which is what the P106i membership edge needs at both ends), ParadataNodeGroup to crm:E89_Propositional_Object — which is what a gathered body of reasoning IS and what the range of crm:P129i_is_subject_of demands, that being the predicate has_paradata_nodegroup takes in connections 1.6.17 the same day; it stays an E90 through em:NodeGroup, so the membership edge does not break. SemanticShapeNode leaves crmgeo:SP5_Geometric_Place_Expression for crm:E73_Information_Object, PROVVISORIAMENTE: SP5 is not declared at the crmgeo namespace this datamodel emits, crmgeo:SP6_Declarative_Place is the better candidate, and the decision is rinviata da E.D. — E73 commits to nothing meanwhile. crm:P131_is_identified_by, deprecated in CRM 7.x together with E82 Actor Appellation, becomes crm:P1_is_identified_by on AuthorNode (name, surname) and AuthorAINode (name). «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). The eight em: terms this file and the connections datamodel cite but em.ttl never defined are now declared there (em:FunctionalUnit, em:GCPSet, em:Narrative, em:NeutralSU, em:RegistrationTransform, em:RepresentationModelNodeGroup, em:hasSubEpoch, em:validatedBy), with domain, range and superclass read off these datamodels and nothing invented. NOT TOUCHED: the `alternative` and legacy `cidoc_s3d` prose fields, which still discuss E78 as an option — prose, not a projection, and rewording them is modelling rather than repair. v1.6.5 (EM16-RMNG, 2026-09-10): adds RepresentationModelNodeGroup, the RM container as a first-class group of the graph — sixth subtype of GroupNode, keeping the parent's E78 Collection because a container IS a curatorial set. Paired with connections datamodel 1.6.14, which adds the is_in_representation_model_group membership edge and widens has_representation_model.target to accept the group. Additive only: no existing entry changed. s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.4 adds the ADDITIVE georeferencing_nodes section (GCPSetNode = em:GCPSet, RegistrationTransformNode = em:RegistrationTransform, both subclasses of crm:E73_Information_Object with their own extension URIs so the RDF projection stays bijective): the CONTROL and the SOLUTION that place a produced model in the world, introduced with the photogrammetry processing connector. The two modes of that connector are the SHAPE of the graph (a transform with a CRS that has_gcp_set points at = absolute; a transform with crs=null and no control set = a site-local frame; no transform at all = nobody placed it), never a flag. No existing family changed. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
|
|
2
|
+
"s3Dgraphy_data_model_version": "1.6.18",
|
|
3
|
+
"description": "v1.6.18 (MICRO i termini di em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — the datamodel JSON is the truth, so every em: term of em.ttl is cited by a datamodel or is a written exception): the em: predicates the RDF exporter already writes are now NAMED in properties, as plain-string mapping notes (no field added, no node element, no graph change). Node (inherited by every class): the last-hand stamps created_by em:createdBy / modified_by em:lastEditedBy / modified_at em:modifiedAt (created_at prov:generatedAtTime), the tombstone removed.ts em:removedAt / removed.by em:removedBy, the AI marker ai_assisted.by em:aiAssistedBy / .model em:aiModel / .prompt_ref em:aiPromptRef / .fields em:aiAssistedField and the verification validated_by em:validatedBy / validated_at em:validatedAt (properties_note). ResourceNode: checksum em:checksum, scope em:resourceScope, residency em:residency. SemanticShapeNode: convexshapes em:convexShape, spheres em:sphere. AnnotationRegionNode: crs em:crs, coords.frame_iri em:LocalSceneFrame. AuthorNode and AuthorAINode: verified em:orcidVerified (AuthorAINode also names orcid P48, which the exporter writes for both). LocationNodeGroup.propagation.mapping: uri em:propagation. THREE ENTRIES CORRECTED TO WHAT THE CODE WRITES (measured in rdf_exporter.py): PropertyNode.property_type was P2_has_type, is em:hasQualiaType; AuthorAINode model / prompt_reference were P3_has_note, are em:modelIdentifier / em:promptReference; ResourceFileNode.checksum was P1_is_identified_by, is em:checksum; and LocationNodeGroup.propagation said 'not serialized to triplestore' while the exporter has written the non-default value as em:propagation since c1a702c (2026-08-12). v1.6.17 (MICRO la risorsa e i suoi file, 2026-10-18, decided by E.D. 2026-09-30): NEW ResourceFileNode (FILE, crmdig:D1_Digital_Object) — the ResourceNode is the set, the ResourceFileNode is each file, reached by has_file (connections 1.6.30) with role and relative path on the edge. With one file the node is implicit (url and checksum stay on the ResourceNode, as today). ResourceNode.PACKAGINGS += file_set (a few files that call each other: obj → mtl → textures, gltf → bin, shp and companions) and datablock (one object inside a file, a blend:// locator). Representations of the same thing are sibling ResourceNodes tied by dtc_derived_from and chosen by tier and packaging. ADDITIVE: nothing narrowed, no graph changes. v1.6.16 (MICRO le annotazioni ATON sull'asset, 2026-10-15, decided by E.D.): AnnotationRegionNode gains geometry_kind 'volume' — an annotation that encloses a part of a 3D model (ATON / Hathor convex hulls and spheres) and is the proxy of no unit. The region carries no vertices: it reaches a SemanticShapeNode (convexshapes, spheres) with has_semantic_shape and the model with is_on_resource. geometry.aton.import_aton_scene makes one for every semantic id no EM node is named after (a stratigraphic unit only with an explicit create_type); api.promote_region_to_proxy turns it into the proxy of a unit later. RDF: P2_has_type 'volume', no selector, no WKT; the shape travels as itself. Additive. v1.6.15 (MICRO la geometria per origine, 2026-10-11, decided by E.D. 2026-09-30): AnnotationRegionNode's point / line / polyline keep their vertices IN THE NODE, data.coords [[x, y, z], ...] (scene-local, glTF Y-up, metres) with crs and, for a line or a polyline, length and unit — no .glb and no SemanticShape for a reading. New block coords (inline_max_vertices 500: above it the vertices go to a .glb resource via has_linked_resource, with a warning). RDF: geo:hasGeometry -> <region>/geometry geo:asWKT (POINT Z / LINESTRING Z, GeoSPARQL). The readings/<id>.glb of 2026-10-06 are migrated on opening. v1.6.14 (MICRO la cattura in RDF, 2026-09-30): DTCAcquisitionNode.mapping.by_kind — its D12 is the class of a retrieval; a capture takes the class its kind declares in em_visual_rules 1.6.24 (D2 / D11 / E65). Mapping text only, no field changed. v1.6.13 (MICRO i generi delle US, 2026-09-30, decided by E.D. the same day): stratigraphic_kind gains 'coating' — the USR (rivestimento) and its English translation USS (surface): plaster, floors, revetments — with `labels`, `codes` and `default_code` per kind; new node element `source_code` (data.source_code) keeps the code a unit came in with when it is not its kind's default, so the way back to pyArchInit gives the same code. A legacy node_type 'USR' / 'USS' opens as US + coating. v1.6.12 (MICRO la cattura nel DTC e le murature, 2026-09-30): StratigraphicUnit (US) gains the node element `stratigraphic_kind` (em.json data.stratigraphic_kind; today one value, 'masonry'): a USM is a US + masonry, and the legacy node_type 'USM' — never a type of this datamodel — opens as that. DTCAcquisitionNode's description names the two families of the acquisition axis (em_visual_rules 1.6.22: capture / retrieval). v1.6.11 (MICRO la misura in RDF, 2026-10-07): AnnotationRegionNode.properties says how the fields left unprojected by 1.6.10 now travel — the quote of a passage as oa:TextQuoteSelector, the length of a line/polyline as crm:E54_Dimension (P90 value, P91 QUDT unit, em:crs), vertex_count as em:vertexCount. CRMem (em.ttl) 1.6.5 -> 1.6.6. Mapping text only, no field changed. v1.6.10 (MICRO la geometria della lettura, 2026-10-06, decided by E.D. on 2026-09-29): AnnotationRegionNode becomes the node of THE PLACE A READING LOOKED AT, with a new field geometry_kind: region2d (default, every older region), passage (start, end, text), point, line, polyline. The three 3D kinds keep their coordinates in a .glb (glTF POINTS / LINES / LINE_STRIP) linked with has_semantic_shape exactly like a proxy's payload, never in the em.json; the node keeps vertex_count and, for line/polyline, length + unit + crs (api.measure). See the entry's geometry_kinds and glb_payload. Paired with connections 1.6.27 (is_on_resource.target += the representation models). Additive: a region without geometry_kind reads as region2d. v1.6.9 (MICRO la definizione dell'unita', 2026-10-20, decided by E.D. on 2026-09-27): StratigraphicNode.properties gains `definition`, the DEFINIZIONE of the US sheet, as an element of the node like name and description and NOT a qualia. Value = a controlled-vocabulary concept {concept, label}; em.json carries it as data.definition (CRDT field 'data.definition', no change to the frozen em.json v1 node shape); inherited by every stratigraphic subtype. The RDF projection is declared in the entry itself (`rdf`): crm:P2_has_type -> crm:E55_Type when a concept URI is present, nothing when only a label is (`label_only: null`). CRMem 1.6.4 -> 1.6.5 for the companion em:hasDefinition (subproperty of crm:P2_has_type, declared, not emitted by default). Additive only. v1.6.7 (CRMem WIRING, 2026-09-24): rimosso il campo legacy `cidoc_s3d` da tutte le mapping. Non era letto da nessuna parte del codice e portava quattro nomi di classe senza namespace, mai dichiarati e mai emessi: EpochNode = StratigraphicTimeframe; ActivityNodeGroup = StratigraphicActivity; ParadataNodeGroup = ParadataCollection; ResourceNode = ExternalResourceReference. Il prefisso CIDOC-S3D non esiste piu' in nessuno dei due datamodel. v1.6.6 (CIDOC REPAIR, 2026-09-21): classes that pointed at IRIs nobody declares. Checked by parsing the official releases, not from memory. crm:E78_Collection is gone from CIDOC CRM 7.1.3 — renamed E78_Curated_Holding — and E.D. decided NOT to follow the rename, because E78_Curated_Holding is a subclass of E24 Physical Human-Made Thing and a group of nodes is not a physical thing. The three classes that carried it therefore split, each to the class it actually is: GroupNode and RepresentationModelNodeGroup to crm:E73_Information_Object (a conceptual set, and an E90 Symbolic Object, which is what the P106i membership edge needs at both ends), ParadataNodeGroup to crm:E89_Propositional_Object — which is what a gathered body of reasoning IS and what the range of crm:P129i_is_subject_of demands, that being the predicate has_paradata_nodegroup takes in connections 1.6.17 the same day; it stays an E90 through em:NodeGroup, so the membership edge does not break. SemanticShapeNode leaves crmgeo:SP5_Geometric_Place_Expression for crm:E73_Information_Object, PROVVISORIAMENTE: SP5 is not declared at the crmgeo namespace this datamodel emits, crmgeo:SP6_Declarative_Place is the better candidate, and the decision is rinviata da E.D. — E73 commits to nothing meanwhile. crm:P131_is_identified_by, deprecated in CRM 7.x together with E82 Actor Appellation, becomes crm:P1_is_identified_by on AuthorNode (name, surname) and AuthorAINode (name). «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). The eight em: terms this file and the connections datamodel cite but em.ttl never defined are now declared there (em:FunctionalUnit, em:GCPSet, em:Narrative, em:NeutralSU, em:RegistrationTransform, em:RepresentationModelNodeGroup, em:hasSubEpoch, em:validatedBy), with domain, range and superclass read off these datamodels and nothing invented. NOT TOUCHED: the `alternative` and legacy `cidoc_s3d` prose fields, which still discuss E78 as an option — prose, not a projection, and rewording them is modelling rather than repair. v1.6.5 (EM16-RMNG, 2026-09-10): adds RepresentationModelNodeGroup, the RM container as a first-class group of the graph — sixth subtype of GroupNode, keeping the parent's E78 Collection because a container IS a curatorial set. Paired with connections datamodel 1.6.14, which adds the is_in_representation_model_group membership edge and widens has_representation_model.target to accept the group. Additive only: no existing entry changed. s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.4 adds the ADDITIVE georeferencing_nodes section (GCPSetNode = em:GCPSet, RegistrationTransformNode = em:RegistrationTransform, both subclasses of crm:E73_Information_Object with their own extension URIs so the RDF projection stays bijective): the CONTROL and the SOLUTION that place a produced model in the world, introduced with the photogrammetry processing connector. The two modes of that connector are the SHAPE of the graph (a transform with a CRS that has_gcp_set points at = absolute; a transform with crs=null and no control set = a site-local frame; no transform at all = nobody placed it), never a flag. No existing family changed. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
|
|
4
4
|
"components": [
|
|
5
5
|
"CIDOC-CRM",
|
|
6
6
|
"CRMarchaeo",
|
|
@@ -71,8 +71,21 @@
|
|
|
71
71
|
},
|
|
72
72
|
"properties": {
|
|
73
73
|
"name": "P1_is_identified_by",
|
|
74
|
-
"description": "P3_has_note"
|
|
75
|
-
|
|
74
|
+
"description": "P3_has_note",
|
|
75
|
+
"created_by": "em:createdBy",
|
|
76
|
+
"created_at": "prov:generatedAtTime",
|
|
77
|
+
"modified_by": "em:lastEditedBy",
|
|
78
|
+
"modified_at": "em:modifiedAt",
|
|
79
|
+
"removed.ts": "em:removedAt",
|
|
80
|
+
"removed.by": "em:removedBy",
|
|
81
|
+
"ai_assisted.by": "em:aiAssistedBy",
|
|
82
|
+
"ai_assisted.model": "em:aiModel",
|
|
83
|
+
"ai_assisted.prompt_ref": "em:aiPromptRef",
|
|
84
|
+
"ai_assisted.fields": "em:aiAssistedField",
|
|
85
|
+
"validated_by": "em:validatedBy",
|
|
86
|
+
"validated_at": "em:validatedAt"
|
|
87
|
+
},
|
|
88
|
+
"properties_note": "1.6.18: the fields every node may carry in data, beside name and description, and the em: predicate each one leaves with (rdf_exporter: _serialize_editorial, _serialize_ai — called for every node, so declared here on the base class and inherited). created_by / created_at / modified_by / modified_at are the last-hand stamps (editorial.py; an ORCID iD becomes an https://orcid.org/ IRI, anything else a literal); em:createdBy is also written as prov:wasAttributedTo and em:modifiedAt as dcterms:modified. removed.ts / removed.by are the TOMBSTONE (crdt.py, data.removed = {ts, by}). ai_assisted.* is the AI marker (ai_validation.py, data.ai_assisted = {by, model, prompt_ref, fields}): by and prompt_ref are node ids and leave as IRIs, one em:aiAssistedField per touched field, '*' when the marker names none; validated_by / validated_at are the person's verification (em:validatedBy is also prov:wasInfluencedBy). Every one is emitted ONLY when the node carries it. The dotted keys name a member of an object in data (removed.ts is data.removed.ts). Plain strings, so mapping notes and not node elements: no reader turns them into fields to edit.",
|
|
76
89
|
"node_type": "Node"
|
|
77
90
|
}
|
|
78
91
|
},
|
|
@@ -807,9 +820,10 @@
|
|
|
807
820
|
"description": "Declarative rule for how location membership propagates to descendants. Location is additive (memberships compose; none overrides), distinct from EpochNode which is substitutive (finest-grained wins).",
|
|
808
821
|
"mapping": {
|
|
809
822
|
"cidoc": null,
|
|
810
|
-
"
|
|
811
|
-
"
|
|
812
|
-
"
|
|
823
|
+
"uri": "em:propagation",
|
|
824
|
+
"level": "schema-level default, instance-level exception",
|
|
825
|
+
"serialization": "em:propagation literal on the node, ONLY when it is not the default 'additive' (rdf_exporter, LocationNodeGroup branch, since c1a702c 2026-08-12); read back by the RDF importer. No triple means additive.",
|
|
826
|
+
"rationale": "Propagation is a rule for how a graph traversal composes memberships, and the default is declared here, at the schema level, so a node saying 'the usual' writes nothing. A node that departs from it (substitutive) changes what its membership MEANS, and that is a fact about the node which must survive the RDF round-trip: hence the literal for the exception. 1.6.18: this entry said 'not serialized to triplestore', written before the exporter began to emit the exception (c1a702c); the code is what happens, so the entry now says it."
|
|
813
827
|
}
|
|
814
828
|
}
|
|
815
829
|
}
|
|
@@ -928,7 +942,7 @@
|
|
|
928
942
|
"description": "P3_has_note",
|
|
929
943
|
"url": "P1_is_identified_by",
|
|
930
944
|
"value": "P90_has_value",
|
|
931
|
-
"property_type": "
|
|
945
|
+
"property_type": "em:hasQualiaType"
|
|
932
946
|
}
|
|
933
947
|
},
|
|
934
948
|
"DocumentNode": {
|
|
@@ -1048,7 +1062,10 @@
|
|
|
1048
1062
|
"name": "P1_is_identified_by",
|
|
1049
1063
|
"description": "P3_has_note",
|
|
1050
1064
|
"url": "P1_is_identified_by",
|
|
1051
|
-
"url_type": "P2_has_type"
|
|
1065
|
+
"url_type": "P2_has_type",
|
|
1066
|
+
"checksum": "em:checksum",
|
|
1067
|
+
"scope": "em:resourceScope",
|
|
1068
|
+
"residency": "em:residency"
|
|
1052
1069
|
},
|
|
1053
1070
|
"resource_types": {
|
|
1054
1071
|
"3d_model": [
|
|
@@ -1119,7 +1136,7 @@
|
|
|
1119
1136
|
"name": "P1_is_identified_by",
|
|
1120
1137
|
"description": "P3_has_note",
|
|
1121
1138
|
"url": "P1_is_identified_by",
|
|
1122
|
-
"checksum": "
|
|
1139
|
+
"checksum": "em:checksum",
|
|
1123
1140
|
"media_type": "P2_has_type"
|
|
1124
1141
|
}
|
|
1125
1142
|
}
|
|
@@ -1278,7 +1295,9 @@
|
|
|
1278
1295
|
"name": "P1_is_identified_by",
|
|
1279
1296
|
"description": "P3_has_note",
|
|
1280
1297
|
"url": "P1_is_identified_by",
|
|
1281
|
-
"type": "P2_has_type"
|
|
1298
|
+
"type": "P2_has_type",
|
|
1299
|
+
"convexshapes": "em:convexShape",
|
|
1300
|
+
"spheres": "em:sphere"
|
|
1282
1301
|
},
|
|
1283
1302
|
"scope_note": "SINCE v1.6.2 THE SEMANTIC SHAPE IS A PAYLOAD, not a standalone proxy. The proxy of a unit — its geometry-without-material — is a PropertyNode of qualia type 'geometry' (em_qualia_types.json, spatial), and the SemanticShape is what that property POINTS AT through has_semantic_shape: the numbers (convex hulls, spheres) or the .glb in its url. The reason is paradata: a lone shape hanging off a unit cannot say where it came from, so 'the proxy of US101' could not be traced to a measurement, a photograph or a reprojection; as the payload of a property it inherits the extractor/combiner chain, and ONE proxy can be synthesised from several sources. The node itself is unchanged — same fields, same CIDOC mapping, same file — what changed is who points at it. type_options: 'proxy' now names the ROLE OF THE CARRIER (this shape is the geometry of something) and no longer implies a standalone proxy node; 'generic' is any other spatial annotation. Consumers that read the proxy as a lone SemanticShape (EM-blender-tools, Heriverse) must follow the property instead — a declared breaking change with a one-shot legacy migration.",
|
|
1284
1303
|
"type_options": [
|
|
@@ -1324,7 +1343,7 @@
|
|
|
1324
1343
|
"vertex_count": "em:vertexCount",
|
|
1325
1344
|
"length": "crm:P43_has_dimension -> crm:E54_Dimension at <region>/length (P2_has_type 'length', P90_has_value xsd:double)",
|
|
1326
1345
|
"unit": "P91_has_unit on the E54 -> QUDT unit IRI (m, cm, mm, km), else s3d:unit_<u>",
|
|
1327
|
-
"crs": "em:crs
|
|
1346
|
+
"crs": "em:crs"
|
|
1328
1347
|
},
|
|
1329
1348
|
"shape_kinds": {
|
|
1330
1349
|
"rect": "[x, y, w, h] in [0,1]",
|
|
@@ -1343,6 +1362,8 @@
|
|
|
1343
1362
|
"coords": {
|
|
1344
1363
|
"field": "data.coords = [[x, y, z], ...]: the vertices of a point, line or polyline IN THE NODE (E.D. 2026-09-30: geometry is divided by ORIGIN, not by shape — the sign of whoever argues is data of the node; what was acquired or processed is a file, a resource with its DTC stamp).",
|
|
1345
1364
|
"frame": "the frame of the model the reading is on — the frame the proxies' .glb are written in: glTF, Y-up, scene-local (net of the GeoPositionNode shift), metres. crs 'local'. Written verbatim, never converted.",
|
|
1365
|
+
"frame_iri": "em:LocalSceneFrame",
|
|
1366
|
+
"frame_iri_note": "1.6.18: the IRI that opens the geo:wktLiteral of coords when crs is 'local' (geometry/wkt.py crs_iri); 'EPSG:<n>' opens with http://www.opengis.net/def/crs/EPSG/0/<n>, anything else with a minted s3d:crs_<slug>. The crs itself leaves as em:crs (properties.crs) on the E54 of the length, <region>/length, and nowhere else: a point has no length, and its frame is only in the literal.",
|
|
1346
1367
|
"inline_max_vertices": 500,
|
|
1347
1368
|
"stitch_tolerance": 1e-06,
|
|
1348
1369
|
"stitch": "1.6.16 · a polyline that comes back as glTF LINES pairs (Blender 5.x exports an edges-only mesh as mode 1, every inner vertex twice: 4 vertices -> 6) is stitched back into ONE ordered open chain by gltf_to_geometry: consecutive pairs that share a vertex within stitch_tolerance (metres, the coordinates' unit) are joined. Pairs that do not make a single open chain (two pieces, a branch, a closed loop) give a warning and the pieces, never an invented order. The kind of the reading is read from the glTF node's extras (em_reading_kind, where Blender writes an object's custom properties with export_extras) when the caller does not say it; geometry_to_gltf writes it there too, so Blender's importer makes it a custom property.",
|
|
@@ -1379,7 +1400,8 @@
|
|
|
1379
1400
|
"properties": {
|
|
1380
1401
|
"name": "P1_is_identified_by",
|
|
1381
1402
|
"orcid": "P48_has_preferred_identifier",
|
|
1382
|
-
"surname": "P1_is_identified_by"
|
|
1403
|
+
"surname": "P1_is_identified_by",
|
|
1404
|
+
"verified": "em:orcidVerified"
|
|
1383
1405
|
}
|
|
1384
1406
|
},
|
|
1385
1407
|
"AuthorAINode": {
|
|
@@ -1406,8 +1428,10 @@
|
|
|
1406
1428
|
},
|
|
1407
1429
|
"properties": {
|
|
1408
1430
|
"name": "P1_is_identified_by",
|
|
1409
|
-
"
|
|
1410
|
-
"
|
|
1431
|
+
"orcid": "P48_has_preferred_identifier",
|
|
1432
|
+
"verified": "em:orcidVerified",
|
|
1433
|
+
"model": "em:modelIdentifier",
|
|
1434
|
+
"prompt_reference": "em:promptReference"
|
|
1411
1435
|
}
|
|
1412
1436
|
},
|
|
1413
1437
|
"LicenseNode": {
|
|
@@ -493,6 +493,35 @@ def content_digest(doc: Dict[str, Any]) -> str:
|
|
|
493
493
|
return _digest(doc)
|
|
494
494
|
|
|
495
495
|
|
|
496
|
+
def datamodel_fingerprint(config_dir: Optional[str] = None) -> Dict[str, Any]:
|
|
497
|
+
"""`{digest, versions, digests, files}` of the datamodel a consumer copies.
|
|
498
|
+
|
|
499
|
+
The one question every copy of the datamodel (EMStudio's vendored assets,
|
|
500
|
+
stratigraph-templates' snapshot, a compiled sheet's header) asks of this
|
|
501
|
+
library: *am I still what s3Dgraphy declares?* The canonical form is
|
|
502
|
+
RFC 8785, so a consumer in another language computes the same digest; see
|
|
503
|
+
:mod:`s3dgraphy.datamodel`.
|
|
504
|
+
"""
|
|
505
|
+
from .datamodel import datamodel_fingerprint as _fingerprint
|
|
506
|
+
return _fingerprint(config_dir)
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
def datamodel_differences(expected: Dict[str, Any], found: Dict[str, Any],
|
|
510
|
+
names: Optional[Any] = None) -> List[str]:
|
|
511
|
+
"""Named differences between two fingerprints (`nodes 1.6.12 vs 1.6.17`).
|
|
512
|
+
|
|
513
|
+
`names` restricts them to the datamodel files a consumer reads
|
|
514
|
+
(stratigraph-templates: nodes, node_registry, connections, qualia)."""
|
|
515
|
+
from .datamodel import fingerprint_differences
|
|
516
|
+
return fingerprint_differences(expected, found, names)
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
def datamodel_fingerprint_subset(fingerprint: Dict[str, Any], names: Any) -> Dict[str, Any]:
|
|
520
|
+
"""The part of a fingerprint a consumer reading only `names` holds."""
|
|
521
|
+
from .datamodel import fingerprint_subset
|
|
522
|
+
return fingerprint_subset(fingerprint, names)
|
|
523
|
+
|
|
524
|
+
|
|
496
525
|
def crdt_stats(doc_or_section: Dict[str, Any]) -> Dict[str, int]:
|
|
497
526
|
"""How much bookkeeping a document is carrying: tombstones and field clocks.
|
|
498
527
|
|