s3dgraphy 1.6.0.dev62__tar.gz → 1.6.0.dev63__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.
Files changed (593) hide show
  1. {s3dgraphy-1.6.0.dev62/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev63}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/datamodel_translations.json +140 -1
  4. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/node_registry.generated.json +11 -1
  5. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +72 -12
  6. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +49 -2
  7. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/__init__.py +1 -1
  8. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/api.py +5 -1
  9. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/container.py +36 -0
  10. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/diagnostics.py +11 -5
  11. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/edges/connections_loader.py +51 -0
  12. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/graph.py +114 -6
  13. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/base_importer.py +22 -0
  14. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/csv_importer.py +1 -0
  15. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/import_graphml.py +8 -0
  16. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/mapped_xlsx_importer.py +1 -0
  17. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/pyarchinit_importer.py +2 -1
  18. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/rdf_importer.py +7 -0
  19. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/unified_xlsx_importer.py +6 -0
  20. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/xml_importer.py +1 -0
  21. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +3 -3
  22. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +3 -3
  23. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/emdb/usm_mapping.json +3 -3
  24. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +3 -3
  25. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +3 -3
  26. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +3 -3
  27. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +3 -3
  28. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/template_emdb_mapping.json +3 -3
  29. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +3 -3
  30. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/__init__.py +6 -0
  31. s3dgraphy-1.6.0.dev63/src/s3dgraphy/nodes/periodization_node.py +69 -0
  32. s3dgraphy-1.6.0.dev63/src/s3dgraphy/periodization.py +391 -0
  33. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/graphml_writer.py +10 -10
  34. s3dgraphy-1.6.0.dev63/src/s3dgraphy/temporal/__init__.py +17 -0
  35. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/temporal/inference_engine.py +10 -24
  36. s3dgraphy-1.6.0.dev63/src/s3dgraphy/temporal/relative_chronology.py +146 -0
  37. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  38. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy.egg-info/SOURCES.txt +4 -0
  39. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_edge_ui_phrases.py +1 -1
  40. s3dgraphy-1.6.0.dev63/tests/test_lab_orizzonti.py +294 -0
  41. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_mapping_csv_and_relations.py +8 -5
  42. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_rdf_reverse_edges.py +6 -3
  43. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_file_node.py +2 -2
  44. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_revision.py +1 -1
  45. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reverse_edges.py +7 -1
  46. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_spatiotemporal_entities.py +2 -2
  47. s3dgraphy-1.6.0.dev62/src/s3dgraphy/temporal/__init__.py +0 -9
  48. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/LICENSE +0 -0
  49. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/MANIFEST.in +0 -0
  50. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/README.md +0 -0
  51. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/setup.cfg +0 -0
  52. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  53. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  54. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  55. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  56. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/alternative_cases.json +0 -0
  57. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  58. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  59. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  60. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  61. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  62. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  63. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_state_symbols.json +0 -0
  64. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  65. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  66. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  67. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  68. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  69. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  70. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  71. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  72. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  73. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  74. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  75. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  76. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  77. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  78. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  79. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  80. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  81. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  82. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  83. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  84. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  85. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  86. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  87. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  88. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  89. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  90. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  91. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  92. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  93. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  94. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  95. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  96. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  97. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  98. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  99. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  100. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/container.svg +0 -0
  101. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  102. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  103. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  104. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  105. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  106. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  107. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  108. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  109. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  110. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  111. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  112. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  113. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  114. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  115. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  116. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  117. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  118. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  119. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  120. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  121. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  122. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  123. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  124. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  125. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  126. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  127. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  128. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  129. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  130. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  131. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  132. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  133. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  134. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  135. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  136. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  137. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  138. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  139. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  140. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/hdto/graph.svg +0 -0
  141. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/hdto/hdt.svg +0 -0
  142. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/hdto/heritage_entity.svg +0 -0
  143. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/hdto/project.svg +0 -0
  144. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/hdto/study.svg +0 -0
  145. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  146. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  147. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  148. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  149. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  150. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  151. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  152. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  153. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/proxy.svg +0 -0
  154. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  155. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  156. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  157. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  158. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  159. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  160. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  161. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  162. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  163. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  164. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  165. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  166. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/tileset.svg +0 -0
  167. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/version_gltf.svg +0 -0
  168. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/version_mesh.svg +0 -0
  169. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/version_scene.svg +0 -0
  170. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/2D/version_tiles.svg +0 -0
  171. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  172. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  173. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  174. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  175. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  176. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  177. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  178. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  179. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  180. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  181. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  182. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  183. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  184. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  185. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  186. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  187. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/JSON_config/version_for_cases.json +0 -0
  188. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/__main__.py +0 -0
  189. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/acquisition/__init__.py +0 -0
  190. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/acquisition/acquire.py +0 -0
  191. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  192. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/acquisition/mapping.py +0 -0
  193. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/ai_validation.py +0 -0
  194. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/annotation/__init__.py +0 -0
  195. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  196. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/annotation/paradata.py +0 -0
  197. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/annotation/reading.py +0 -0
  198. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/__init__.py +0 -0
  199. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/resolver.py +0 -0
  200. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  201. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  202. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  203. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  204. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  205. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  206. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/classification.py +0 -0
  207. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/contract/__init__.py +0 -0
  208. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/contract/connector.py +0 -0
  209. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/contract/consumer.py +0 -0
  210. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/contract/core.py +0 -0
  211. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/contract/reference.py +0 -0
  212. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/crdt.py +0 -0
  213. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  214. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/datamodel.py +0 -0
  215. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dissemination.py +0 -0
  216. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/__init__.py +0 -0
  217. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/capture.py +0 -0
  218. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/corpus.py +0 -0
  219. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/devices.py +0 -0
  220. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/ingest.py +0 -0
  221. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  222. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/dtc/residency.py +0 -0
  223. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/edges/__init__.py +0 -0
  224. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  225. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/edges/edge.py +0 -0
  226. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/editorial.py +0 -0
  227. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/__init__.py +0 -0
  228. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  229. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  230. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  231. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  232. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  233. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  234. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  235. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  236. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  237. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  238. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  239. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  240. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  241. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  242. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  243. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  244. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  245. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  246. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  247. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  248. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  249. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/rdf_exporter.py +0 -0
  250. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  251. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/__init__.py +0 -0
  252. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/aton.py +0 -0
  253. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/gltf.py +0 -0
  254. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/migrate.py +0 -0
  255. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/proxy.py +0 -0
  256. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  257. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/store_backed.py +0 -0
  258. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/transform.py +0 -0
  259. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/geometry/wkt.py +0 -0
  260. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/hdto.py +0 -0
  261. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/iiif.py +0 -0
  262. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/__init__.py +0 -0
  263. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  264. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  265. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/metashape_project.py +0 -0
  266. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  267. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/sheet_header.py +0 -0
  268. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/source_text.py +0 -0
  269. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  270. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/indices.py +0 -0
  271. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/labels.py +0 -0
  272. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/language.py +0 -0
  273. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/links.py +0 -0
  274. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/__init__.py +0 -0
  275. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/authoring.py +0 -0
  276. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/mappings/registry.py +0 -0
  277. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/merge/__init__.py +0 -0
  278. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/merge/graph_merger.py +0 -0
  279. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/multigraph/__init__.py +0 -0
  280. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  281. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/__init__.py +0 -0
  282. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/bake.py +0 -0
  283. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/generation.py +0 -0
  284. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/query.py +0 -0
  285. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/registry.py +0 -0
  286. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/narrative/site_story.py +0 -0
  287. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  288. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/author_node.py +0 -0
  289. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/base_node.py +0 -0
  290. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  291. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/document_node.py +0 -0
  292. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  293. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  294. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  295. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  296. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  297. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  298. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  299. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  300. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  301. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/graph_node.py +0 -0
  302. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/group_node.py +0 -0
  303. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  304. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  305. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/license_node.py +0 -0
  306. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  307. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  308. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/project_node.py +0 -0
  309. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/property_node.py +0 -0
  310. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/representation_node.py +0 -0
  311. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  312. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/resource_node.py +0 -0
  313. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  314. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  315. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/study_node.py +0 -0
  316. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/nodes/translation_node.py +0 -0
  317. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/ownership.py +0 -0
  318. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/paradata_view.py +0 -0
  319. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  320. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  321. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/project_tree.py +0 -0
  322. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/property_source.py +0 -0
  323. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/publication.py +0 -0
  324. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/rapporti.py +0 -0
  325. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resolvers/__init__.py +0 -0
  326. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  327. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  328. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/__init__.py +0 -0
  329. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/addresses.py +0 -0
  330. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/alignment.py +0 -0
  331. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/alternatives.py +0 -0
  332. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/files.py +0 -0
  333. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/fs_backend.py +0 -0
  334. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/locate.py +0 -0
  335. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/moved.py +0 -0
  336. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/object_store.py +0 -0
  337. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/resolver.py +0 -0
  338. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/s3_backend.py +0 -0
  339. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/storage_rows.py +0 -0
  340. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  341. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/resources/versions.py +0 -0
  342. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/rights.py +0 -0
  343. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/__init__.py +0 -0
  344. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/access.py +0 -0
  345. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/engine.py +0 -0
  346. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/errors.py +0 -0
  347. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/inventory.py +0 -0
  348. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/node.py +0 -0
  349. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/pack.py +0 -0
  350. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/room_import/trust.py +0 -0
  351. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/shelf/__init__.py +0 -0
  352. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/shelf/core.py +0 -0
  353. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/spatiotemporal.py +0 -0
  354. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/stamp/__init__.py +0 -0
  355. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/stamp/absorb.py +0 -0
  356. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/stamp/emit.py +0 -0
  357. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/stamp/hints.py +0 -0
  358. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/stamp/identity.py +0 -0
  359. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/study.py +0 -0
  360. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/__init__.py +0 -0
  361. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/_db_handle.py +0 -0
  362. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  363. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/_workspace.py +0 -0
  364. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  365. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/edge_registry.py +0 -0
  366. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  367. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/graph_projector.py +0 -0
  368. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/group_projector.py +0 -0
  369. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/group_store.py +0 -0
  370. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/ingest_result.py +0 -0
  371. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/paradata_store.py +0 -0
  372. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  373. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/rapporti.py +0 -0
  374. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/uuid7.py +0 -0
  375. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  376. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/vocab_types.py +0 -0
  377. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  378. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_detector.py +0 -0
  379. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  380. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  381. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  382. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  383. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  384. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  385. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/__init__.py +0 -0
  386. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  387. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  388. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  389. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  390. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  391. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/node_finder.py +0 -0
  392. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/ontology_html.py +0 -0
  393. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  394. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  395. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/transforms/__init__.py +0 -0
  396. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  397. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/transforms/compact.py +0 -0
  398. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  399. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/translation.py +0 -0
  400. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/utils/__init__.py +0 -0
  401. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/utils/utils.py +0 -0
  402. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/utils/visual_layout.py +0 -0
  403. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy/zero_hour.py +0 -0
  404. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  405. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy.egg-info/requires.txt +0 -0
  406. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  407. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_acquisition.py +0 -0
  408. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_acquisition_fs.py +0 -0
  409. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_add_resource.py +0 -0
  410. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_ai_validation_nodes.py +0 -0
  411. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_alternative_labels.py +0 -0
  412. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_alternative_sets.py +0 -0
  413. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_alternatives_hat.py +0 -0
  414. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_anastylosis_document_type.py +0 -0
  415. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_api_surface.py +0 -0
  416. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_asset_dtc_protocol.py +0 -0
  417. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_asset_versions.py +0 -0
  418. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_aton_shapes.py +0 -0
  419. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_attach_only.py +0 -0
  420. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_authority_projection.py +0 -0
  421. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_authority_resolver.py +0 -0
  422. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_blend_locator.py +0 -0
  423. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_bucket_alignment.py +0 -0
  424. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_canonical_document_rename.py +0 -0
  425. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_canvas_metadata_import.py +0 -0
  426. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_capture_acquisition.py +0 -0
  427. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_capture_rdf_class.py +0 -0
  428. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_chronology_on_request.py +0 -0
  429. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_coating_unit.py +0 -0
  430. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_composite_node_name.py +0 -0
  431. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_connection_resolver.py +0 -0
  432. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_consumer_drift.py +0 -0
  433. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_container.py +0 -0
  434. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_container_layouts.py +0 -0
  435. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_containment_tpq.py +0 -0
  436. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_contract.py +0 -0
  437. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_contract_consumer.py +0 -0
  438. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_convert_command.py +0 -0
  439. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_crdt.py +0 -0
  440. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_cycle_message_is_cheap.py +0 -0
  441. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_datamodel_fingerprint.py +0 -0
  442. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_datamodel_i18n.py +0 -0
  443. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_deterministic_ids.py +0 -0
  444. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_em_sourcelist.py +0 -0
  445. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_file_set_stamp.py +0 -0
  446. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_graphml_without_a_database.py +0 -0
  447. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_image_set_texturing.py +0 -0
  448. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_not_georeferenced.py +0 -0
  449. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_one_act_n_outputs.py +0 -0
  450. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev29_ttl_round_trip.py +0 -0
  451. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dev30_decisions.py +0 -0
  452. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_devices.py +0 -0
  453. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dissemination_tombstones.py +0 -0
  454. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dove_sta_il_testo.py +0 -0
  455. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dtc_corpus.py +0 -0
  456. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dtc_ingest.py +0 -0
  457. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dtc_neighbourhood.py +0 -0
  458. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dtc_projection.py +0 -0
  459. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_dtc_residency.py +0 -0
  460. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_edge_outside_graph.py +0 -0
  461. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_editorial.py +0 -0
  462. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  463. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_emjson_no_drawing_keys.py +0 -0
  464. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_emjson_roundtrip.py +0 -0
  465. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_emjson_schema_version.py +0 -0
  466. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_end_of_unit.py +0 -0
  467. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_epoch_instances.py +0 -0
  468. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  469. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_epoch_undated_import.py +0 -0
  470. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_explicit_node_type_marker.py +0 -0
  471. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_extracted_from_unit.py +0 -0
  472. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_filtered_import.py +0 -0
  473. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_fmpxml_importer.py +0 -0
  474. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_fs_backend.py +0 -0
  475. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_functional_units.py +0 -0
  476. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_georeference_scene.py +0 -0
  477. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_gltf_stitch.py +0 -0
  478. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_glyph_paths.py +0 -0
  479. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_graph_header_code.py +0 -0
  480. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_graph_helpers_indexed.py +0 -0
  481. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_graph_indices_alive.py +0 -0
  482. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_graph_indices_edges.py +0 -0
  483. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_graph_scope_migration.py +0 -0
  484. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_hdto_glyphs.py +0 -0
  485. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_hdto_projection.py +0 -0
  486. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_hdto_study.py +0 -0
  487. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_header_key_aliases.py +0 -0
  488. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_i_generi_dei_passi.py +0 -0
  489. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_iiif.py +0 -0
  490. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_il_modo_d_accesso.py +0 -0
  491. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_il_modo_dal_relay.py +0 -0
  492. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_il_proprietario_si_legge.py +0 -0
  493. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_il_riallineamento.py +0 -0
  494. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_import_without_residues.py +0 -0
  495. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_importer_edge_hygiene.py +0 -0
  496. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_ipynb_exporter.py +0 -0
  497. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_issue27_small_points.py +0 -0
  498. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_la_lingua_alla_nascita.py +0 -0
  499. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_la_lingua_dei_dati.py +0 -0
  500. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_la_lingua_nell_op.py +0 -0
  501. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_la_riga_d_intestazione.py +0 -0
  502. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_latex_exporter.py +0 -0
  503. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_le_traduzioni.py +0 -0
  504. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_lod_levels.py +0 -0
  505. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_lossless_roundtrip.py +0 -0
  506. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_mapping_authoring.py +0 -0
  507. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_masonry_unit.py +0 -0
  508. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_material_color.py +0 -0
  509. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_merge_conflicts.py +0 -0
  510. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_metashape_project.py +0 -0
  511. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_migrate_legacy_proxy.py +0 -0
  512. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_authorship.py +0 -0
  513. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_bake_docx.py +0 -0
  514. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_figures.py +0 -0
  515. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_generation.py +0 -0
  516. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_mentions.py +0 -0
  517. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_node.py +0 -0
  518. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_query.py +0 -0
  519. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_scaffolder.py +0 -0
  520. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_site_place.py +0 -0
  521. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_narrative_unvalidated_export.py +0 -0
  522. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_node_datamodel_registry.py +0 -0
  523. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_node_finder.py +0 -0
  524. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_node_type_map_integrity.py +0 -0
  525. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_one_resolver.py +0 -0
  526. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_one_spelling_writers.py +0 -0
  527. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_ontology_html.py +0 -0
  528. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_op_vocabulary.py +0 -0
  529. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_part_twins.py +0 -0
  530. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_pg_importer.py +0 -0
  531. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_photogrammetry_delta.py +0 -0
  532. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_physical_relation_spellings.py +0 -0
  533. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_piu_indirizzi.py +0 -0
  534. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_promote_keeps_proxy_type.py +0 -0
  535. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_promotion.py +0 -0
  536. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_property_as_source.py +0 -0
  537. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_property_owners.py +0 -0
  538. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_proxy_resource.py +0 -0
  539. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_proxy_retype.py +0 -0
  540. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_psx_locator.py +0 -0
  541. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_pyarchinit_tier2.py +0 -0
  542. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_qualia_dai_d7_d8.py +0 -0
  543. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_rdf_embedding.py +0 -0
  544. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_rdf_roundtrip.py +0 -0
  545. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reading_coords.py +0 -0
  546. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reading_glb.py +0 -0
  547. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reading_migration.py +0 -0
  548. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reading_place.py +0 -0
  549. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reading_rdf.py +0 -0
  550. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_recompute_warnings.py +0 -0
  551. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_release.py +0 -0
  552. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_reproject.py +0 -0
  553. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_files_implicit.py +0 -0
  554. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_layer.py +0 -0
  555. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_representations.py +0 -0
  556. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_resource_tier.py +0 -0
  557. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_rm_container_node_group.py +0 -0
  558. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_room_import.py +0 -0
  559. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_room_import_access.py +0 -0
  560. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_room_import_inventory.py +0 -0
  561. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_room_import_trust.py +0 -0
  562. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_s3_backend.py +0 -0
  563. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_semantic_purity.py +0 -0
  564. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_series_vsf.py +0 -0
  565. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_shelf.py +0 -0
  566. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_shelf_facets.py +0 -0
  567. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_shelf_hatting.py +0 -0
  568. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_shelf_role_uri_table.py +0 -0
  569. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_shipped_mappings.py +0 -0
  570. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_source_list_mapping.py +0 -0
  571. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_source_text.py +0 -0
  572. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_special_find_definitions.py +0 -0
  573. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_stable_study_code.py +0 -0
  574. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_stamp.py +0 -0
  575. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_stamp_hints.py +0 -0
  576. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_stamp_title_description.py +0 -0
  577. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_storage_rows.py +0 -0
  578. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_store_backed_geometry.py +0 -0
  579. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_stratiminer_api.py +0 -0
  580. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_study_metadata.py +0 -0
  581. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_threed_instances.py +0 -0
  582. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_tileset_resource.py +0 -0
  583. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_transform_form.py +0 -0
  584. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_ttl_roundtrip.py +0 -0
  585. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_unit_definition.py +0 -0
  586. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_verifica_provenance.py +0 -0
  587. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_version_for.py +0 -0
  588. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_visual_assets.py +0 -0
  589. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_wheel_drift.py +0 -0
  590. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  591. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_xlsx_importer_graph_init.py +0 -0
  592. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/tests/test_xlsx_source_column.py +0 -0
  593. {s3dgraphy-1.6.0.dev62 → s3dgraphy-1.6.0.dev63}/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.dev62
