s3dgraphy 1.6.0.dev90__tar.gz → 1.6.0.dev92__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.dev90/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev92}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/pyproject.toml +1 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/datamodel_translations.json +40 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em.ttl +8 -2
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_visual_rules.json +13 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/node_registry.generated.json +6 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +7 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +6 -4
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/JSON_config/src/2D/landscape_surface.svg +4 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/JSON_config/version_for_hardware_cases.json +47 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/__init__.py +1 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/gis/__init__.py +17 -2
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/contours.py +134 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/geojson.py +136 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/geopackage.py +122 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/geotiff.py +404 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/landscape.py +143 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/layer.py +335 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/gis/wkb.py +157 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/emdb/usm_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/template_emdb_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +4 -4
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/__init__.py +4 -0
- s3dgraphy-1.6.0.dev92/src/s3dgraphy/nodes/landscape_surface_node.py +54 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/versions.py +94 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy.egg-info/SOURCES.txt +10 -0
- s3dgraphy-1.6.0.dev92/tests/test_gis_base.py +335 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_file_node.py +2 -2
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_revision.py +1 -1
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_spatiotemporal_entities.py +1 -1
- s3dgraphy-1.6.0.dev90/src/s3dgraphy/gis/layer.py +0 -195
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/MANIFEST.in +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/README.md +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/setup.cfg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/bozze/site.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/__main__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/acquisition/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/acquisition/acquire.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/acquisition/descriptor.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/acquisition/mapping.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/ai_validation.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/annotation/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/annotation/paradata.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/annotation/reading.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/api.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/classification.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/container.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/contract/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/contract/connector.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/contract/consumer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/contract/core.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/contract/reference.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/crdt.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/diagnostics.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dissemination.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/capture.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/corpus.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/devices.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/ingest.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/dtc/residency.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/edges/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/edges/connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/edges/connections_loader.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/edges/edge.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/editorial.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/html_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/json_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/aton.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/frame.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/gltf.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/migrate.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/proxy.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/registration.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/store_backed.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/transform.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/geometry/wkt.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/gis/crs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/gis/shapefile.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/gis/site.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/graph.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/hdto.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/iiif.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/base_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/csv_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/emjson_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/import_graphml.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/qualia_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/rdf_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/sheet_header.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/source_text.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/importer/xml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/indices.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/labels.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/language.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/links.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/authoring.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/mappings/registry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/merge/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/merge/graph_merger.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/multigraph/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/multigraph/multigraph.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/bake.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/generation.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/query.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/registry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/narrative/site_story.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/author_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/base_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/combiner_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/document_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/dtc_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/embargo_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/epoch_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/extractor_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/graph_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/group_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/hdt_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/license_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/paradata_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/periodization_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/project_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/property_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/representation_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/resource_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/study_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/nodes/translation_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/ownership.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/paradata_view.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/periodization.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/photogrammetry/delta.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/project_tree.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/property_source.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/publication.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resolvers/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/addresses.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/alignment.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/alternatives.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/asset_list.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/consolidate.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/detail.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/files.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/graph_compose.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/locate.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/moved.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/object_store.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/tiles3tz.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/tileset_fit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/resources/use_profiles.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/rights.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/access.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/engine.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/errors.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/inventory.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/pack.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/room_import/trust.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/shelf/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/shelf/core.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/spatiotemporal.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/stamp/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/stamp/absorb.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/stamp/emit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/stamp/hints.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/stamp/identity.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/study.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/_db_handle.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/_workspace.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/edge_registry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/graph_projector.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/graphml_writer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/group_projector.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/group_store.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/ingest_result.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/paradata_store.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/rapporti.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/uuid7.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/vocab_types.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_classifier.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_detector.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/temporal/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/temporal/inference_engine.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/temporal/relative_chronology.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/deliverable_report.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/tools/wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/transforms/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/transforms/compact.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/translation.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/utils/__init__.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/utils/utils.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/utils/visual_layout.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/zero_hour.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy.egg-info/requires.txt +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy.egg-info/top_level.txt +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_acquisition_fs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_add_resource.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_ai_validation_nodes.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_alternative_labels.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_alternative_sets.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_alternatives_hat.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_anastylosis_document_type.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_api_surface.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_asset_dtc_protocol.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_asset_list.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_asset_versions.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_aton_shapes.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_attach_only.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_authority_projection.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_authority_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_blend_folder.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_blend_locator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_blend_room.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_bucket_alignment.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_canonical_document_rename.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_canvas_metadata_import.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_capture_acquisition.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_capture_rdf_class.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_chronology_on_request.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_cloud_placeholders.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_coating_unit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_composite_node_name.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_connection_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_consolida_2.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_consolidate_compose.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_consumer_drift.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_container.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_container_layouts.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_containment_tpq.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_contemporaneity.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_contract.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_contract_consumer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_convert_command.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_crdt.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_cycle_message_is_cheap.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_datamodel_fingerprint.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_datamodel_i18n.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_detail.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_deterministic_ids.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_em_sourcelist.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_file_set_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_graphml_without_a_database.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_image_set_texturing.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_not_georeferenced.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_one_act_n_outputs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev29_ttl_round_trip.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dev30_decisions.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_devices.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dissemination_tombstones.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dove_sta_il_testo.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dtc_corpus.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dtc_ingest.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dtc_neighbourhood.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dtc_projection.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_dtc_residency.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_edge_outside_graph.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_edge_ui_phrases.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_editorial.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_emjson_conformance.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_emjson_no_drawing_keys.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_emjson_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_emjson_schema_version.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_end_of_unit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_epoch_instances.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_epoch_undated_import.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_explicit_node_type_marker.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_extracted_from_unit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_file_frame.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_filtered_import.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_fmpxml_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_fs_backend.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_functional_units.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_georeference_scene.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_gis_site.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_gltf_stitch.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_glyph_paths.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_header_code.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_helpers_indexed.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_indices_alive.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_indices_edges.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_removal.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_graph_scope_migration.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_hdto_glyphs.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_hdto_projection.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_hdto_study.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_header_key_aliases.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_i_generi_dei_passi.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_iiif.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_il_modo_d_accesso.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_il_modo_dal_relay.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_il_proprietario_si_legge.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_il_riallineamento.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_import_without_residues.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_importer_edge_hygiene.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_ipynb_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_iri_extendedmatrix.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_issue27_small_points.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_la_lingua_alla_nascita.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_la_lingua_dei_dati.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_la_lingua_nell_op.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_la_riga_d_intestazione.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_lab_orizzonti.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_latex_exporter.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_le_traduzioni.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_lod_levels.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_lossless_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_mapping_authoring.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_mapping_csv_and_relations.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_masonry_unit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_material_color.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_merge_conflicts.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_metashape_project.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_migrate_legacy_proxy.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_authorship.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_bake_docx.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_figures.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_generation.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_mentions.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_node.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_query.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_scaffolder.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_site_place.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_narrative_unvalidated_export.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_node_datamodel_registry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_node_finder.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_node_type_map_integrity.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_one_resolver.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_one_spelling_writers.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_ontology_html.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_op_vocabulary.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_part_twins.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_pg_importer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_photogrammetry_delta.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_physical_relation_spellings.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_piu_indirizzi.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_promote_keeps_proxy_type.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_promotion.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_property_as_source.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_property_owners.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_proxy_resource.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_proxy_retype.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_psx_locator.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_pyarchinit_tier2.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_qualia_dai_d7_d8.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_rdf_embedding.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_rdf_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_rdf_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_rdf_sub_epoch_direction.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reading_coords.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reading_glb.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reading_migration.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reading_place.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reading_rdf.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_recompute_warnings.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_registration.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_release.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reproject.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_files_implicit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_layer.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_representations.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_resource_tier.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_reverse_edges.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_rm_container_node_group.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_room_import.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_room_import_access.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_room_import_inventory.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_room_import_trust.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_s3_backend.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_semantic_purity.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_series_vsf.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_shelf.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_shelf_facets.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_shelf_hatting.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_shelf_role_uri_table.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_shipped_mappings.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_source_list_mapping.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_source_text.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_special_find_definitions.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_stable_study_code.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_stamp.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_stamp_hints.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_stamp_title_description.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_storage_rows.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_store_backed_geometry.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_stratiminer_api.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_study_metadata.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_threed_instances.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_tileset_fit.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_tileset_resource.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_transform_form.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_ttl_roundtrip.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_unit_definition.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_use_profiles.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_valore_proprieta_doppio.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_verifica_provenance.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_version_for.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_visual_assets.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_wheel_drift.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_xlsx_importer_graph_init.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/tests/test_xlsx_source_column.py +0 -0
- {s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/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.dev92
|
|
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.dev92"
|
|
8
8
|
description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -1236,6 +1236,46 @@
|
|
|
1236
1236
|
"de": "Eigenschaft"
|
|
1237
1237
|
}
|
|
1238
1238
|
},
|
|
1239
|
+
"LandscapeSurfaceNode": {
|
|
1240
|
+
"description": {
|
|
1241
|
+
"en": "The ground surface of a landscape: a DEM (a gis_layer GeoTIFF of raster.kind dem) drawn as a mesh, and optionally an image (an orthophoto, raster.kind image) draped on it — the two layers reached by has_linked_resource, the site it is the ground of by is_in_location. A GEOMETRY of the place, not its identity (the LocationNodeGroup) and not a representation of a stratigraphic node (the RepresentationModelNode).",
|
|
1242
|
+
"validated_it": false,
|
|
1243
|
+
"validated_el": false,
|
|
1244
|
+
"validated_he": false,
|
|
1245
|
+
"validated_es": false,
|
|
1246
|
+
"validated_pl": false,
|
|
1247
|
+
"validated_ro": false,
|
|
1248
|
+
"validated_fr": false,
|
|
1249
|
+
"validated_de": false,
|
|
1250
|
+
"it": "La superficie del suolo di un paesaggio: un DEM (un gis_layer GeoTIFF di raster.kind dem) disegnato come mesh e, se c'è, un'immagine (un'ortofoto, raster.kind image) drappeggiata sopra — i due layer raggiunti con has_linked_resource, il sito di cui è il suolo con is_in_location. Una GEOMETRIA del luogo, non la sua identità (il LocationNodeGroup) né la rappresentazione di un nodo stratigrafico (il RepresentationModelNode).",
|
|
1251
|
+
"el": "Η επιφάνεια του εδάφους ενός τοπίου: ένα DEM (gis_layer GeoTIFF, raster.kind dem) σχεδιασμένο ως πλέγμα και, αν υπάρχει, μια εικόνα (ορθοφωτογραφία, raster.kind image) πάνω του — τα δύο επίπεδα μέσω has_linked_resource, ο χώρος του οποίου είναι το έδαφος μέσω is_in_location. Μια ΓΕΩΜΕΤΡΙΑ του τόπου, όχι η ταυτότητά του (LocationNodeGroup) ούτε αναπαράσταση στρωματογραφικού κόμβου (RepresentationModelNode).",
|
|
1252
|
+
"he": "פני הקרקע של נוף: DEM (שכבת gis_layer מסוג GeoTIFF, raster.kind dem) המצויר כרשת, ואם יש — תמונה (אורתופוטו, raster.kind image) הנפרשת עליו; שתי השכבות דרך has_linked_resource, והאתר שזו קרקעו דרך is_in_location. גאומטריה של המקום, לא זהותו (LocationNodeGroup) ולא ייצוג של צומת סטרטיגרפי (RepresentationModelNode).",
|
|
1253
|
+
"es": "La superficie del suelo de un paisaje: un DEM (un gis_layer GeoTIFF de raster.kind dem) dibujado como malla y, si existe, una imagen (una ortofoto, raster.kind image) extendida sobre él — las dos capas alcanzadas con has_linked_resource, el sitio del que es el suelo con is_in_location. Una GEOMETRÍA del lugar, no su identidad (el LocationNodeGroup) ni la representación de un nodo estratigráfico (el RepresentationModelNode).",
|
|
1254
|
+
"pl": "Powierzchnia gruntu krajobrazu: DEM (gis_layer GeoTIFF, raster.kind dem) narysowany jako siatka i, jeśli jest, obraz (ortofotomapa, raster.kind image) nałożony na niego — obie warstwy przez has_linked_resource, stanowisko, którego jest gruntem, przez is_in_location. GEOMETRIA miejsca, nie jego tożsamość (LocationNodeGroup) ani reprezentacja węzła stratygraficznego (RepresentationModelNode).",
|
|
1255
|
+
"ro": "Suprafața solului unui peisaj: un DEM (un gis_layer GeoTIFF de raster.kind dem) desenat ca rețea și, dacă există, o imagine (o ortofotografie, raster.kind image) așternută peste el — cele două straturi prin has_linked_resource, situl al cărui sol este prin is_in_location. O GEOMETRIE a locului, nu identitatea lui (LocationNodeGroup) și nici reprezentarea unui nod stratigrafic (RepresentationModelNode).",
|
|
1256
|
+
"fr": "La surface du sol d'un paysage : un MNT (un gis_layer GeoTIFF de raster.kind dem) dessiné comme maillage et, s'il y en a une, une image (une orthophoto, raster.kind image) drapée dessus — les deux couches atteintes par has_linked_resource, le site dont c'est le sol par is_in_location. Une GÉOMÉTRIE du lieu, non son identité (le LocationNodeGroup) ni la représentation d'un nœud stratigraphique (le RepresentationModelNode).",
|
|
1257
|
+
"de": "Die Bodenoberfläche einer Landschaft: ein DGM (ein gis_layer GeoTIFF mit raster.kind dem), als Netz gezeichnet, und gegebenenfalls ein darübergelegtes Bild (ein Orthofoto, raster.kind image) — die beiden Ebenen über has_linked_resource, der Fundort, dessen Boden sie ist, über is_in_location. Eine GEOMETRIE des Ortes, nicht seine Identität (LocationNodeGroup) und nicht die Repräsentation eines stratigraphischen Knotens (RepresentationModelNode)."
|
|
1258
|
+
},
|
|
1259
|
+
"label": {
|
|
1260
|
+
"en": "Landscape surface",
|
|
1261
|
+
"validated_it": false,
|
|
1262
|
+
"validated_el": false,
|
|
1263
|
+
"validated_he": false,
|
|
1264
|
+
"validated_es": false,
|
|
1265
|
+
"validated_pl": false,
|
|
1266
|
+
"validated_ro": false,
|
|
1267
|
+
"validated_fr": false,
|
|
1268
|
+
"validated_de": false,
|
|
1269
|
+
"it": "Superficie del paesaggio",
|
|
1270
|
+
"el": "Επιφάνεια τοπίου",
|
|
1271
|
+
"he": "פני הנוף",
|
|
1272
|
+
"es": "Superficie del paisaje",
|
|
1273
|
+
"pl": "Powierzchnia krajobrazu",
|
|
1274
|
+
"ro": "Suprafața peisajului",
|
|
1275
|
+
"fr": "Surface du paysage",
|
|
1276
|
+
"de": "Landschaftsoberfläche"
|
|
1277
|
+
}
|
|
1278
|
+
},
|
|
1239
1279
|
"RegistrationTransformNode": {
|
|
1240
1280
|
"description": {
|
|
1241
1281
|
"en": "The 7-parameter similarity (rotation 3x3 row-major, translation [x,y,z], positive scale) that places a produced model, with data.rms and data.residuals — the error bar, stored beside the claim rather than in a log nobody keeps. data.crs is the frame the model lands IN; null means a site-local frame (mode 'local'), which is NOT the same sentence as an absent transform. Re-registration is a NEW node produced by a NEW crmdig:D7; the superseded one is never edited.",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
dcterms:creator "Emanuel Demetrescu" ;
|
|
48
48
|
dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
|
|
49
49
|
dcterms:issued "2026-05-23"^^xsd:date ;
|
|
50
|
-
owl:versionInfo "1.6.
|
|
51
|
-
rdfs:comment "Formal ontology for Extended Matrix (EM): a human-readable layout for knowledge graphs of archaeological stratigraphy and virtual reconstruction. Extends CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMgeo, with PROV-O for agent provenance and HDT-O for digital-twin granularity. This file declares the em: classes and properties introduced in s3dgraphy v1.6.0. v1.6.23 (2026-10-30, MICRO lab sito Sarmizegetusa, decision D-LG5 of the Landscape Graph): em:VirtualSite, the site supposed from topographic units, traces and sources, without stratigraphy — a named intersection of crm:E89_Propositional_Object and crm:E27_Site on the model of em:VirtualSpecialFind (E89 + E19); the only CRMem term the Landscape Graph asks. Carried by a LocationNodeGroup of level sito with data.virtual (node datamodel 1.6.39). v1.6.22 (2026-10-25, MICRO sub-epoch RDF, decided by E.D.): em:hasSubEpoch becomes rdfs:subPropertyOf crm:P10i_contains — the parent contains its sub-epoch — now that the CRM projection of has_sub_epoch is written the right way round, <sub-epoch> crm:P10_falls_within <parent> (connections 1.6.49, rdf_subject target). v1.6.21 (2026-10-23, MICRO special find e fine dell'unità, part 3, decided by E.D.): the end of a unit is typed. em:ContinuityNode becomes a subclass of crm:E5_Event (was crm:E64_End_of_Existence): its class follows its type — E6 Destruction, E81 Transformation, E80 Part Removal, E9 Move, E64 End of Existence — and E80 and E9 are not ends of existence. Five concepts of the EM vocabulary, crm:E55_Type instances reached by crm:P2_has_type: em:EndOfUnitDestroyed, em:EndOfUnitTransformed, em:EndOfUnitRemoved, em:EndOfUnitRelocated, em:EndOfUnitUnknown (section 5). v1.6.20 (2026-10-23, MICRO special find e fine dell'unità, part 2, decided by E.D.): em:SeriesOfVirtualSpecialFind, the series of Virtual Special Finds (serVSF): the repetition of one equal object, a subclass of em:VirtualSpecialFind like the other series of their unit (section 4). v1.6.19 (2026-10-23, MICRO special find e fine dell'unità, part 1, decided by E.D.): no new term — the labels and comments of em:DisplacedSpecialFind (now «Special Find», defined in positive: movable, documented where it was found), em:ReusedSpecialFind (now «Repositioned Special Find»: fixed, intentionally put back, reuse one case of it) and em:VirtualSpecialFind (two roles: holds the fragments, completes what was restored); the URIs are unchanged. v1.6.18 (2026-10-20, decided by E.D.): no new term — the comment of em:EMGraph, and in hdto_extension.ttl those of hdto:HC9_Study and hdto:HP25_has_created, state 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, the two classes stay distinct because E2 and E77 are disjoint, and the graph is not the digital twin (HC2). v1.6.17 (2026-10-17, MICRO le alternative e la trasformazione, decided by E.D.): section 20 — the transformation of a 3D object (a representation model or a semantic shape) in the frame of the study: em:position, em:rotationDegrees, em:scale and em:pivot as rdf:JSON arrays of three numbers, em:rotationOrder and em:upAxis as strings (node datamodel 1.6.31, properties.transform). v1.6.16 (2026-10-10, MICRO le entità spaziotemporali, decided by E.D.): no new term — em:firstAttestedInEpoch and em:survivesInEpoch widen their domain from crmarchaeo:A8_Stratigraphic_Unit to crm:E77_Persistent_Item, because a document (E31) and a person (E21) are placed in the lanes of the matrix like a unit (connections 1.6.38); A8 is an E77, so every triple already emitted stays type-correct. v1.6.15 (2026-10-04, D1, decided by E.D.): section 19 — the level of a version of an asset (em:lodLevel, computed from its chain, written on export), its uses (em:use) and seven measures (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.14 (2026-10-02, dev30, decided by E.D. on the dev29 report): section 18 — em:retrievedFrom, where a retrieval came from (D1), and em:membersDigest, the digest of a file_set with a predicate of its own (D4; em:digestCovers stays for compatibility). v1.6.13 (2026-10-02, dev29, measured on San Pietro): seven DatatypeProperties, section 17 — how the bytes of a resource are packed and what its digest covers (em:packaging, em:tier, em:digestCovers, em:contentDigest) and what a DTC step declares (em:technique, em:parameters, em:software, the last two rdf:JSON): the round trip em.json → TTL → em.json lost all seven. v1.6.12 (2026-11-01, dev28, decided by E.D. 2026-10-01): no new term — em:authMode admits a third value, 'declared' (an iD typed in a tool's preferences and checked by nobody), with no em:attestedBy. v1.6.11 (2026-10-31, dev27, decided by E.D. 2026-10-01): ten properties. Section 15, several addresses of ONE resource (em:hasAddress to <resource>/address/<i>, em:locator, em:checkedAt, em:reachable) and a dated digest (em:checksumAt); section 16, how the hand of a signature had entered (em:createdVia, em:modifiedVia, em:validatedVia to <node>/auth/<stamp>, em:authMode orcid | node_password, em:attestedBy the StratiGraph node). The language of the content of a resource leaves as dcterms:language: no em: term. v1.6.10 (2026-10-29, MICRO le traduzioni, decided by E.D. 2026-10-01): six DatatypeProperties for the language of the original and its translations (section 14) — em:originalLanguage on any node, which says which literal is the original once translations share its predicate, and em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested on a TranslationNode, which is a plain crm:E33_Linguistic_Object reached by crm:P73_has_translation: CIDOC has the class and the relation, so no em: class is added. v1.6.9 (2026-10-18, MICRO la risorsa e i suoi file): em:ResourceFile, ONE FILE of a resource (node datamodel 1.6.17), a subclass of crmdig:D1_Digital_Object; the resource is composed of its files by crm:P106_is_composed_of (connections has_file, 1.6.30). A distinct URI because a DTC output resource is already typed crmdig:D1, and a file typed only D1 would read back as a resource. v1.6.2 (2026-09-21, CIDOC repair pass): the eight terms the datamodels cited and this file never defined are declared in section 12; em:NodeGroup and em:ParadataNodeGroup leave the undeclared crm:E78_Collection for crm:E73_Information_Object and crm:E89_Propositional_Object; em:SemanticShape leaves crmgeo:SP5 for crm:E73_Information_Object, provisionally; crmarchaeo:AP11_has_physical_relation becomes AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0; and em:RepresentationModel says what a representation model IS. v1.6.5 (2026-10-20, MICRO la definizione dell\'unita\'): em:hasDefinition, the DEFINIZIONE of a stratigraphic unit as a subproperty of crm:P2_has_type — declared for the node datamodel 1.6.9 entry StratigraphicNode.properties.definition, not emitted by default (owl:versionInfo was left at 1.6.2 by the 1.6.3/1.6.4 passes and is realigned here). v1.6.8 (2026-10-11, MICRO la geometria per origine): the vertices of a 3D reading (point, line, polyline) are data of the region (node datamodel 1.6.15, AnnotationRegionNode.coords) and leave for RDF as ONE GeoSPARQL 1.1 literal: <region> geo:hasGeometry <region>/geometry, a geo:Geometry with geo:asWKT '<CRS IRI> POINT Z (x y z)' | 'MULTIPOINT Z (...)' | 'LINESTRING Z (...)'^^geo:wktLiteral. WHY GeoSPARQL and not em: terms: the WKT literal is the standard every triplestore with a spatial index reads, and it is the 3D twin of the Media Fragment a 2D region already emits (a string a consumer outside EM can act on); CRMgeo was built to meet GeoSPARQL at exactly this point (SP5 Geometric Place Expression ~ geo:Geometry), and an em:coords literal would say the same thing to nobody. The CRS travels INSIDE the literal, so it cannot be separated from the numbers: em:LocalSceneFrame (declared here) for the scene-local frame, the OGC EPSG IRI for a projected one. em:vertexCount stays (the count of a .glb resource above the threshold). The .glb of a reading is no longer a SemanticShape's rdfs:seeAlso: above coords.inline_max_vertices (500) it is a ResourceNode the region reaches with has_linked_resource (crm:P67_refers_to), and a proxy's .glb is likewise a proxy_model ResourceNode (connections 1.6.28-1.6.29). v1.6.7 (2026-09-30, MICRO la cattura in RDF): no em: term added — the acquisition of a digital object is typed by its KIND. A capture is not a transfer: crmdig:D2_Digitization_Process for a photograph or a laser scan, crmdig:D11_Digital_Measurement_Event for a topographic or GNSS survey, crm:E65_Creation for a field drawing or a recording sheet (made by hand; the file is their copy, so no D7 machine event is asserted); a retrieval (download, local import, URI, ingest) stays crmdig:D12_Data_Transfer_Event. The rule is data (em_visual_rules 1.6.24, dtc_kinds.acquisition.<kind>.mapping). v1.6.6 (2026-10-07, MICRO la misura in RDF): the place of a reading gets its quote and its measure. The quote of a passage reuses W3C Web Annotation (oa:hasSelector -> oa:TextQuoteSelector, oa:exact) — the only standard term for a quote, which has no fragment-string form; its offsets stay the RFC 5147 em:hasSelector 'char=s,e'. The length of a line or polyline reuses CIDOC (crm:P43_has_dimension -> crm:E54_Dimension, P90_has_value xsd:double, P91_has_unit -> a QUDT unit IRI); two em: terms are new, em:vertexCount and em:crs, for what neither vocabulary says. The .glb of a 3D reading is not described here: its URL is the rdfs:seeAlso of the SemanticShape the region reaches with em:hasSemanticShape, and no coordinate enters RDF."@en ;
|
|
50
|
+
owl:versionInfo "1.6.24" ;
|
|
51
|
+
rdfs:comment "Formal ontology for Extended Matrix (EM): a human-readable layout for knowledge graphs of archaeological stratigraphy and virtual reconstruction. Extends CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMgeo, with PROV-O for agent provenance and HDT-O for digital-twin granularity. This file declares the em: classes and properties introduced in s3dgraphy v1.6.0. v1.6.24 (2026-11-06, MICRO-GIS-BASE): em:LandscapeSurface, the ground surface of a landscape built from a DEM and an image draped on it (node datamodel 1.6.40, LandscapeSurfaceNode), a subclass of crmdig:D1_Digital_Object, proposed. v1.6.23 (2026-10-30, MICRO lab sito Sarmizegetusa, decision D-LG5 of the Landscape Graph): em:VirtualSite, the site supposed from topographic units, traces and sources, without stratigraphy — a named intersection of crm:E89_Propositional_Object and crm:E27_Site on the model of em:VirtualSpecialFind (E89 + E19); the only CRMem term the Landscape Graph asks. Carried by a LocationNodeGroup of level sito with data.virtual (node datamodel 1.6.39). v1.6.22 (2026-10-25, MICRO sub-epoch RDF, decided by E.D.): em:hasSubEpoch becomes rdfs:subPropertyOf crm:P10i_contains — the parent contains its sub-epoch — now that the CRM projection of has_sub_epoch is written the right way round, <sub-epoch> crm:P10_falls_within <parent> (connections 1.6.49, rdf_subject target). v1.6.21 (2026-10-23, MICRO special find e fine dell'unità, part 3, decided by E.D.): the end of a unit is typed. em:ContinuityNode becomes a subclass of crm:E5_Event (was crm:E64_End_of_Existence): its class follows its type — E6 Destruction, E81 Transformation, E80 Part Removal, E9 Move, E64 End of Existence — and E80 and E9 are not ends of existence. Five concepts of the EM vocabulary, crm:E55_Type instances reached by crm:P2_has_type: em:EndOfUnitDestroyed, em:EndOfUnitTransformed, em:EndOfUnitRemoved, em:EndOfUnitRelocated, em:EndOfUnitUnknown (section 5). v1.6.20 (2026-10-23, MICRO special find e fine dell'unità, part 2, decided by E.D.): em:SeriesOfVirtualSpecialFind, the series of Virtual Special Finds (serVSF): the repetition of one equal object, a subclass of em:VirtualSpecialFind like the other series of their unit (section 4). v1.6.19 (2026-10-23, MICRO special find e fine dell'unità, part 1, decided by E.D.): no new term — the labels and comments of em:DisplacedSpecialFind (now «Special Find», defined in positive: movable, documented where it was found), em:ReusedSpecialFind (now «Repositioned Special Find»: fixed, intentionally put back, reuse one case of it) and em:VirtualSpecialFind (two roles: holds the fragments, completes what was restored); the URIs are unchanged. v1.6.18 (2026-10-20, decided by E.D.): no new term — the comment of em:EMGraph, and in hdto_extension.ttl those of hdto:HC9_Study and hdto:HP25_has_created, state 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, the two classes stay distinct because E2 and E77 are disjoint, and the graph is not the digital twin (HC2). v1.6.17 (2026-10-17, MICRO le alternative e la trasformazione, decided by E.D.): section 20 — the transformation of a 3D object (a representation model or a semantic shape) in the frame of the study: em:position, em:rotationDegrees, em:scale and em:pivot as rdf:JSON arrays of three numbers, em:rotationOrder and em:upAxis as strings (node datamodel 1.6.31, properties.transform). v1.6.16 (2026-10-10, MICRO le entità spaziotemporali, decided by E.D.): no new term — em:firstAttestedInEpoch and em:survivesInEpoch widen their domain from crmarchaeo:A8_Stratigraphic_Unit to crm:E77_Persistent_Item, because a document (E31) and a person (E21) are placed in the lanes of the matrix like a unit (connections 1.6.38); A8 is an E77, so every triple already emitted stays type-correct. v1.6.15 (2026-10-04, D1, decided by E.D.): section 19 — the level of a version of an asset (em:lodLevel, computed from its chain, written on export), its uses (em:use) and seven measures (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.14 (2026-10-02, dev30, decided by E.D. on the dev29 report): section 18 — em:retrievedFrom, where a retrieval came from (D1), and em:membersDigest, the digest of a file_set with a predicate of its own (D4; em:digestCovers stays for compatibility). v1.6.13 (2026-10-02, dev29, measured on San Pietro): seven DatatypeProperties, section 17 — how the bytes of a resource are packed and what its digest covers (em:packaging, em:tier, em:digestCovers, em:contentDigest) and what a DTC step declares (em:technique, em:parameters, em:software, the last two rdf:JSON): the round trip em.json → TTL → em.json lost all seven. v1.6.12 (2026-11-01, dev28, decided by E.D. 2026-10-01): no new term — em:authMode admits a third value, 'declared' (an iD typed in a tool's preferences and checked by nobody), with no em:attestedBy. v1.6.11 (2026-10-31, dev27, decided by E.D. 2026-10-01): ten properties. Section 15, several addresses of ONE resource (em:hasAddress to <resource>/address/<i>, em:locator, em:checkedAt, em:reachable) and a dated digest (em:checksumAt); section 16, how the hand of a signature had entered (em:createdVia, em:modifiedVia, em:validatedVia to <node>/auth/<stamp>, em:authMode orcid | node_password, em:attestedBy the StratiGraph node). The language of the content of a resource leaves as dcterms:language: no em: term. v1.6.10 (2026-10-29, MICRO le traduzioni, decided by E.D. 2026-10-01): six DatatypeProperties for the language of the original and its translations (section 14) — em:originalLanguage on any node, which says which literal is the original once translations share its predicate, and em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested on a TranslationNode, which is a plain crm:E33_Linguistic_Object reached by crm:P73_has_translation: CIDOC has the class and the relation, so no em: class is added. v1.6.9 (2026-10-18, MICRO la risorsa e i suoi file): em:ResourceFile, ONE FILE of a resource (node datamodel 1.6.17), a subclass of crmdig:D1_Digital_Object; the resource is composed of its files by crm:P106_is_composed_of (connections has_file, 1.6.30). A distinct URI because a DTC output resource is already typed crmdig:D1, and a file typed only D1 would read back as a resource. v1.6.2 (2026-09-21, CIDOC repair pass): the eight terms the datamodels cited and this file never defined are declared in section 12; em:NodeGroup and em:ParadataNodeGroup leave the undeclared crm:E78_Collection for crm:E73_Information_Object and crm:E89_Propositional_Object; em:SemanticShape leaves crmgeo:SP5 for crm:E73_Information_Object, provisionally; crmarchaeo:AP11_has_physical_relation becomes AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0; and em:RepresentationModel says what a representation model IS. v1.6.5 (2026-10-20, MICRO la definizione dell\'unita\'): em:hasDefinition, the DEFINIZIONE of a stratigraphic unit as a subproperty of crm:P2_has_type — declared for the node datamodel 1.6.9 entry StratigraphicNode.properties.definition, not emitted by default (owl:versionInfo was left at 1.6.2 by the 1.6.3/1.6.4 passes and is realigned here). v1.6.8 (2026-10-11, MICRO la geometria per origine): the vertices of a 3D reading (point, line, polyline) are data of the region (node datamodel 1.6.15, AnnotationRegionNode.coords) and leave for RDF as ONE GeoSPARQL 1.1 literal: <region> geo:hasGeometry <region>/geometry, a geo:Geometry with geo:asWKT '<CRS IRI> POINT Z (x y z)' | 'MULTIPOINT Z (...)' | 'LINESTRING Z (...)'^^geo:wktLiteral. WHY GeoSPARQL and not em: terms: the WKT literal is the standard every triplestore with a spatial index reads, and it is the 3D twin of the Media Fragment a 2D region already emits (a string a consumer outside EM can act on); CRMgeo was built to meet GeoSPARQL at exactly this point (SP5 Geometric Place Expression ~ geo:Geometry), and an em:coords literal would say the same thing to nobody. The CRS travels INSIDE the literal, so it cannot be separated from the numbers: em:LocalSceneFrame (declared here) for the scene-local frame, the OGC EPSG IRI for a projected one. em:vertexCount stays (the count of a .glb resource above the threshold). The .glb of a reading is no longer a SemanticShape's rdfs:seeAlso: above coords.inline_max_vertices (500) it is a ResourceNode the region reaches with has_linked_resource (crm:P67_refers_to), and a proxy's .glb is likewise a proxy_model ResourceNode (connections 1.6.28-1.6.29). v1.6.7 (2026-09-30, MICRO la cattura in RDF): no em: term added — the acquisition of a digital object is typed by its KIND. A capture is not a transfer: crmdig:D2_Digitization_Process for a photograph or a laser scan, crmdig:D11_Digital_Measurement_Event for a topographic or GNSS survey, crm:E65_Creation for a field drawing or a recording sheet (made by hand; the file is their copy, so no D7 machine event is asserted); a retrieval (download, local import, URI, ingest) stays crmdig:D12_Data_Transfer_Event. The rule is data (em_visual_rules 1.6.24, dtc_kinds.acquisition.<kind>.mapping). v1.6.6 (2026-10-07, MICRO la misura in RDF): the place of a reading gets its quote and its measure. The quote of a passage reuses W3C Web Annotation (oa:hasSelector -> oa:TextQuoteSelector, oa:exact) — the only standard term for a quote, which has no fragment-string form; its offsets stay the RFC 5147 em:hasSelector 'char=s,e'. The length of a line or polyline reuses CIDOC (crm:P43_has_dimension -> crm:E54_Dimension, P90_has_value xsd:double, P91_has_unit -> a QUDT unit IRI); two em: terms are new, em:vertexCount and em:crs, for what neither vocabulary says. The .glb of a 3D reading is not described here: its URL is the rdfs:seeAlso of the SemanticShape the region reaches with em:hasSemanticShape, and no coordinate enters RDF."@en ;
|
|
52
52
|
owl:imports <http://www.cidoc-crm.org/cidoc-crm/> ,
|
|
53
53
|
<http://www.cidoc-crm.org/extensions/crminf/> ,
|
|
54
54
|
<http://www.cidoc-crm.org/extensions/crmarchaeo/> ,
|
|
@@ -744,6 +744,12 @@ em:RegistrationTransform
|
|
|
744
744
|
rdfs:subClassOf crm:E73_Information_Object ;
|
|
745
745
|
rdfs:comment "The 7-parameter similarity (rotation, translation, positive scale) that places a produced model in a frame, carrying its own error bar (rms, residuals) beside the claim rather than in a log nobody keeps. It DESCRIBES a mapping between two crmgeo:SP4 spatial coordinate reference systems, which CIDOC and CRMgeo model individually but never as a parameterised map between two of them — hence E73 as the honest superclass. Deliberately NOT an event: the alternative, leaving the parameters as literals on the D7 acquisition, loses the ability to point at «the placement» as a thing that gets superseded, and being superseded is the whole reason the transform is a node. The three modes are the SHAPE of the graph, never a flag: 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. Maps to: Python RegistrationTransformNode (node_type=\'registration_transform\')."@en .
|
|
746
746
|
|
|
747
|
+
em:LandscapeSurface
|
|
748
|
+
a owl:Class ;
|
|
749
|
+
rdfs:label "Landscape Surface"@en ;
|
|
750
|
+
rdfs:subClassOf crmdig:D1_Digital_Object ;
|
|
751
|
+
rdfs:comment "The ground surface of a landscape: a DEM drawn as a mesh and an image (an orthophoto) draped on it, two GIS layers the surface refers to. A GEOMETRY of a place, not its identity (the place is an E53 reached by P53 through is_in_location) and not the representation of a stratigraphic unit (em:StratigraphicRepresentation). Proposed: D1 is the safe class for a digital object made from two layers; crmgeo:SP6_Declarative_Place is the candidate when the geometry of places is modelled in CRMgeo. Maps to: Python LandscapeSurfaceNode (node_type='landscape_surface')."@en .
|
|
752
|
+
|
|
747
753
|
em:ResourceFile
|
|
748
754
|
a owl:Class ;
|
|
749
755
|
rdfs:label "Resource File"@en ;
|
{s3dgraphy-1.6.0.dev90 → s3dgraphy-1.6.0.dev92}/src/s3dgraphy/JSON_config/em_visual_rules.json
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"formal_language": "EM",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.42",
|
|
4
4
|
"_note_material_vs_qualia_color": [
|
|
5
5
|
"DUE COSE DIVERSE CHE SI CHIAMANO ENTRAMBE color. Non confonderle: e gia successo.",
|
|
6
6
|
"1) QUI, in node_styles.<tipo>.style.material.rgba_color — il COLORE DEL MATERIALE BLENDER del proxy 3D, in float LINEARI. UNA sola chiave: `rgba_color`. Fino a S8 il file ne usava due (`color` sui 13 tipi stratigrafici, `rgba_color` sugli altri) e get_material_color() ne leggeva una sola, restituendo None per 21 tipi su 38; ora sono unificate e la vecchia `color` e letta solo come tolleranza verso file scritti prima. Un tipo che non diventa mai una mesh NON ha material affatto (i contenitori di gruppo, e da S7 i dieci nodi che rendono per icona): per loro get_material_color() torna None, ed e corretto.",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"In breve: qui si decide di che colore DISEGNARE una US; li si registra di che colore ERA."
|
|
10
10
|
],
|
|
11
11
|
"_changelog": {
|
|
12
|
+
"1.6.42": "THE GROUND OF THE LANDSCAPE (MICRO-GIS-BASE, 6 Nov 2026). node_styles.LSF: the LandscapeSurfaceNode (nodes 1.6.40), in the #FF6600 reference family of GEO, GCP and RGT — a geometry placed in the world — with its own glyph src/2D/landscape_surface.svg (a ground as a mesh, two contour lines).",
|
|
12
13
|
"1.6.41": "THE SITE HAS A GLYPH, AS A DRAFT (MICRO lab sito Sarmizegetusa, 30 Oct 2026). 2d_render_glyph_types.data_glyphs += site: a LocationNodeGroup of level sito (the site of D-LG4, node datamodel 1.6.39) is drawn with src/2D/bozze/site.svg — a footprint in plan (a closed outline on a ground hatch) with a survey point inside, in the square plate of the HDT-O layer (a node of the cultural context; the site is the place the studies took place at). Drawn by Claude and marked BOZZA, so its 2d_glyphs entry carries draft: true: the mark is E.D.'s to approve (move it to src/2D/site.svg, drop the marker, rerun glyphs_from_svg --write). A virtual site (data.virtual) uses the same glyph for now. node_styles.LocationNodeGroup gains level_modifiers.sito: the toponym grey border, thicker (2.0), so a site reads as the strongest place of its chain where it is drawn as a folder. ADDITIVE.",
|
|
13
14
|
"1.6.40": "A CONTAINER WITHOUT MESHES LIES IN ITS OWN EPOCH (MICRO tileset, shift e epoche, 25 Oct 2026). alternatives.container_epochs: when a container has no member, or its members have no epoch, its epochs are its own — an epoch reaching it, or the epochs of the Document that wraps it (has_first_epoch / survive_in_epoch), as EM Tools' «Epochs of this set»; its alternative (a tileset of the whole survey) is then seen in that epoch. alternatives.choice: with an alternative and no member, the alternative is lit whatever the uses. Reference: s3dgraphy.resources.alternatives (container_own_epochs, choose_alternative); case in alternative_cases.json 1.1.0.",
|
|
14
15
|
"1.6.39": "THE SERIES OF VIRTUAL SPECIAL FINDS (MICRO special find e fine dell'unità, part 2, 23 Oct 2026). node_styles.serVSF: the series rule (an ellipse) with the colours of the VSF (border #B19F61, fill #CCCCCC, its material), and the VSF's own drawings (src/2D/VSF.svg, src/2D/VSF.png, src/3D/VSF.glb) until E.D. approves a glyph of its own — a proposal for EMStudio is in the report. The RSF comment says «Repositioned Special Find» (node datamodel 1.6.34).",
|
|
@@ -6258,6 +6259,17 @@
|
|
|
6258
6259
|
},
|
|
6259
6260
|
"label_position": "over"
|
|
6260
6261
|
},
|
|
6262
|
+
"LSF": {
|
|
6263
|
+
"_comment": "Landscape surface — the ground of a landscape: a DEM drawn as a mesh with an image draped on it (MICRO-GIS-BASE). In the #FF6600 family of the georeference (GEO, GCP, RGT): it is a geometry placed in the world, not a unit nor a document.",
|
|
6264
|
+
"2d_file_vect": "src/2D/landscape_surface.svg",
|
|
6265
|
+
"style": {
|
|
6266
|
+
"border_color": "#FF6600",
|
|
6267
|
+
"fill_color": "#FFFFFF",
|
|
6268
|
+
"border_style": "solid",
|
|
6269
|
+
"shape": "rectangle"
|
|
6270
|
+
},
|
|
6271
|
+
"label_position": "over"
|
|
6272
|
+
},
|
|
6261
6273
|
"GEO": {
|
|
6262
6274
|
"file_3d": "src/3D/geo.glb",
|
|
6263
6275
|
"2d_file_vect": "src/2D/geo_position.svg",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "by `python -m s3dgraphy.tools.sync_node_datamodel` — DO NOT hand-edit. The flat class hierarchy (parent/node_type/description) is derived from the Python Node subclasses; hand-authored semantics and CIDOC mappings live in s3Dgraphy_node_datamodel.json.",
|
|
3
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
+
"s3Dgraphy_data_model_version": "1.6.40",
|
|
4
4
|
"node_types": {
|
|
5
5
|
"ActivityNodeGroup": {
|
|
6
6
|
"parent": "GroupNode",
|
|
@@ -117,6 +117,11 @@
|
|
|
117
117
|
"node_type": "horizon",
|
|
118
118
|
"description": "One span of a periodization: label, start, end, colour, order."
|
|
119
119
|
},
|
|
120
|
+
"LandscapeSurfaceNode": {
|
|
121
|
+
"parent": "Node",
|
|
122
|
+
"node_type": "landscape_surface",
|
|
123
|
+
"description": ""
|
|
124
|
+
},
|
|
120
125
|
"LicenseNode": {
|
|
121
126
|
"parent": "Node",
|
|
122
127
|
"node_type": "license",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_connections_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.51 (28 Oct 2026, decided by E.D., MICRO valore-proprietà p.6): has_documentation declares `allowed_connections.read_only_sources: [\"PropertyNode\"]` — a property → document edge is read from old files and created by no tool; the chain goes through the extractor (see `_read_only_note` there, BUGFIX-CONN3). v1.6.50 (30 Oct 2026, MICRO lab sito Sarmizegetusa): has_property and has_linked_resource admit LocationNodeGroup as a SOURCE. The site (a LocationNodeGroup of level sito, D-LG4) carries its FOOTPRINT as a property (qualia footprint, a WKT with its CRS, with its paradata chain) and its GIS LAYERS as linked resources (url_type gis_layer). Measured first: both edges degraded to generic_connection on load (graph.add_edge validate), so EM Tools wrote them back as generic_connection. Widened rather than new edges: «this place has this property», «this place refers to this layer» already have names. ADDITIVE. v1.6.49 (25 Oct 2026, MICRO sub-epoch RDF, decided by E.D. 25 Oct): has_sub_epoch.mapping gains rdf_subject: \"target\". crm:P10_falls_within runs from the PART to the WHOLE, so the sub-epoch is its subject: <sub-epoch> P10 <parent>. Until now the exporter wrote it source-first, <parent> P10 <sub-epoch>, and the importer read it back with the same error. rdf_subject concerns the CORE predicate (`cidoc`) only: an extension predicate is declared in em.ttl with the edge's own direction, so <parent> em:hasSubEpoch <sub-epoch> is unchanged (and em:hasSubEpoch is now rdfs:subPropertyOf crm:P10i_contains, em.ttl). An RDF written before reads right: the importer recognises the old direction (P10 beside em:hasSubEpoch on the same pair, or, P10 alone, a subject whose dates strictly contain the object's) and says so. No edge, endpoint or graph changes; an older em.json is unchanged. v1.6.48 (24 Oct 2026, MICRO specifica em.json, part 0, decided by E.D. 24 Oct 16:45): abuts, bonded_to, equals (and is_abutted_by, is_bonded_to, is_physically_equal_to) IMPLY CONTEMPORANEITY — `implies: {edge: \"has_same_time\"}`. derive_relative_chronology and the table importers derive the has_same_time (origin derived, never duplicating one already written, in either direction); the GraphML exporter reads the same rule (s3dgraphy.temporal.same_time_pairs) instead of its own list of «ambiguous» relations. Graph.chronology is unchanged: has_same_time orders nothing. No edge, endpoint or mapping changes; an older file stays valid. v1.6.47 (24 Oct 2026, MICRO-LAB orizzonti, decided by E.D.): NEW edge is_in_periodization (HorizonNode → PeriodizationNode, P71 lists written target-first) for the shared measures of time of node datamodel 1.6.37. The rule «this physical relation implies that temporal one» moves INTO the datamodel (`implies` on cuts, fills, overlies, is_after; `implies: null` on abuts, bonded_to, equals — open); the relative-chronology edges may carry attributes.origin (derived | user | imported); has_sub_epoch is read by the chronology (the sub-epoch restricts its parent's interval). v1.6.46 (23 Oct 2026, MICRO special find e fine dell'unità, part 4, measured): description only — changed_from says what it already is, the INSTANCE CHAIN of one object across the epochs (the dotted line of the GraphML): one unit per epoch, each with its own epochs, models and transform (its position for that epoch) and conservation_state; one geometry for the proxy, a placement per instance. s3dgraphy.spatiotemporal.epoch_instances reads it. No edge, endpoint or mapping changes. v1.6.45 (23 Oct 2026, MICRO special find e fine dell'unità, part 3, decided by E.D.): is_after keeps its meaning in the graph — the BR → unit edge stays is_after, read by the Matrix and the propagation — and gains mapping.projection_when: when the more recent end is a ContinuityNode, the RDF does not write the temporal relation but the property of the BR's end_reason (node datamodel 1.6.36, ContinuityNode.properties.end_reason.rdf): <BR> P13_destroyed | P124_transformed | P113_removed | P25_moved | P93_took_out_of_existence <unit>, read back as is_after. v1.6.44 (23 Oct 2026, MICRO special find e fine dell'unità, part 2, decided by E.D.): the series of Virtual Special Finds (serVSF, SeriesOfVirtualSpecialFindUnit, node datamodel 1.6.35) takes the edges of the VSF: is_part_of as source (a series part of a US, a USD or a VSF) and as target (the VSF it repeats is part of it: P46i, no AP21i, no em:reconstructsFrom — a repetition is not a reassembly), and is_in_functional_unit as source. Every other edge reaches it as a StratigraphicNode, like the other series. 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).",
|
|
2
|
+
"s3Dgraphy_connections_model_version": "1.6.52",
|
|
3
|
+
"description": "v1.6.52 (6 Nov 2026, MICRO-GIS-BASE): LandscapeSurfaceNode — the ground surface of a landscape (a DEM and its image, two gis_layer GeoTIFFs) — joins the sources of has_linked_resource (the surface hats its layers) and of is_in_location (the surface says which site it is the ground of). No new edge. v1.6.51 (28 Oct 2026, decided by E.D., MICRO valore-proprietà p.6): has_documentation declares `allowed_connections.read_only_sources: [\"PropertyNode\"]` — a property → document edge is read from old files and created by no tool; the chain goes through the extractor (see `_read_only_note` there, BUGFIX-CONN3). v1.6.50 (30 Oct 2026, MICRO lab sito Sarmizegetusa): has_property and has_linked_resource admit LocationNodeGroup as a SOURCE. The site (a LocationNodeGroup of level sito, D-LG4) carries its FOOTPRINT as a property (qualia footprint, a WKT with its CRS, with its paradata chain) and its GIS LAYERS as linked resources (url_type gis_layer). Measured first: both edges degraded to generic_connection on load (graph.add_edge validate), so EM Tools wrote them back as generic_connection. Widened rather than new edges: «this place has this property», «this place refers to this layer» already have names. ADDITIVE. v1.6.49 (25 Oct 2026, MICRO sub-epoch RDF, decided by E.D. 25 Oct): has_sub_epoch.mapping gains rdf_subject: \"target\". crm:P10_falls_within runs from the PART to the WHOLE, so the sub-epoch is its subject: <sub-epoch> P10 <parent>. Until now the exporter wrote it source-first, <parent> P10 <sub-epoch>, and the importer read it back with the same error. rdf_subject concerns the CORE predicate (`cidoc`) only: an extension predicate is declared in em.ttl with the edge's own direction, so <parent> em:hasSubEpoch <sub-epoch> is unchanged (and em:hasSubEpoch is now rdfs:subPropertyOf crm:P10i_contains, em.ttl). An RDF written before reads right: the importer recognises the old direction (P10 beside em:hasSubEpoch on the same pair, or, P10 alone, a subject whose dates strictly contain the object's) and says so. No edge, endpoint or graph changes; an older em.json is unchanged. v1.6.48 (24 Oct 2026, MICRO specifica em.json, part 0, decided by E.D. 24 Oct 16:45): abuts, bonded_to, equals (and is_abutted_by, is_bonded_to, is_physically_equal_to) IMPLY CONTEMPORANEITY — `implies: {edge: \"has_same_time\"}`. derive_relative_chronology and the table importers derive the has_same_time (origin derived, never duplicating one already written, in either direction); the GraphML exporter reads the same rule (s3dgraphy.temporal.same_time_pairs) instead of its own list of «ambiguous» relations. Graph.chronology is unchanged: has_same_time orders nothing. No edge, endpoint or mapping changes; an older file stays valid. v1.6.47 (24 Oct 2026, MICRO-LAB orizzonti, decided by E.D.): NEW edge is_in_periodization (HorizonNode → PeriodizationNode, P71 lists written target-first) for the shared measures of time of node datamodel 1.6.37. The rule «this physical relation implies that temporal one» moves INTO the datamodel (`implies` on cuts, fills, overlies, is_after; `implies: null` on abuts, bonded_to, equals — open); the relative-chronology edges may carry attributes.origin (derived | user | imported); has_sub_epoch is read by the chronology (the sub-epoch restricts its parent's interval). v1.6.46 (23 Oct 2026, MICRO special find e fine dell'unità, part 4, measured): description only — changed_from says what it already is, the INSTANCE CHAIN of one object across the epochs (the dotted line of the GraphML): one unit per epoch, each with its own epochs, models and transform (its position for that epoch) and conservation_state; one geometry for the proxy, a placement per instance. s3dgraphy.spatiotemporal.epoch_instances reads it. No edge, endpoint or mapping changes. v1.6.45 (23 Oct 2026, MICRO special find e fine dell'unità, part 3, decided by E.D.): is_after keeps its meaning in the graph — the BR → unit edge stays is_after, read by the Matrix and the propagation — and gains mapping.projection_when: when the more recent end is a ContinuityNode, the RDF does not write the temporal relation but the property of the BR's end_reason (node datamodel 1.6.36, ContinuityNode.properties.end_reason.rdf): <BR> P13_destroyed | P124_transformed | P113_removed | P25_moved | P93_took_out_of_existence <unit>, read back as is_after. v1.6.44 (23 Oct 2026, MICRO special find e fine dell'unità, part 2, decided by E.D.): the series of Virtual Special Finds (serVSF, SeriesOfVirtualSpecialFindUnit, node datamodel 1.6.35) takes the edges of the VSF: is_part_of as source (a series part of a US, a USD or a VSF) and as target (the VSF it repeats is part of it: P46i, no AP21i, no em:reconstructsFrom — a repetition is not a reassembly), and is_in_functional_unit as source. Every other edge reaches it as a StratigraphicNode, like the other series. 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",
|
|
@@ -661,7 +661,8 @@
|
|
|
661
661
|
"ExtractorNode",
|
|
662
662
|
"CombinerNode",
|
|
663
663
|
"PropertyNode",
|
|
664
|
-
"LocationNodeGroup"
|
|
664
|
+
"LocationNodeGroup",
|
|
665
|
+
"LandscapeSurfaceNode"
|
|
665
666
|
],
|
|
666
667
|
"target": [
|
|
667
668
|
"LocationNodeGroup"
|
|
@@ -703,6 +704,7 @@
|
|
|
703
704
|
"target": [
|
|
704
705
|
"PropertyNode"
|
|
705
706
|
],
|
|
707
|
+
"_note_landscape": "1.6.52 (MICRO-GIS-BASE, 6 Nov 2026): LandscapeSurfaceNode as a SOURCE — the ground surface of a landscape hats its two layers, the DEM (gis_layer GeoTIFF, raster.kind dem) and the image draped on it (raster.kind image). The role is read from the layer, not from the edge.",
|
|
706
708
|
"_note_location": "1.6.50 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): LocationNodeGroup as a SOURCE — the site carries its footprint (qualia footprint, WKT with its CRS) as a property, with its paradata chain."
|
|
707
709
|
},
|
|
708
710
|
"_spatiotemporal_note": "v1.6.38 · SPATIOTEMPORAL ENTITIES (E.D. 2026-10-10). DocumentNode and AuthorNode are entities in space and time like a stratigraphic unit: this edge admits them with the same meaning it has between units. See the 1.6.38 note in `description`."
|
|
@@ -980,7 +982,8 @@
|
|
|
980
982
|
"SemanticShapeNode",
|
|
981
983
|
"AnnotationRegionNode",
|
|
982
984
|
"RepresentationModelNodeGroup",
|
|
983
|
-
"LocationNodeGroup"
|
|
985
|
+
"LocationNodeGroup",
|
|
986
|
+
"LandscapeSurfaceNode"
|
|
984
987
|
],
|
|
985
988
|
"target": [
|
|
986
989
|
"ResourceNode"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"s3Dgraphy_data_model_version": "1.6.
|
|
3
|
-
"description": "v1.6.39 (30 Oct 2026, MICRO lab sito Sarmizegetusa, on D-LG4/D-LG5 and the proposal «Il GIS dentro l'em.json»): THE SITE AND ITS FOOTPRINT, THE GIS LAYER AS A RESOURCE. (1) LocationNodeGroup.fields gains `level` (declared at last: hdto.make_site_place has written level \"sito\" since 20 Oct; \"sito\" is THE SITE of D-LG4, the last ring of the toponym chain a study took place at) and `virtual` (a site supposed without stratigraphy, D-LG5: rdf:type em:VirtualSite, E89 + E27; the only CRMem term the Landscape Graph asks). (2) ResourceNode: url_type `gis_layer` (resource_types) and the fields of a layer — gis_format, crs, bbox, bbox_wgs84, layer, feature_key, z_field, geometry_type, feature_count, z_range; a shapefile is packaging file_set with its companions reached by has_file; its frame is data.frame (1.6.38). Not projected to RDF yet (a reading aid, like the frame). The footprint is a PropertyNode of qualia `footprint` (qualia 1.6.10) on the site (connections 1.6.50: has_property and has_linked_resource admit LocationNodeGroup). s3dgraphy.gis. ADDITIVE. v1.6.38 (25 Oct 2026, MICRO tileset, shift e epoche, decided by E.D.): THE FRAME OF A FILE — ResourceNode.properties.frame (data.frame: {crs, shift [x, y, z], note, source}), also on RepresentationModelNode and RepresentationModelNodeGroup: «the coordinates of this file are CRS X minus shift S». Surveys exported with shifted coordinates declared in the project's CRS (the Basilica Iulia's RealityScan tileset falls on the equator) are relocated by the viewers when they read it (s3dgraphy.geometry.frame: frame_of, relocate_transform); the file is never rewritten. Looked for on the resource, its asset, then its hat (RM or container). Not in RDF. Additive. v1.6.37 (24 Oct 2026, MICRO-LAB orizzonti, decided by E.D.): NEW section periodization_nodes — PeriodizationNode (PER, E32 Authority Document) lists its HorizonNode (HOR, crmgeo:SP10 Declarative Time-Span: label, start_time, end_time, color, order, enabled) through is_in_periodization (connections 1.6.47). They are nodes of the MULTIGRAPH, at the level of the container (member graphs.periodizations, em_collection «Periodizations»), never inside a study graph; «inside» an horizon means overlapping it; several periodizations per project; the colours travel with the data. An em.json without horizons is unchanged. v1.6.36 (23 Oct 2026, MICRO special find e fine dell'unità, part 3, decided by E.D.): the END of a unit is typed. ContinuityNode (BR) gets the node element properties.end_reason (data.end_reason): destroyed, transformed, removed, relocated, unknown (the default) — the tokens EMStudio already writes for the first three, now declared. The type decides the CIDOC class (E6, E81, E80, E9, E64) and the property the BR reaches its unit by (P13, P124 + P123, P113 + P112, P25 + P27, P93), always with P2_has_type to the EM concept em:EndOfUnit…; IRIs checked on the CIDOC 7.1.3 RDFS. em:ContinuityNode becomes a subclass of crm:E5_Event (was E64): E80 and E9 are not ends of existence. In the graph the BR → unit edge stays is_after; the RDF projection is declared in connections 1.6.45. The BR is a spatiotemporal unit like the others: paradata, its own start and end, the epoch inherited from the last the unit lives in until it has a date of its own (s3dgraphy.spatiotemporal.end_of_unit). v1.6.35 (23 Oct 2026, MICRO special find e fine dell'unità, part 2, decided by E.D.): new subtype serVSF (SeriesOfVirtualSpecialFindUnit, em:SeriesOfVirtualSpecialFind, subclass of em:VirtualSpecialFind + E89 + E19), the series of Virtual Special Finds on the pattern of serSU / serUSD / serUSVn / serUSVs: the repetition of one equal object (the tile repaired with a VSF and instanced over the whole roof), never pieces that are all different (the drums of a tapering column). v1.6.34 (23 Oct 2026, MICRO special find e fine dell'unità, part 1, decided by E.D.): descriptions only — SF, RSF, VSF redefined. SF: movable, found erratic or in a layer and taken out during the excavation, defined in positive (documented where it was found); how it lay — in situ, redeposited, fallen in position — is an attribute, not a class; a collapse found in position is an SF. RSF: label «Repositioned Special Find» (was «Reused»), fixed and immovable, intentionally put back into a stable unit or a new functional placement, a historical physical anastylosis included; reuse is one case; class name and URI unchanged. Invariant: movable (SF) / immovable (RSF). VSF: two roles, the VSF that holds the fragments and the VSF that completes what was restored; restoring the block and remodelling the ancient version are both correct, the difference SF/VSF by a boolean. An SF is drawn in an earlier epoch only when the piece is estimated equal to the ancient one. No field, node element or mapping changes. 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.",
|
|
2
|
+
"s3Dgraphy_data_model_version": "1.6.40",
|
|
3
|
+
"description": "v1.6.40 (6 Nov 2026, MICRO-GIS-BASE): THE FOUR BASE GIS FORMATS ARE READ, AND THE GROUND OF THE LANDSCAPE HAS A NODE. (1) ResourceNode of url_type gis_layer: shapefile, GeoPackage (data.layer), GeoJSON and GeoTIFF (COG too) are read by s3dgraphy.gis without GDAL; the CRS comes from the file (prj/qpj, gpkg_spatial_ref_sys, the GeoJSON 2008 crs member or RFC 7946 WGS 84, the GeoTIFF GeoKeys), bbox in that CRS and bbox_wgs84 (pyproj). New field data.raster (a GeoTIFF: width, height, bands, kind dem|image, pixel_size, nodata, cog, tiled, overviews, compression, vertical_crs). (2) visualization_nodes.LandscapeSurfaceNode (node_type landscape_surface): the ground surface of a landscape — a DEM layer drawn as a mesh and an image layer draped on it — hatting its layers with has_linked_resource and saying its site with is_in_location (connections 1.6.52). Not an RM: an RM represents a stratigraphic node; not the LocationNodeGroup: the place is the identity, this is one of its geometries (the manual, location.rst). (3) Contour lines of a DEM are a DERIVED gis_layer (GeoJSON in the DEM's CRS) made by one DTC process of kind vectorization (s3dgraphy.gis.add_contours). v1.6.39 (30 Oct 2026, MICRO lab sito Sarmizegetusa, on D-LG4/D-LG5 and the proposal «Il GIS dentro l'em.json»): THE SITE AND ITS FOOTPRINT, THE GIS LAYER AS A RESOURCE. (1) LocationNodeGroup.fields gains `level` (declared at last: hdto.make_site_place has written level \"sito\" since 20 Oct; \"sito\" is THE SITE of D-LG4, the last ring of the toponym chain a study took place at) and `virtual` (a site supposed without stratigraphy, D-LG5: rdf:type em:VirtualSite, E89 + E27; the only CRMem term the Landscape Graph asks). (2) ResourceNode: url_type `gis_layer` (resource_types) and the fields of a layer — gis_format, crs, bbox, bbox_wgs84, layer, feature_key, z_field, geometry_type, feature_count, z_range; a shapefile is packaging file_set with its companions reached by has_file; its frame is data.frame (1.6.38). Not projected to RDF yet (a reading aid, like the frame). The footprint is a PropertyNode of qualia `footprint` (qualia 1.6.10) on the site (connections 1.6.50: has_property and has_linked_resource admit LocationNodeGroup). s3dgraphy.gis. ADDITIVE. v1.6.38 (25 Oct 2026, MICRO tileset, shift e epoche, decided by E.D.): THE FRAME OF A FILE — ResourceNode.properties.frame (data.frame: {crs, shift [x, y, z], note, source}), also on RepresentationModelNode and RepresentationModelNodeGroup: «the coordinates of this file are CRS X minus shift S». Surveys exported with shifted coordinates declared in the project's CRS (the Basilica Iulia's RealityScan tileset falls on the equator) are relocated by the viewers when they read it (s3dgraphy.geometry.frame: frame_of, relocate_transform); the file is never rewritten. Looked for on the resource, its asset, then its hat (RM or container). Not in RDF. Additive. v1.6.37 (24 Oct 2026, MICRO-LAB orizzonti, decided by E.D.): NEW section periodization_nodes — PeriodizationNode (PER, E32 Authority Document) lists its HorizonNode (HOR, crmgeo:SP10 Declarative Time-Span: label, start_time, end_time, color, order, enabled) through is_in_periodization (connections 1.6.47). They are nodes of the MULTIGRAPH, at the level of the container (member graphs.periodizations, em_collection «Periodizations»), never inside a study graph; «inside» an horizon means overlapping it; several periodizations per project; the colours travel with the data. An em.json without horizons is unchanged. v1.6.36 (23 Oct 2026, MICRO special find e fine dell'unità, part 3, decided by E.D.): the END of a unit is typed. ContinuityNode (BR) gets the node element properties.end_reason (data.end_reason): destroyed, transformed, removed, relocated, unknown (the default) — the tokens EMStudio already writes for the first three, now declared. The type decides the CIDOC class (E6, E81, E80, E9, E64) and the property the BR reaches its unit by (P13, P124 + P123, P113 + P112, P25 + P27, P93), always with P2_has_type to the EM concept em:EndOfUnit…; IRIs checked on the CIDOC 7.1.3 RDFS. em:ContinuityNode becomes a subclass of crm:E5_Event (was E64): E80 and E9 are not ends of existence. In the graph the BR → unit edge stays is_after; the RDF projection is declared in connections 1.6.45. The BR is a spatiotemporal unit like the others: paradata, its own start and end, the epoch inherited from the last the unit lives in until it has a date of its own (s3dgraphy.spatiotemporal.end_of_unit). v1.6.35 (23 Oct 2026, MICRO special find e fine dell'unità, part 2, decided by E.D.): new subtype serVSF (SeriesOfVirtualSpecialFindUnit, em:SeriesOfVirtualSpecialFind, subclass of em:VirtualSpecialFind + E89 + E19), the series of Virtual Special Finds on the pattern of serSU / serUSD / serUSVn / serUSVs: the repetition of one equal object (the tile repaired with a VSF and instanced over the whole roof), never pieces that are all different (the drums of a tapering column). v1.6.34 (23 Oct 2026, MICRO special find e fine dell'unità, part 1, decided by E.D.): descriptions only — SF, RSF, VSF redefined. SF: movable, found erratic or in a layer and taken out during the excavation, defined in positive (documented where it was found); how it lay — in situ, redeposited, fallen in position — is an attribute, not a class; a collapse found in position is an SF. RSF: label «Repositioned Special Find» (was «Reused»), fixed and immovable, intentionally put back into a stable unit or a new functional placement, a historical physical anastylosis included; reuse is one case; class name and URI unchanged. Invariant: movable (SF) / immovable (RSF). VSF: two roles, the VSF that holds the fragments and the VSF that completes what was restored; restoring the block and remodelling the ancient version are both correct, the difference SF/VSF by a boolean. An SF is drawn in an earlier epoch only when the piece is estimated equal to the ancient one. No field, node element or mapping changes. 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",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"source": "https://www.w3.org/TR/prov-o/"
|
|
49
49
|
},
|
|
50
50
|
"CRMem": {
|
|
51
|
-
"version": "1.6.
|
|
51
|
+
"version": "1.6.24",
|
|
52
52
|
"source": "internal em.ttl / hdto_extension.ttl companion ontologies"
|
|
53
53
|
}
|
|
54
54
|
},
|
|
@@ -1307,7 +1307,8 @@
|
|
|
1307
1307
|
"z_field": {"kind": "node_element", "em_json": "data.z_field", "rdf": null, "note": "the attribute holding the HEIGHT of a 2D point layer (a total-station export keeps Z in the dbf): a viewer draws the point at that height (2.5D). 1.6.39 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): a field of a GIS LAYER (url_type gis_layer), written by s3dgraphy.gis.add_gis_layer. Not projected to RDF yet: a reading aid for the tools, like the frame."},
|
|
1308
1308
|
"geometry_type": {"kind": "node_element", "em_json": "data.geometry_type", "rdf": null, "note": "Point | LineString | Polygon | MultiPoint, as the file says. 1.6.39 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): a field of a GIS LAYER (url_type gis_layer), written by s3dgraphy.gis.add_gis_layer. Not projected to RDF yet: a reading aid for the tools, like the frame."},
|
|
1309
1309
|
"feature_count": {"kind": "node_element", "em_json": "data.feature_count", "rdf": null, "note": "the number of features read. 1.6.39 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): a field of a GIS LAYER (url_type gis_layer), written by s3dgraphy.gis.add_gis_layer. Not projected to RDF yet: a reading aid for the tools, like the frame."},
|
|
1310
|
-
"z_range": {"kind": "node_element", "em_json": "data.z_range", "rdf": null, "note": "[min, max] of the heights read (the geometry's Z or z_field). 1.6.39 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): a field of a GIS LAYER (url_type gis_layer), written by s3dgraphy.gis.add_gis_layer. Not projected to RDF yet: a reading aid for the tools, like the frame."}
|
|
1310
|
+
"z_range": {"kind": "node_element", "em_json": "data.z_range", "rdf": null, "note": "[min, max] of the heights read (the geometry's Z or z_field). 1.6.39 (MICRO lab sito Sarmizegetusa, 30 Oct 2026): a field of a GIS LAYER (url_type gis_layer), written by s3dgraphy.gis.add_gis_layer. Not projected to RDF yet: a reading aid for the tools, like the frame."},
|
|
1311
|
+
"raster": {"kind": "node_element", "em_json": "data.raster", "rdf": null, "note": "1.6.40 (MICRO-GIS-BASE, 6 Nov 2026): a GeoTIFF layer's raster facts, read from its tags by s3dgraphy.gis.geotiff (no GDAL): {width, height, bands, bits, kind: dem | image, pixel_size (CRS units), nodata, tiled, overviews, cog (tiled with overviews or GDAL's LAYOUT=COG), compression (the TIFF code), vertical_crs, georef_source}. kind dem is one band of 16/32 bits or float: what a LandscapeSurfaceNode draws as its mesh; image is what it drapes. Not projected to RDF: a reading aid for the tools, like the frame."}
|
|
1311
1312
|
},
|
|
1312
1313
|
"resource_types": {
|
|
1313
1314
|
"gis_layer": [
|
|
@@ -1562,6 +1563,7 @@
|
|
|
1562
1563
|
"generic": "Generic Representation"
|
|
1563
1564
|
}
|
|
1564
1565
|
},
|
|
1566
|
+
"LandscapeSurfaceNode": {"class": "LandscapeSurfaceNode", "parent": "Node", "abbreviation": "LSF", "label": "Landscape surface", "description": "The ground surface of a landscape: a DEM (a gis_layer GeoTIFF of raster.kind dem) drawn as a mesh, and optionally an image (an orthophoto, raster.kind image) draped on it — the two layers reached by has_linked_resource, the site it is the ground of by is_in_location. A GEOMETRY of the place, not its identity (the LocationNodeGroup) and not a representation of a stratigraphic node (the RepresentationModelNode).", "s3Dgraphy_file": "landscape_surface_node.py", "mapping": {"cidoc": "crmdig:D1_Digital_Object", "alternative": "crmgeo:SP6_Declarative_Place", "rationale": "PROPOSED (MICRO-GIS-BASE, 6 Nov 2026), to be confirmed with the CRMgeo reading of the site page (location.rst: the place E53 has its geometries through P161 has spatial projection → E94 Space Primitive). The surface is a digital object made from two layers, so D1 is the safe class; SP6 Declarative Place is the candidate when the geometry of places is modelled in CRMgeo, as for the footprint."}, "em_extension": {"uri": "em:LandscapeSurface", "rdf_type": "owl:Class", "subclass_of": ["crmdig:D1_Digital_Object"], "extension_status": "proposed"}, "properties": {"name": "P1_is_identified_by", "description": "P3_has_note", "step_m": {"kind": "node_element", "em_json": "data.step_m", "rdf": null, "note": "the side of the mesh's cells in the scene, in metres, as whoever made the surface chose it; absent = the DEM's own pixel."}, "vertical_exaggeration": {"kind": "node_element", "em_json": "data.vertical_exaggeration", "rdf": null, "note": "1 unless said: a surface is drawn true (Shift Z = 0 by convention, the heights are the DEM's)."}}, "scope_note": "NARRATIVE (E.D., roadmap 30 Oct 2026: «GeoTIFF con riproiezione, nodo superficie del paesaggio»). A study around a site often has a DEM and an orthophoto of the area — a drone flight, a national LiDAR. As two layers they are documents; as the GROUND the 3D scene stands on they are one statement: this is the surface of the landscape, at this resolution, for this site. The node says it, so a reader of the em.json (EMStudio's Space, Heriverse, EM Tools) draws the same ground without a preference of a person. The DEM and the image keep their own CRS (each layer declares it): the surface is reprojected into the scene's CRS when drawn, never rewritten. Contour lines are a derived layer of the DEM (vectorization), not a part of the surface."},
|
|
1565
1567
|
"SemanticShapeNode": {
|
|
1566
1568
|
"class": "SemanticShapeNode",
|
|
1567
1569
|
"parent": "Node",
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- EM · LandscapeSurfaceNode. A ground drawn as a mesh seen in perspective, with two contour lines over it: the surface of a landscape built from a DEM, an image draped on it. Drawn for Extended Matrix, same licence as the datamodel. -->
|
|
2
|
+
<path fill="none" stroke="#FF6600" stroke-width="24" stroke-linejoin="round" d="M56 360 176 196 336 172 456 300 312 412 136 420z"/>
|
|
3
|
+
<path fill="none" stroke="#FF6600" stroke-width="14" stroke-linecap="round" d="M116 312C190 262 262 300 330 248c38-29 78-14 102 22M168 380c64-28 118-4 176-34 34-18 60-20 84-6"/>
|
|
4
|
+
</svg>
|