s3dgraphy 1.6.0.dev60__tar.gz → 1.6.0.dev61__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.dev60/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev61}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/datamodel_translations.json +9 -9
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em.ttl +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +3 -3
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +3 -3
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/graph.py +18 -19
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/group_node.py +5 -4
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/alternatives.py +24 -11
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_alternatives_hat.py +27 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_file_node.py +2 -2
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_revision.py +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_rm_container_node_group.py +11 -9
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_spatiotemporal_entities.py +1 -1
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/README.md +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/api.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/transform.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/resources/versions.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/engine.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy.egg-info/SOURCES.txt +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_alternative_sets.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_hdto_glyphs.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_import_without_residues.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_part_twins.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_room_import.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_room_import_inventory.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_threed_instances.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_transform_form.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev60 → s3dgraphy-1.6.0.dev61}/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.dev61
|
|
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.dev61"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1358,7 +1358,7 @@
|
|
|
1358
1358
|
},
|
|
1359
1359
|
"RepresentationModelNodeGroup": {
|
|
1360
1360
|
"description": {
|
|
1361
|
-
"en": "Typed aggregation of the representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, meeting of 2026-09-10). Until then the RM container lived only as EM Tools' `scene.rm_containers` PropertyGroup, so the grouping that gives the set its meaning was invisible to anyone reading the graph. IT SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model — the group is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is the TAG axis 'is_in_representation_model_group', like is_in_functional_unit and is_in_location,
|
|
1361
|
+
"en": "Typed aggregation of the representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, meeting of 2026-09-10). Until then the RM container lived only as EM Tools' `scene.rm_containers` PropertyGroup, so the grouping that gives the set its meaning was invisible to anyone reading the graph. IT SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model — the group is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is the TAG axis 'is_in_representation_model_group', like is_in_functional_unit and is_in_location, and m:n like them (E.D., 23 Oct 2026): a mesh can belong to several containers — a model of «Survey 2015» can also be in «Reconstruction, 2nd c. AD». The epochs stay on each model; the default epochs a container carries in EM Tools are a convenience of the scene that writes them on its models, never a statement of the group. A group may legally be EMPTY and may legally have NO Document: both are states the RM Manager UI already shows. NOT a FunctionalUnitNodeGroup (that aggregates stratigraphic units into a building component; these members are models, not units); NOT an ActivityNodeGroup (nothing happened here and the set has no formation event of its own); NOT the Document, which stays the documentary anchor — deleting the container removes the group and not the Document.",
|
|
1362
1362
|
"validated_it": false,
|
|
1363
1363
|
"validated_el": false,
|
|
1364
1364
|
"validated_he": false,
|
|
@@ -1367,14 +1367,14 @@
|
|
|
1367
1367
|
"validated_ro": false,
|
|
1368
1368
|
"validated_fr": false,
|
|
1369
1369
|
"validated_de": false,
|
|
1370
|
-
"it": "Aggregazione tipizzata dei modelli di rappresentazione che formano UN insieme nominato pubblicato sotto un unico Documento — «Rilievo 2015» sotto D.01, «Ricostruzione» sotto D.09 (EM16-RMNG, riunione del 2026-09-10). Fino ad allora il contenitore RM esisteva solo come PropertyGroup `scene.rm_containers` di EM Tools, per cui il raggruppamento che dà significato all'insieme era invisibile a chiunque leggesse il grafo. STA ACCANTO, NON SOSTITUISCE: ogni membro conserva i propri archi di epoca (has_first_epoch / survive_in_epoch) e il Documento conserva i propri archi DIRETTI has_representation_model verso ciascun modello — il gruppo si aggiunge sopra e non viene mai interposto, così un consumatore che lo ignora legge esattamente ciò che leggeva prima. L'appartenenza è l'asse di TAG 'is_in_representation_model_group', come is_in_functional_unit e is_in_location,
|
|
1371
|
-
"el": "Τυποποιημένη συνάθροιση των μοντέλων αναπαράστασης που σχηματίζουν ΕΝΑ ονομασμένο σύνολο δημοσιευμένο υπό ένα μόνο Έγγραφο — «Survey 2015» υπό το D.01, «Reconstruction» υπό το D.09 (EM16-RMNG, συνάντηση της 2026-09-10). Μέχρι τότε ο περιέκτης RM υπήρχε μόνο ως το PropertyGroup `scene.rm_containers` των EM Tools, οπότε η ομαδοποίηση που δίνει στο σύνολο το νόημά του ήταν αόρατη σε όποιον διάβαζε τον γράφο. ΣΤΕΚΕΤΑΙ ΔΙΠΛΑ, ΔΕΝ ΑΝΤΙΚΑΘΙΣΤΑ: κάθε μέλος διατηρεί τις δικές του ακμές εποχής (has_first_epoch / survive_in_epoch) και το Έγγραφο διατηρεί τις ΑΜΕΣΕΣ ακμές του has_representation_model προς κάθε μοντέλο — η ομάδα προστίθεται από πάνω και δεν παρεμβάλλεται ποτέ, οπότε ένας καταναλωτής που την αγνοεί διαβάζει ακριβώς ό,τι διάβαζε και πριν. Η ένταξη είναι ο άξονας ΕΤΙΚΕΤΑΣ 'is_in_representation_model_group', όπως τα is_in_functional_unit και is_in_location,
|
|
1372
|
-
"he": "צבירה מוגדרת־סוג של מודלי הייצוג היוצרים מערך אחד בעל שם המתפרסם תחת מסמך (Document) יחיד — «Survey 2015» תחת D.01, «Reconstruction» תחת D.09 (EM16-RMNG, פגישת 2026-09-10). עד אז התקיים מכל ה־RM רק כ־PropertyGroup `scene.rm_containers` של EM Tools, כך שהקיבוץ המעניק למערך את משמעותו היה בלתי נראה לכל מי שקורא את הגרף. הוא יושב לצד, הוא אינו מחליף: כל חבר שומר על קשתות התקופה שלו (has_first_epoch / survive_in_epoch), והמסמך שומר על קשתות has_representation_model הישירות שלו לכל מודל — הקבוצה מתווספת מעל ולעולם אינה מוכנסת באמצע, כך שצרכן המתעלם ממנה קורא בדיוק את מה שקרא קודם. החברות היא ציר התיוג (TAG) 'is_in_representation_model_group', כמו is_in_functional_unit ו־is_in_location,
|
|
1373
|
-
"es": "Agregación tipada de los modelos de representación que forman UN conjunto con nombre publicado bajo un único Document — «Survey 2015» bajo D.01, «Reconstruction» bajo D.09 (EM16-RMNG, reunión del 2026-09-10). Hasta entonces el contenedor RM solo existía como el PropertyGroup `scene.rm_containers` de EM Tools, de modo que la agrupación que da sentido al conjunto era invisible para quien leyera el grafo. SE SITÚA AL LADO, NO SUSTITUYE: cada miembro conserva sus propias aristas de época (has_first_epoch / survive_in_epoch) y el Document conserva sus aristas has_representation_model DIRECTAS hacia cada modelo — el grupo se añade por encima y nunca se interpone, de modo que un consumidor que lo ignore lee exactamente lo mismo que leía antes. La pertenencia es el eje de ETIQUETA 'is_in_representation_model_group', como is_in_functional_unit e is_in_location,
|
|
1374
|
-
"pl": "Typowana agregacja modeli reprezentacji tworzących JEDEN nazwany zestaw opublikowany w ramach jednego dokumentu — «Survey 2015» pod D.01, «Reconstruction» pod D.09 (EM16-RMNG, spotkanie z 2026-09-10). Do tego czasu kontener RM istniał jedynie jako PropertyGroup `scene.rm_containers` w EM Tools, więc grupowanie nadające zestawowi znaczenie było niewidoczne dla każdego, kto czytał graf. STOI OBOK, NIE ZASTĘPUJE: każdy członek zachowuje własne krawędzie epok (has_first_epoch / survive_in_epoch), a dokument zachowuje BEZPOŚREDNIE krawędzie has_representation_model do każdego modelu — grupa jest dodawana na wierzchu i nigdy nie jest wstawiana pomiędzy, więc konsument, który ją ignoruje, odczytuje dokładnie to samo co wcześniej. Przynależność jest osią ZNACZNIKA 'is_in_representation_model_group', jak is_in_functional_unit i is_in_location,
|
|
1375
|
-
"ro": "Agregare tipizată a modelelor de reprezentare care formează UN set denumit, publicat sub un singur Document — «Survey 2015» sub D.01, «Reconstruction» sub D.09 (EM16-RMNG, ședința din 2026-09-10). Până atunci containerul RM exista doar ca PropertyGroup `scene.rm_containers` în EM Tools, astfel încât gruparea care dă sens setului era invizibilă pentru oricine citea graful. SE AȘAZĂ ALĂTURI, NU ÎNLOCUIEȘTE: fiecare membru își păstrează propriile muchii de epocă (has_first_epoch / survive_in_epoch), iar Documentul își păstrează muchiile DIRECTE has_representation_model către fiecare model — grupul este adăugat deasupra și niciodată interpus, astfel încât un consumator care îl ignoră citește exact ce citea înainte. Apartenența este axa de ETICHETARE 'is_in_representation_model_group', ca is_in_functional_unit și is_in_location,
|
|
1376
|
-
"fr": "Agrégation typée des modèles de représentation qui forment UN ensemble nommé publié sous un seul Document — « Survey 2015 » sous D.01, « Reconstruction » sous D.09 (EM16-RMNG, réunion du 2026-09-10). Jusque-là, le conteneur RM n'existait que comme PropertyGroup `scene.rm_containers` d'EM Tools, si bien que le regroupement qui donne son sens à l'ensemble restait invisible pour quiconque lisait le graphe. IL SE PLACE À CÔTÉ, IL NE REMPLACE PAS : chaque membre conserve ses propres arêtes d'époque (has_first_epoch / survive_in_epoch) et le Document conserve ses arêtes DIRECTES has_representation_model vers chaque modèle — le groupe s'ajoute par-dessus et ne s'intercale jamais, de sorte qu'un consommateur qui l'ignore lit exactement ce qu'il lisait auparavant. L'appartenance est l'axe d'ÉTIQUETTE 'is_in_representation_model_group', comme is_in_functional_unit et is_in_location,
|
|
1377
|
-
"de": "Typisierte Zusammenfassung der Repräsentationsmodelle, die EINE benannte Menge bilden, die unter einem einzigen Dokument veröffentlicht wird — «Survey 2015» unter D.01, «Reconstruction» unter D.09 (EM16-RMNG, Sitzung vom 2026-09-10). Bis dahin existierte der RM-Container nur als PropertyGroup `scene.rm_containers` von EM Tools, sodass die Gruppierung, die der Menge ihre Bedeutung gibt, für jeden, der den Graphen liest, unsichtbar war. SIE STEHT DANEBEN, SIE ERSETZT NICHT: Jedes Mitglied behält seine eigenen Epochenkanten (has_first_epoch / survive_in_epoch), und das Dokument behält seine DIREKTEN has_representation_model-Kanten zu jedem Modell — die Gruppe kommt obendrauf und wird nie dazwischengeschaltet, sodass ein Konsument, der sie ignoriert, genau das liest, was er vorher las. Die Mitgliedschaft ist die TAG-Achse 'is_in_representation_model_group', wie is_in_functional_unit und is_in_location,
|
|
1370
|
+
"it": "Aggregazione tipizzata dei modelli di rappresentazione che formano UN insieme nominato pubblicato sotto un unico Documento — «Rilievo 2015» sotto D.01, «Ricostruzione» sotto D.09 (EM16-RMNG, riunione del 2026-09-10). Fino ad allora il contenitore RM esisteva solo come PropertyGroup `scene.rm_containers` di EM Tools, per cui il raggruppamento che dà significato all'insieme era invisibile a chiunque leggesse il grafo. STA ACCANTO, NON SOSTITUISCE: ogni membro conserva i propri archi di epoca (has_first_epoch / survive_in_epoch) e il Documento conserva i propri archi DIRETTI has_representation_model verso ciascun modello — il gruppo si aggiunge sopra e non viene mai interposto, così un consumatore che lo ignora legge esattamente ciò che leggeva prima. L'appartenenza è l'asse di TAG 'is_in_representation_model_group', come is_in_functional_unit e is_in_location, e come loro m:n (E.D., 23 ott 2026): una mesh può appartenere a più contenitori — un modello di «Rilievo 2015» può stare anche in «Ricostruzione, II sec. d.C.». Le epoche restano su ogni modello; le epoche di default che un contenitore porta in EM Tools sono una comodità della scena che le scrive sui suoi modelli, mai un'affermazione del gruppo. Un gruppo può legittimamente essere VUOTO e può legittimamente NON avere un Documento: entrambi sono stati che l'interfaccia di RM Manager già mostra. NON è un FunctionalUnitNodeGroup (che aggrega unità stratigrafiche in un componente edilizio; questi membri sono modelli, non unità); NON è un ActivityNodeGroup (qui non è accaduto nulla e l'insieme non ha un proprio evento di formazione); NON è il Documento, che resta l'ancora documentaria — eliminare il contenitore rimuove il gruppo e non il Documento.",
|
|
1371
|
+
"el": "Τυποποιημένη συνάθροιση των μοντέλων αναπαράστασης που σχηματίζουν ΕΝΑ ονομασμένο σύνολο δημοσιευμένο υπό ένα μόνο Έγγραφο — «Survey 2015» υπό το D.01, «Reconstruction» υπό το D.09 (EM16-RMNG, συνάντηση της 2026-09-10). Μέχρι τότε ο περιέκτης RM υπήρχε μόνο ως το PropertyGroup `scene.rm_containers` των EM Tools, οπότε η ομαδοποίηση που δίνει στο σύνολο το νόημά του ήταν αόρατη σε όποιον διάβαζε τον γράφο. ΣΤΕΚΕΤΑΙ ΔΙΠΛΑ, ΔΕΝ ΑΝΤΙΚΑΘΙΣΤΑ: κάθε μέλος διατηρεί τις δικές του ακμές εποχής (has_first_epoch / survive_in_epoch) και το Έγγραφο διατηρεί τις ΑΜΕΣΕΣ ακμές του has_representation_model προς κάθε μοντέλο — η ομάδα προστίθεται από πάνω και δεν παρεμβάλλεται ποτέ, οπότε ένας καταναλωτής που την αγνοεί διαβάζει ακριβώς ό,τι διάβαζε και πριν. Η ένταξη είναι ο άξονας ΕΤΙΚΕΤΑΣ 'is_in_representation_model_group', όπως τα is_in_functional_unit και is_in_location, και όπως αυτά m:n (E.D., 23 Οκτ 2026): ένα πλέγμα (mesh) μπορεί να ανήκει σε περισσότερους περιέκτες — ένα μοντέλο του «Survey 2015» μπορεί να βρίσκεται και στο «Reconstruction, 2nd c. AD». Οι εποχές παραμένουν σε κάθε μοντέλο· οι προεπιλεγμένες εποχές ενός περιέκτη στα EM Tools είναι μια ευκολία της σκηνής που τις γράφει στα μοντέλα του, ποτέ δήλωση της ομάδας. Μια ομάδα μπορεί νόμιμα να είναι ΚΕΝΗ και μπορεί νόμιμα να ΜΗΝ έχει Έγγραφο: και οι δύο είναι καταστάσεις που ήδη εμφανίζει το UI του RM Manager. ΔΕΝ είναι FunctionalUnitNodeGroup (εκείνο συναθροίζει στρωματογραφικές μονάδες σε οικοδομικό στοιχείο· αυτά τα μέλη είναι μοντέλα, όχι μονάδες)· ΔΕΝ είναι ActivityNodeGroup (τίποτα δεν συνέβη εδώ και το σύνολο δεν έχει δικό του συμβάν σχηματισμού)· ΔΕΝ είναι το Έγγραφο, το οποίο παραμένει η τεκμηριωτική άγκυρα — η διαγραφή του περιέκτη αφαιρεί την ομάδα και όχι το Έγγραφο.",
|
|
1372
|
+
"he": "צבירה מוגדרת־סוג של מודלי הייצוג היוצרים מערך אחד בעל שם המתפרסם תחת מסמך (Document) יחיד — «Survey 2015» תחת D.01, «Reconstruction» תחת D.09 (EM16-RMNG, פגישת 2026-09-10). עד אז התקיים מכל ה־RM רק כ־PropertyGroup `scene.rm_containers` של EM Tools, כך שהקיבוץ המעניק למערך את משמעותו היה בלתי נראה לכל מי שקורא את הגרף. הוא יושב לצד, הוא אינו מחליף: כל חבר שומר על קשתות התקופה שלו (has_first_epoch / survive_in_epoch), והמסמך שומר על קשתות has_representation_model הישירות שלו לכל מודל — הקבוצה מתווספת מעל ולעולם אינה מוכנסת באמצע, כך שצרכן המתעלם ממנה קורא בדיוק את מה שקרא קודם. החברות היא ציר התיוג (TAG) 'is_in_representation_model_group', כמו is_in_functional_unit ו־is_in_location, וכמותם m:n (E.D., 23 באוקטובר 2026): רשת (mesh) יכולה להשתייך לכמה מכלים — מודל של «Survey 2015» יכול להיות גם ב־«Reconstruction, 2nd c. AD». התקופות נשארות על כל מודל; תקופות ברירת המחדל של מכל ב־EM Tools הן נוחות של הסצנה שכותבת אותן על המודלים שלו, ולעולם אינן קביעה של הקבוצה. קבוצה יכולה באופן חוקי להיות ריקה, ויכולה באופן חוקי להיות ללא מסמך: שני אלה הם מצבים שממשק ה־RM Manager כבר מציג. אינה FunctionalUnitNodeGroup (זו מאגדת יחידות סטרטיגרפיות לרכיב בנייה; החברים כאן הם מודלים, לא יחידות); אינה ActivityNodeGroup (שום דבר לא קרה כאן ולמערך אין אירוע היווצרות משלו); אינה המסמך, שנשאר העוגן התיעודי — מחיקת המכל מסירה את הקבוצה ולא את המסמך.",
|
|
1373
|
+
"es": "Agregación tipada de los modelos de representación que forman UN conjunto con nombre publicado bajo un único Document — «Survey 2015» bajo D.01, «Reconstruction» bajo D.09 (EM16-RMNG, reunión del 2026-09-10). Hasta entonces el contenedor RM solo existía como el PropertyGroup `scene.rm_containers` de EM Tools, de modo que la agrupación que da sentido al conjunto era invisible para quien leyera el grafo. SE SITÚA AL LADO, NO SUSTITUYE: cada miembro conserva sus propias aristas de época (has_first_epoch / survive_in_epoch) y el Document conserva sus aristas has_representation_model DIRECTAS hacia cada modelo — el grupo se añade por encima y nunca se interpone, de modo que un consumidor que lo ignore lee exactamente lo mismo que leía antes. La pertenencia es el eje de ETIQUETA 'is_in_representation_model_group', como is_in_functional_unit e is_in_location, y como ellos m:n (E.D., 23 oct 2026): una malla puede pertenecer a varios contenedores — un modelo de «Survey 2015» puede estar también en «Reconstruction, 2nd c. AD». Las épocas quedan en cada modelo; las épocas por defecto que un contenedor lleva en EM Tools son una comodidad de la escena que las escribe en sus modelos, nunca una afirmación del grupo. Un grupo puede legítimamente estar VACÍO y puede legítimamente NO tener Document: ambos son estados que la interfaz del RM Manager ya muestra. NO es un FunctionalUnitNodeGroup (que agrega unidades estratigráficas en un elemento constructivo; estos miembros son modelos, no unidades); NO es un ActivityNodeGroup (aquí no ocurrió nada y el conjunto no tiene evento de formación propio); NO es el Document, que sigue siendo el ancla documental — eliminar el contenedor elimina el grupo y no el Document.",
|
|
1374
|
+
"pl": "Typowana agregacja modeli reprezentacji tworzących JEDEN nazwany zestaw opublikowany w ramach jednego dokumentu — «Survey 2015» pod D.01, «Reconstruction» pod D.09 (EM16-RMNG, spotkanie z 2026-09-10). Do tego czasu kontener RM istniał jedynie jako PropertyGroup `scene.rm_containers` w EM Tools, więc grupowanie nadające zestawowi znaczenie było niewidoczne dla każdego, kto czytał graf. STOI OBOK, NIE ZASTĘPUJE: każdy członek zachowuje własne krawędzie epok (has_first_epoch / survive_in_epoch), a dokument zachowuje BEZPOŚREDNIE krawędzie has_representation_model do każdego modelu — grupa jest dodawana na wierzchu i nigdy nie jest wstawiana pomiędzy, więc konsument, który ją ignoruje, odczytuje dokładnie to samo co wcześniej. Przynależność jest osią ZNACZNIKA 'is_in_representation_model_group', jak is_in_functional_unit i is_in_location, i tak jak one m:n (E.D., 23 paź 2026): siatka (mesh) może należeć do kilku kontenerów — model z «Survey 2015» może być też w «Reconstruction, 2nd c. AD». Epoki pozostają na każdym modelu; domyślne epoki kontenera w EM Tools są udogodnieniem sceny, która zapisuje je na jego modelach, nigdy stwierdzeniem grupy. Grupa może być zasadnie PUSTA i może zasadnie NIE MIEĆ dokumentu: oba stany interfejs RM Manager już pokazuje. NIE jest FunctionalUnitNodeGroup (ta agreguje jednostki stratygraficzne w komponent budowli; tutaj członkami są modele, a nie jednostki); NIE jest ActivityNodeGroup (nic się tu nie wydarzyło, a zestaw nie ma własnego zdarzenia formacyjnego); NIE jest dokumentem, który pozostaje kotwicą dokumentacyjną — usunięcie kontenera usuwa grupę, a nie dokument.",
|
|
1375
|
+
"ro": "Agregare tipizată a modelelor de reprezentare care formează UN set denumit, publicat sub un singur Document — «Survey 2015» sub D.01, «Reconstruction» sub D.09 (EM16-RMNG, ședința din 2026-09-10). Până atunci containerul RM exista doar ca PropertyGroup `scene.rm_containers` în EM Tools, astfel încât gruparea care dă sens setului era invizibilă pentru oricine citea graful. SE AȘAZĂ ALĂTURI, NU ÎNLOCUIEȘTE: fiecare membru își păstrează propriile muchii de epocă (has_first_epoch / survive_in_epoch), iar Documentul își păstrează muchiile DIRECTE has_representation_model către fiecare model — grupul este adăugat deasupra și niciodată interpus, astfel încât un consumator care îl ignoră citește exact ce citea înainte. Apartenența este axa de ETICHETARE 'is_in_representation_model_group', ca is_in_functional_unit și is_in_location, și ca ele m:n (E.D., 23 oct 2026): un mesh poate aparține mai multor containere — un model din «Survey 2015» poate fi și în «Reconstruction, 2nd c. AD». Epocile rămân pe fiecare model; epocile implicite pe care un container le are în EM Tools sunt o comoditate a scenei, care le scrie pe modelele sale, niciodată o afirmație a grupului. Un grup poate fi în mod legitim GOL și poate în mod legitim să NU aibă Document: ambele sunt stări pe care interfața RM Manager le afișează deja. NU este un FunctionalUnitNodeGroup (acela agregă unități stratigrafice într-o componentă de construcție; acești membri sunt modele, nu unități); NU este un ActivityNodeGroup (nu s-a întâmplat nimic aici, iar setul nu are un eveniment de formare propriu); NU este Documentul, care rămâne ancora documentară — ștergerea containerului elimină grupul, nu și Documentul.",
|
|
1376
|
+
"fr": "Agrégation typée des modèles de représentation qui forment UN ensemble nommé publié sous un seul Document — « Survey 2015 » sous D.01, « Reconstruction » sous D.09 (EM16-RMNG, réunion du 2026-09-10). Jusque-là, le conteneur RM n'existait que comme PropertyGroup `scene.rm_containers` d'EM Tools, si bien que le regroupement qui donne son sens à l'ensemble restait invisible pour quiconque lisait le graphe. IL SE PLACE À CÔTÉ, IL NE REMPLACE PAS : chaque membre conserve ses propres arêtes d'époque (has_first_epoch / survive_in_epoch) et le Document conserve ses arêtes DIRECTES has_representation_model vers chaque modèle — le groupe s'ajoute par-dessus et ne s'intercale jamais, de sorte qu'un consommateur qui l'ignore lit exactement ce qu'il lisait auparavant. L'appartenance est l'axe d'ÉTIQUETTE 'is_in_representation_model_group', comme is_in_functional_unit et is_in_location, et comme eux m:n (E.D., 23 oct. 2026) : un maillage peut appartenir à plusieurs conteneurs — un modèle de « Survey 2015 » peut aussi être dans « Reconstruction, 2nd c. AD ». Les époques restent sur chaque modèle ; les époques par défaut qu'un conteneur porte dans EM Tools sont une commodité de la scène qui les écrit sur ses modèles, jamais une affirmation du groupe. Un groupe peut légalement être VIDE et peut légalement n'avoir AUCUN Document : ce sont deux états que l'interface du RM Manager affiche déjà. Ce N'EST PAS un FunctionalUnitNodeGroup (qui agrège des unités stratigraphiques en un élément de construction ; ici les membres sont des modèles, pas des unités) ; ce N'EST PAS un ActivityNodeGroup (rien ne s'est passé ici et l'ensemble n'a pas d'événement de formation propre) ; ce N'EST PAS le Document, qui reste l'ancre documentaire — supprimer le conteneur supprime le groupe et non le Document.",
|
|
1377
|
+
"de": "Typisierte Zusammenfassung der Repräsentationsmodelle, die EINE benannte Menge bilden, die unter einem einzigen Dokument veröffentlicht wird — «Survey 2015» unter D.01, «Reconstruction» unter D.09 (EM16-RMNG, Sitzung vom 2026-09-10). Bis dahin existierte der RM-Container nur als PropertyGroup `scene.rm_containers` von EM Tools, sodass die Gruppierung, die der Menge ihre Bedeutung gibt, für jeden, der den Graphen liest, unsichtbar war. SIE STEHT DANEBEN, SIE ERSETZT NICHT: Jedes Mitglied behält seine eigenen Epochenkanten (has_first_epoch / survive_in_epoch), und das Dokument behält seine DIREKTEN has_representation_model-Kanten zu jedem Modell — die Gruppe kommt obendrauf und wird nie dazwischengeschaltet, sodass ein Konsument, der sie ignoriert, genau das liest, was er vorher las. Die Mitgliedschaft ist die TAG-Achse 'is_in_representation_model_group', wie is_in_functional_unit und is_in_location, und wie diese m:n (E.D., 23. Okt. 2026): Ein Mesh kann mehreren Containern angehören — ein Modell aus «Survey 2015» kann auch in «Reconstruction, 2nd c. AD» liegen. Die Epochen bleiben an jedem Modell; die Standard-Epochen, die ein Container in EM Tools trägt, sind eine Bequemlichkeit der Szene, die sie auf seine Modelle schreibt, nie eine Aussage der Gruppe. Eine Gruppe darf zulässigerweise LEER sein und zulässigerweise KEIN Dokument haben: Beides sind Zustände, die die RM-Manager-Oberfläche bereits anzeigt. KEINE FunctionalUnitNodeGroup (diese fasst stratigraphische Einheiten zu einem Bauteil zusammen; die Mitglieder hier sind Modelle, keine Einheiten); KEINE ActivityNodeGroup (hier ist nichts geschehen, und die Menge hat kein eigenes Entstehungsereignis); NICHT das Dokument, das der dokumentarische Anker bleibt — das Löschen des Containers entfernt die Gruppe und nicht das Dokument."
|
|
1378
1378
|
},
|
|
1379
1379
|
"label": {
|
|
1380
1380
|
"en": "RM Container",
|
|
@@ -693,7 +693,7 @@ em:RepresentationModelNodeGroup
|
|
|
693
693
|
a owl:Class ;
|
|
694
694
|
rdfs:label "Representation Model Container"@en ;
|
|
695
695
|
rdfs:subClassOf em:NodeGroup , crm:E73_Information_Object ;
|
|
696
|
-
rdfs:comment "The representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, 2026-09-10). The one group subtype that does not override its parent class: a container of models is a conceptual set, not a physical thing and not an event. Membership is
|
|
696
|
+
rdfs:comment "The representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, 2026-09-10). The one group subtype that does not override its parent class: a container of models is a conceptual set, not a physical thing and not an event. Membership is m:n — a model may belong to several containers (E.D., 23 Oct 2026; 1:1 before) — and the container sits BESIDE the direct Document→model edges, never in between. Maps to: Python RepresentationModelNodeGroup (node_type=\'RepresentationModelNodeGroup\')."@en .
|
|
697
697
|
|
|
698
698
|
em:GCPSet
|
|
699
699
|
a owl:Class ;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_connections_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.42 (MICRO glifi HDT-O p.3, 20 Oct 2026, «i gemelli di parte»): has_digital_twin.source is now HeritageEntityNode + StratigraphicNode (was StratigraphicNode + Node, which admitted any node), its description says the two uses — the study's twin (the HDTNode marked hdto_role 'twin', one per graph) and the twin of a PART, from a unit or an HC1 of the graph to an HDTNode without hdto_role, read as a list by s3dgraphy.hdto.read_part_twins — and it gets a ui_phrase. No hierarchy presumed: heritage_part_of / is_part_of say who is part of whom. Mapping unchanged (hdto:HP1_has_digital_twin). v1.6.41 (MICRO le alternative e la trasformazione, decided by E.D. 2026-10-17, «lo stesso cappello»): has_linked_resource.source += RepresentationModelNodeGroup. The HAT of a 3D object — the node that says what it represents, and through it its epochs and units — is the has_linked_resource edge to its ASSET (the master resource), written once; the versions inherit it (decision of 3 Oct 2026, resources.versions.inherited_links). Two resources are ALTERNATIVES (one is shown instead of the other) if and only if they have the same hat: a declaration, never deduced from the DTC (a tileset and the models can be siblings of one survey without one replacing the other; this corrects the rule of 16 Oct 2026, «tileset alternative of the container from the DTC»). A tileset that covers a whole RM container is hatted by THE CONTAINER: RepresentationModelNodeGroup -has_linked_resource-> its master; choosing it switches the members off, choosing the members switches it off. A tileset that is one piece among the others keeps an RM of its own. Partial coverage: the covered part becomes a sub-container (is_in_representation_model_group already admits a group as source), and the tileset is the alternative of that. No new edge (is_alternative_of, proposed on 16 Oct, is NOT added: the alternative is computed from the common hat, s3dgraphy.resources.alternatives.alternative_sets, em_visual_rules 1.6.37 block alternatives). Mapping unchanged: P67_refers_to holds for the group, an E73 Information Object (E73 is an E89 Propositional Object, P67's domain). v1.6.40 (giro dell'11 ottobre, decided by E.D. 2026-10-11): study_took_place_at reaches the site or a saggio in it (a LocationNodeGroup kind study, is_in_location the site); description only. v1.6.39 (MICRO lo studio usabile, 2026-10-10): study_took_place_at (StudyNode → LocationNodeGroup, crm:P7_took_place_at). v1.6.38 (MICRO le entità spaziotemporali, decided by E.D. 2026-10-10: «Documenti, autori e unità stratigrafiche sono entità spaziotemporali e dovrebbero avere tutto il potenziale e la formalità delle US: start, end, posizione nel grafo matrix»): a DocumentNode and an AuthorNode (and so an AuthorAINode) take the temporal edges of a stratigraphic unit. has_property.source += AuthorNode — a person has a start and an end like a unit (absolute_time_start / absolute_time_end; for a person they read «date of birth» / «date of death», for a model «release» / «retirement», em_qualia_types 1.6.9 owner_names), and any other quale. has_first_epoch.source += AuthorNode (DocumentNode already had it, as a ParadataNode): the lane of the matrix where the entity begins, which is also where a client draws it. survive_in_epoch.source += DocumentNode, AuthorNode: a document that lasts (an inscription still read centuries later), an author active across two epochs of a study. is_after and has_same_time, source and target += DocumentNode, AuthorNode: the sequence of the matrix is the same order for the three — an excavation report is after the excavation, an engraving after the destruction it shows, a commentary after the text it reads; the chronology (Graph.chronology) dates documents and authors with the same rules as units (written, epoch, tpq/taq), CHRONOLOGY_TYPES += document, author, author_ai. is_in_activity.source += AuthorNode (an author's part in a campaign). WHAT IS NOT WIDENED, and why: the PHYSICAL relations (overlies, cuts, fills, abuts, is_bonded_to, is_physically_equal_to) stay between units only — a person does not cover a layer; changed_from and is_part_of stay stratigraphic (a temporal instance and a containment are statements about matter); is_in_timebranch waits for the branches. The RDF mappings are UNCHANGED: AP28/AP22 were already emitted on A8 units, which are persistent items like E31 and E21, so the three are read the same way; em:firstAttestedInEpoch and em:survivesInEpoch widen their domain to crm:E77_Persistent_Item in em.ttl 1.6.16. An instance is still a VIEW: em_visual_rules.paradata_instances gains `authorship`, so the author of a reading is drawn inside the group that reads, like a document (s3dgraphy.paradata_view). v1.6.37 (MICRO l'istanza è una vista, decided by E.D. 2026-10-09, evening: «non ha nessun senso fare un'istanza nel triple store: è solamente una modalità grafica di rappresentare il grafo»): the extractor that reads another unit's property points at the MASTER, the property in its own unit, as it points at a document; there is NO instance node in em.json nor in the RDF (the 1.6.36 data.instance_of is gone, and a property instance stored with it is folded onto its master when an em.json is read, s3dgraphy.property_source.fold_stored_instances). A client draws the master inside the reader's group as a VIEW, by the one rule for documents and properties in em_visual_rules.json → paradata_instances (s3dgraphy.paradata_view.view_instances). extracted_from.target keeps PropertyNode (_note_property and property_source_note rewritten: the target is the master); is_in_paradata_nodegroup.property_instance_note is gone (nothing to say: no instance joins a group). paradata_reasoning: property_instance becomes `instance` (a document or a property drawn in the group that reads it), the instance_badge placeholder becomes {owner} (a unit, or the epoch of a document), refresh_instance is gone. Nothing narrowed, no mapping changed. v1.6.36 (MICRO la proprietà come fonte, decided by E.D. 2026-10-09): extracted_from.target += PropertyNode — an extractor may read ANOTHER UNIT'S PROPERTY, through an INSTANCE of it in the reader's paradata group (a PropertyNode with data.instance_of = the master's id, data.instance_owner = the master's unit; s3dgraphy.property_source). The property becomes a source like a document: the upper parts of a temple take the material of the lower parts found, the trusses the wood of the fragments. is_in_paradata_nodegroup already admitted PropertyNode (measured): the instance joins the reader's group with no widening. NEW top-level block `paradata_reasoning`: the EM words of the reasoning between properties (the instance and its badge, the diagnostics source_changed / source_removed / reasoning_cycle / undeclared_owners, the cures), translated in datamodel_translations.json section `reasoning`. ADDITIVE: nothing narrowed, no mapping changed. v1.6.35 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione»): was_revision_of admits TranslationNode on both ends — a translation realigned after its original changed is a new TranslationNode that was_revision_of the old one (s3dgraphy.translation.realign_translation). v1.6.34 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01): NEW has_translation / is_translation_of — any node → TranslationNode (node datamodel 1.6.20), crm:P73_has_translation, the CIDOC relation of a text to its translation. has_author.source += TranslationNode (who translated). extracted_from.source += TranslationNode: a translation taken from a published EDITION reaches the DocumentNode of that edition with the edge that already says «this text was taken from that source», instead of a second name for the same relation. v1.6.33 (MICRO la lingua dei dati, part H, 2026-10-27, decided by E.D. 2026-10-01): two em.ttl terms that had no edge now leave with the edge nearest to them. has_documentation gains extension_mapping em:derivedFromDocument, guarded by extension_when.source_node_class (DocumentaryStratigraphicUnit, SeriesOfDocumentaryStratigraphicUnit): a USD documented in a document is derived from it; every other source keeps P70i alone. is_part_of gains inverse_extension em:reconstructsFrom, written from the whole to the part (<VSF> em:reconstructsFrom <SF>) only when a SpecialFindUnit is part of a VirtualSpecialFindUnit. extension_when may now name the source class as well as the target; inverse_extension is new and read by the exporter and the importer (which skips it: the edge comes back from P46i). No edge added, no graph changed. 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).",
|
|
2
|
+
"s3Dgraphy_connections_model_version": "1.6.43",
|
|
3
|
+
"description": "v1.6.43 (23 Oct 2026, decided by E.D.): is_in_representation_model_group is m:n — a representation model may belong to SEVERAL RM containers (a model of «Survey 2015» can also be in «Reconstruction, 2nd c. AD»), like is_in_functional_unit and is_in_location; until now it was 1:1. Description only: the mapping (P46i_forms_part_of) is unchanged. The epochs stay on each model: the default epochs an EM Tools container carries are written on its models by the scene, never stated on the group. v1.6.42 (MICRO glifi HDT-O p.3, 20 Oct 2026, «i gemelli di parte»): has_digital_twin.source is now HeritageEntityNode + StratigraphicNode (was StratigraphicNode + Node, which admitted any node), its description says the two uses — the study's twin (the HDTNode marked hdto_role 'twin', one per graph) and the twin of a PART, from a unit or an HC1 of the graph to an HDTNode without hdto_role, read as a list by s3dgraphy.hdto.read_part_twins — and it gets a ui_phrase. No hierarchy presumed: heritage_part_of / is_part_of say who is part of whom. Mapping unchanged (hdto:HP1_has_digital_twin). v1.6.41 (MICRO le alternative e la trasformazione, decided by E.D. 2026-10-17, «lo stesso cappello»): has_linked_resource.source += RepresentationModelNodeGroup. The HAT of a 3D object — the node that says what it represents, and through it its epochs and units — is the has_linked_resource edge to its ASSET (the master resource), written once; the versions inherit it (decision of 3 Oct 2026, resources.versions.inherited_links). Two resources are ALTERNATIVES (one is shown instead of the other) if and only if they have the same hat: a declaration, never deduced from the DTC (a tileset and the models can be siblings of one survey without one replacing the other; this corrects the rule of 16 Oct 2026, «tileset alternative of the container from the DTC»). A tileset that covers a whole RM container is hatted by THE CONTAINER: RepresentationModelNodeGroup -has_linked_resource-> its master; choosing it switches the members off, choosing the members switches it off. A tileset that is one piece among the others keeps an RM of its own. Partial coverage: the covered part becomes a sub-container (is_in_representation_model_group already admits a group as source), and the tileset is the alternative of that. No new edge (is_alternative_of, proposed on 16 Oct, is NOT added: the alternative is computed from the common hat, s3dgraphy.resources.alternatives.alternative_sets, em_visual_rules 1.6.37 block alternatives). Mapping unchanged: P67_refers_to holds for the group, an E73 Information Object (E73 is an E89 Propositional Object, P67's domain). v1.6.40 (giro dell'11 ottobre, decided by E.D. 2026-10-11): study_took_place_at reaches the site or a saggio in it (a LocationNodeGroup kind study, is_in_location the site); description only. v1.6.39 (MICRO lo studio usabile, 2026-10-10): study_took_place_at (StudyNode → LocationNodeGroup, crm:P7_took_place_at). v1.6.38 (MICRO le entità spaziotemporali, decided by E.D. 2026-10-10: «Documenti, autori e unità stratigrafiche sono entità spaziotemporali e dovrebbero avere tutto il potenziale e la formalità delle US: start, end, posizione nel grafo matrix»): a DocumentNode and an AuthorNode (and so an AuthorAINode) take the temporal edges of a stratigraphic unit. has_property.source += AuthorNode — a person has a start and an end like a unit (absolute_time_start / absolute_time_end; for a person they read «date of birth» / «date of death», for a model «release» / «retirement», em_qualia_types 1.6.9 owner_names), and any other quale. has_first_epoch.source += AuthorNode (DocumentNode already had it, as a ParadataNode): the lane of the matrix where the entity begins, which is also where a client draws it. survive_in_epoch.source += DocumentNode, AuthorNode: a document that lasts (an inscription still read centuries later), an author active across two epochs of a study. is_after and has_same_time, source and target += DocumentNode, AuthorNode: the sequence of the matrix is the same order for the three — an excavation report is after the excavation, an engraving after the destruction it shows, a commentary after the text it reads; the chronology (Graph.chronology) dates documents and authors with the same rules as units (written, epoch, tpq/taq), CHRONOLOGY_TYPES += document, author, author_ai. is_in_activity.source += AuthorNode (an author's part in a campaign). WHAT IS NOT WIDENED, and why: the PHYSICAL relations (overlies, cuts, fills, abuts, is_bonded_to, is_physically_equal_to) stay between units only — a person does not cover a layer; changed_from and is_part_of stay stratigraphic (a temporal instance and a containment are statements about matter); is_in_timebranch waits for the branches. The RDF mappings are UNCHANGED: AP28/AP22 were already emitted on A8 units, which are persistent items like E31 and E21, so the three are read the same way; em:firstAttestedInEpoch and em:survivesInEpoch widen their domain to crm:E77_Persistent_Item in em.ttl 1.6.16. An instance is still a VIEW: em_visual_rules.paradata_instances gains `authorship`, so the author of a reading is drawn inside the group that reads, like a document (s3dgraphy.paradata_view). v1.6.37 (MICRO l'istanza è una vista, decided by E.D. 2026-10-09, evening: «non ha nessun senso fare un'istanza nel triple store: è solamente una modalità grafica di rappresentare il grafo»): the extractor that reads another unit's property points at the MASTER, the property in its own unit, as it points at a document; there is NO instance node in em.json nor in the RDF (the 1.6.36 data.instance_of is gone, and a property instance stored with it is folded onto its master when an em.json is read, s3dgraphy.property_source.fold_stored_instances). A client draws the master inside the reader's group as a VIEW, by the one rule for documents and properties in em_visual_rules.json → paradata_instances (s3dgraphy.paradata_view.view_instances). extracted_from.target keeps PropertyNode (_note_property and property_source_note rewritten: the target is the master); is_in_paradata_nodegroup.property_instance_note is gone (nothing to say: no instance joins a group). paradata_reasoning: property_instance becomes `instance` (a document or a property drawn in the group that reads it), the instance_badge placeholder becomes {owner} (a unit, or the epoch of a document), refresh_instance is gone. Nothing narrowed, no mapping changed. v1.6.36 (MICRO la proprietà come fonte, decided by E.D. 2026-10-09): extracted_from.target += PropertyNode — an extractor may read ANOTHER UNIT'S PROPERTY, through an INSTANCE of it in the reader's paradata group (a PropertyNode with data.instance_of = the master's id, data.instance_owner = the master's unit; s3dgraphy.property_source). The property becomes a source like a document: the upper parts of a temple take the material of the lower parts found, the trusses the wood of the fragments. is_in_paradata_nodegroup already admitted PropertyNode (measured): the instance joins the reader's group with no widening. NEW top-level block `paradata_reasoning`: the EM words of the reasoning between properties (the instance and its badge, the diagnostics source_changed / source_removed / reasoning_cycle / undeclared_owners, the cures), translated in datamodel_translations.json section `reasoning`. ADDITIVE: nothing narrowed, no mapping changed. v1.6.35 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione»): was_revision_of admits TranslationNode on both ends — a translation realigned after its original changed is a new TranslationNode that was_revision_of the old one (s3dgraphy.translation.realign_translation). v1.6.34 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01): NEW has_translation / is_translation_of — any node → TranslationNode (node datamodel 1.6.20), crm:P73_has_translation, the CIDOC relation of a text to its translation. has_author.source += TranslationNode (who translated). extracted_from.source += TranslationNode: a translation taken from a published EDITION reaches the DocumentNode of that edition with the edge that already says «this text was taken from that source», instead of a second name for the same relation. v1.6.33 (MICRO la lingua dei dati, part H, 2026-10-27, decided by E.D. 2026-10-01): two em.ttl terms that had no edge now leave with the edge nearest to them. has_documentation gains extension_mapping em:derivedFromDocument, guarded by extension_when.source_node_class (DocumentaryStratigraphicUnit, SeriesOfDocumentaryStratigraphicUnit): a USD documented in a document is derived from it; every other source keeps P70i alone. is_part_of gains inverse_extension em:reconstructsFrom, written from the whole to the part (<VSF> em:reconstructsFrom <SF>) only when a SpecialFindUnit is part of a VirtualSpecialFindUnit. extension_when may now name the source class as well as the target; inverse_extension is new and read by the exporter and the importer (which skips it: the edge comes back from P46i). No edge added, no graph changed. 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",
|
|
@@ -1843,7 +1843,7 @@
|
|
|
1843
1843
|
"is_in_representation_model_group": {
|
|
1844
1844
|
"name": "is_in_representation_model_group",
|
|
1845
1845
|
"label": "Is in representation model group",
|
|
1846
|
-
"description": "Membership of a representation model in a RepresentationModelNodeGroup (EM16-RMNG): the models that together form one named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09. THE GROUP SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model. This edge is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is a TAG axis like is_in_functional_unit and is_in_location — the member carries the edge and the group claims nothing of it —
|
|
1846
|
+
"description": "Membership of a representation model in a RepresentationModelNodeGroup (EM16-RMNG): the models that together form one named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09. THE GROUP SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model. This edge is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is a TAG axis like is_in_functional_unit and is_in_location — the member carries the edge and the group claims nothing of it — and m:n like them (E.D., 23 Oct 2026; 1:1 until connections 1.6.42): a model may belong to SEVERAL containers — a model of «Survey 2015» can also be in «Reconstruction, 2nd c. AD». The epochs stay on each model: the default epochs an EM Tools container carries are a convenience of the scene, written on its models, never a statement of the group. A group may legally be EMPTY and may legally have no Document: both are states the RM Manager UI already shows, and neither is validated away.",
|
|
1847
1847
|
"reverse": {
|
|
1848
1848
|
"name": "includes_representation_model",
|
|
1849
1849
|
"label": "Includes representation model"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.32 (2026-10-20, decided by E.D.): descriptions only — GraphNode and StudyNode say how «a graph is a study» (StratiGraph D3.1 §3.3, D3.2 §3.5) is read: one graph corresponds one to one to the study that created it (HP25), the two classes stay distinct, and the graph is not the digital twin (HC2). No field, node element or mapping changes. CRMem 1.6.18. v1.6.31 (MICRO le alternative e la trasformazione, decided by E.D. 2026-10-16/17): the TRANSFORMATION of a 3D object is declared — RepresentationModelNode, RepresentationModelDocNode, RepresentationModelSpecialFindNode and SemanticShapeNode get properties.transform: position (metres, the frame of the study), rotation in DEGREES with rotation_order (XYZ by default, Blender's), scale, up_axis (Z by default), the optional pivot (absent: the centre of the object's box) and the computed quaternion, all numbers; angle_unit 'deg' marks the new form, and the old one (strings, radians) is read and converted with a warning. Applied on top of the file's coordinates; a tileset's own pose stays in its tileset.json. RDF: em:position, em:rotationDegrees, em:rotationOrder, em:scale, em:upAxis, em:pivot (em.ttl 1.6.17, section 20). v1.6.30 (giro dell'11 ottobre (2), decided by E.D. 2026-10-11, «il codice di studio è stabile»): StudyNode.code is STABLE — once a study has one it never changes by itself (import, export, migration, projection): it is what Blender re-attaches the proxies by (GT16.1.USM100). Read: the study's code, else the GraphML header ID (graph_code), else the retired em_id (read only). A GraphML's header ID is written on the study at import. When there is none, s3dgraphy.hdto.propose_study_code writes ONE proposal (site initials + the year of the study's date, -2/-3 against the other codes of the container) and marks it with the new field `code_proposed` until the user confirms it. v1.6.29 (giro dell'11 ottobre, decided by E.D. 2026-10-11): the code of a graph is the code of its STUDY — StudyNode.code replaces the graph-self node's retired «EM-ID» (GraphNode.data.em_id, never a field of this datamodel): a file that has one keeps it and s3dgraphy.hdto.migrate_em_id carries it to the study's code only when the study exists and has none. A saggio is a study AND a place: its LocationNodeGroup (kind study) is in the site (is_in_location), the study took place at it. Descriptions only, no field added. v1.6.28 (MICRO lo studio usabile, decided by E.D. 2026-10-10: the stratigraphic trench is a STUDY, the site is TOPOGRAPHY, HC1 is heritage only where recognised): StudyNode gains `study_kind` (stratigraphic_excavation | survey | documentation | other) — a stratigraphic_excavation is ALSO a crmarchaeo:A9_Archaeological_Excavation, declared per value in the field (`subclass_of_by_value`, the same subclass_of form the classes use) and emitted by the RDF exporter as a second rdf:type — and `code` (the short name of the study, e.g. GT16: what the source gives, or what the user writes; never derived; the label prefix reads it). HC9 Study is aligned to crm:E65_Creation (was crm:E7_Activity; E65 ⊑ E7), HC1 Heritage Entity to crm:E70_Thing (was crm:E1_CRM_Entity), as the official HDT-O RDFS says (HDT_v2.0.1.rdf, ECHOES D7.1). The study reaches its place with study_took_place_at (crm:P7_took_place_at, connections 1.6.39). v1.6.27 (MICRO le entità spaziotemporali, decided by E.D. 2026-10-10): DocumentNode and AuthorNode (with AuthorAINode) are SPATIOTEMPORAL ENTITIES like the stratigraphic units — the top-level block `spatiotemporal_entities` names the three classes and what they share: a start and an end (absolute_time_start / absolute_time_end, read with the label of their owner: a person is born and dies, a model is released and retired), the lane of the matrix where they begin (has_first_epoch) and the ones they last through (survive_in_epoch), their place in the sequence (is_after, has_same_time), an activity. The edges are widened in connections 1.6.38; the chronology dates the three with the same rules (Graph.CHRONOLOGY_TYPES). AuthorNode and DocumentNode gain a `spatiotemporal` element saying how their time reads; no field of theirs changes. v1.6.26 (H4, decided by E.D. 5 Oct 2026, «Heriverse legge l'em.json e sceglie la versione»): ResourceNode.use admits two more uses, heriverse and aton — a version made FOR a viewer, the package on disk that Heriverse or another ATON app opens offline (EM Tools makes it with «Prepare for a use…», as is: no optimisation of its own); a viewer asks heriverse, aton, web, realtime in that order (s3dgraphy.resources.versions.choose_version). v1.6.25 (D1, MICRO un solo vocabolario, decided by E.D. 4 Oct 2026): GeoPositionNode.rotation_reference = 'grid' (D2: the rotation is measured from the GRID north of the CRS). ResourceNode.lod_level (em:lodLevel, computed from the chain, written only on export and checked at load), ResourceNode.use (em:use, a list of analysis | realtime | web | mobile_ar | print | render | preview) and seven measures of a version (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.24 (dev30, decided by E.D. 2026-10-02 on the dev29 report): DTCAcquisitionNode.retrieved_from — where a retrieved object came from, a DOI or a URL (em:retrievedFrom, D1; optional, validate warns «download without origin»). ResourceNode.members_digest names em:membersDigest, the digest of a file_set with a predicate of its own beside em:checksum + em:digestCovers (D4; not a second field). ResourceNode.packaging carries its vocabulary with values and labels, translated in datamodel_translations.json (packagings; A3). ResourceNode.content_digest also holds the digest of the data of a master inside another file — a Metashape model's mesh.ply — compared, never verified by downloading (D7). GCPSetNode gains data.control (ground_control_points | camera_positions) and data.accuracy_m: a chunk referenced only by its cameras' GPS is absolute with the control said for what it is, and validate warns «georeferenced only by camera GPS» (D7). Node.properties.lang states the one explicit exception to the AI marker: a recognised language confirmed by a person is data.lang only (U5). CRMem 1.6.14. v1.6.23 (dev29, 2026-10-02, measured on San Pietro): seven properties that the round trip em.json → TTL → em.json lost now leave and come back — ResourceNode packaging / tier / digest_covers / content_digest (em:packaging, em:tier, em:digestCovers, em:contentDigest) and the declared fields of a DTC step, technique / parameters / software (em:technique, em:parameters, em:software, the last two as rdf:JSON). digest_covers admits members (a file_set). The blend:// locator stays out of RDF on purpose: it is a private path. v1.6.22 (dev28, 2026-11-01, decided by E.D. 2026-10-01 on the dev27 report): the access mode of a signature (created_auth / modified_auth / validated_auth) admits a third mode, 'declared' — an iD typed in a tool's preferences and checked by nobody (EMStudio's declared identity, EM Tools' local identity), with no attested_by; through a relay the mode is the relay's, read from the token (crdt.stamp_auth), not the client's declaration. The language a node is born in travels in the add_node op (crdt.make_op requires it of the producer, 'und' when unknown); the study's language is read only for old ops, said and counted. CRMem 1.6.12. v1.6.21 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione» and «l'accesso sul campo»): ResourceNode.properties gains lang — on a resource the language(s) of its CONTENT, one tag or a sorted list, leaving as dcterms:language and outside the cascade of the texts — addresses (several addresses of ONE resource, same digest: em:hasAddress with em:locator, em:residency, em:checkedAt, em:reachable) and checksum_at (a dated digest, em:checksumAt). Node.properties gains created_auth / modified_auth / validated_auth: how the hand of a signature had entered, {mode: orcid | node_password, attested_by} (em:createdVia / em:modifiedVia / em:validatedVia, em:authMode, em:attestedBy). data.lang is written at birth (s3dgraphy.language.stamp_birth_language), also when equal to the study's. v1.6.20 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, «Le traduzioni»): NEW TranslationNode (TRANSL, crm:E33_Linguistic_Object) — ONE translation of one text field of one node. The original stays a string in its field (data.lang on the node, else the study's), never overwritten; each translation is a node reached by has_translation (crm:P73_has_translation, connections 1.6.34) with data.lang (arrival), data.from_lang (departure, written because the original can change), data.field (CRDT vocabulary: description | data.<key>; a PropertyNode's value is data.value; never name), data.text, data.method (manual | ai | edition), data.source_digest (sha256 of the original translated: a different digest = «da riallineare») and data.review_requested («da rivedere»). Who: has_author; AI: data.ai_assisted, unverified until validated_by; an edition: extracted_from → the DocumentNode. RDF (em.ttl 1.6.10): Node.properties.lang names em:originalLanguage — the node's own data.lang leaves as that literal whenever it is declared, equal to the study's too, so a reader tells the original literal from the translations that share its predicate and the round trip gives data.lang back exactly where it was (the D.1 limit of 1.6.19 is closed); the TranslationNode's fields name em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested. v1.6.19 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): Node.properties.description becomes an object {cidoc: P3_has_note, natural_language: true, note} — the MARKER that says the description is text in a natural language and leaves in RDF with its language tag; declared once on the base class and inherited by every node type. name is NOT marked: names are invariant identities. No field added, no node element, no graph change: the em.json is the same; only the RDF literal gains its tag. 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.",
|
|
2
|
+
"s3Dgraphy_data_model_version": "1.6.33",
|
|
3
|
+
"description": "v1.6.33 (23 Oct 2026, decided by E.D.): description only — RepresentationModelNodeGroup: a model may belong to several RM containers (is_in_representation_model_group m:n, connections 1.6.43); the epochs stay on each model. v1.6.32 (2026-10-20, decided by E.D.): descriptions only — GraphNode and StudyNode say how «a graph is a study» (StratiGraph D3.1 §3.3, D3.2 §3.5) is read: one graph corresponds one to one to the study that created it (HP25), the two classes stay distinct, and the graph is not the digital twin (HC2). No field, node element or mapping changes. CRMem 1.6.18. v1.6.31 (MICRO le alternative e la trasformazione, decided by E.D. 2026-10-16/17): the TRANSFORMATION of a 3D object is declared — RepresentationModelNode, RepresentationModelDocNode, RepresentationModelSpecialFindNode and SemanticShapeNode get properties.transform: position (metres, the frame of the study), rotation in DEGREES with rotation_order (XYZ by default, Blender's), scale, up_axis (Z by default), the optional pivot (absent: the centre of the object's box) and the computed quaternion, all numbers; angle_unit 'deg' marks the new form, and the old one (strings, radians) is read and converted with a warning. Applied on top of the file's coordinates; a tileset's own pose stays in its tileset.json. RDF: em:position, em:rotationDegrees, em:rotationOrder, em:scale, em:upAxis, em:pivot (em.ttl 1.6.17, section 20). v1.6.30 (giro dell'11 ottobre (2), decided by E.D. 2026-10-11, «il codice di studio è stabile»): StudyNode.code is STABLE — once a study has one it never changes by itself (import, export, migration, projection): it is what Blender re-attaches the proxies by (GT16.1.USM100). Read: the study's code, else the GraphML header ID (graph_code), else the retired em_id (read only). A GraphML's header ID is written on the study at import. When there is none, s3dgraphy.hdto.propose_study_code writes ONE proposal (site initials + the year of the study's date, -2/-3 against the other codes of the container) and marks it with the new field `code_proposed` until the user confirms it. v1.6.29 (giro dell'11 ottobre, decided by E.D. 2026-10-11): the code of a graph is the code of its STUDY — StudyNode.code replaces the graph-self node's retired «EM-ID» (GraphNode.data.em_id, never a field of this datamodel): a file that has one keeps it and s3dgraphy.hdto.migrate_em_id carries it to the study's code only when the study exists and has none. A saggio is a study AND a place: its LocationNodeGroup (kind study) is in the site (is_in_location), the study took place at it. Descriptions only, no field added. v1.6.28 (MICRO lo studio usabile, decided by E.D. 2026-10-10: the stratigraphic trench is a STUDY, the site is TOPOGRAPHY, HC1 is heritage only where recognised): StudyNode gains `study_kind` (stratigraphic_excavation | survey | documentation | other) — a stratigraphic_excavation is ALSO a crmarchaeo:A9_Archaeological_Excavation, declared per value in the field (`subclass_of_by_value`, the same subclass_of form the classes use) and emitted by the RDF exporter as a second rdf:type — and `code` (the short name of the study, e.g. GT16: what the source gives, or what the user writes; never derived; the label prefix reads it). HC9 Study is aligned to crm:E65_Creation (was crm:E7_Activity; E65 ⊑ E7), HC1 Heritage Entity to crm:E70_Thing (was crm:E1_CRM_Entity), as the official HDT-O RDFS says (HDT_v2.0.1.rdf, ECHOES D7.1). The study reaches its place with study_took_place_at (crm:P7_took_place_at, connections 1.6.39). v1.6.27 (MICRO le entità spaziotemporali, decided by E.D. 2026-10-10): DocumentNode and AuthorNode (with AuthorAINode) are SPATIOTEMPORAL ENTITIES like the stratigraphic units — the top-level block `spatiotemporal_entities` names the three classes and what they share: a start and an end (absolute_time_start / absolute_time_end, read with the label of their owner: a person is born and dies, a model is released and retired), the lane of the matrix where they begin (has_first_epoch) and the ones they last through (survive_in_epoch), their place in the sequence (is_after, has_same_time), an activity. The edges are widened in connections 1.6.38; the chronology dates the three with the same rules (Graph.CHRONOLOGY_TYPES). AuthorNode and DocumentNode gain a `spatiotemporal` element saying how their time reads; no field of theirs changes. v1.6.26 (H4, decided by E.D. 5 Oct 2026, «Heriverse legge l'em.json e sceglie la versione»): ResourceNode.use admits two more uses, heriverse and aton — a version made FOR a viewer, the package on disk that Heriverse or another ATON app opens offline (EM Tools makes it with «Prepare for a use…», as is: no optimisation of its own); a viewer asks heriverse, aton, web, realtime in that order (s3dgraphy.resources.versions.choose_version). v1.6.25 (D1, MICRO un solo vocabolario, decided by E.D. 4 Oct 2026): GeoPositionNode.rotation_reference = 'grid' (D2: the rotation is measured from the GRID north of the CRS). ResourceNode.lod_level (em:lodLevel, computed from the chain, written only on export and checked at load), ResourceNode.use (em:use, a list of analysis | realtime | web | mobile_ar | print | render | preview) and seven measures of a version (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.24 (dev30, decided by E.D. 2026-10-02 on the dev29 report): DTCAcquisitionNode.retrieved_from — where a retrieved object came from, a DOI or a URL (em:retrievedFrom, D1; optional, validate warns «download without origin»). ResourceNode.members_digest names em:membersDigest, the digest of a file_set with a predicate of its own beside em:checksum + em:digestCovers (D4; not a second field). ResourceNode.packaging carries its vocabulary with values and labels, translated in datamodel_translations.json (packagings; A3). ResourceNode.content_digest also holds the digest of the data of a master inside another file — a Metashape model's mesh.ply — compared, never verified by downloading (D7). GCPSetNode gains data.control (ground_control_points | camera_positions) and data.accuracy_m: a chunk referenced only by its cameras' GPS is absolute with the control said for what it is, and validate warns «georeferenced only by camera GPS» (D7). Node.properties.lang states the one explicit exception to the AI marker: a recognised language confirmed by a person is data.lang only (U5). CRMem 1.6.14. v1.6.23 (dev29, 2026-10-02, measured on San Pietro): seven properties that the round trip em.json → TTL → em.json lost now leave and come back — ResourceNode packaging / tier / digest_covers / content_digest (em:packaging, em:tier, em:digestCovers, em:contentDigest) and the declared fields of a DTC step, technique / parameters / software (em:technique, em:parameters, em:software, the last two as rdf:JSON). digest_covers admits members (a file_set). The blend:// locator stays out of RDF on purpose: it is a private path. v1.6.22 (dev28, 2026-11-01, decided by E.D. 2026-10-01 on the dev27 report): the access mode of a signature (created_auth / modified_auth / validated_auth) admits a third mode, 'declared' — an iD typed in a tool's preferences and checked by nobody (EMStudio's declared identity, EM Tools' local identity), with no attested_by; through a relay the mode is the relay's, read from the token (crdt.stamp_auth), not the client's declaration. The language a node is born in travels in the add_node op (crdt.make_op requires it of the producer, 'und' when unknown); the study's language is read only for old ops, said and counted. CRMem 1.6.12. v1.6.21 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione» and «l'accesso sul campo»): ResourceNode.properties gains lang — on a resource the language(s) of its CONTENT, one tag or a sorted list, leaving as dcterms:language and outside the cascade of the texts — addresses (several addresses of ONE resource, same digest: em:hasAddress with em:locator, em:residency, em:checkedAt, em:reachable) and checksum_at (a dated digest, em:checksumAt). Node.properties gains created_auth / modified_auth / validated_auth: how the hand of a signature had entered, {mode: orcid | node_password, attested_by} (em:createdVia / em:modifiedVia / em:validatedVia, em:authMode, em:attestedBy). data.lang is written at birth (s3dgraphy.language.stamp_birth_language), also when equal to the study's. v1.6.20 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, «Le traduzioni»): NEW TranslationNode (TRANSL, crm:E33_Linguistic_Object) — ONE translation of one text field of one node. The original stays a string in its field (data.lang on the node, else the study's), never overwritten; each translation is a node reached by has_translation (crm:P73_has_translation, connections 1.6.34) with data.lang (arrival), data.from_lang (departure, written because the original can change), data.field (CRDT vocabulary: description | data.<key>; a PropertyNode's value is data.value; never name), data.text, data.method (manual | ai | edition), data.source_digest (sha256 of the original translated: a different digest = «da riallineare») and data.review_requested («da rivedere»). Who: has_author; AI: data.ai_assisted, unverified until validated_by; an edition: extracted_from → the DocumentNode. RDF (em.ttl 1.6.10): Node.properties.lang names em:originalLanguage — the node's own data.lang leaves as that literal whenever it is declared, equal to the study's too, so a reader tells the original literal from the translations that share its predicate and the round trip gives data.lang back exactly where it was (the D.1 limit of 1.6.19 is closed); the TranslationNode's fields name em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested. v1.6.19 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): Node.properties.description becomes an object {cidoc: P3_has_note, natural_language: true, note} — the MARKER that says the description is text in a natural language and leaves in RDF with its language tag; declared once on the base class and inherited by every node type. name is NOT marked: names are invariant identities. No field added, no node element, no graph change: the em.json is the same; only the RDF literal gains its tag. 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",
|
|
@@ -892,7 +892,7 @@
|
|
|
892
892
|
"parent": "GroupNode",
|
|
893
893
|
"abbreviation": "RMG",
|
|
894
894
|
"label": "RM Container",
|
|
895
|
-
"description": "Typed aggregation of the representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, meeting of 2026-09-10). Until then the RM container lived only as EM Tools' `scene.rm_containers` PropertyGroup, so the grouping that gives the set its meaning was invisible to anyone reading the graph. IT SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model — the group is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is the TAG axis 'is_in_representation_model_group', like is_in_functional_unit and is_in_location,
|
|
895
|
+
"description": "Typed aggregation of the representation models that form ONE named set published under a single Document — «Survey 2015» under D.01, «Reconstruction» under D.09 (EM16-RMNG, meeting of 2026-09-10). Until then the RM container lived only as EM Tools' `scene.rm_containers` PropertyGroup, so the grouping that gives the set its meaning was invisible to anyone reading the graph. IT SITS BESIDE, IT DOES NOT REPLACE: every member keeps its own epoch edges (has_first_epoch / survive_in_epoch) and the Document keeps its DIRECT has_representation_model edges to each model — the group is added on top and never put in between, so a consumer that ignores it reads exactly what it read before. Membership is the TAG axis 'is_in_representation_model_group', like is_in_functional_unit and is_in_location, and m:n like them (E.D., 23 Oct 2026): a mesh can belong to several containers — a model of «Survey 2015» can also be in «Reconstruction, 2nd c. AD». The epochs stay on each model; the default epochs a container carries in EM Tools are a convenience of the scene that writes them on its models, never a statement of the group. A group may legally be EMPTY and may legally have NO Document: both are states the RM Manager UI already shows. NOT a FunctionalUnitNodeGroup (that aggregates stratigraphic units into a building component; these members are models, not units); NOT an ActivityNodeGroup (nothing happened here and the set has no formation event of its own); NOT the Document, which stays the documentary anchor — deleting the container removes the group and not the Document.",
|
|
896
896
|
"s3Dgraphy_file": "group_node.py",
|
|
897
897
|
"mapping": {
|
|
898
898
|
"cidoc": "E73 Information Object",
|
|
@@ -1361,13 +1361,11 @@ class Graph:
|
|
|
1361
1361
|
|
|
1362
1362
|
# ── RM containers (EM16-RMNG) ────────────────────────────────────────
|
|
1363
1363
|
#
|
|
1364
|
-
# Mirrors the Functional-Unit accessors above
|
|
1365
|
-
#
|
|
1366
|
-
#
|
|
1367
|
-
#
|
|
1368
|
-
#
|
|
1369
|
-
# list. Returning a list would have invited callers to handle a case the
|
|
1370
|
-
# model forbids.
|
|
1364
|
+
# Mirrors the Functional-Unit accessors above. Membership is m:n (E.D.,
|
|
1365
|
+
# 23 Oct 2026; 1:1 until then): a model may be in several containers, so
|
|
1366
|
+
# the question "which groups is this model in?" is answered by a list
|
|
1367
|
+
# (`get_representation_model_groups_of`); the singular accessor stays for
|
|
1368
|
+
# the callers that want one and returns the first.
|
|
1371
1369
|
|
|
1372
1370
|
def get_representation_model_groups(self):
|
|
1373
1371
|
"""Every RepresentationModelNodeGroup in the graph (EM16-RMNG)."""
|
|
@@ -1384,20 +1382,21 @@ class Graph:
|
|
|
1384
1382
|
out.append(node)
|
|
1385
1383
|
return out
|
|
1386
1384
|
|
|
1387
|
-
def
|
|
1388
|
-
"""
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
carries more than one membership edge (a hand-edited file, a merge),
|
|
1392
|
-
the FIRST is returned and the anomaly is left visible to the caller
|
|
1393
|
-
rather than silently reconciled here — `sync_rm_containers` on the
|
|
1394
|
-
Blender side is the place that reports divergences.
|
|
1395
|
-
"""
|
|
1385
|
+
def get_representation_model_groups_of(self, node_id):
|
|
1386
|
+
"""Every container a model belongs to, in graph order (m:n since
|
|
1387
|
+
E.D.'s decision of 23 Oct 2026)."""
|
|
1388
|
+
out = []
|
|
1396
1389
|
for edge in self._edges_by(node_id, self.RM_GROUP_EDGE, incoming=False):
|
|
1397
1390
|
node = self.find_node_by_id(edge.edge_target)
|
|
1398
|
-
if node is not None:
|
|
1399
|
-
|
|
1400
|
-
return
|
|
1391
|
+
if node is not None and node not in out:
|
|
1392
|
+
out.append(node)
|
|
1393
|
+
return out
|
|
1394
|
+
|
|
1395
|
+
def get_representation_model_group_of(self, node_id):
|
|
1396
|
+
"""The FIRST container a model belongs to, or None. A model may be in
|
|
1397
|
+
several (:meth:`get_representation_model_groups_of`)."""
|
|
1398
|
+
groups = self.get_representation_model_groups_of(node_id)
|
|
1399
|
+
return groups[0] if groups else None
|
|
1401
1400
|
|
|
1402
1401
|
def get_functional_unit_epochs(self, fu_id):
|
|
1403
1402
|
"""The epochs a Functional Unit spans — DERIVED from its members, since a
|
|
@@ -282,10 +282,11 @@ class RepresentationModelNodeGroup(GroupNode):
|
|
|
282
282
|
|
|
283
283
|
Membership is a **tag**, on the same axis as ``is_in_functional_unit``
|
|
284
284
|
(DP-72) and ``is_in_location``: the member carries the edge towards the
|
|
285
|
-
group, the group claims nothing of the member.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
285
|
+
group, the group claims nothing of the member. Like those two, membership
|
|
286
|
+
is **m:n** (E.D., 23 Oct 2026; 1:1 until then): a model may belong to several
|
|
287
|
+
containers — a mesh of «Survey 2015» can also be in «Reconstruction, 2nd c.
|
|
288
|
+
AD». The epochs stay on each model: the default epochs an EM Tools container
|
|
289
|
+
carries are written on its models by the scene, never stated on the group.
|
|
289
290
|
|
|
290
291
|
Legal states, both of which the UI already shows
|
|
291
292
|
-----------------------------------------------
|
|
@@ -244,21 +244,33 @@ def members_of(graph, group_id: str, *, deep: bool = False) -> List[str]:
|
|
|
244
244
|
return out
|
|
245
245
|
|
|
246
246
|
|
|
247
|
-
def
|
|
248
|
-
"""
|
|
249
|
-
|
|
247
|
+
def containers_of(graph, node_id: str) -> List[str]:
|
|
248
|
+
"""Every container ``node_id`` (a model or a container) is in, in graph
|
|
249
|
+
order. Membership is m:n (E.D., 23 Oct 2026): a model of «Survey 2015» can
|
|
250
|
+
also be in «Reconstruction, 2nd c. AD»."""
|
|
251
|
+
out: List[str] = []
|
|
250
252
|
for e in graph.edges:
|
|
251
|
-
if e.edge_type == EDGE_MEMBER and e.edge_source == node_id
|
|
252
|
-
|
|
253
|
-
|
|
253
|
+
if e.edge_type == EDGE_MEMBER and e.edge_source == node_id \
|
|
254
|
+
and e.edge_target not in out:
|
|
255
|
+
out.append(e.edge_target)
|
|
256
|
+
return out
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def container_of(graph, node_id: str) -> Optional[str]:
|
|
260
|
+
"""The FIRST container ``node_id`` is in, or None (see
|
|
261
|
+
:func:`containers_of` for all of them)."""
|
|
262
|
+
found = containers_of(graph, node_id)
|
|
263
|
+
return found[0] if found else None
|
|
254
264
|
|
|
255
265
|
|
|
256
266
|
def make_subcontainer(graph, parent_id: str, member_ids: Sequence[str], label: str,
|
|
257
267
|
*, group_id: Optional[str] = None) -> Dict[str, Any]:
|
|
258
268
|
"""The covered part of a container as a container of its own, INSIDE it:
|
|
259
269
|
a new ``RepresentationModelNodeGroup`` that is a member of ``parent_id``,
|
|
260
|
-
and the given members moved into it (
|
|
261
|
-
still under it through the sub-container).
|
|
270
|
+
and the given members moved into it (they leave the parent, they are
|
|
271
|
+
still under it through the sub-container). Only the membership in
|
|
272
|
+
``parent_id`` moves: a member that is also in other containers stays in
|
|
273
|
+
them (membership is m:n, E.D. 23 Oct 2026). A tileset covering only those
|
|
262
274
|
members is then the alternative of the sub-container
|
|
263
275
|
(:func:`declare_alternative`).
|
|
264
276
|
|
|
@@ -276,15 +288,16 @@ def make_subcontainer(graph, parent_id: str, member_ids: Sequence[str], label: s
|
|
|
276
288
|
description=""))
|
|
277
289
|
elif getattr(node, "node_type", "") != GROUP_NODE_TYPE:
|
|
278
290
|
raise ValueError(f"{gid!r} exists and is not an RM container")
|
|
279
|
-
if
|
|
291
|
+
if parent_id not in containers_of(graph, gid):
|
|
280
292
|
graph.add_edge(f"{gid}_{EDGE_MEMBER}_{parent_id}", gid, parent_id, EDGE_MEMBER)
|
|
281
293
|
moved, refused = [], []
|
|
282
294
|
for m in member_ids:
|
|
283
|
-
if
|
|
295
|
+
if parent_id not in containers_of(graph, m) or m == gid:
|
|
284
296
|
refused.append(m)
|
|
285
297
|
continue
|
|
286
298
|
for e in list(graph.edges):
|
|
287
|
-
if e.edge_type == EDGE_MEMBER and e.edge_source == m
|
|
299
|
+
if e.edge_type == EDGE_MEMBER and e.edge_source == m \
|
|
300
|
+
and e.edge_target == parent_id:
|
|
288
301
|
graph.remove_edge(e.edge_id)
|
|
289
302
|
graph.add_edge(f"{m}_{EDGE_MEMBER}_{gid}", m, gid, EDGE_MEMBER)
|
|
290
303
|
moved.append(m)
|