3
+ Version: 1.6.0.dev63
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.dev62"
7
+ version = "1.6.0.dev63"
8
8
  description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "s3Dgraphy_datamodel_translations",
3
- "version": "1.14",
3
+ "version": "1.15",
4
4
  "languages": [
5
5
  "en",
6
6
  "it",
@@ -2256,6 +2256,86 @@
2256
2256
  "fr": "Série d'Objets Remarquables Virtuels : la RÉPÉTITION d'un seul et même objet. La série est elle-même une unité, comme pour serSU, serUSD, serUSVn et serUSVs. Usage : une tuile cassée réparée avec une VSF puis instanciée sur tout le toit avec une serVSF. PAS pour des pièces toutes différentes — les tambours d'une colonne qui s'amincit : chacun est sa propre VSF (ou un SF) dans la VSF de la colonne.",
2257
2257
  "de": "Serie virtueller Einzelfunde: die WIEDERHOLUNG ein und desselben Objekts. Die Serie ist selbst eine Einheit, wie bei serSU, serUSD, serUSVn und serUSVs. Verwendung: ein zerbrochener Ziegel, mit einem VSF ergänzt und dann mit einem serVSF über das ganze Dach instanziiert. NICHT für Stücke, die alle verschieden sind — die Trommeln einer sich verjüngenden Säule: jede ist ein eigener VSF (oder SF) im VSF der Säule."
2258
2258
  }
