s3dgraphy 1.6.0.dev33__tar.gz → 1.6.0.dev35__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 (519) hide show
  1. {s3dgraphy-1.6.0.dev33/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev35}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/pyproject.toml +1 -1
  3. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em.ttl +62 -3
  4. s3dgraphy-1.6.0.dev35/src/s3dgraphy/JSON_config/em_state_symbols.json +254 -0
  5. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/node_registry.generated.json +1 -1
  6. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +16 -6
  7. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/__init__.py +1 -1
  8. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/api.py +78 -1
  9. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/crdt.py +217 -0
  10. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/datamodel.py +9 -0
  11. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/emjson_exporter.py +14 -0
  12. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/rdf_exporter.py +34 -0
  13. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/store_backed.py +28 -0
  14. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/emjson_importer.py +16 -0
  15. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/rdf_importer.py +27 -0
  16. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +3 -3
  17. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +3 -3
  18. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/emdb/usm_mapping.json +3 -3
  19. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +3 -3
  20. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +3 -3
  21. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/source_list/em_sourcelist_it.json +3 -3
  22. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +3 -3
  23. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/template_emdb_mapping.json +3 -3
  24. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +3 -3
  25. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/geo_position_node.py +24 -7
  26. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/resource_node.py +13 -0
  27. s3dgraphy-1.6.0.dev35/src/s3dgraphy/project_tree.py +201 -0
  28. s3dgraphy-1.6.0.dev35/src/s3dgraphy/resources/locate.py +248 -0
  29. s3dgraphy-1.6.0.dev35/src/s3dgraphy/resources/versions.py +557 -0
  30. s3dgraphy-1.6.0.dev35/src/s3dgraphy/tools/node_finder.py +197 -0
  31. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  32. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy.egg-info/SOURCES.txt +10 -0
  33. s3dgraphy-1.6.0.dev35/tests/test_asset_versions.py +166 -0
  34. s3dgraphy-1.6.0.dev35/tests/test_lod_levels.py +129 -0
  35. s3dgraphy-1.6.0.dev35/tests/test_node_finder.py +84 -0
  36. s3dgraphy-1.6.0.dev35/tests/test_one_resolver.py +135 -0
  37. s3dgraphy-1.6.0.dev35/tests/test_op_vocabulary.py +97 -0
  38. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_release.py +83 -2
  39. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_file_node.py +2 -2
  40. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/LICENSE +0 -0
  41. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/MANIFEST.in +0 -0
  42. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/README.md +0 -0
  43. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/setup.cfg +0 -0
  44. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  45. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  46. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  47. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +0 -0
  48. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  49. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  50. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  51. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  52. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  53. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  54. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/em_visual_rules.json +0 -0
  55. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  56. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  57. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  58. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  59. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +0 -0
  60. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  61. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  62. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  63. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  64. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  65. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  66. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  67. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  68. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  69. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  70. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  71. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  72. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  73. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  74. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  75. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  76. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  77. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  78. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  79. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  80. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  81. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  82. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  83. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  84. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  85. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  86. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  87. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  88. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/author_ai.svg +0 -0
  89. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  90. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  91. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  92. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  93. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  94. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  95. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  96. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  97. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  98. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  99. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  100. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  101. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  102. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  103. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  104. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  105. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  106. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device.svg +0 -0
  107. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_computer.svg +0 -0
  108. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_drone.svg +0 -0
  109. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_gnss.svg +0 -0
  110. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_optical.svg +0 -0
  111. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_scanner.svg +0 -0
  112. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_sensor.svg +0 -0
  113. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/11_device_station.svg +0 -0
  114. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/12_gnss_survey.svg +0 -0
  115. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/13_field_drawing.svg +0 -0
  116. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/14_recording_sheet.svg +0 -0
  117. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/15_decimation.svg +0 -0
  118. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/16_georeferencing.svg +0 -0
  119. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/17_format_conversion.svg +0 -0
  120. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/18_classification.svg +0 -0
  121. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/dtc/19_vectorization.svg +0 -0
  122. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  123. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/embargo.svg +0 -0
  124. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  125. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  126. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/gcp_set.svg +0 -0
  127. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  128. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  129. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/graph.svg +0 -0
  130. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  131. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/license.svg +0 -0
  132. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  133. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  134. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/narrative.svg +0 -0
  135. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  136. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  137. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  138. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/registration_transform.svg +0 -0
  139. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  140. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  141. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  142. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/resource_file.svg +0 -0
  143. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  144. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  145. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  146. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  147. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  148. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  149. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  150. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  151. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  152. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  153. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  154. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  155. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  156. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  157. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  158. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  159. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  160. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  161. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  162. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  163. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  164. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  165. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  166. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/acquisition/__init__.py +0 -0
  167. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/acquisition/acquire.py +0 -0
  168. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/acquisition/descriptor.py +0 -0
  169. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/acquisition/mapping.py +0 -0
  170. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/ai_validation.py +0 -0
  171. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/annotation/__init__.py +0 -0
  172. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/annotation/migrate_reading.py +0 -0
  173. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/annotation/paradata.py +0 -0
  174. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/annotation/reading.py +0 -0
  175. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/__init__.py +0 -0
  176. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/resolver.py +0 -0
  177. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  178. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  179. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  180. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  181. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  182. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  183. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/classification.py +0 -0
  184. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/container.py +0 -0
  185. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/contract/__init__.py +0 -0
  186. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/contract/connector.py +0 -0
  187. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/contract/consumer.py +0 -0
  188. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/contract/core.py +0 -0
  189. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/contract/reference.py +0 -0
  190. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  191. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/diagnostics.py +0 -0
  192. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dissemination.py +0 -0
  193. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/__init__.py +0 -0
  194. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/capture.py +0 -0
  195. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/corpus.py +0 -0
  196. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/devices.py +0 -0
  197. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/ingest.py +0 -0
  198. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/neighbourhood.py +0 -0
  199. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/dtc/residency.py +0 -0
  200. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/edges/__init__.py +0 -0
  201. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  202. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/edges/connections_loader.py +0 -0
  203. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/edges/edge.py +0 -0
  204. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/editorial.py +0 -0
  205. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/__init__.py +0 -0
  206. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  207. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  208. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  209. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  210. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  211. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  212. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  213. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  214. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  215. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  216. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  217. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  218. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  219. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  220. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  221. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  222. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/html_exporter.py +0 -0
  223. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/ipynb_exporter.py +0 -0
  224. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  225. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/latex_exporter.py +0 -0
  226. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  227. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/__init__.py +0 -0
  228. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/aton.py +0 -0
  229. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/gltf.py +0 -0
  230. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/migrate.py +0 -0
  231. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/proxy.py +0 -0
  232. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/reading_glb.py +0 -0
  233. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/geometry/wkt.py +0 -0
  234. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/graph.py +0 -0
  235. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/iiif.py +0 -0
  236. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/__init__.py +0 -0
  237. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/base_importer.py +0 -0
  238. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/csv_importer.py +0 -0
  239. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/fmpxml_importer.py +0 -0
  240. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/import_graphml.py +0 -0
  241. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  242. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/metashape_project.py +0 -0
  243. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  244. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  245. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/sheet_header.py +0 -0
  246. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/source_text.py +0 -0
  247. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  248. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  249. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/importer/xml_importer.py +0 -0
  250. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/indices.py +0 -0
  251. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/language.py +0 -0
  252. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/__init__.py +0 -0
  253. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/authoring.py +0 -0
  254. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/mappings/registry.py +0 -0
  255. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/merge/__init__.py +0 -0
  256. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/merge/graph_merger.py +0 -0
  257. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/multigraph/__init__.py +0 -0
  258. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  259. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/__init__.py +0 -0
  260. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/bake.py +0 -0
  261. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/generation.py +0 -0
  262. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/query.py +0 -0
  263. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/registry.py +0 -0
  264. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/narrative/site_story.py +0 -0
  265. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/__init__.py +0 -0
  266. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  267. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/author_node.py +0 -0
  268. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/base_node.py +0 -0
  269. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  270. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/document_node.py +0 -0
  271. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  272. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/dtc_device_node.py +0 -0
  273. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  274. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  275. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  276. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  277. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  278. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/georeferencing_node.py +0 -0
  279. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/graph_node.py +0 -0
  280. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/group_node.py +0 -0
  281. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  282. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  283. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/license_node.py +0 -0
  284. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  285. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  286. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/project_node.py +0 -0
  287. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/property_node.py +0 -0
  288. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/representation_node.py +0 -0
  289. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/resource_file_node.py +0 -0
  290. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  291. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  292. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/study_node.py +0 -0
  293. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/nodes/translation_node.py +0 -0
  294. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/ownership.py +0 -0
  295. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/photogrammetry/__init__.py +0 -0
  296. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/photogrammetry/delta.py +0 -0
  297. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/publication.py +0 -0
  298. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/rapporti.py +0 -0
  299. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resolvers/__init__.py +0 -0
  300. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  301. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  302. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/__init__.py +0 -0
  303. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/addresses.py +0 -0
  304. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/files.py +0 -0
  305. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/fs_backend.py +0 -0
  306. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/minio_backend.py +0 -0
  307. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/resolver.py +0 -0
  308. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/resources/tiles3tz.py +0 -0
  309. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/rights.py +0 -0
  310. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/shelf/__init__.py +0 -0
  311. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/shelf/core.py +0 -0
  312. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/stamp/__init__.py +0 -0
  313. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/stamp/absorb.py +0 -0
  314. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/stamp/emit.py +0 -0
  315. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/stamp/hints.py +0 -0
  316. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/stamp/identity.py +0 -0
  317. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/study.py +0 -0
  318. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/__init__.py +0 -0
  319. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/_db_handle.py +0 -0
  320. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  321. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/_workspace.py +0 -0
  322. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  323. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/edge_registry.py +0 -0
  324. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  325. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/graph_projector.py +0 -0
  326. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  327. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/group_projector.py +0 -0
  328. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/group_store.py +0 -0
  329. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/ingest_result.py +0 -0
  330. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/paradata_store.py +0 -0
  331. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  332. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/rapporti.py +0 -0
  333. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/uuid7.py +0 -0
  334. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  335. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/vocab_types.py +0 -0
  336. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  337. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_detector.py +0 -0
  338. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  339. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  340. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  341. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  342. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  343. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  344. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/temporal/__init__.py +0 -0
  345. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  346. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/__init__.py +0 -0
  347. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/consumer_drift.py +0 -0
  348. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  349. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/deliverable_report.py +0 -0
  350. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/glyph_sheet.py +0 -0
  351. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/glyphs_from_svg.py +0 -0
  352. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  353. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/tools/wheel_drift.py +0 -0
  354. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/transforms/__init__.py +0 -0
  355. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  356. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/transforms/compact.py +0 -0
  357. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  358. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/translation.py +0 -0
  359. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/utils/__init__.py +0 -0
  360. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/utils/utils.py +0 -0
  361. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/utils/visual_layout.py +0 -0
  362. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy/zero_hour.py +0 -0
  363. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  364. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy.egg-info/requires.txt +0 -0
  365. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  366. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_acquisition.py +0 -0
  367. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_acquisition_fs.py +0 -0
  368. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_add_resource.py +0 -0
  369. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_ai_validation_nodes.py +0 -0
  370. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_api_surface.py +0 -0
  371. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_asset_dtc_protocol.py +0 -0
  372. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_aton_shapes.py +0 -0
  373. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_attach_only.py +0 -0
  374. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_authority_projection.py +0 -0
  375. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_authority_resolver.py +0 -0
  376. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_blend_locator.py +0 -0
  377. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_canonical_document_rename.py +0 -0
  378. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_canvas_metadata_import.py +0 -0
  379. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_capture_acquisition.py +0 -0
  380. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_capture_rdf_class.py +0 -0
  381. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_chronology_on_request.py +0 -0
  382. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_coating_unit.py +0 -0
  383. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_composite_node_name.py +0 -0
  384. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_connection_resolver.py +0 -0
  385. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_consumer_drift.py +0 -0
  386. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_container.py +0 -0
  387. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_container_layouts.py +0 -0
  388. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_containment_tpq.py +0 -0
  389. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_contract.py +0 -0
  390. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_contract_consumer.py +0 -0
  391. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_convert_command.py +0 -0
  392. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_crdt.py +0 -0
  393. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_datamodel_fingerprint.py +0 -0
  394. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_datamodel_i18n.py +0 -0
  395. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_deterministic_ids.py +0 -0
  396. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_em_sourcelist.py +0 -0
  397. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_file_set_stamp.py +0 -0
  398. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_graphml_without_a_database.py +0 -0
  399. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_image_set_texturing.py +0 -0
  400. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_not_georeferenced.py +0 -0
  401. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_one_act_n_outputs.py +0 -0
  402. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev29_ttl_round_trip.py +0 -0
  403. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dev30_decisions.py +0 -0
  404. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_devices.py +0 -0
  405. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dissemination_tombstones.py +0 -0
  406. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dove_sta_il_testo.py +0 -0
  407. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dtc_corpus.py +0 -0
  408. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dtc_ingest.py +0 -0
  409. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dtc_neighbourhood.py +0 -0
  410. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dtc_projection.py +0 -0
  411. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_dtc_residency.py +0 -0
  412. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_edge_ui_phrases.py +0 -0
  413. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_editorial.py +0 -0
  414. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_em_ttl_matches_the_datamodels.py +0 -0
  415. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_emjson_roundtrip.py +0 -0
  416. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_emjson_schema_version.py +0 -0
  417. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_epoch_properties_and_sub_epochs.py +0 -0
  418. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_epoch_undated_import.py +0 -0
  419. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_explicit_node_type_marker.py +0 -0
  420. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_extracted_from_unit.py +0 -0
  421. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_filtered_import.py +0 -0
  422. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_fmpxml_importer.py +0 -0
  423. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_fs_backend.py +0 -0
  424. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_functional_units.py +0 -0
  425. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_georeference_scene.py +0 -0
  426. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_gltf_stitch.py +0 -0
  427. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_glyph_paths.py +0 -0
  428. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_graph_indices_edges.py +0 -0
  429. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_graph_scope_migration.py +0 -0
  430. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_hdto_projection.py +0 -0
  431. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_header_key_aliases.py +0 -0
  432. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_i_generi_dei_passi.py +0 -0
  433. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_iiif.py +0 -0
  434. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_il_modo_d_accesso.py +0 -0
  435. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_il_modo_dal_relay.py +0 -0
  436. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_il_proprietario_si_legge.py +0 -0
  437. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_il_riallineamento.py +0 -0
  438. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_importer_edge_hygiene.py +0 -0
  439. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_ipynb_exporter.py +0 -0
  440. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_la_lingua_alla_nascita.py +0 -0
  441. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_la_lingua_dei_dati.py +0 -0
  442. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_la_lingua_nell_op.py +0 -0
  443. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_la_riga_d_intestazione.py +0 -0
  444. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_latex_exporter.py +0 -0
  445. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_le_traduzioni.py +0 -0
  446. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_lossless_roundtrip.py +0 -0
  447. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_mapping_authoring.py +0 -0
  448. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_mapping_csv_and_relations.py +0 -0
  449. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_masonry_unit.py +0 -0
  450. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_material_color.py +0 -0
  451. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_merge_conflicts.py +0 -0
  452. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_metashape_project.py +0 -0
  453. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_migrate_legacy_proxy.py +0 -0
  454. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_minio_backend.py +0 -0
  455. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_authorship.py +0 -0
  456. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_bake_docx.py +0 -0
  457. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_figures.py +0 -0
  458. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_generation.py +0 -0
  459. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_mentions.py +0 -0
  460. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_node.py +0 -0
  461. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_query.py +0 -0
  462. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_scaffolder.py +0 -0
  463. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_site_place.py +0 -0
  464. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_narrative_unvalidated_export.py +0 -0
  465. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_node_datamodel_registry.py +0 -0
  466. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_node_type_map_integrity.py +0 -0
  467. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_one_spelling_writers.py +0 -0
  468. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_pg_importer.py +0 -0
  469. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_photogrammetry_delta.py +0 -0
  470. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_physical_relation_spellings.py +0 -0
  471. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_piu_indirizzi.py +0 -0
  472. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_promotion.py +0 -0
  473. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_property_owners.py +0 -0
  474. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_proxy_resource.py +0 -0
  475. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_proxy_retype.py +0 -0
  476. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_psx_locator.py +0 -0
  477. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_pyarchinit_tier2.py +0 -0
  478. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_qualia_dai_d7_d8.py +0 -0
  479. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_rdf_embedding.py +0 -0
  480. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_rdf_reverse_edges.py +0 -0
  481. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_rdf_roundtrip.py +0 -0
  482. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reading_coords.py +0 -0
  483. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reading_glb.py +0 -0
  484. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reading_migration.py +0 -0
  485. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reading_place.py +0 -0
  486. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reading_rdf.py +0 -0
  487. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_recompute_warnings.py +0 -0
  488. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reproject.py +0 -0
  489. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_files_implicit.py +0 -0
  490. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_layer.py +0 -0
  491. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_representations.py +0 -0
  492. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_revision.py +0 -0
  493. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_resource_tier.py +0 -0
  494. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_reverse_edges.py +0 -0
  495. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_rm_container_node_group.py +0 -0
  496. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_semantic_purity.py +0 -0
  497. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_shelf.py +0 -0
  498. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_shelf_facets.py +0 -0
  499. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_shelf_hatting.py +0 -0
  500. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_shelf_role_uri_table.py +0 -0
  501. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_shipped_mappings.py +0 -0
  502. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_source_list_mapping.py +0 -0
  503. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_source_text.py +0 -0
  504. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_stamp.py +0 -0
  505. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_stamp_hints.py +0 -0
  506. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_stamp_title_description.py +0 -0
  507. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_store_backed_geometry.py +0 -0
  508. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_stratiminer_api.py +0 -0
  509. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_study_metadata.py +0 -0
  510. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_tileset_resource.py +0 -0
  511. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_ttl_roundtrip.py +0 -0
  512. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_unit_definition.py +0 -0
  513. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_verifica_provenance.py +0 -0
  514. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_visual_assets.py +0 -0
  515. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_wheel_drift.py +0 -0
  516. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_xlsx_containment_and_unknown_bounds.py +0 -0
  517. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_xlsx_importer_graph_init.py +0 -0
  518. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/tests/test_xlsx_source_column.py +0 -0
  519. {s3dgraphy-1.6.0.dev33 → s3dgraphy-1.6.0.dev35}/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.dev33