2259
+ },
2260
+ "PeriodizationNode": {
2261
+ "description": {
2262
+ "en": "A set of horizons: one way of cutting time into named, ordered spans, shared by every graph of the project. Several periodizations may coexist (a regional chronology, the one of a publication, the one of a museum display) and the reader chooses which to apply. It lists its horizons through is_in_periodization (horizon → periodization). It is NOT an epoch and does not date anything: it is a reference against which what the graphs compute is read.",
2263
+ "validated_it": false,
2264
+ "validated_el": false,
2265
+ "validated_he": false,
2266
+ "validated_es": false,
2267
+ "validated_pl": false,
2268
+ "validated_ro": false,
2269
+ "validated_fr": false,
2270
+ "validated_de": false,
2271
+ "it": "Un insieme di orizzonti: un modo di tagliare il tempo in intervalli nominati e ordinati, condiviso da tutti i grafi del progetto. Più periodizzazioni possono convivere e chi legge sceglie quale applicare. Elenca i suoi orizzonti con is_in_periodization (orizzonte → periodizzazione). Non è un'epoca e non data nulla: è un riferimento su cui si legge ciò che i grafi calcolano.",
2272
+ "el": "Ένα σύνολο οριζόντων: ένας τρόπος να χωρίζεται ο χρόνος σε ονομασμένα, ταξινομημένα διαστήματα, κοινός σε όλους τους γράφους του έργου. Περισσότερες περιοδολογήσεις μπορούν να συνυπάρχουν· ο αναγνώστης επιλέγει ποια εφαρμόζει. Δεν είναι εποχή και δεν χρονολογεί τίποτα.",
2273
+ "he": "קבוצת אופקים: דרך לחלק את הזמן לטווחים בעלי שם וסדר, משותפת לכל הגרפים של הפרויקט. כמה פריודיזציות יכולות לדור יחד, והקורא בוחר באיזו להשתמש. אינה תקופה ואינה מתארכת דבר.",
2274
+ "es": "Un conjunto de horizontes: una manera de cortar el tiempo en intervalos nombrados y ordenados, compartida por todos los grafos del proyecto. Pueden coexistir varias periodizaciones y quien lee elige cuál aplicar. No es una época y no data nada.",
2275
+ "pl": "Zbiór horyzontów: sposób podziału czasu na nazwane, uporządkowane przedziały, wspólny dla wszystkich grafów projektu. Może współistnieć kilka periodyzacji; czytelnik wybiera, którą zastosować. Nie jest epoką i niczego nie datuje.",
2276
+ "ro": "Un set de orizonturi: un mod de a împărți timpul în intervale numite și ordonate, comun tuturor grafurilor proiectului. Pot coexista mai multe periodizări, iar cititorul alege pe care o aplică. Nu este o epocă și nu datează nimic.",
2277
+ "fr": "Un ensemble d'horizons : une manière de découper le temps en intervalles nommés et ordonnés, partagée par tous les graphes du projet. Plusieurs périodisations peuvent coexister et le lecteur choisit laquelle appliquer. Ce n'est pas une époque et elle ne date rien.",
2278
+ "de": "Eine Menge von Horizonten: eine Art, die Zeit in benannte, geordnete Spannen zu teilen, gemeinsam für alle Graphen des Projekts. Mehrere Periodisierungen können nebeneinander bestehen; wer liest, wählt, welche gilt. Sie ist keine Epoche und datiert nichts."
2279
+ },
2280
+ "label": {
2281
+ "en": "Periodization",
2282
+ "validated_it": false,
2283
+ "validated_el": false,
2284
+ "validated_he": false,
2285
+ "validated_es": false,
2286
+ "validated_pl": false,
2287
+ "validated_ro": false,
2288
+ "validated_fr": false,
2289
+ "validated_de": false,
2290
+ "it": "Periodizzazione",
2291
+ "el": "Περιοδολόγηση",
2292
+ "he": "פריודיזציה",
2293
+ "es": "Periodización",
2294
+ "pl": "Periodyzacja",
2295
+ "ro": "Periodizare",
2296
+ "fr": "Périodisation",
2297
+ "de": "Periodisierung"
2298
+ }
2299
+ },
2300
+ "HorizonNode": {
2301
+ "description": {
2302
+ "en": "One span of a periodization: a label, a start and an end in years (negative = BC), a colour and its order in the periodization. A unit, an epoch or a graph is IN the horizon when its absolute interval (Graph.chronology) intersects [start_time, end_time]: overlap is enough, containment is not required. enabled says whether the horizon is in use (EM Tools' CronoFilter flag, same name).",
2303
+ "validated_it": false,
2304
+ "validated_el": false,
2305
+ "validated_he": false,
2306
+ "validated_es": false,
2307
+ "validated_pl": false,
2308
+ "validated_ro": false,
2309
+ "validated_fr": false,
2310
+ "validated_de": false,
2311
+ "it": "Un intervallo di una periodizzazione: etichetta, inizio e fine in anni (negativi = a.C.), colore e posto nella periodizzazione. Un'unità, un'epoca o un grafo è DENTRO l'orizzonte se il suo intervallo assoluto (Graph.chronology) lo interseca: basta la sovrapposizione. enabled dice se l'orizzonte è in uso (lo stesso flag del CronoFilter di EM Tools).",
2312
+ "el": "Ένα διάστημα μιας περιοδολόγησης: ετικέτα, αρχή και τέλος σε έτη (αρνητικά = π.Χ.), χρώμα και θέση. Μια μονάδα, εποχή ή γράφος βρίσκεται ΜΕΣΑ στον ορίζοντα όταν το απόλυτο διάστημά του τον τέμνει.",
2313
+ "he": "טווח אחד של פריודיזציה: תווית, התחלה וסוף בשנים (שליליות = לפנה\"ס), צבע ומקום. יחידה, תקופה או גרף נמצאים בתוך האופק כאשר הטווח המוחלט שלהם חותך אותו.",
2314
+ "es": "Un intervalo de una periodización: etiqueta, inicio y fin en años (negativos = a. C.), color y orden. Una unidad, una época o un grafo está DENTRO del horizonte cuando su intervalo absoluto lo interseca.",
2315
+ "pl": "Jeden przedział periodyzacji: etykieta, początek i koniec w latach (ujemne = p.n.e.), kolor i kolejność. Jednostka, epoka lub graf jest W horyzoncie, gdy jej przedział bezwzględny go przecina.",
2316
+ "ro": "Un interval al unei periodizări: etichetă, început și sfârșit în ani (negativi = î.Hr.), culoare și ordine. O unitate, o epocă sau un graf este ÎN orizont când intervalul său absolut îl intersectează.",
2317
+ "fr": "Un intervalle d'une périodisation : libellé, début et fin en années (négatives = av. J.-C.), couleur et rang. Une unité, une époque ou un graphe est DANS l'horizon quand son intervalle absolu le recoupe.",
2318
+ "de": "Eine Spanne einer Periodisierung: Bezeichnung, Anfang und Ende in Jahren (negativ = v. Chr.), Farbe und Reihenfolge. Eine Einheit, Epoche oder ein Graph liegt IM Horizont, wenn ihr absolutes Intervall ihn schneidet."
2319
+ },
2320
+ "label": {
2321
+ "en": "Horizon",
2322
+ "validated_it": false,
2323
+ "validated_el": false,
2324
+ "validated_he": false,
2325
+ "validated_es": false,
2326
+ "validated_pl": false,
2327
+ "validated_ro": false,
2328
+ "validated_fr": false,
2329
+ "validated_de": false,
2330
+ "it": "Orizzonte",
2331
+ "el": "Ορίζοντας",
2332
+ "he": "אופק",
2333
+ "es": "Horizonte",
2334
+ "pl": "Horyzont",
2335
+ "ro": "Orizont",
2336
+ "fr": "Horizon",
2337
+ "de": "Horizont"
2338
+ }
2259
2339
  }
2260
2340
  },
2261
2341
  "qualia": {
@@ -7459,6 +7539,65 @@
7459
7539
  "fr": "L'étude s'est déroulée à",
7460
7540
  "de": "Studie fand statt in"
7461
7541
  }
7542
+ },
7543
+ "is_in_periodization": {
7544
+ "label": {
7545
+ "en": "Is in periodization",
7546
+ "validated_it": false,
7547
+ "validated_el": false,
7548
+ "validated_he": false,
7549
+ "validated_es": false,
7550
+ "validated_pl": false,
7551
+ "validated_ro": false,
7552
+ "validated_fr": false,
7553
+ "validated_de": false,
7554
+ "it": "È nella periodizzazione",
7555
+ "el": "Ανήκει στην περιοδολόγηση",
7556
+ "he": "שייך לפריודיזציה",
7557
+ "es": "Está en la periodización",
7558
+ "pl": "Należy do periodyzacji",
7559
+ "ro": "Este în periodizarea",
7560
+ "fr": "Est dans la périodisation",
7561
+ "de": "Gehört zur Periodisierung"
7562
+ },
7563
+ "ui_phrase_as_source": {
7564
+ "en": "{node} in periodization {x}",
7565
+ "validated_it": false,
7566
+ "validated_el": false,
7567
+ "validated_he": false,
7568
+ "validated_es": false,
7569
+ "validated_pl": false,
7570
+ "validated_ro": false,
7571
+ "validated_fr": false,
7572
+ "validated_de": false,
7573
+ "it": "{node} nella periodizzazione {x}",
7574
+ "el": "{node} στην περιοδολόγηση {x}",
7575
+ "he": "{node} בפריודיזציה {x}",
7576
+ "es": "{node} en la periodización {x}",
7577
+ "pl": "{node} w periodyzacji {x}",
7578
+ "ro": "{node} în periodizarea {x}",
7579
+ "fr": "{node} dans la périodisation {x}",
7580
+ "de": "{node} in der Periodisierung {x}"
7581
+ },
7582
+ "ui_phrase_as_target": {
7583
+ "en": "{node} listing {x}",
7584
+ "validated_it": false,
7585
+ "validated_el": false,
7586
+ "validated_he": false,
7587
+ "validated_es": false,
7588
+ "validated_pl": false,
7589
+ "validated_ro": false,
7590
+ "validated_fr": false,
7591
+ "validated_de": false,
7592
+ "it": "{node} che elenca {x}",
7593
+ "el": "{node} που απαριθμεί {x}",
7594
+ "he": "{node} המונה את {x}",
7595
+ "es": "{node} que enumera {x}",
7596
+ "pl": "{node} wymieniająca {x}",
7597
+ "ro": "{node} care enumeră {x}",
7598
+ "fr": "{node} qui énumère {x}",
7599
+ "de": "{node}, die {x} aufführt"
7600
+ }
7462
7601
  }