3
+ Version: 1.6.0.dev35
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.dev33"
7
+ version = "1.6.0.dev35"
8
8
  description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -47,8 +47,8 @@
47
47
  dcterms:creator "Emanuele Demetrescu" ;
48
48
  dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
49
49
  dcterms:issued "2026-05-23"^^xsd:date ;
50
- owl:versionInfo "1.6.14" ;
51
- rdfs:comment "Formal ontology for Extended Matrix (EM): a human-readable layout for knowledge graphs of archaeological stratigraphy and virtual reconstruction. Extends CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMgeo, with PROV-O for agent provenance and HDT-O for digital-twin granularity. This file declares the em: classes and properties introduced in s3dgraphy v1.6.0. v1.6.14 (2026-10-02, dev30, decided by E.D. on the dev29 report): section 18 — em:retrievedFrom, where a retrieval came from (D1), and em:membersDigest, the digest of a file_set with a predicate of its own (D4; em:digestCovers stays for compatibility). v1.6.13 (2026-10-02, dev29, measured on San Pietro): seven DatatypeProperties, section 17 — how the bytes of a resource are packed and what its digest covers (em:packaging, em:tier, em:digestCovers, em:contentDigest) and what a DTC step declares (em:technique, em:parameters, em:software, the last two rdf:JSON): the round trip em.json → TTL → em.json lost all seven. v1.6.12 (2026-11-01, dev28, decided by E.D. 2026-10-01): no new term — em:authMode admits a third value, 'declared' (an iD typed in a tool's preferences and checked by nobody), with no em:attestedBy. v1.6.11 (2026-10-31, dev27, decided by E.D. 2026-10-01): ten properties. Section 15, several addresses of ONE resource (em:hasAddress to <resource>/address/<i>, em:locator, em:checkedAt, em:reachable) and a dated digest (em:checksumAt); section 16, how the hand of a signature had entered (em:createdVia, em:modifiedVia, em:validatedVia to <node>/auth/<stamp>, em:authMode orcid | node_password, em:attestedBy the StratiGraph node). The language of the content of a resource leaves as dcterms:language: no em: term. v1.6.10 (2026-10-29, MICRO le traduzioni, decided by E.D. 2026-10-01): six DatatypeProperties for the language of the original and its translations (section 14) — em:originalLanguage on any node, which says which literal is the original once translations share its predicate, and em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested on a TranslationNode, which is a plain crm:E33_Linguistic_Object reached by crm:P73_has_translation: CIDOC has the class and the relation, so no em: class is added. v1.6.9 (2026-10-18, MICRO la risorsa e i suoi file): em:ResourceFile, ONE FILE of a resource (node datamodel 1.6.17), a subclass of crmdig:D1_Digital_Object; the resource is composed of its files by crm:P106_is_composed_of (connections has_file, 1.6.30). A distinct URI because a DTC output resource is already typed crmdig:D1, and a file typed only D1 would read back as a resource. v1.6.2 (2026-09-21, CIDOC repair pass): the eight terms the datamodels cited and this file never defined are declared in section 12; em:NodeGroup and em:ParadataNodeGroup leave the undeclared crm:E78_Collection for crm:E73_Information_Object and crm:E89_Propositional_Object; em:SemanticShape leaves crmgeo:SP5 for crm:E73_Information_Object, provisionally; crmarchaeo:AP11_has_physical_relation becomes AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0; and em:RepresentationModel says what a representation model IS. v1.6.5 (2026-10-20, MICRO la definizione dell\'unita\'): em:hasDefinition, the DEFINIZIONE of a stratigraphic unit as a subproperty of crm:P2_has_type — declared for the node datamodel 1.6.9 entry StratigraphicNode.properties.definition, not emitted by default (owl:versionInfo was left at 1.6.2 by the 1.6.3/1.6.4 passes and is realigned here). v1.6.8 (2026-10-11, MICRO la geometria per origine): the vertices of a 3D reading (point, line, polyline) are data of the region (node datamodel 1.6.15, AnnotationRegionNode.coords) and leave for RDF as ONE GeoSPARQL 1.1 literal: <region> geo:hasGeometry <region>/geometry, a geo:Geometry with geo:asWKT '<CRS IRI> POINT Z (x y z)' | 'MULTIPOINT Z (...)' | 'LINESTRING Z (...)'^^geo:wktLiteral. WHY GeoSPARQL and not em: terms: the WKT literal is the standard every triplestore with a spatial index reads, and it is the 3D twin of the Media Fragment a 2D region already emits (a string a consumer outside EM can act on); CRMgeo was built to meet GeoSPARQL at exactly this point (SP5 Geometric Place Expression ~ geo:Geometry), and an em:coords literal would say the same thing to nobody. The CRS travels INSIDE the literal, so it cannot be separated from the numbers: em:LocalSceneFrame (declared here) for the scene-local frame, the OGC EPSG IRI for a projected one. em:vertexCount stays (the count of a .glb resource above the threshold). The .glb of a reading is no longer a SemanticShape's rdfs:seeAlso: above coords.inline_max_vertices (500) it is a ResourceNode the region reaches with has_linked_resource (crm:P67_refers_to), and a proxy's .glb is likewise a proxy_model ResourceNode (connections 1.6.28-1.6.29). v1.6.7 (2026-09-30, MICRO la cattura in RDF): no em: term added — the acquisition of a digital object is typed by its KIND. A capture is not a transfer: crmdig:D2_Digitization_Process for a photograph or a laser scan, crmdig:D11_Digital_Measurement_Event for a topographic or GNSS survey, crm:E65_Creation for a field drawing or a recording sheet (made by hand; the file is their copy, so no D7 machine event is asserted); a retrieval (download, local import, URI, ingest) stays crmdig:D12_Data_Transfer_Event. The rule is data (em_visual_rules 1.6.24, dtc_kinds.acquisition.<kind>.mapping). v1.6.6 (2026-10-07, MICRO la misura in RDF): the place of a reading gets its quote and its measure. The quote of a passage reuses W3C Web Annotation (oa:hasSelector -> oa:TextQuoteSelector, oa:exact) — the only standard term for a quote, which has no fragment-string form; its offsets stay the RFC 5147 em:hasSelector 'char=s,e'. The length of a line or polyline reuses CIDOC (crm:P43_has_dimension -> crm:E54_Dimension, P90_has_value xsd:double, P91_has_unit -> a QUDT unit IRI); two em: terms are new, em:vertexCount and em:crs, for what neither vocabulary says. The .glb of a 3D reading is not described here: its URL is the rdfs:seeAlso of the SemanticShape the region reaches with em:hasSemanticShape, and no coordinate enters RDF."@en ;
50
+ owl:versionInfo "1.6.15" ;
51
+ rdfs:comment "Formal ontology for Extended Matrix (EM): a human-readable layout for knowledge graphs of archaeological stratigraphy and virtual reconstruction. Extends CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMgeo, with PROV-O for agent provenance and HDT-O for digital-twin granularity. This file declares the em: classes and properties introduced in s3dgraphy v1.6.0. v1.6.15 (2026-10-04, D1, decided by E.D.): section 19 — the level of a version of an asset (em:lodLevel, computed from its chain, written on export), its uses (em:use) and seven measures (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.14 (2026-10-02, dev30, decided by E.D. on the dev29 report): section 18 — em:retrievedFrom, where a retrieval came from (D1), and em:membersDigest, the digest of a file_set with a predicate of its own (D4; em:digestCovers stays for compatibility). v1.6.13 (2026-10-02, dev29, measured on San Pietro): seven DatatypeProperties, section 17 — how the bytes of a resource are packed and what its digest covers (em:packaging, em:tier, em:digestCovers, em:contentDigest) and what a DTC step declares (em:technique, em:parameters, em:software, the last two rdf:JSON): the round trip em.json → TTL → em.json lost all seven. v1.6.12 (2026-11-01, dev28, decided by E.D. 2026-10-01): no new term — em:authMode admits a third value, 'declared' (an iD typed in a tool's preferences and checked by nobody), with no em:attestedBy. v1.6.11 (2026-10-31, dev27, decided by E.D. 2026-10-01): ten properties. Section 15, several addresses of ONE resource (em:hasAddress to <resource>/address/<i>, em:locator, em:checkedAt, em:reachable) and a dated digest (em:checksumAt); section 16, how the hand of a signature had entered (em:createdVia, em:modifiedVia, em:validatedVia to <node>/auth/<stamp>, em:authMode orcid | node_password, em:attestedBy the StratiGraph node). The language of the content of a resource leaves as dcterms:language: no em: term. v1.6.10 (2026-10-29, MICRO le traduzioni, decided by E.D. 2026-10-01): six DatatypeProperties for the language of the original and its translations (section 14) — em:originalLanguage on any node, which says which literal is the original once translations share its predicate, and em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested on a TranslationNode, which is a plain crm:E33_Linguistic_Object reached by crm:P73_has_translation: CIDOC has the class and the relation, so no em: class is added. v1.6.9 (2026-10-18, MICRO la risorsa e i suoi file): em:ResourceFile, ONE FILE of a resource (node datamodel 1.6.17), a subclass of crmdig:D1_Digital_Object; the resource is composed of its files by crm:P106_is_composed_of (connections has_file, 1.6.30). A distinct URI because a DTC output resource is already typed crmdig:D1, and a file typed only D1 would read back as a resource. v1.6.2 (2026-09-21, CIDOC repair pass): the eight terms the datamodels cited and this file never defined are declared in section 12; em:NodeGroup and em:ParadataNodeGroup leave the undeclared crm:E78_Collection for crm:E73_Information_Object and crm:E89_Propositional_Object; em:SemanticShape leaves crmgeo:SP5 for crm:E73_Information_Object, provisionally; crmarchaeo:AP11_has_physical_relation becomes AP11_has_physical_relation_to, the name CRMarchaeo has used since 2.0; and em:RepresentationModel says what a representation model IS. v1.6.5 (2026-10-20, MICRO la definizione dell\'unita\'): em:hasDefinition, the DEFINIZIONE of a stratigraphic unit as a subproperty of crm:P2_has_type — declared for the node datamodel 1.6.9 entry StratigraphicNode.properties.definition, not emitted by default (owl:versionInfo was left at 1.6.2 by the 1.6.3/1.6.4 passes and is realigned here). v1.6.8 (2026-10-11, MICRO la geometria per origine): the vertices of a 3D reading (point, line, polyline) are data of the region (node datamodel 1.6.15, AnnotationRegionNode.coords) and leave for RDF as ONE GeoSPARQL 1.1 literal: <region> geo:hasGeometry <region>/geometry, a geo:Geometry with geo:asWKT '<CRS IRI> POINT Z (x y z)' | 'MULTIPOINT Z (...)' | 'LINESTRING Z (...)'^^geo:wktLiteral. WHY GeoSPARQL and not em: terms: the WKT literal is the standard every triplestore with a spatial index reads, and it is the 3D twin of the Media Fragment a 2D region already emits (a string a consumer outside EM can act on); CRMgeo was built to meet GeoSPARQL at exactly this point (SP5 Geometric Place Expression ~ geo:Geometry), and an em:coords literal would say the same thing to nobody. The CRS travels INSIDE the literal, so it cannot be separated from the numbers: em:LocalSceneFrame (declared here) for the scene-local frame, the OGC EPSG IRI for a projected one. em:vertexCount stays (the count of a .glb resource above the threshold). The .glb of a reading is no longer a SemanticShape's rdfs:seeAlso: above coords.inline_max_vertices (500) it is a ResourceNode the region reaches with has_linked_resource (crm:P67_refers_to), and a proxy's .glb is likewise a proxy_model ResourceNode (connections 1.6.28-1.6.29). v1.6.7 (2026-09-30, MICRO la cattura in RDF): no em: term added — the acquisition of a digital object is typed by its KIND. A capture is not a transfer: crmdig:D2_Digitization_Process for a photograph or a laser scan, crmdig:D11_Digital_Measurement_Event for a topographic or GNSS survey, crm:E65_Creation for a field drawing or a recording sheet (made by hand; the file is their copy, so no D7 machine event is asserted); a retrieval (download, local import, URI, ingest) stays crmdig:D12_Data_Transfer_Event. The rule is data (em_visual_rules 1.6.24, dtc_kinds.acquisition.<kind>.mapping). v1.6.6 (2026-10-07, MICRO la misura in RDF): the place of a reading gets its quote and its measure. The quote of a passage reuses W3C Web Annotation (oa:hasSelector -> oa:TextQuoteSelector, oa:exact) — the only standard term for a quote, which has no fragment-string form; its offsets stay the RFC 5147 em:hasSelector 'char=s,e'. The length of a line or polyline reuses CIDOC (crm:P43_has_dimension -> crm:E54_Dimension, P90_has_value xsd:double, P91_has_unit -> a QUDT unit IRI); two em: terms are new, em:vertexCount and em:crs, for what neither vocabulary says. The .glb of a 3D reading is not described here: its URL is the rdfs:seeAlso of the SemanticShape the region reaches with em:hasSemanticShape, and no coordinate enters RDF."@en ;
52
52
  owl:imports <http://www.cidoc-crm.org/cidoc-crm/> ,