7463
7602
  },
7464
7603
  "dtc_kinds": {
@@ -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.36",
3
+ "s3Dgraphy_data_model_version": "1.6.37",
4
4
  "node_types": {
5
5
  "ActivityNodeGroup": {
6
6
  "parent": "GroupNode",
@@ -112,6 +112,11 @@
112
112
  "node_type": "heritage_entity",
113
113
  "description": "HC1 Heritage Entity (HDT-O / ECHOES D7.1)."
114
114
  },
115
+ "HorizonNode": {
116
+ "parent": "Node",
117
+ "node_type": "horizon",
118
+ "description": "One span of a periodization: label, start, end, colour, order."
119
+ },
115
120
  "LicenseNode": {
116
121
  "parent": "Node",
117
122
  "node_type": "license",
@@ -157,6 +162,11 @@
157
162
  "node_type": "ParadataNodeGroup",
158
163
  "description": "Nodo gruppo per paradata. Questo gruppo tiene insieme tutti i paradati relativi ad una unità stratigrafica: normalmente si chiama \"[nome_US]_PD\" (ParaData)"
159
164
  },
165
+ "PeriodizationNode": {
166
+ "parent": "Node",
167
+ "node_type": "periodization",
168
+ "description": "A set of horizons — one way of cutting time into named spans."
169
+ },
160
170
  "ProjectNode": {
161
171
  "parent": "Node",
162
172
  "node_type": "project",
@@ -1,6 +1,6 @@
1
1
  {
2
- "s3Dgraphy_connections_model_version": "1.6.46",
3
- "description": "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.47",
3
+ "description": "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",
@@ -115,7 +115,12 @@
115
115
  "AuthorNode"
116
116
  ]
117
117
  },
118
- "_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`."
118
+ "_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`.",
119
+ "implies": {
120
+ "edge": "is_after",
121
+ "source_is_more_recent": true
122
+ },
123
+ "_origin_note": "attributes.origin ∈ {derived, user, imported} — see _relative_chronology_origin_note (1.6.47)."
119
124
  },
120
125
  "changed_from": {
121
126
  "name": "changed_from",
@@ -143,7 +148,8 @@
143
148
  "target": [
144
149
  "StratigraphicNode"
145
150
  ]
146
- }
151
+ },
152
+ "_origin_note": "attributes.origin ∈ {derived, user, imported} — see _relative_chronology_origin_note (1.6.47)."
147
153
  },
148
154
  "abuts": {
149
155
  "name": "abuts",
@@ -172,7 +178,9 @@
172
178
  "target": [
173
179
  "StratigraphicNode"
174
180
  ]
175
- }
181
+ },
182
+ "implies": null,
183
+ "_implies_note": "OPEN (decision of E.D. pending, MICRO-LAB orizzonti 24 Oct 2026): no temporal implication is declared. Today the GraphML exporter writes this relation as has_same_time while Graph.chronology gives it no effect; the two disagree and the datamodel does not choose for them."
176
184
  },
177
185
  "cuts": {
178
186
  "name": "cuts",
@@ -201,6 +209,10 @@
201
209
  "target": [
202
210
  "StratigraphicNode"
203
211
  ]
212
+ },
213
+ "implies": {
214
+ "edge": "is_after",
215
+ "source_is_more_recent": true
204
216
  }
205
217
  },
206
218
  "fills": {
@@ -230,6 +242,10 @@
230
242
  "target": [
231
243
  "StratigraphicNode"
232
244
  ]
245
+ },
246
+ "implies": {
247
+ "edge": "is_after",
248
+ "source_is_more_recent": true
233
249
  }
234
250
  },
235
251
  "overlies": {
@@ -259,6 +275,10 @@
259
275
  "target": [
260
276
  "StratigraphicNode"
261
277
  ]
278
+ },
279
+ "implies": {
280
+ "edge": "is_after",
281
+ "source_is_more_recent": true
262
282
  }