53
53
  <http://www.cidoc-crm.org/extensions/crminf/> ,
54
54
  <http://www.cidoc-crm.org/extensions/crmarchaeo/> ,
@@ -996,5 +996,64 @@ em:membersDigest
996
996
  rdfs:comment "The digest of a file_set, 'sha256:<hex>' of the canonical list of its members (role, path and digest of each) — the identity of the set, not the bytes of any one file; it is checked against the files with dtcstamp.verify_members, never by hashing one file. The same value em:checksum carries beside em:digestCovers 'members', given a predicate of its own so a reader need not read two triples together; em:digestCovers stays for compatibility. Maps to: node_datamodel ResourceNode.properties.members_digest."@en .
997
997
 
998
998
  # ============================================================================
999
- # End of em.ttl v1.6.14
999
+ # 19. The level, the uses and the measures of a version of an asset (v1.6.15,
1000
+ # decided by E.D. 2026-10-04, D1)
1001
+ # ============================================================================
1002
+
1003
+ em:lodLevel
1004
+ a owl:DatatypeProperty ;
1005
+ rdfs:label "LOD level"@en ;
1006
+ rdfs:range xsd:string ;
1007
+ rdfs:comment "The level of a VERSION of an asset — lod0 (the first version derived from the master that one can work on), lod1…lodN (lod_generation steps from LOD0). An ordinal INSIDE ONE derivation chain: computed from the chain, written when the graph leaves, compared with the chain when it comes back. The master (em:tier 'master') has none. Maps to: node_datamodel ResourceNode.properties.lod_level."@en .
1008
+
1009
+ em:use
1010
+ a owl:DatatypeProperty ;
1011
+ rdfs:label "use"@en ;
1012
+ rdfs:range xsd:string ;
1013
+ rdfs:comment "What a version of an asset is FOR, one triple per use: analysis, realtime, web, mobile_ar, print, render, preview (correspondences with Smithsonian Voyager and 3D Tiles in the datamodel's note). Maps to: node_datamodel ResourceNode.properties.use."@en .
1014
+
1015
+ em:trisPerM2
1016
+ a owl:DatatypeProperty ;
1017
+ rdfs:label "triangles per square metre"@en ;
1018
+ rdfs:range xsd:double ;
1019
+ rdfs:comment "Triangles per square metre of surface of a version: a measure, with no target. Maps to: node_datamodel ResourceNode.properties.tris_per_m2."@en .
1020
+
1021
+ em:texelDensityDD
1022
+ a owl:DatatypeProperty ;
1023
+ rdfs:label "texel density (Demetrescu-D'Annibale)"@en ;
1024
+ rdfs:range xsd:double ;
1025
+ rdfs:comment "The side of a texel in millimetres, in the form of the Demetrescu-D'Annibale formula (Demetrescu et al. 2026, Remote Sensing 18, 203, Eq. 1; reference 1.26). Maps to: node_datamodel ResourceNode.properties.texel_density_dd."@en .
1026
+
1027
+ em:textureCount
1028
+ a owl:DatatypeProperty ;
1029
+ rdfs:label "texture count"@en ;
1030
+ rdfs:range xsd:nonNegativeInteger ;
1031
+ rdfs:comment "How many texture atlases a version has. Maps to: node_datamodel ResourceNode.properties.texture_count."@en .
1032
+
1033
+ em:textureSidePx
1034
+ a owl:DatatypeProperty ;
1035
+ rdfs:label "texture side (px)"@en ;
1036
+ rdfs:range xsd:nonNegativeInteger ;
1037
+ rdfs:comment "The side of a texture atlas of a version, in pixels. Maps to: node_datamodel ResourceNode.properties.texture_side_px."@en .
1038
+
1039
+ em:uvRatio
1040
+ a owl:DatatypeProperty ;
1041
+ rdfs:label "UV ratio"@en ;
1042
+ rdfs:range xsd:double ;
1043
+ rdfs:comment "The share of the atlas filled by the UV islands (0.6 in the reference). Maps to: node_datamodel ResourceNode.properties.uv_ratio."@en .
1044
+
1045
+ em:reductionFromLod0
1046
+ a owl:DatatypeProperty ;
1047
+ rdfs:label "reduction from LOD0"@en ;
1048
+ rdfs:range xsd:double ;
1049
+ rdfs:comment "Triangles of this version divided by those of LOD0 (3DSC's «magnitude»). Maps to: node_datamodel ResourceNode.properties.reduction_from_lod0."@en .
1050
+
1051
+ em:geometricErrorM
1052
+ a owl:DatatypeProperty ;
1053
+ rdfs:label "geometric error (m)"@en ;
1054
+ rdfs:range xsd:double ;
1055
+ rdfs:comment "For a 3D Tiles tileset: its geometricError in metres. Maps to: node_datamodel ResourceNode.properties.geometric_error_m."@en .
1056
+
1057
+ # ============================================================================
1058
+ # End of em.ttl v1.6.15
1000
1059
  # ============================================================================