263
283
  },
264
284
  "is_bonded_to": {
@@ -282,7 +302,9 @@
282
302
  "target": [
283
303
  "StratigraphicNode"
284
304
  ]
285
- }
305
+ },
306
+ "implies": null,
307
+ "_implies_note": "OPEN (decision of E.D. pending, MICRO-LAB orizzonti 24 Oct 2026): no temporal implication is declared. Today the GraphML exporter writes this relation as has_same_time while Graph.chronology gives it no effect; the two disagree and the datamodel does not choose for them."
286
308
  },
287
309
  "bonded_to": {
288
310
  "name": "bonded_to",
@@ -308,7 +330,9 @@
308
330
  "target": [
309
331
  "StratigraphicNode"
310
332
  ]
311
- }
333
+ },
334
+ "implies": null,
335
+ "_implies_note": "OPEN (decision of E.D. pending, MICRO-LAB orizzonti 24 Oct 2026): no temporal implication is declared. Today the GraphML exporter writes this relation as has_same_time while Graph.chronology gives it no effect; the two disagree and the datamodel does not choose for them."
312
336
  },
313
337
  "is_physically_equal_to": {
314
338
  "name": "is_physically_equal_to",
@@ -331,7 +355,9 @@
331
355
  "target": [
332
356
  "StratigraphicNode"
333
357
  ]
334
- }
358
+ },
359
+ "implies": null,
360
+ "_implies_note": "OPEN (decision of E.D. pending, MICRO-LAB orizzonti 24 Oct 2026): no temporal implication is declared. Today the GraphML exporter writes this relation as has_same_time while Graph.chronology gives it no effect; the two disagree and the datamodel does not choose for them."
335
361
  },
336
362
  "equals": {
337
363
  "name": "equals",
@@ -357,7 +383,9 @@
357
383
  "target": [
358
384
  "StratigraphicNode"
359
385
  ]
360
- }
386
+ },
387
+ "implies": null,
388
+ "_implies_note": "OPEN (decision of E.D. pending, MICRO-LAB orizzonti 24 Oct 2026): no temporal implication is declared. Today the GraphML exporter writes this relation as has_same_time while Graph.chronology gives it no effect; the two disagree and the datamodel does not choose for them."
361
389
  },
362
390
  "has_same_time": {
363
391
  "name": "has_same_time",
@@ -387,7 +415,8 @@
387
415
  "AuthorNode"
388
416
  ]
389
417
  },
390
- "_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`."
418
+ "_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`.",
419
+ "_origin_note": "attributes.origin ∈ {derived, user, imported} — see _relative_chronology_origin_note (1.6.47)."
391
420
  },