@@ -0,0 +1,254 @@
1
+ {
2
+ "_version": "1.0.0",
3
+ "_note": "I1 (decided by E.D., 4 Oct 2026) · ONE list of the STATES the EM tools show, with the SYMBOL of each and its MEANING. What is standardised is the symbol and what it means, not the final form: colour, stroke and style stay each tool's (EMStudio, EM Tools, StratiField draw their own version of the glyph). Each tool tests that every state here has its sign and that it shows no state that is not here. The file states are those of the one resolver (s3dgraphy.resources.locate.STATES). Vendored by EMStudio's ./em.sh sync next to em_visual_rules.json.",
4
+ "families": {
5
+ "file": "Where the bytes of a resource are (the resolver, R1)",
6
+ "node": "The StratiGraph node",
7
+ "room": "The room of a graph",
8
+ "sync": "How aligned this copy is with the room",
9
+ "role": "Your role in the room",
10
+ "scene": "An object of a Blender scene"
11
+ },
12
+ "states": {
13
+ "file.on_disk": {
14
+ "family": "file",
15
+ "glyph": "●",
16
+ "label": {
17
+ "it": "sul disco",
18
+ "en": "on the disk"
19
+ },
20
+ "meaning": {
21
+ "it": "I byte sono su questo computer (in un percorso o nella cache).",
22
+ "en": "The bytes are on this computer (at a path or in the cache)."
23
+ }
24
+ },
25
+ "file.on_node": {
26
+ "family": "file",
27
+ "glyph": "☁",
28
+ "label": {
29
+ "it": "nel nodo",
30
+ "en": "on the node"
31
+ },
32
+ "meaning": {
33
+ "it": "Il nodo custodisce i byte (lo sha256 risponde), questo computer no.",
34
+ "en": "The node keeps the bytes (its sha256 answers); this computer does not."
35
+ }
36
+ },
37
+ "file.both": {
38
+ "family": "file",
39
+ "glyph": "◉",
40
+ "label": {
41
+ "it": "in entrambi",
42
+ "en": "in both"
43
+ },
44
+ "meaning": {
45
+ "it": "I byte sono qui e nel nodo.",
46
+ "en": "The bytes are here and on the node."
47
+ }
48
+ },
49
+ "file.reference_only": {
50
+ "family": "file",
51
+ "glyph": "↗",
52
+ "label": {
53
+ "it": "solo riferimento",
54
+ "en": "reference only"
55
+ },
56
+ "meaning": {
57
+ "it": "C'è solo un indirizzo altrove (un URL, un bucket).",
58
+ "en": "There is only an address somewhere else (a URL, a bucket)."
59
+ }
60
+ },
61
+ "file.missing": {
62
+ "family": "file",
63
+ "glyph": "✕",
64
+ "label": {
65
+ "it": "mancante",
66
+ "en": "missing"
67
+ },
68
+ "meaning": {
69
+ "it": "Il file non si trova da nessuna parte raggiungibile da qui.",
70
+ "en": "The file is nowhere that can be reached from here."
71
+ }
72
+ },
73
+ "file.empty_copy": {
74
+ "family": "file",
75
+ "glyph": "◌",
76
+ "label": {
77
+ "it": "copia vuota",
78
+ "en": "empty copy"
79
+ },
80
+ "meaning": {
81
+ "it": "C'è un file ma i suoi byte sono zeri: una copia incompleta, da rifare.",
82
+ "en": "A file is here but its bytes are zeros: an incomplete copy, to be made again."
83
+ }
84
+ },
85
+ "node.reachable": {
86
+ "family": "node",
87
+ "glyph": "⬢",
88
+ "label": {
89
+ "it": "raggiungibile",
90
+ "en": "reachable"
91
+ },
92
+ "meaning": {
93
+ "it": "Il nodo risponde adesso.",
94
+ "en": "The node answers now."
95
+ }
96
+ },
97
+ "node.unreachable": {
98
+ "family": "node",
99
+ "glyph": "⬡",
100
+ "label": {
101
+ "it": "non raggiungibile",
102
+ "en": "unreachable"
103
+ },
104
+ "meaning": {
105
+ "it": "Il nodo non risponde: si lavora sul computer, si allinea dopo.",
106
+ "en": "The node does not answer: work on this computer, align later."
107
+ }
108
+ },
109
+ "node.global": {
110
+ "family": "node",
111
+ "glyph": "⊕",
112
+ "label": {
113
+ "it": "in rete globale",
114
+ "en": "on the global network"
115
+ },
116
+ "meaning": {
117
+ "it": "Il nodo è raggiungibile da fuori la rete locale (federato o pubblico).",
118
+ "en": "The node can be reached from outside the local network (federated or public)."
119
+ }
120
+ },
121
+ "node.local_only": {
122
+ "family": "node",
123
+ "glyph": "⌂",
124
+ "label": {
125
+ "it": "solo locale",
126
+ "en": "local only"
127
+ },
128
+ "meaning": {
129
+ "it": "Il nodo ascolta solo questo computer o la rete locale.",
130
+ "en": "The node listens to this computer or the local network only."
131
+ }
132
+ },
133
+ "room.inside": {
134
+ "family": "room",
135
+ "glyph": "▣",
136
+ "label": {
137
+ "it": "dentro",
138
+ "en": "inside"
139
+ },
140
+ "meaning": {
141
+ "it": "Questo grafo è in una stanza: le modifiche vanno lì.",
142
+ "en": "This graph is in a room: the edits go there."
143
+ }
144
+ },
145
+ "room.outside": {
146
+ "family": "room",
147
+ "glyph": "□",
148
+ "label": {
149
+ "it": "fuori",
150
+ "en": "outside"
151
+ },
152
+ "meaning": {
153
+ "it": "Nessuna stanza: il grafo è un file su questo computer.",
154
+ "en": "No room: the graph is a file on this computer."
155
+ }
156
+ },
157
+ "room.read_only": {
158
+ "family": "room",
159
+ "glyph": "⊘",
160
+ "label": {
161
+ "it": "sola lettura",
162
+ "en": "read only"
163
+ },
164
+ "meaning": {
165
+ "it": "Sei nella stanza ma il tuo ruolo non scrive.",
166
+ "en": "You are in the room but your role does not write."
167
+ }
168
+ },
169
+ "sync.aligned": {
170
+ "family": "sync",
171
+ "glyph": "✓",
172
+ "label": {
173
+ "it": "allineato",
174
+ "en": "aligned"
175
+ },
176
+ "meaning": {
177
+ "it": "Quello che hai è quello che ha la stanza.",
178
+ "en": "What you have is what the room has."
179
+ }
180
+ },
181
+ "sync.pending": {
182
+ "family": "sync",
183
+ "glyph": "⋯",
184
+ "label": {
185
+ "it": "in attesa",
186
+ "en": "pending"
187
+ },
188
+ "meaning": {
189
+ "it": "Ci sono modifiche partite e non ancora confermate (o da mandare).",
190
+ "en": "There are edits sent and not yet confirmed (or still to send)."
191
+ }
192
+ },
193
+ "sync.conflict": {
194
+ "family": "sync",
195
+ "glyph": "≠",
196
+ "label": {
197
+ "it": "in conflitto",
198
+ "en": "in conflict"
199
+ },
200
+ "meaning": {
201
+ "it": "Due mani hanno cambiato la stessa cosa: si decide chi vince.",
202
+ "en": "Two hands changed the same thing: who wins is to be decided."
203
+ }
204
+ },
205
+ "role.owner": {
206
+ "family": "role",
207
+ "glyph": "★",
208
+ "label": {
209
+ "it": "proprietario",
210
+ "en": "owner"
211
+ },
212
+ "meaning": {
213
+ "it": "Decide chi entra e che cosa la stanza tiene.",
214
+ "en": "Decides who comes in and what the room keeps."
215
+ }
216
+ },
217
+ "role.editor": {
218
+ "family": "role",
219
+ "glyph": "✎",
220
+ "label": {
221
+ "it": "editor",
222
+ "en": "editor"
223
+ },
224
+ "meaning": {
225
+ "it": "Scrive nel grafo e carica i file.",
226
+ "en": "Writes in the graph and uploads files."
227
+ }
228
+ },
229
+ "role.viewer": {
230
+ "family": "role",
231
+ "glyph": "◎",
232
+ "label": {
233
+ "it": "lettore",
234
+ "en": "viewer"
235
+ },
236
+ "meaning": {
237
+ "it": "Legge, non scrive.",
238
+ "en": "Reads, does not write."
239
+ }
240
+ },
241
+ "scene.only_here": {
242
+ "family": "scene",
243
+ "glyph": "◆",
244
+ "label": {
245
+ "it": "solo qui",
246
+ "en": "only here"
247
+ },
248
+ "meaning": {
249
+ "it": "Un oggetto della scena che non è del grafo (decorazione, prova): non sale mai.",
250
+ "en": "An object of the scene that is not the graph's (a decoration, a trial): never uploaded."
251
+ }
252
+ }
253
+ }
254
+ }
@@ -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.24",
3
+ "s3Dgraphy_data_model_version": "1.6.25",
4
4
  "node_types": {
5
5
  "ActivityNodeGroup": {
6
6
  "parent": "GroupNode",
@@ -1,6 +1,6 @@
1
1
  {
2
- "s3Dgraphy_data_model_version": "1.6.24",
3
- "description": "v1.6.24 (dev30, decided by E.D. 2026-10-02 on the dev29 report): DTCAcquisitionNode.retrieved_from — where a retrieved object came from, a DOI or a URL (em:retrievedFrom, D1; optional, validate warns «download without origin»). ResourceNode.members_digest names em:membersDigest, the digest of a file_set with a predicate of its own beside em:checksum + em:digestCovers (D4; not a second field). ResourceNode.packaging carries its vocabulary with values and labels, translated in datamodel_translations.json (packagings; A3). ResourceNode.content_digest also holds the digest of the data of a master inside another file — a Metashape model's mesh.ply — compared, never verified by downloading (D7). GCPSetNode gains data.control (ground_control_points | camera_positions) and data.accuracy_m: a chunk referenced only by its cameras' GPS is absolute with the control said for what it is, and validate warns «georeferenced only by camera GPS» (D7). Node.properties.lang states the one explicit exception to the AI marker: a recognised language confirmed by a person is data.lang only (U5). CRMem 1.6.14. v1.6.23 (dev29, 2026-10-02, measured on San Pietro): seven properties that the round trip em.json → TTL → em.json lost now leave and come back — ResourceNode packaging / tier / digest_covers / content_digest (em:packaging, em:tier, em:digestCovers, em:contentDigest) and the declared fields of a DTC step, technique / parameters / software (em:technique, em:parameters, em:software, the last two as rdf:JSON). digest_covers admits members (a file_set). The blend:// locator stays out of RDF on purpose: it is a private path. v1.6.22 (dev28, 2026-11-01, decided by E.D. 2026-10-01 on the dev27 report): the access mode of a signature (created_auth / modified_auth / validated_auth) admits a third mode, 'declared' — an iD typed in a tool's preferences and checked by nobody (EMStudio's declared identity, EM Tools' local identity), with no attested_by; through a relay the mode is the relay's, read from the token (crdt.stamp_auth), not the client's declaration. The language a node is born in travels in the add_node op (crdt.make_op requires it of the producer, 'und' when unknown); the study's language is read only for old ops, said and counted. CRMem 1.6.12. v1.6.21 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione» and «l'accesso sul campo»): ResourceNode.properties gains lang — on a resource the language(s) of its CONTENT, one tag or a sorted list, leaving as dcterms:language and outside the cascade of the texts — addresses (several addresses of ONE resource, same digest: em:hasAddress with em:locator, em:residency, em:checkedAt, em:reachable) and checksum_at (a dated digest, em:checksumAt). Node.properties gains created_auth / modified_auth / validated_auth: how the hand of a signature had entered, {mode: orcid | node_password, attested_by} (em:createdVia / em:modifiedVia / em:validatedVia, em:authMode, em:attestedBy). data.lang is written at birth (s3dgraphy.language.stamp_birth_language), also when equal to the study's. v1.6.20 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, «Le traduzioni»): NEW TranslationNode (TRANSL, crm:E33_Linguistic_Object) — ONE translation of one text field of one node. The original stays a string in its field (data.lang on the node, else the study's), never overwritten; each translation is a node reached by has_translation (crm:P73_has_translation, connections 1.6.34) with data.lang (arrival), data.from_lang (departure, written because the original can change), data.field (CRDT vocabulary: description | data.<key>; a PropertyNode's value is data.value; never name), data.text, data.method (manual | ai | edition), data.source_digest (sha256 of the original translated: a different digest = «da riallineare») and data.review_requested («da rivedere»). Who: has_author; AI: data.ai_assisted, unverified until validated_by; an edition: extracted_from → the DocumentNode. RDF (em.ttl 1.6.10): Node.properties.lang names em:originalLanguage — the node's own data.lang leaves as that literal whenever it is declared, equal to the study's too, so a reader tells the original literal from the translations that share its predicate and the round trip gives data.lang back exactly where it was (the D.1 limit of 1.6.19 is closed); the TranslationNode's fields name em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested. v1.6.19 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): Node.properties.description becomes an object {cidoc: P3_has_note, natural_language: true, note} — the MARKER that says the description is text in a natural language and leaves in RDF with its language tag; declared once on the base class and inherited by every node type. name is NOT marked: names are invariant identities. No field added, no node element, no graph change: the em.json is the same; only the RDF literal gains its tag. v1.6.18 (MICRO i termini di em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — the datamodel JSON is the truth, so every em: term of em.ttl is cited by a datamodel or is a written exception): the em: predicates the RDF exporter already writes are now NAMED in properties, as plain-string mapping notes (no field added, no node element, no graph change). Node (inherited by every class): the last-hand stamps created_by em:createdBy / modified_by em:lastEditedBy / modified_at em:modifiedAt (created_at prov:generatedAtTime), the tombstone removed.ts em:removedAt / removed.by em:removedBy, the AI marker ai_assisted.by em:aiAssistedBy / .model em:aiModel / .prompt_ref em:aiPromptRef / .fields em:aiAssistedField and the verification validated_by em:validatedBy / validated_at em:validatedAt (properties_note). ResourceNode: checksum em:checksum, scope em:resourceScope, residency em:residency. SemanticShapeNode: convexshapes em:convexShape, spheres em:sphere. AnnotationRegionNode: crs em:crs, coords.frame_iri em:LocalSceneFrame. AuthorNode and AuthorAINode: verified em:orcidVerified (AuthorAINode also names orcid P48, which the exporter writes for both). LocationNodeGroup.propagation.mapping: uri em:propagation. THREE ENTRIES CORRECTED TO WHAT THE CODE WRITES (measured in rdf_exporter.py): PropertyNode.property_type was P2_has_type, is em:hasQualiaType; AuthorAINode model / prompt_reference were P3_has_note, are em:modelIdentifier / em:promptReference; ResourceFileNode.checksum was P1_is_identified_by, is em:checksum; and LocationNodeGroup.propagation said 'not serialized to triplestore' while the exporter has written the non-default value as em:propagation since c1a702c (2026-08-12). v1.6.17 (MICRO la risorsa e i suoi file, 2026-10-18, decided by E.D. 2026-09-30): NEW ResourceFileNode (FILE, crmdig:D1_Digital_Object) — the ResourceNode is the set, the ResourceFileNode is each file, reached by has_file (connections 1.6.30) with role and relative path on the edge. With one file the node is implicit (url and checksum stay on the ResourceNode, as today). ResourceNode.PACKAGINGS += file_set (a few files that call each other: obj → mtl → textures, gltf → bin, shp and companions) and datablock (one object inside a file, a blend:// locator). Representations of the same thing are sibling ResourceNodes tied by dtc_derived_from and chosen by tier and packaging. ADDITIVE: nothing narrowed, no graph changes. v1.6.16 (MICRO le annotazioni ATON sull'asset, 2026-10-15, decided by E.D.): AnnotationRegionNode gains geometry_kind 'volume' — an annotation that encloses a part of a 3D model (ATON / Hathor convex hulls and spheres) and is the proxy of no unit. The region carries no vertices: it reaches a SemanticShapeNode (convexshapes, spheres) with has_semantic_shape and the model with is_on_resource. geometry.aton.import_aton_scene makes one for every semantic id no EM node is named after (a stratigraphic unit only with an explicit create_type); api.promote_region_to_proxy turns it into the proxy of a unit later. RDF: P2_has_type 'volume', no selector, no WKT; the shape travels as itself. Additive. v1.6.15 (MICRO la geometria per origine, 2026-10-11, decided by E.D. 2026-09-30): AnnotationRegionNode's point / line / polyline keep their vertices IN THE NODE, data.coords [[x, y, z], ...] (scene-local, glTF Y-up, metres) with crs and, for a line or a polyline, length and unit — no .glb and no SemanticShape for a reading. New block coords (inline_max_vertices 500: above it the vertices go to a .glb resource via has_linked_resource, with a warning). RDF: geo:hasGeometry -> <region>/geometry geo:asWKT (POINT Z / LINESTRING Z, GeoSPARQL). The readings/<id>.glb of 2026-10-06 are migrated on opening. v1.6.14 (MICRO la cattura in RDF, 2026-09-30): DTCAcquisitionNode.mapping.by_kind — its D12 is the class of a retrieval; a capture takes the class its kind declares in em_visual_rules 1.6.24 (D2 / D11 / E65). Mapping text only, no field changed. v1.6.13 (MICRO i generi delle US, 2026-09-30, decided by E.D. the same day): stratigraphic_kind gains 'coating' — the USR (rivestimento) and its English translation USS (surface): plaster, floors, revetments — with `labels`, `codes` and `default_code` per kind; new node element `source_code` (data.source_code) keeps the code a unit came in with when it is not its kind's default, so the way back to pyArchInit gives the same code. A legacy node_type 'USR' / 'USS' opens as US + coating. v1.6.12 (MICRO la cattura nel DTC e le murature, 2026-09-30): StratigraphicUnit (US) gains the node element `stratigraphic_kind` (em.json data.stratigraphic_kind; today one value, 'masonry'): a USM is a US + masonry, and the legacy node_type 'USM' — never a type of this datamodel — opens as that. DTCAcquisitionNode's description names the two families of the acquisition axis (em_visual_rules 1.6.22: capture / retrieval). v1.6.11 (MICRO la misura in RDF, 2026-10-07): AnnotationRegionNode.properties says how the fields left unprojected by 1.6.10 now travel — the quote of a passage as oa:TextQuoteSelector, the length of a line/polyline as crm:E54_Dimension (P90 value, P91 QUDT unit, em:crs), vertex_count as em:vertexCount. CRMem (em.ttl) 1.6.5 -> 1.6.6. Mapping text only, no field changed. v1.6.10 (MICRO la geometria della lettura, 2026-10-06, decided by E.D. on 2026-09-29): AnnotationRegionNode becomes the node of THE PLACE A READING LOOKED AT, with a new field geometry_kind: region2d (default, every older region), passage (start, end, text), point, line, polyline. The three 3D kinds keep their coordinates in a .glb (glTF POINTS / LINES / LINE_STRIP) linked with has_semantic_shape exactly like a proxy's payload, never in the em.json; the node keeps vertex_count and, for line/polyline, length + unit + crs (api.measure). See the entry's geometry_kinds and glb_payload. Paired with connections 1.6.27 (is_on_resource.target += the representation models). Additive: a region without geometry_kind reads as region2d. v1.6.9 (MICRO la definizione dell'unita', 2026-10-20, decided by E.D. on 2026-09-27): StratigraphicNode.properties gains `definition`, the DEFINIZIONE of the US sheet, as an element of the node like name and description and NOT a qualia. Value = a controlled-vocabulary concept {concept, label}; em.json carries it as data.definition (CRDT field 'data.definition', no change to the frozen em.json v1 node shape); inherited by every stratigraphic subtype. The RDF projection is declared in the entry itself (`rdf`): crm:P2_has_type -> crm:E55_Type when a concept URI is present, nothing when only a label is (`label_only: null`). CRMem 1.6.4 -> 1.6.5 for the companion em:hasDefinition (subproperty of crm:P2_has_type, declared, not emitted by default). Additive only. v1.6.7 (CRMem WIRING, 2026-09-24): rimosso il campo legacy `cidoc_s3d` da tutte le mapping. Non era letto da nessuna parte del codice e portava quattro nomi di classe senza namespace, mai dichiarati e mai emessi: EpochNode = StratigraphicTimeframe; ActivityNodeGroup = StratigraphicActivity; ParadataNodeGroup = ParadataCollection; ResourceNode = ExternalResourceReference. Il prefisso CIDOC-S3D non esiste piu' in nessuno dei due datamodel. v1.6.6 (CIDOC REPAIR, 2026-09-21): classes that pointed at IRIs nobody declares. Checked by parsing the official releases, not from memory. crm:E78_Collection is gone from CIDOC CRM 7.1.3 — renamed E78_Curated_Holding — and E.D. decided NOT to follow the rename, because E78_Curated_Holding is a subclass of E24 Physical Human-Made Thing and a group of nodes is not a physical thing. The three classes that carried it therefore split, each to the class it actually is: GroupNode and RepresentationModelNodeGroup to crm:E73_Information_Object (a conceptual set, and an E90 Symbolic Object, which is what the P106i membership edge needs at both ends), ParadataNodeGroup to crm:E89_Propositional_Object — which is what a gathered body of reasoning IS and what the range of crm:P129i_is_subject_of demands, that being the predicate has_paradata_nodegroup takes in connections 1.6.17 the same day; it stays an E90 through em:NodeGroup, so the membership edge does not break. SemanticShapeNode leaves crmgeo:SP5_Geometric_Place_Expression for crm:E73_Information_Object, PROVVISORIAMENTE: SP5 is not declared at the crmgeo namespace this datamodel emits, crmgeo:SP6_Declarative_Place is the better candidate, and the decision is rinviata da E.D. — E73 commits to nothing meanwhile. crm:P131_is_identified_by, deprecated in CRM 7.x together with E82 Actor Appellation, becomes crm:P1_is_identified_by on AuthorNode (name, surname) and AuthorAINode (name). «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). The eight em: terms this file and the connections datamodel cite but em.ttl never defined are now declared there (em:FunctionalUnit, em:GCPSet, em:Narrative, em:NeutralSU, em:RegistrationTransform, em:RepresentationModelNodeGroup, em:hasSubEpoch, em:validatedBy), with domain, range and superclass read off these datamodels and nothing invented. NOT TOUCHED: the `alternative` and legacy `cidoc_s3d` prose fields, which still discuss E78 as an option — prose, not a projection, and rewording them is modelling rather than repair. v1.6.5 (EM16-RMNG, 2026-09-10): adds RepresentationModelNodeGroup, the RM container as a first-class group of the graph — sixth subtype of GroupNode, keeping the parent's E78 Collection because a container IS a curatorial set. Paired with connections datamodel 1.6.14, which adds the is_in_representation_model_group membership edge and widens has_representation_model.target to accept the group. Additive only: no existing entry changed. s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.4 adds the ADDITIVE georeferencing_nodes section (GCPSetNode = em:GCPSet, RegistrationTransformNode = em:RegistrationTransform, both subclasses of crm:E73_Information_Object with their own extension URIs so the RDF projection stays bijective): the CONTROL and the SOLUTION that place a produced model in the world, introduced with the photogrammetry processing connector. The two modes of that connector are the SHAPE of the graph (a transform with a CRS that has_gcp_set points at = absolute; a transform with crs=null and no control set = a site-local frame; no transform at all = nobody placed it), never a flag. No existing family changed. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
2
+ "s3Dgraphy_data_model_version": "1.6.25",
3
+ "description": "v1.6.25 (D1, MICRO un solo vocabolario, decided by E.D. 4 Oct 2026): GeoPositionNode.rotation_reference = 'grid' (D2: the rotation is measured from the GRID north of the CRS). ResourceNode.lod_level (em:lodLevel, computed from the chain, written only on export and checked at load), ResourceNode.use (em:use, a list of analysis | realtime | web | mobile_ar | print | render | preview) and seven measures of a version (em:trisPerM2, em:texelDensityDD, em:textureCount, em:textureSidePx, em:uvRatio, em:reductionFromLod0, em:geometricErrorM). v1.6.24 (dev30, decided by E.D. 2026-10-02 on the dev29 report): DTCAcquisitionNode.retrieved_from — where a retrieved object came from, a DOI or a URL (em:retrievedFrom, D1; optional, validate warns «download without origin»). ResourceNode.members_digest names em:membersDigest, the digest of a file_set with a predicate of its own beside em:checksum + em:digestCovers (D4; not a second field). ResourceNode.packaging carries its vocabulary with values and labels, translated in datamodel_translations.json (packagings; A3). ResourceNode.content_digest also holds the digest of the data of a master inside another file — a Metashape model's mesh.ply — compared, never verified by downloading (D7). GCPSetNode gains data.control (ground_control_points | camera_positions) and data.accuracy_m: a chunk referenced only by its cameras' GPS is absolute with the control said for what it is, and validate warns «georeferenced only by camera GPS» (D7). Node.properties.lang states the one explicit exception to the AI marker: a recognised language confirmed by a person is data.lang only (U5). CRMem 1.6.14. v1.6.23 (dev29, 2026-10-02, measured on San Pietro): seven properties that the round trip em.json → TTL → em.json lost now leave and come back — ResourceNode packaging / tier / digest_covers / content_digest (em:packaging, em:tier, em:digestCovers, em:contentDigest) and the declared fields of a DTC step, technique / parameters / software (em:technique, em:parameters, em:software, the last two as rdf:JSON). digest_covers admits members (a file_set). The blend:// locator stays out of RDF on purpose: it is a private path. v1.6.22 (dev28, 2026-11-01, decided by E.D. 2026-10-01 on the dev27 report): the access mode of a signature (created_auth / modified_auth / validated_auth) admits a third mode, 'declared' — an iD typed in a tool's preferences and checked by nobody (EMStudio's declared identity, EM Tools' local identity), with no attested_by; through a relay the mode is the relay's, read from the token (crdt.stamp_auth), not the client's declaration. The language a node is born in travels in the add_node op (crdt.make_op requires it of the producer, 'und' when unknown); the study's language is read only for old ops, said and counted. CRMem 1.6.12. v1.6.21 (dev27, 2026-10-31, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione» and «l'accesso sul campo»): ResourceNode.properties gains lang — on a resource the language(s) of its CONTENT, one tag or a sorted list, leaving as dcterms:language and outside the cascade of the texts — addresses (several addresses of ONE resource, same digest: em:hasAddress with em:locator, em:residency, em:checkedAt, em:reachable) and checksum_at (a dated digest, em:checksumAt). Node.properties gains created_auth / modified_auth / validated_auth: how the hand of a signature had entered, {mode: orcid | node_password, attested_by} (em:createdVia / em:modifiedVia / em:validatedVia, em:authMode, em:attestedBy). data.lang is written at birth (s3dgraphy.language.stamp_birth_language), also when equal to the study's. v1.6.20 (MICRO le traduzioni, 2026-10-29, decided by E.D. 2026-10-01, «Le traduzioni»): NEW TranslationNode (TRANSL, crm:E33_Linguistic_Object) — ONE translation of one text field of one node. The original stays a string in its field (data.lang on the node, else the study's), never overwritten; each translation is a node reached by has_translation (crm:P73_has_translation, connections 1.6.34) with data.lang (arrival), data.from_lang (departure, written because the original can change), data.field (CRDT vocabulary: description | data.<key>; a PropertyNode's value is data.value; never name), data.text, data.method (manual | ai | edition), data.source_digest (sha256 of the original translated: a different digest = «da riallineare») and data.review_requested («da rivedere»). Who: has_author; AI: data.ai_assisted, unverified until validated_by; an edition: extracted_from → the DocumentNode. RDF (em.ttl 1.6.10): Node.properties.lang names em:originalLanguage — the node's own data.lang leaves as that literal whenever it is declared, equal to the study's too, so a reader tells the original literal from the translations that share its predicate and the round trip gives data.lang back exactly where it was (the D.1 limit of 1.6.19 is closed); the TranslationNode's fields name em:sourceLanguage, em:translatedField, em:translationMethod, em:sourceDigest, em:reviewRequested. v1.6.19 (MICRO la lingua dei dati, 2026-10-27, decided by E.D. 2026-09-28): Node.properties.description becomes an object {cidoc: P3_has_note, natural_language: true, note} — the MARKER that says the description is text in a natural language and leaves in RDF with its language tag; declared once on the base class and inherited by every node type. name is NOT marked: names are invariant identities. No field added, no node element, no graph change: the em.json is the same; only the RDF literal gains its tag. v1.6.18 (MICRO i termini di em.ttl nel datamodel, 2026-10-26, decided by E.D. 2026-10-01 — the datamodel JSON is the truth, so every em: term of em.ttl is cited by a datamodel or is a written exception): the em: predicates the RDF exporter already writes are now NAMED in properties, as plain-string mapping notes (no field added, no node element, no graph change). Node (inherited by every class): the last-hand stamps created_by em:createdBy / modified_by em:lastEditedBy / modified_at em:modifiedAt (created_at prov:generatedAtTime), the tombstone removed.ts em:removedAt / removed.by em:removedBy, the AI marker ai_assisted.by em:aiAssistedBy / .model em:aiModel / .prompt_ref em:aiPromptRef / .fields em:aiAssistedField and the verification validated_by em:validatedBy / validated_at em:validatedAt (properties_note). ResourceNode: checksum em:checksum, scope em:resourceScope, residency em:residency. SemanticShapeNode: convexshapes em:convexShape, spheres em:sphere. AnnotationRegionNode: crs em:crs, coords.frame_iri em:LocalSceneFrame. AuthorNode and AuthorAINode: verified em:orcidVerified (AuthorAINode also names orcid P48, which the exporter writes for both). LocationNodeGroup.propagation.mapping: uri em:propagation. THREE ENTRIES CORRECTED TO WHAT THE CODE WRITES (measured in rdf_exporter.py): PropertyNode.property_type was P2_has_type, is em:hasQualiaType; AuthorAINode model / prompt_reference were P3_has_note, are em:modelIdentifier / em:promptReference; ResourceFileNode.checksum was P1_is_identified_by, is em:checksum; and LocationNodeGroup.propagation said 'not serialized to triplestore' while the exporter has written the non-default value as em:propagation since c1a702c (2026-08-12). v1.6.17 (MICRO la risorsa e i suoi file, 2026-10-18, decided by E.D. 2026-09-30): NEW ResourceFileNode (FILE, crmdig:D1_Digital_Object) — the ResourceNode is the set, the ResourceFileNode is each file, reached by has_file (connections 1.6.30) with role and relative path on the edge. With one file the node is implicit (url and checksum stay on the ResourceNode, as today). ResourceNode.PACKAGINGS += file_set (a few files that call each other: obj → mtl → textures, gltf → bin, shp and companions) and datablock (one object inside a file, a blend:// locator). Representations of the same thing are sibling ResourceNodes tied by dtc_derived_from and chosen by tier and packaging. ADDITIVE: nothing narrowed, no graph changes. v1.6.16 (MICRO le annotazioni ATON sull'asset, 2026-10-15, decided by E.D.): AnnotationRegionNode gains geometry_kind 'volume' — an annotation that encloses a part of a 3D model (ATON / Hathor convex hulls and spheres) and is the proxy of no unit. The region carries no vertices: it reaches a SemanticShapeNode (convexshapes, spheres) with has_semantic_shape and the model with is_on_resource. geometry.aton.import_aton_scene makes one for every semantic id no EM node is named after (a stratigraphic unit only with an explicit create_type); api.promote_region_to_proxy turns it into the proxy of a unit later. RDF: P2_has_type 'volume', no selector, no WKT; the shape travels as itself. Additive. v1.6.15 (MICRO la geometria per origine, 2026-10-11, decided by E.D. 2026-09-30): AnnotationRegionNode's point / line / polyline keep their vertices IN THE NODE, data.coords [[x, y, z], ...] (scene-local, glTF Y-up, metres) with crs and, for a line or a polyline, length and unit — no .glb and no SemanticShape for a reading. New block coords (inline_max_vertices 500: above it the vertices go to a .glb resource via has_linked_resource, with a warning). RDF: geo:hasGeometry -> <region>/geometry geo:asWKT (POINT Z / LINESTRING Z, GeoSPARQL). The readings/<id>.glb of 2026-10-06 are migrated on opening. v1.6.14 (MICRO la cattura in RDF, 2026-09-30): DTCAcquisitionNode.mapping.by_kind — its D12 is the class of a retrieval; a capture takes the class its kind declares in em_visual_rules 1.6.24 (D2 / D11 / E65). Mapping text only, no field changed. v1.6.13 (MICRO i generi delle US, 2026-09-30, decided by E.D. the same day): stratigraphic_kind gains 'coating' — the USR (rivestimento) and its English translation USS (surface): plaster, floors, revetments — with `labels`, `codes` and `default_code` per kind; new node element `source_code` (data.source_code) keeps the code a unit came in with when it is not its kind's default, so the way back to pyArchInit gives the same code. A legacy node_type 'USR' / 'USS' opens as US + coating. v1.6.12 (MICRO la cattura nel DTC e le murature, 2026-09-30): StratigraphicUnit (US) gains the node element `stratigraphic_kind` (em.json data.stratigraphic_kind; today one value, 'masonry'): a USM is a US + masonry, and the legacy node_type 'USM' — never a type of this datamodel — opens as that. DTCAcquisitionNode's description names the two families of the acquisition axis (em_visual_rules 1.6.22: capture / retrieval). v1.6.11 (MICRO la misura in RDF, 2026-10-07): AnnotationRegionNode.properties says how the fields left unprojected by 1.6.10 now travel — the quote of a passage as oa:TextQuoteSelector, the length of a line/polyline as crm:E54_Dimension (P90 value, P91 QUDT unit, em:crs), vertex_count as em:vertexCount. CRMem (em.ttl) 1.6.5 -> 1.6.6. Mapping text only, no field changed. v1.6.10 (MICRO la geometria della lettura, 2026-10-06, decided by E.D. on 2026-09-29): AnnotationRegionNode becomes the node of THE PLACE A READING LOOKED AT, with a new field geometry_kind: region2d (default, every older region), passage (start, end, text), point, line, polyline. The three 3D kinds keep their coordinates in a .glb (glTF POINTS / LINES / LINE_STRIP) linked with has_semantic_shape exactly like a proxy's payload, never in the em.json; the node keeps vertex_count and, for line/polyline, length + unit + crs (api.measure). See the entry's geometry_kinds and glb_payload. Paired with connections 1.6.27 (is_on_resource.target += the representation models). Additive: a region without geometry_kind reads as region2d. v1.6.9 (MICRO la definizione dell'unita', 2026-10-20, decided by E.D. on 2026-09-27): StratigraphicNode.properties gains `definition`, the DEFINIZIONE of the US sheet, as an element of the node like name and description and NOT a qualia. Value = a controlled-vocabulary concept {concept, label}; em.json carries it as data.definition (CRDT field 'data.definition', no change to the frozen em.json v1 node shape); inherited by every stratigraphic subtype. The RDF projection is declared in the entry itself (`rdf`): crm:P2_has_type -> crm:E55_Type when a concept URI is present, nothing when only a label is (`label_only: null`). CRMem 1.6.4 -> 1.6.5 for the companion em:hasDefinition (subproperty of crm:P2_has_type, declared, not emitted by default). Additive only. v1.6.7 (CRMem WIRING, 2026-09-24): rimosso il campo legacy `cidoc_s3d` da tutte le mapping. Non era letto da nessuna parte del codice e portava quattro nomi di classe senza namespace, mai dichiarati e mai emessi: EpochNode = StratigraphicTimeframe; ActivityNodeGroup = StratigraphicActivity; ParadataNodeGroup = ParadataCollection; ResourceNode = ExternalResourceReference. Il prefisso CIDOC-S3D non esiste piu' in nessuno dei due datamodel. v1.6.6 (CIDOC REPAIR, 2026-09-21): classes that pointed at IRIs nobody declares. Checked by parsing the official releases, not from memory. crm:E78_Collection is gone from CIDOC CRM 7.1.3 — renamed E78_Curated_Holding — and E.D. decided NOT to follow the rename, because E78_Curated_Holding is a subclass of E24 Physical Human-Made Thing and a group of nodes is not a physical thing. The three classes that carried it therefore split, each to the class it actually is: GroupNode and RepresentationModelNodeGroup to crm:E73_Information_Object (a conceptual set, and an E90 Symbolic Object, which is what the P106i membership edge needs at both ends), ParadataNodeGroup to crm:E89_Propositional_Object — which is what a gathered body of reasoning IS and what the range of crm:P129i_is_subject_of demands, that being the predicate has_paradata_nodegroup takes in connections 1.6.17 the same day; it stays an E90 through em:NodeGroup, so the membership edge does not break. SemanticShapeNode leaves crmgeo:SP5_Geometric_Place_Expression for crm:E73_Information_Object, PROVVISORIAMENTE: SP5 is not declared at the crmgeo namespace this datamodel emits, crmgeo:SP6_Declarative_Place is the better candidate, and the decision is rinviata da E.D. — E73 commits to nothing meanwhile. crm:P131_is_identified_by, deprecated in CRM 7.x together with E82 Actor Appellation, becomes crm:P1_is_identified_by on AuthorNode (name, surname) and AuthorAINode (name). «CRMs3D» is renamed «CRMem», in components and in referenced_ontology_versions alike: the companion ontology is em.ttl and its namespace is em:, so the old name pointed at nothing anyone could look up. CRMsci moves 3.1 -> 3.2 (latest release). The eight em: terms this file and the connections datamodel cite but em.ttl never defined are now declared there (em:FunctionalUnit, em:GCPSet, em:Narrative, em:NeutralSU, em:RegistrationTransform, em:RepresentationModelNodeGroup, em:hasSubEpoch, em:validatedBy), with domain, range and superclass read off these datamodels and nothing invented. NOT TOUCHED: the `alternative` and legacy `cidoc_s3d` prose fields, which still discuss E78 as an option — prose, not a projection, and rewording them is modelling rather than repair. v1.6.5 (EM16-RMNG, 2026-09-10): adds RepresentationModelNodeGroup, the RM container as a first-class group of the graph — sixth subtype of GroupNode, keeping the parent's E78 Collection because a container IS a curatorial set. Paired with connections datamodel 1.6.14, which adds the is_in_representation_model_group membership edge and widens has_representation_model.target to accept the group. Additive only: no existing entry changed. s3Dgraphy nodes datamodel including node types with CIDOC-CRM mappings. v1.6.4 adds the ADDITIVE georeferencing_nodes section (GCPSetNode = em:GCPSet, RegistrationTransformNode = em:RegistrationTransform, both subclasses of crm:E73_Information_Object with their own extension URIs so the RDF projection stays bijective): the CONTROL and the SOLUTION that place a produced model in the world, introduced with the photogrammetry processing connector. The two modes of that connector are the SHAPE of the graph (a transform with a CRS that has_gcp_set points at = absolute; a transform with crs=null and no control set = a site-local frame; no transform at all = nobody placed it), never a flag. No existing family changed. v1.6.3 re-reads SemanticShapeNode as a PAYLOAD carrier: the proxy of a unit is now a PropertyNode of qualia type 'geometry' that points at the shape (has_semantic_shape), so the proxy inherits the paradata chain it never had. Breaking for consumers that read the proxy as a standalone SemanticShape. v1.6.2 adds AnnotationRegionNode (em:AnnotationRegion, subclass of crm:E36_Visual_Item): the geometry of a 2D annotation in NORMALISED image space, distinct from SemanticShapeNode (3D scene geometry, crmgeo:SP5) - the semantics of the 2D annotator, defined before any canvas exists. v1.6.0 inaugurates a systematic CIDOC-CRM mapping revision: complete audit of all node types against CIDOC-CRM, CRMarchaeo, CRMinf, CRMdig, CRMsci, CRMgeo; replacement of legacy 'cidoc_s3d' pseudo-class names (invented strings without IRI or superclass declaration) with formal em:/s3d: IRIs declared as proper subclasses of CRM classes; introduction of CRMinf as primary (not alternative) for the paradata chain (ParadataNode, PropertyNode interpretive case, ExtractorNode, CombinerNode); introduction of PROV-O for AuthorNode to cover both human and AI agents; alignment with the Heritage Digital Twin Ontology (HDT-O) for containment / granularity properties; LocationNodeGroup (v1.5.3) adopted as the reference pattern (CIDOC-native composition via P2_has_type → E55 Type instances, with explicit extension_status and rationale). Companion deliverables: em.ttl (formal EM extension ontology, dereferenceable via w3id.org/em/) and hdto_extension.ttl (HDT-O granularity properties: contains_HDT, contains_SU, isPrimary). v1.5.4 added RSF (Reused Special Find — spolia) as a stratigraphic subtype, octagon with red border, family=real, is_series=false. Originating DP: DP-26 (spolia project, last DP before the EM 1.5 cut). v1.5.3 added LocationNodeGroup (E53 Place + E55 Type) for spatial / locational membership orthogonal to ActivityNodeGroup (intention) and EpochNode (time). v1.5.2 added family + is_series classification metadata on stratigraphic subtypes.",
4
4
  "components": [
5
5
  "CIDOC-CRM",
6
6
  "CRMarchaeo",
@@ -48,7 +48,7 @@
48
48
  "source": "https://www.w3.org/TR/prov-o/"
49
49
  },
50
50
  "CRMem": {
51
- "version": "1.6.14",
51
+ "version": "1.6.15",
52
52
  "source": "internal em.ttl / hdto_extension.ttl companion ontologies"
53
53
  }
54
54
  },
@@ -1036,7 +1036,7 @@
1036
1036
  "abbreviation": "GEO",
1037
1037
  "label": "Geo Position",
1038
1038
  "description": "Class to represent a GeoPosition node in the graph. Attributes: type (str): Node type, set to 'geo_position'. data (dict): Data related to geographic position.",
1039
- "node_usage": "ONE PER GRAPH, not per epoch: georeferencing is a property of the GRAPH (like its name, author, licence, HR id — the graph-level metadata), so Graph.__init__ auto-creates a single node with id 'geo_<graph_id>' and the em.json importer drops that synthetic one when the document carries its own. The SHIFT IS THE ANCHOR, NOT THE POSITION: shift_x/y/z are the origin of the scene-local system expressed in the CRS named by epsg — the point that is (0,0,0) in the scene — and may legitimately sit OUTSIDE the geometry (a round grid vertex hundreds of metres from the monument). It is therefore NOT where a map marker belongs: the marker goes on the CENTROID of the geometry (api.georeference_scene). 'rotation' is the scene azimuth in degrees, clockwise from geographic north, 0 = north up (the default and the normal case). The scene-local → geo transform is: rotate by rotation, add the shift, reproject epsg → 4326 (api.reproject). Graph-side twin of EMTools' scene.em_georef (georef_manager), which propagates the same values to BlenderGIS and 3DSC.",
1039
+ "node_usage": "ONE PER GRAPH, not per epoch: georeferencing is a property of the GRAPH (like its name, author, licence, HR id — the graph-level metadata), so Graph.__init__ auto-creates a single node with id 'geo_<graph_id>' and the em.json importer drops that synthetic one when the document carries its own. The SHIFT IS THE ANCHOR, NOT THE POSITION: shift_x/y/z are the origin of the scene-local system expressed in the CRS named by epsg — the point that is (0,0,0) in the scene — and may legitimately sit OUTSIDE the geometry (a round grid vertex hundreds of metres from the monument). It is therefore NOT where a map marker belongs: the marker goes on the CENTROID of the geometry (api.georeference_scene). 'rotation' is the scene azimuth in degrees, clockwise from the GRID north of the CRS epsg (D2, decided by E.D. 4 Oct 2026: not the geographic north — between the two lies the meridian convergence, which one graph never applies and two graphs meet only as their relative convergence), 0 = north up (the default and the normal case); data.rotation_reference = 'grid' says it in the data. The scene-local → geo transform is: rotate by rotation, add the shift, reproject epsg → 4326 (api.reproject). Graph-side twin of EMTools' scene.em_georef (georef_manager), which propagates the same values to BlenderGIS and 3DSC.",
1040
1040
  "s3Dgraphy_file": "geo_position_node.py",
1041
1041
  "mapping": {
1042
1042
  "cidoc": "E53 Place",
@@ -1057,7 +1057,8 @@
1057
1057
  "shift_x": "Q9_is_expressed_in_terms_of",
1058
1058
  "shift_y": "Q9_is_expressed_in_terms_of",
1059
1059
  "shift_z": "Q9_is_expressed_in_terms_of",
1060
- "rotation": "Q9_is_expressed_in_terms_of"
1060
+ "rotation": "Q9_is_expressed_in_terms_of",
1061
+ "rotation_reference": {"note": "1.6.25 (D2, decided by E.D. 4 Oct 2026): the north 'rotation' is measured from — always 'grid' (the grid north of the CRS epsg), written by GeoPositionNode and set on load when a document does not carry it (it is the definition, not a guess). Not projected to RDF: the anchor's frame is the CRS itself."}
1061
1062
  }
1062
1063
  },
1063
1064
  "ResourceNode": {
@@ -1098,7 +1099,16 @@
1098
1099
  "lang": {
1099
1100
  "rdf": "dcterms:language",
1100
1101
  "note": "1.6.21 (dev27, decided by E.D. 2026-10-01, «il testo, la risorsa e la selezione»): on a RESOURCE, data.lang is the language of the CONTENT of the file — what it is made of — not the language of the resource's own description: a Latin PDF does not make its Italian description Latin. One BCP 47 tag, or a sorted list for more («latino e italiano a fronte» = [\"it\", \"la\"]), written by s3dgraphy.language.set_content_languages. It does NOT enter the cascade of the language of the texts (language.node_language skips resources and their files), it is not written at birth, and it leaves as one dcterms:language per tag instead of em:originalLanguage. The DocumentNode is the WORK, with no text in its fields; the resources are its manifestations, the text is in the file; the ExtractorNode is the selection, with the original words of the passage in its description and its own data.lang."
1101
- }
1102
+ },
1103
+ "lod_level": {"rdf": "em:lodLevel", "pattern": "^lod(0|[1-9][0-9]*)$", "note": "1.6.25 (D1, decided by E.D. 4 Oct 2026, TASSONOMIA-TIER-3D §2a): the LEVEL of a version of an asset, an ordinal INSIDE ONE derivation chain. The master is tier = master and has no level; lod0 is the first version derived from it that one can work on (textured with the Demetrescu-D'Annibale formula: 1.26 mm per texel side, 4096² atlases, UV ratio 0.6 — Demetrescu et al. 2026, Remote Sensing 18, 203, §2 and §4.7); lod1…lodN count the lod_generation steps from LOD0 (as 3DSC's LOD generator does), a version that only reduces its textures included. COMPUTED from the chain (dtc_derived_from + lod_generation, resources.versions.lod_level_of), never stored in the graph: WRITTEN only when the graph leaves (em.json, manifest, record, RDF) and at load computed again and compared, like a checksum (check_lod_levels): a difference is a line in the Log. Why still «measures, not an enumeration of levels»: the etiquette orders one chain and means nothing outside it; the measures compare chains. Engines' automatic LOD (Nanite) is one more way to show a version and does not replace the chain."},
1104
+ "use": {"rdf": "em:use", "cardinality": "list", "values": {"analysis": "Study and measure on the model: digital autopsy of the units, survey, sections, scientific annotation.", "realtime": "Interactive exploration in an engine (Unreal, Unity, Godot, EMviq), desktop and HMD, open world.", "web": "Viewing in the browser (ATON, Heriverse, Voyager), streamed too.", "mobile_ar": "Augmented reality and mobile devices.", "print": "3D printing, physical replica.", "render": "Non-interactive products: plates, sections, reconstructive views, CGI video.", "preview": "Light preview for catalogues and records."}, "labels": {"analysis": "Analysis", "realtime": "Real time", "web": "Web", "mobile_ar": "Mobile / AR", "print": "Print", "render": "Render", "preview": "Preview"}, "_note": "1.6.25 (D1, TASSONOMIA-TIER-3D §2b): what a version is FOR, a LIST (one version can serve the browser and the engine — unlike Voyager, which gives one usage per derivative). Correspondences, from the taxonomy's table: analysis — Voyager none (Editorial3D/Highest undocumented), 3D Tiles none; realtime — Voyager usage App3D; web — Voyager usage Web3D with quality Low/Medium/High, 3D Tiles: the tileset is the usual container and the level is chosen by geometricError; mobile_ar — Voyager quality AR and usage iOSApp3D; print — Voyager usage Print3D; render — Voyager usage Image2D (the correspondence is ours, not Voyager's); preview — Voyager quality Thumb. 'archive' is left out: keeping is the master's reason to be (tier = master). The older single 'purpose' of a lod_generation step is read as a one-item list when it is one of these."},
1105
+ "tris_per_m2": {"rdf": "em:trisPerM2", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. Triangles per square metre of surface: a MEASURE, with no target (Demetrescu et al. 2026 record 955–5403 on Amba Aradam)."},
1106
+ "texel_density_dd": {"rdf": "em:texelDensityDD", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. The texel SIDE in mm, in the form of the Demetrescu-D'Annibale formula (reference 1.26 mm; surface / (atlases × side² × UV ratio), square root)."},
1107
+ "texture_count": {"rdf": "em:textureCount", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. How many texture atlases."},
1108
+ "texture_side_px": {"rdf": "em:textureSidePx", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. The side of an atlas in pixels (4096 in the reference)."},
1109
+ "uv_ratio": {"rdf": "em:uvRatio", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. The share of the atlas the UV islands fill (0.6 in the reference)."},
1110
+ "reduction_from_lod0": {"rdf": "em:reductionFromLod0", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. The reduction from LOD0 (triangles of this version / triangles of LOD0) — 3DSC's «magnitude»."},
1111
+ "geometric_error_m": {"rdf": "em:geometricErrorM", "note": "1.6.25 (D1): a measure of a version, computed by EMtools when the version is born. For a 3D Tiles tileset only: its geometricError, in metres."}
1102
1112
  },
1103
1113
  "resource_types": {
1104
1114
  "3d_model": [
@@ -1,4 +1,4 @@
1
- __version__ = "1.6.0.dev33"
1
+ __version__ = "1.6.0.dev35"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -24,7 +24,7 @@ import math
24
24
  import re
25
25
  import tempfile
26
26
  from pathlib import Path
27
- from typing import Any, Dict, List, Optional, Tuple
27
+ from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple
28
28
 
29
29
  # Type-only alias; avoid importing submodules at module load (keeps this import
30
30
  # cheap and cycle-free). Real classes are imported lazily inside the ops.
@@ -2704,6 +2704,48 @@ def pick_representation(graph: Graph, res_id: str, can_open) -> Dict[str, Any]:
2704
2704
  return _pick(graph, res_id, can_open)
2705
2705
 
2706
2706
 
2707
+ # ── an asset and its versions (E.D. 30 Sep / 3 Oct 2026) ──────────────────────
2708
+ # The asset is the master resource; each version (LOD1, LOD2…) is a child made
2709
+ # by a `lod_generation` step, with its level and purpose in the step's
2710
+ # parameters. The semantic link stays on the asset and the versions inherit it.
2711
+ # See :mod:`s3dgraphy.resources.versions`.
2712
+ def add_version(graph: Graph, master_id: str, *, level: Optional[str] = None,
2713
+ purpose: str = "", **kwargs) -> Dict[str, Any]:
2714
+ """A version of the asset ``master_id``: a child resource
2715
+ ``dtc_derived_from`` it through a ``lod_generation`` step. ``level`` is its
2716
+ name (default: the computed level, ``lod0`` from the master, ``lodK+1``
2717
+ from a ``lodK``); ``use`` a list of :data:`resources.versions.USES`;
2718
+ ``measures`` the numbers of :data:`resources.versions.LOD_MEASURES` (D1).
2719
+ Idempotent per (asset, level); other bytes at a level are refused (revise
2720
+ the version instead). Returns ``{version_id, process_id, created, asset_id,
2721
+ level, lod_level, use, measures, purpose, warnings}``."""
2722
+ from .resources.versions import add_version as _add
2723
+ before = _ids(graph)
2724
+ out = _add(graph, master_id, level=level, purpose=purpose, **kwargs)
2725
+ _born(graph, before)
2726
+ return out
2727
+
2728
+
2729
+ def versions_of(graph: Graph, res_id: str) -> List[Dict[str, Any]]:
2730
+ """The asset of ``res_id`` and its versions, master first then by level,
2731
+ each the CURRENT revision: ``[{id, level, purpose, master, checksum, …}]``."""
2732
+ from .resources.versions import versions_of as _versions
2733
+ return _versions(graph, res_id)
2734
+
2735
+
2736
+ def asset_of(graph: Graph, res_id: str) -> str:
2737
+ """The asset (master) ``res_id`` is a version of; itself if it is none."""
2738
+ from .resources.versions import asset_of as _asset
2739
+ return _asset(graph, res_id)
2740
+
2741
+
2742
+ def inherited_links(graph: Graph, res_id: str) -> Dict[str, Any]:
2743
+ """What hats the asset of ``res_id`` (RM/proxy facets and their epochs and
2744
+ units): the semantic link a version inherits, never copied onto it."""
2745
+ from .resources.versions import inherited_links as _links
2746
+ return _links(graph, res_id)
2747
+
2748
+
2707
2749
  # ── the 3D Tiles Archive (.3tz), recognised and read, never written here ──────
2708
2750
  # The writers are 3DSC and EMStudio (E.D. 2026-09-30); the canonical form and
2709
2751
  # the content digest belong to dtcstamp. See :mod:`s3dgraphy.resources.tiles3tz`.
@@ -2728,6 +2770,41 @@ def is_canonical_3tz(path: str) -> Dict[str, Any]:
2728
2770
  return _canon(path)
2729
2771
 
2730
2772
 
2773
+ # ── R1 · one resolver for the files, and their state (E.D., 4 Oct 2026) ──────
2774
+ def resolve_files(graph: Graph, *, project_root: Optional[str] = None,
2775
+ base_dirs: Sequence[str] = (), cache_dirs: Sequence[str] = (),
2776
+ on_node: Optional[Callable[[str], bool]] = None,
2777
+ hasher: Optional[Callable[[str], str]] = None) -> List[Dict[str, Any]]:
2778
+ """The STATE of every resource of ``graph`` — ``on_disk``, ``on_node``,
2779
+ ``both``, ``reference_only``, ``missing``, ``empty_copy`` — trying cache →
2780
+ known paths (the EM standard tree of ``project_root`` first) → node
2781
+ (``on_node(hex)``) → reference. The one resolver every tool calls. See
2782
+ :mod:`s3dgraphy.resources.locate`."""
2783
+ from .resources.locate import resolve_graph
2784
+ return resolve_graph(graph, project_root=project_root, base_dirs=base_dirs,
2785
+ cache_dirs=cache_dirs, on_node=on_node, hasher=hasher)
2786
+
2787
+
2788
+ def resolve_file(entry: Dict[str, Any], **kwargs) -> Dict[str, Any]:
2789
+ """:func:`resolve_files` for ONE ``{id, locator, checksum}``."""
2790
+ from .resources.locate import resolve
2791
+ return resolve(entry, **kwargs)
2792
+
2793
+
2794
+ # ── C1 · the standard tree of an EM project (E.D., 4 Oct 2026) ─────────────────
2795
+ def create_em_project(parent: str, name: str, **kwargs) -> Dict[str, Any]:
2796
+ """«New EM project…»: EM/ (DosCo/, proxies/), RB/, SB/, RM/, README.md,
2797
+ LICENCE.md under ``parent/name``. See :mod:`s3dgraphy.project_tree`."""
2798
+ from .project_tree import create_project
2799
+ return create_project(parent, name, **kwargs)
2800
+
2801
+
2802
+ def em_project_reorder_plan(root: str) -> List[Dict[str, str]]:
2803
+ """«Reorder by the EM standard…»: the preview, never applied here."""
2804
+ from .project_tree import reorder_plan
2805
+ return reorder_plan(root)
2806
+
2807
+
2731
2808
  # ── resource layer (R0: stable-ID resolver seam) ──────────────────────────────
2732
2809
  # Resources are LinkNodes (E73). Their stable, storage-agnostic ID is the node
2733
2810
  # UUID; the ``url`` is the *current locator*, not the identity. A pluggable