392
421
  "has_data_provenance": {
393
422
  "name": "has_data_provenance",
@@ -510,7 +539,7 @@
510
539
  "has_sub_epoch": {
511
540
  "name": "has_sub_epoch",
512
541
  "label": "Has sub-epoch",
513
- "description": "Splits an epoch into ordered sub-epochs (phases). Source is the parent epoch, target a phase (itself an EpochNode). Phases partition the parent's time-span; when hidden the parent epoch holds all the units, when shown the units are distributed across the phases. Reverse: is_in_epoch.",
542
+ "description": "Splits an epoch into ordered sub-epochs (phases). Source is the parent epoch, target a phase (itself an EpochNode). Phases partition the parent's time-span; when hidden the parent epoch holds all the units, when shown the units are distributed across the phases. Reverse: is_in_epoch. 1.6.47 (MICRO-LAB orizzonti): the CHRONOLOGY reads it — the sub-epoch RESTRICTS the interval of its parent: its effective interval is the intersection of its own start/end with the parent's (a missing bound is the parent's; a bound outside the parent is brought back to it, with a warning), recursively. Graph.epoch_intervals() gives it, and a unit dated by its epoch reports rule «sub_epoch», source the parent epoch, relation has_sub_epoch when the bound came from the parent.",
514
543
  "reverse": {
515
544
  "name": "is_in_epoch",
516
545
  "label": "Is in epoch"
@@ -1877,6 +1906,35 @@
1877
1906
  "RepresentationModelNodeGroup"
1878
1907
  ]
1879
1908
  }
1909
+ },
1910
+ "is_in_periodization": {
1911
+ "name": "is_in_periodization",
1912
+ "label": "Is in periodization",
1913
+ "description": "An horizon belongs to a periodization (a set of horizons). Source the HorizonNode, target the PeriodizationNode. Both live in the container member graphs.periodizations, never in a study graph. New in 1.6.47 (MICRO-LAB orizzonti, E.D. 24 Oct 2026): no existing edge says it — is_part_of is physical containment, is_in_paradata_nodegroup / is_in_activity / is_in_location gather nodes of a study by reasoning, intention or place, and has_sub_epoch is between epochs; a periodization is an AUTHORITY DOCUMENT that lists its spans, which CIDOC says with P71 lists.",
1914
+ "reverse": {
1915
+ "name": "lists_horizon",
1916
+ "label": "Lists horizon"
1917
+ },
1918
+ "ui_phrase": {
1919
+ "as_source": "{node} in periodization {x}",
1920
+ "as_target": "{node} listing {x}"
1921
+ },
1922
+ "mapping": {
1923
+ "cidoc": "P71_lists",
1924
+ "cidoc_extension": "CIDOC-CRM",
1925
+ "extension_mapping": null,
1926
+ "extension_name": "CIDOC-CRM",
1927
+ "rdf_subject": "target",
1928
+ "_comment": "P71 lists: E32 Authority Document → E1 CRM Entity. The EM arrow runs horizon → periodization (membership, like the other is_in_* edges), so the triple is written target-first: <periodization> P71_lists <horizon>."
1929
+ },
1930
+ "allowed_connections": {
1931
+ "source": [
1932
+ "HorizonNode"
1933
+ ],
1934
+ "target": [
1935
+ "PeriodizationNode"
1936
+ ]
1937
+ }
1880
1938
  }
1881
1939
  },
1882
1940
  "_dtc_role_note": "dtc_role marks an edge as part of the DTC CHAIN — the three edges a provenance walk may traverse. It exists because the classification used to be written twice: by name on the node (s3dgraphy.dtc) and by PREFIX in the client (startsWith('dtc_')). The prefix presumed every future dtc_* edge would be chain, so a dtc_* edge that is CONTEXT — a dtc_annotated_by, say — would have been a corridor on the client and not on the node: two rules with one name. Now the datamodel says it once and both sides read it. An edge WITHOUT dtc_role is context by construction: adding one is a JSON entry, and it is born non-traversable.",
@@ -1927,5 +1985,7 @@
1927
1985
  "label": "Declare the inheritance",
1928
1986
  "description": "Choose the original owner: the others inherit the property."
1929
1987
  }
1930
- }
1988
+ },
1989
+ "_temporal_implication_note": "1.6.47 (MICRO-LAB orizzonti, 24 Oct 2026). «This physical relation implies that temporal one» is declared HERE, once, on the edge: `implies: {edge: \"is_after\", source_is_more_recent: true}` on cuts, fills, overlies (and on is_after itself, so the readers ask one question of every edge); the reverse names (is_cut_by, is_filled_by, is_overlain_by, is_before) read the opposite direction. `implies: null` marks a PHYSICAL relation with no temporal implication declared (abuts, bonded_to, equals and their older spellings: decision open). An edge without the key is not a physical relation. Read by ConnectionsDatamodel.temporal_direction / physical_relations, used by Graph.chronology (TPQ/TAQ), diagnostics (cycles) and temporal.TemporalInferenceEngine / derive_relative_chronology — until 1.6.46 the rule was copied by hand in those three files.",
1990
+ "_relative_chronology_origin_note": "1.6.47 (MICRO-LAB orizzonti, 24 Oct 2026). Every edge of RELATIVE CHRONOLOGY (is_after, has_same_time, changed_from) may carry attributes.origin ∈ {derived, user, imported}: derived = computed from the physical relations (derive_relative_chronology, with attributes.derived_from = the physical edges it stands for); user = drawn or written by a person (a table that names the relation, an interface); imported = read from another software's file (GraphML, RDF). Optional: an edge without it is valid and simply does not say (every file before 1.6.47). The importers and the derivation write it; nothing reads it as a rule."
1931
1991
  }