h5rdmtoolbox 2.7.2__tar.gz → 2.7.4__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 (150) hide show
  1. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/PKG-INFO +105 -34
  2. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/README.md +102 -31
  3. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/__init__.py +47 -14
  4. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/core.py +187 -105
  5. h5rdmtoolbox-2.7.4/h5rdmtoolbox/convention/__init__.py +58 -0
  6. h5rdmtoolbox-2.7.4/h5rdmtoolbox/convention/cfg.py +7 -0
  7. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/core.py +313 -157
  8. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/standard_attributes.py +134 -80
  9. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/mongo.py +168 -104
  10. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/magnitude.py +2 -1
  11. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/normalize.py +4 -2
  12. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/units.py +8 -3
  13. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/fairify.py +168 -95
  14. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/__init__.py +282 -0
  15. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/attributes.py +4 -4
  16. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/datasets.py +9 -7
  17. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/hdf/file.py +63 -0
  18. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/rdf.py +26 -0
  19. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/shacl.py +49 -40
  20. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/sparql.py +59 -0
  21. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/user/attributes.py +20 -6
  22. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/datasets.py +76 -0
  23. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/file.py +92 -0
  24. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/groups.py +113 -0
  25. h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/utils.py +56 -0
  26. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/utils.py +19 -0
  27. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/protocols.py +76 -50
  28. h5rdmtoolbox-2.7.4/h5rdmtoolbox/repository/utils.py +199 -0
  29. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/__init__.py +82 -0
  30. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/docstring.py +265 -0
  31. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/download.py +341 -0
  32. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/file_io.py +272 -0
  33. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/hdf5.py +315 -0
  34. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/string.py +37 -0
  35. h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils.py +78 -0
  36. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/core.py +1039 -573
  37. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5attr.py +162 -114
  38. h5rdmtoolbox-2.7.4/h5rdmtoolbox/wrapper/h5utils.py +35 -0
  39. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5yaml.py +17 -15
  40. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/jsonld.py +45 -24
  41. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/xr2hdf.py +5 -5
  42. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/PKG-INFO +105 -34
  43. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/SOURCES.txt +7 -0
  44. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/requires.txt +2 -2
  45. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/pyproject.toml +6 -5
  46. h5rdmtoolbox-2.7.4/tests/test_extensions.py +203 -0
  47. h5rdmtoolbox-2.7.4/tests/test_readme.py +33 -0
  48. h5rdmtoolbox-2.7.4/tests/test_repr.py +127 -0
  49. h5rdmtoolbox-2.7.2/h5rdmtoolbox/convention/__init__.py +0 -41
  50. h5rdmtoolbox-2.7.2/h5rdmtoolbox/convention/cfg.py +0 -2
  51. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/__init__.py +0 -133
  52. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/hdf/file.py +0 -54
  53. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/datasets.py +0 -45
  54. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/file.py +0 -65
  55. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/groups.py +0 -68
  56. h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/utils.py +0 -33
  57. h5rdmtoolbox-2.7.2/h5rdmtoolbox/repository/utils.py +0 -144
  58. h5rdmtoolbox-2.7.2/h5rdmtoolbox/utils.py +0 -777
  59. h5rdmtoolbox-2.7.2/h5rdmtoolbox/wrapper/h5utils.py +0 -32
  60. h5rdmtoolbox-2.7.2/tests/test_extensions.py +0 -148
  61. h5rdmtoolbox-2.7.2/tests/test_readme.py +0 -22
  62. h5rdmtoolbox-2.7.2/tests/test_repr.py +0 -114
  63. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/LICENSE +0 -0
  64. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_cfg.py +0 -0
  65. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_repr.py +0 -0
  66. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_version.py +0 -0
  67. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/__init__.py +0 -0
  68. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/_initialization.py +0 -0
  69. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/abstracts.py +0 -0
  70. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/profiles.py +0 -0
  71. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/query_templates.py +0 -0
  72. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/stores/__init__.py +0 -0
  73. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/stores/hdf5.py +0 -0
  74. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/utils.py +0 -0
  75. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/cli.py +0 -0
  76. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/consts.py +0 -0
  77. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/consts.py +0 -0
  78. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/errors.py +0 -0
  79. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/generate.py +0 -0
  80. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/__init__.py +0 -0
  81. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/h5ontocls.py +0 -0
  82. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/hdf_datatypes.py +0 -0
  83. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/references.py +0 -0
  84. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/toolbox_validators.py +0 -0
  85. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/utils.py +0 -0
  86. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/def_icon.png +0 -0
  87. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/fluid-v1.yml +0 -0
  88. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/h5tbx.yaml +0 -0
  89. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/id_icon.png +0 -0
  90. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/iri_icon.png +0 -0
  91. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/ld_icon.png +0 -0
  92. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/piv-v1.yml +0 -0
  93. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/style.css +0 -0
  94. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_convention.yaml +0 -0
  95. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_convention_vfuncs.py +0 -0
  96. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_standard_name_table.yaml +0 -0
  97. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/type_icon.png +0 -0
  98. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/__init__.py +0 -0
  99. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/__init__.py +0 -0
  100. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/filedb.py +0 -0
  101. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/objdb.py +0 -0
  102. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/query.py +0 -0
  103. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/utils.py +0 -0
  104. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/interface.py +0 -0
  105. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/lazy.py +0 -0
  106. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/errors.py +0 -0
  107. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/__init__.py +0 -0
  108. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/onto.py +0 -0
  109. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/vector.py +0 -0
  110. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/__init__.py +0 -0
  111. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/src/__init__.py +0 -0
  112. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/src/main.py +0 -0
  113. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/identifiers.py +0 -0
  114. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/layout/__init__.py +0 -0
  115. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/layout/core.py +0 -0
  116. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/_types.py +0 -0
  117. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/globals.py +0 -0
  118. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/__init__.py +0 -0
  119. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/groups.py +0 -0
  120. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/user/__init__.py +0 -0
  121. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/plotting.py +0 -0
  122. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/protected_attributes.py +0 -0
  123. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/__init__.py +0 -0
  124. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/default_metamapper.py +0 -0
  125. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/interface.py +0 -0
  126. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/__init__.py +0 -0
  127. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/core.py +0 -0
  128. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/metadata.py +0 -0
  129. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/tokens.py +0 -0
  130. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/utils.py +0 -0
  131. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/tutorial.py +0 -0
  132. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/user.py +0 -0
  133. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/__init__.py +0 -0
  134. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessor.py +0 -0
  135. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessors/__init__.py +0 -0
  136. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessors/provenance.py +0 -0
  137. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/ds_decoder.py +0 -0
  138. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5ext.py +0 -0
  139. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/dependency_links.txt +0 -0
  140. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/entry_points.txt +0 -0
  141. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/top_level.txt +0 -0
  142. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/setup.cfg +0 -0
  143. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_cli.py +0 -0
  144. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_config.py +0 -0
  145. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_identifiers.py +0 -0
  146. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_plotting.py +0 -0
  147. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_user.py +0 -0
  148. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_utils.py +0 -0
  149. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_version.py +0 -0
  150. {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_xarray_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: h5rdmtoolbox
3
- Version: 2.7.2
3
+ Version: 2.7.4
4
4
  Summary: Supporting a FAIR Research Data lifecycle using Python and HDF5.
5
5
  Author-email: Matthias Probst <matth.probst@gmail.com>
6
6
  License-Expression: MIT
@@ -61,7 +61,7 @@ Requires-Dist: pytest>=8.3.3; extra == "test-core"
61
61
  Requires-Dist: pytest-cov>=5.0.0; extra == "test-core"
62
62
  Requires-Dist: pylint; extra == "test-core"
63
63
  Requires-Dist: ssnolib<3.0.0,>=2.2.0.2; extra == "test-core"
64
- Requires-Dist: mongomock==4.1.2; extra == "test-core"
64
+ Requires-Dist: mongomock==4.3.0; extra == "test-core"
65
65
  Requires-Dist: scipy>=1.10.1; extra == "test-core"
66
66
  Requires-Dist: scikit-image>=0.21.0; extra == "test-core"
67
67
  Requires-Dist: scikit-learn; extra == "test-core"
@@ -75,7 +75,7 @@ Requires-Dist: sphinx_design==0.6.1; extra == "docs"
75
75
  Requires-Dist: myst_nb==1.2.0; extra == "docs"
76
76
  Requires-Dist: sphinxcontrib_bibtex==2.6.3; extra == "docs"
77
77
  Provides-Extra: complete
78
- Requires-Dist: h5rdmtoolbox[catalog,csv,database,gui,layout_validation,snt,test]; extra == "complete"
78
+ Requires-Dist: h5rdmtoolbox[gui,test]; extra == "complete"
79
79
  Provides-Extra: complete-with-docs
80
80
  Requires-Dist: h5rdmtoolbox[complete,docs]; extra == "complete-with-docs"
81
81
  Dynamic: license-file
@@ -120,46 +120,117 @@ M4I = rdflib.Namespace("http://w3id.org/nfdi4ing/metadata4ing#")
120
120
 
121
121
  # Create a new HDF5 file with FAIR metadata
122
122
  with h5tbx.File("example.h5", "w") as h5:
123
- h5.create_dataset("temperature", data=np.array([20, 21, 19, 22]))
124
- h5.attrs["units", M4I.hasUnit] = "degree_Celsius"
125
- h5.rdf["units"].object = "http://qudt.org/vocab/unit/DEG_C"
126
- h5.attrs["description", "https://schema.org/description"] = "Room temperature measurements"
123
+ ds = h5.create_dataset("temperature", data=np.array([20, 21, 19, 22]))
124
+ ds.attrs["units"] = h5tbx.Attribute(
125
+ value="degree_Celsius",
126
+ rdf_predicate=M4I.hasUnit,
127
+ rdf_object="http://qudt.org/vocab/unit/DEG_C",
128
+ )
129
+ ds.attrs["description", "https://schema.org/description"] = "Room temperature measurements"
130
+
131
+ ds_mean = h5.create_dataset("mean_temperature", data=np.mean(h5["temperature"][()]))
132
+ ds_mean.attrs["units", M4I.hasUnit] = "degree_Celsius"
133
+ ds_mean.rdf["units"].object = "http://qudt.org/vocab/unit/DEG_C"
134
+ ds_mean.attrs["description", "https://schema.org/description"] = "Mean room temperature measurements"
135
+
136
+ ds_mean.rdf.type = M4I.NumericalVariable
137
+ ds_mean.rdf.data_predicate = M4I.hasNumericalValue
138
+
139
+ ttl_ctx = h5.serialize("ttl", structural=False, contextual=True, file_uri="https://example.org#example.h5/")
140
+ ttl_struc = h5.serialize("ttl", structural=True, contextual=False, file_uri="https://example.org#example.h5/")
141
+ ttl_full = h5.serialize("ttl", file_uri="https://example.org#example.h5/")
142
+ ```
127
143
 
128
- ttl = h5.serialize("ttl")
144
+ The above saves three different serializations of the HDF5 content as RDF in Turtle (ttl) format.
145
+ The first one (`ttl_ctx`) is the **contextual** RDF serialization, which only includes the RDF triples that the user
146
+ has enriched the HDF5 file with. The second one (`ttl_struc`) is the **structural** RDF serialization, which includes
147
+ all RDF triples that can be derived from the HDF5 file content. the third one (`ttl_full`) is the combination of the
148
+ first two, which includes both the user enriched RDF triples and the RDF triples that can be derived from the HDF5 file
149
+ content.
129
150
 
130
- ```
131
- The serialization in Turtle (ttl) is teh RDF serialization of the HDF5 data (without arrays):
151
+ Below we show the first two serializations.
152
+
153
+ `ttl_ctx`:
132
154
  ```ttl
133
- @prefix hdf: <http://purl.allotrope.org/ontologies/hdf5/1.8#> .
134
155
  @prefix m4i: <http://w3id.org/nfdi4ing/metadata4ing#> .
135
156
  @prefix schema: <https://schema.org/> .
136
157
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
137
158
 
159
+ <https://example.org#example.h5/example.h5/mean_temperature> a m4i:NumericalVariable ;
160
+ m4i:hasNumericalValue "20.5"^^xsd:float ;
161
+ m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
162
+ schema:description "Mean room temperature measurements" .
163
+
164
+ <https://example.org#example.h5/example.h5/temperature> m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
165
+ schema:description "Room temperature measurements" .
166
+ ```
167
+
168
+ `ttl_ctx`:
169
+ ```ttl
170
+ @prefix hdf: <http://purl.allotrope.org/ontologies/hdf5/1.8#> .
171
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
172
+
173
+ <https://example.org#example.h5/example.h5> a hdf:File ;
174
+ hdf:rootGroup <https://example.org#example.h5/example.h5/> .
175
+
176
+ hdf:H5T_IEEE_F64LE a hdf:Datatype .
177
+
138
178
  hdf:H5T_INTEL_I64 a hdf:Datatype .
139
179
 
140
- [] a hdf:File ;
141
- hdf:rootGroup [ a hdf:Group ;
142
- hdf:attribute [ a hdf:StringAttribute ;
143
- hdf:data "Room temperature measurements" ;
144
- hdf:name "description" ],
145
- [ a hdf:StringAttribute ;
146
- hdf:data "degree_Celsius" ;
147
- hdf:name "units" ] ;
148
- hdf:member [ a hdf:Dataset ;
149
- hdf:dataspace [ a hdf:SimpleDataspace ;
150
- hdf:dimension [ a hdf:DataspaceDimension ;
151
- hdf:dimensionIndex 0 ;
152
- hdf:size 4 ] ] ;
153
- hdf:datatype hdf:H5T_INTEGER,
154
- hdf:H5T_INTEL_I64 ;
155
- hdf:layout hdf:H5D_CONTIGUOUS ;
156
- hdf:maximumSize 4 ;
157
- hdf:name "/temperature" ;
158
- hdf:rank 1 ;
159
- hdf:size 4 ] ;
160
- hdf:name "/" ;
161
- m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
162
- schema:description "Room temperature measurements" ] .
180
+ <https://example.org#example.h5/example.h5/> a hdf:Group ;
181
+ hdf:member <https://example.org#example.h5/example.h5/mean_temperature>,
182
+ <https://example.org#example.h5/example.h5/temperature> ;
183
+ hdf:name "/" .
184
+
185
+ <https://example.org#example.h5/example.h5/mean_temperature> a hdf:Dataset ;
186
+ hdf:attribute <https://example.org#example.h5/example.h5/mean_temperature@description>,
187
+ <https://example.org#example.h5/example.h5/mean_temperature@units> ;
188
+ hdf:dataspace <https://example.org#example.h5/example.h5/mean_temperature__dataspace> ;
189
+ hdf:datatype hdf:H5T_FLOAT,
190
+ hdf:H5T_IEEE_F64LE ;
191
+ hdf:layout hdf:H5D_CONTIGUOUS ;
192
+ hdf:maximumSize -1 ;
193
+ hdf:name "/mean_temperature" ;
194
+ hdf:rank 0 ;
195
+ hdf:size 1 ;
196
+ hdf:value 2.05e+01 .
197
+
198
+ <https://example.org#example.h5/example.h5/mean_temperature@description> a hdf:StringAttribute ;
199
+ hdf:data "Mean room temperature measurements" ;
200
+ hdf:name "description" .
201
+
202
+ <https://example.org#example.h5/example.h5/mean_temperature@units> a hdf:StringAttribute ;
203
+ hdf:data "degree_Celsius" ;
204
+ hdf:name "units" .
205
+
206
+ <https://example.org#example.h5/example.h5/mean_temperature__dataspace> a hdf:ScalarDataspace .
207
+
208
+ <https://example.org#example.h5/example.h5/temperature> a hdf:Dataset ;
209
+ hdf:attribute <https://example.org#example.h5/example.h5/temperature@description>,
210
+ <https://example.org#example.h5/example.h5/temperature@units> ;
211
+ hdf:dataspace <https://example.org#example.h5/example.h5/temperature__dataspace> ;
212
+ hdf:datatype hdf:H5T_INTEGER,
213
+ hdf:H5T_INTEL_I64 ;
214
+ hdf:layout hdf:H5D_CONTIGUOUS ;
215
+ hdf:maximumSize 4 ;
216
+ hdf:name "/temperature" ;
217
+ hdf:rank 1 ;
218
+ hdf:size 4 .
219
+
220
+ <https://example.org#example.h5/example.h5/temperature@description> a hdf:StringAttribute ;
221
+ hdf:data "Room temperature measurements" ;
222
+ hdf:name "description" .
223
+
224
+ <https://example.org#example.h5/example.h5/temperature@units> a hdf:StringAttribute ;
225
+ hdf:data "degree_Celsius" ;
226
+ hdf:name "units" .
227
+
228
+ <https://example.org#example.h5/example.h5/temperature__dataspace> a hdf:SimpleDataspace ;
229
+ hdf:dimension <https://example.org#example.h5/example.h5/temperature__dataspace_dimension_0> .
230
+
231
+ <https://example.org#example.h5/example.h5/temperature__dataspace_dimension_0> a hdf:DataspaceDimension ;
232
+ hdf:dimensionIndex 0 ;
233
+ hdf:size 4 .
163
234
  ```
164
235
 
165
236
  [//]: # (The "HDF5 Research Data Management Toolbox" &#40;h5RDMtoolbox&#41; is a Python package supporting everybody who is working with)
@@ -38,46 +38,117 @@ M4I = rdflib.Namespace("http://w3id.org/nfdi4ing/metadata4ing#")
38
38
 
39
39
  # Create a new HDF5 file with FAIR metadata
40
40
  with h5tbx.File("example.h5", "w") as h5:
41
- h5.create_dataset("temperature", data=np.array([20, 21, 19, 22]))
42
- h5.attrs["units", M4I.hasUnit] = "degree_Celsius"
43
- h5.rdf["units"].object = "http://qudt.org/vocab/unit/DEG_C"
44
- h5.attrs["description", "https://schema.org/description"] = "Room temperature measurements"
41
+ ds = h5.create_dataset("temperature", data=np.array([20, 21, 19, 22]))
42
+ ds.attrs["units"] = h5tbx.Attribute(
43
+ value="degree_Celsius",
44
+ rdf_predicate=M4I.hasUnit,
45
+ rdf_object="http://qudt.org/vocab/unit/DEG_C",
46
+ )
47
+ ds.attrs["description", "https://schema.org/description"] = "Room temperature measurements"
48
+
49
+ ds_mean = h5.create_dataset("mean_temperature", data=np.mean(h5["temperature"][()]))
50
+ ds_mean.attrs["units", M4I.hasUnit] = "degree_Celsius"
51
+ ds_mean.rdf["units"].object = "http://qudt.org/vocab/unit/DEG_C"
52
+ ds_mean.attrs["description", "https://schema.org/description"] = "Mean room temperature measurements"
53
+
54
+ ds_mean.rdf.type = M4I.NumericalVariable
55
+ ds_mean.rdf.data_predicate = M4I.hasNumericalValue
56
+
57
+ ttl_ctx = h5.serialize("ttl", structural=False, contextual=True, file_uri="https://example.org#example.h5/")
58
+ ttl_struc = h5.serialize("ttl", structural=True, contextual=False, file_uri="https://example.org#example.h5/")
59
+ ttl_full = h5.serialize("ttl", file_uri="https://example.org#example.h5/")
60
+ ```
45
61
 
46
- ttl = h5.serialize("ttl")
62
+ The above saves three different serializations of the HDF5 content as RDF in Turtle (ttl) format.
63
+ The first one (`ttl_ctx`) is the **contextual** RDF serialization, which only includes the RDF triples that the user
64
+ has enriched the HDF5 file with. The second one (`ttl_struc`) is the **structural** RDF serialization, which includes
65
+ all RDF triples that can be derived from the HDF5 file content. the third one (`ttl_full`) is the combination of the
66
+ first two, which includes both the user enriched RDF triples and the RDF triples that can be derived from the HDF5 file
67
+ content.
47
68
 
48
- ```
49
- The serialization in Turtle (ttl) is teh RDF serialization of the HDF5 data (without arrays):
69
+ Below we show the first two serializations.
70
+
71
+ `ttl_ctx`:
50
72
  ```ttl
51
- @prefix hdf: <http://purl.allotrope.org/ontologies/hdf5/1.8#> .
52
73
  @prefix m4i: <http://w3id.org/nfdi4ing/metadata4ing#> .
53
74
  @prefix schema: <https://schema.org/> .
54
75
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
55
76
 
77
+ <https://example.org#example.h5/example.h5/mean_temperature> a m4i:NumericalVariable ;
78
+ m4i:hasNumericalValue "20.5"^^xsd:float ;
79
+ m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
80
+ schema:description "Mean room temperature measurements" .
81
+
82
+ <https://example.org#example.h5/example.h5/temperature> m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
83
+ schema:description "Room temperature measurements" .
84
+ ```
85
+
86
+ `ttl_ctx`:
87
+ ```ttl
88
+ @prefix hdf: <http://purl.allotrope.org/ontologies/hdf5/1.8#> .
89
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
90
+
91
+ <https://example.org#example.h5/example.h5> a hdf:File ;
92
+ hdf:rootGroup <https://example.org#example.h5/example.h5/> .
93
+
94
+ hdf:H5T_IEEE_F64LE a hdf:Datatype .
95
+
56
96
  hdf:H5T_INTEL_I64 a hdf:Datatype .
57
97
 
58
- [] a hdf:File ;
59
- hdf:rootGroup [ a hdf:Group ;
60
- hdf:attribute [ a hdf:StringAttribute ;
61
- hdf:data "Room temperature measurements" ;
62
- hdf:name "description" ],
63
- [ a hdf:StringAttribute ;
64
- hdf:data "degree_Celsius" ;
65
- hdf:name "units" ] ;
66
- hdf:member [ a hdf:Dataset ;
67
- hdf:dataspace [ a hdf:SimpleDataspace ;
68
- hdf:dimension [ a hdf:DataspaceDimension ;
69
- hdf:dimensionIndex 0 ;
70
- hdf:size 4 ] ] ;
71
- hdf:datatype hdf:H5T_INTEGER,
72
- hdf:H5T_INTEL_I64 ;
73
- hdf:layout hdf:H5D_CONTIGUOUS ;
74
- hdf:maximumSize 4 ;
75
- hdf:name "/temperature" ;
76
- hdf:rank 1 ;
77
- hdf:size 4 ] ;
78
- hdf:name "/" ;
79
- m4i:hasUnit <http://qudt.org/vocab/unit/DEG_C> ;
80
- schema:description "Room temperature measurements" ] .
98
+ <https://example.org#example.h5/example.h5/> a hdf:Group ;
99
+ hdf:member <https://example.org#example.h5/example.h5/mean_temperature>,
100
+ <https://example.org#example.h5/example.h5/temperature> ;
101
+ hdf:name "/" .
102
+
103
+ <https://example.org#example.h5/example.h5/mean_temperature> a hdf:Dataset ;
104
+ hdf:attribute <https://example.org#example.h5/example.h5/mean_temperature@description>,
105
+ <https://example.org#example.h5/example.h5/mean_temperature@units> ;
106
+ hdf:dataspace <https://example.org#example.h5/example.h5/mean_temperature__dataspace> ;
107
+ hdf:datatype hdf:H5T_FLOAT,
108
+ hdf:H5T_IEEE_F64LE ;
109
+ hdf:layout hdf:H5D_CONTIGUOUS ;
110
+ hdf:maximumSize -1 ;
111
+ hdf:name "/mean_temperature" ;
112
+ hdf:rank 0 ;
113
+ hdf:size 1 ;
114
+ hdf:value 2.05e+01 .
115
+
116
+ <https://example.org#example.h5/example.h5/mean_temperature@description> a hdf:StringAttribute ;
117
+ hdf:data "Mean room temperature measurements" ;
118
+ hdf:name "description" .
119
+
120
+ <https://example.org#example.h5/example.h5/mean_temperature@units> a hdf:StringAttribute ;
121
+ hdf:data "degree_Celsius" ;
122
+ hdf:name "units" .
123
+
124
+ <https://example.org#example.h5/example.h5/mean_temperature__dataspace> a hdf:ScalarDataspace .
125
+
126
+ <https://example.org#example.h5/example.h5/temperature> a hdf:Dataset ;
127
+ hdf:attribute <https://example.org#example.h5/example.h5/temperature@description>,
128
+ <https://example.org#example.h5/example.h5/temperature@units> ;
129
+ hdf:dataspace <https://example.org#example.h5/example.h5/temperature__dataspace> ;
130
+ hdf:datatype hdf:H5T_INTEGER,
131
+ hdf:H5T_INTEL_I64 ;
132
+ hdf:layout hdf:H5D_CONTIGUOUS ;
133
+ hdf:maximumSize 4 ;
134
+ hdf:name "/temperature" ;
135
+ hdf:rank 1 ;
136
+ hdf:size 4 .
137
+
138
+ <https://example.org#example.h5/example.h5/temperature@description> a hdf:StringAttribute ;
139
+ hdf:data "Room temperature measurements" ;
140
+ hdf:name "description" .
141
+
142
+ <https://example.org#example.h5/example.h5/temperature@units> a hdf:StringAttribute ;
143
+ hdf:data "degree_Celsius" ;
144
+ hdf:name "units" .
145
+
146
+ <https://example.org#example.h5/example.h5/temperature__dataspace> a hdf:SimpleDataspace ;
147
+ hdf:dimension <https://example.org#example.h5/example.h5/temperature__dataspace_dimension_0> .
148
+
149
+ <https://example.org#example.h5/example.h5/temperature__dataspace_dimension_0> a hdf:DataspaceDimension ;
150
+ hdf:dimensionIndex 0 ;
151
+ hdf:size 4 .
81
152
  ```
82
153
 
83
154
  [//]: # (The "HDF5 Research Data Management Toolbox" &#40;h5RDMtoolbox&#41; is a Python package supporting everybody who is working with)
@@ -2,7 +2,6 @@
2
2
 
3
3
  import logging
4
4
  import pathlib
5
- import warnings
6
5
  from logging.handlers import RotatingFileHandler
7
6
  from typing import Optional, Dict
8
7
 
@@ -136,13 +135,24 @@ def get_ld(
136
135
  context: Optional[Dict] = None
137
136
  ) -> rdflib.Graph:
138
137
  """Return the HDF file content as a rdflib.Graph object."""
139
- from h5rdmtoolbox.ld import get_ld
140
- return get_ld(hdf_filename,
141
- structural=structural,
142
- contextual=contextual,
143
- skipND=skipND,
144
- file_uri=file_uri,
145
- context=context)
138
+ from . import ld
139
+ return ld.get_ld(
140
+ hdf_filename,
141
+ structural=structural,
142
+ contextual=contextual,
143
+ skipND=skipND,
144
+ file_uri=file_uri,
145
+ context=context,
146
+ )
147
+
148
+
149
+ def _optimize_ld_context(graph: rdflib.Graph, context: Optional[Dict]) -> Dict:
150
+ from .ld import optimize_context
151
+ return optimize_context(graph, context or {})
152
+
153
+
154
+ def _resolve_serialize_format(fmt: str, kwargs: Dict) -> str:
155
+ return kwargs.pop("format", fmt)
146
156
 
147
157
 
148
158
  def dump_jsonld(
@@ -155,19 +165,16 @@ def dump_jsonld(
155
165
  file_uri: Optional[str] = None
156
166
  ):
157
167
  """Return the file content as a JSON-LD string."""
158
- from .ld import optimize_context
159
- context = context or {}
160
168
  graph = get_ld(hdf_filename,
161
169
  structural=structural,
162
170
  contextual=contextual,
163
171
  file_uri=file_uri,
164
172
  skipND=skipND)
165
- context = optimize_context(graph, context)
166
173
  return graph.serialize(
167
174
  format="json-ld",
168
175
  indent=indent,
169
176
  auto_compact=True,
170
- context=context
177
+ context=_optimize_ld_context(graph, context)
171
178
  )
172
179
 
173
180
 
@@ -282,11 +289,11 @@ def serialize(hdf_filename,
282
289
  skipND: int = 1,
283
290
  structural: bool = True,
284
291
  contextual: bool = True,
285
- file_uri: Optional[str] = None,
292
+ file_uri: Optional[Union[str, Dict[str, str]]] = None,
286
293
  rdf_mappings: Dict[str, RDFMappingEntry] = None,
287
294
  **kwargs):
288
295
  """Alternative to json-ld but allows multiple serialization options"""
289
- fmt = kwargs.pop("format", fmt)
296
+ fmt = _resolve_serialize_format(fmt, kwargs)
290
297
  with File(hdf_filename) as h5:
291
298
  return h5.serialize(fmt=fmt,
292
299
  skipND=skipND,
@@ -296,6 +303,32 @@ def serialize(hdf_filename,
296
303
  rdf_mappings=rdf_mappings)
297
304
 
298
305
 
306
+ def sparql(
307
+ hdf_filename: Union[str, pathlib.Path],
308
+ query: str,
309
+ structural: bool = True,
310
+ contextual: bool = True,
311
+ skipND: int = 1,
312
+ file_uri: Optional[Union[str, Dict[str, str]]] = None,
313
+ rdf_mappings: Dict[str, RDFMappingEntry] = None,
314
+ as_dataframe: bool = False,
315
+ **kwargs
316
+ ) -> rdflib.query.Result:
317
+ """Run a SPARQL query on the HDF5 file content. Returns a rdflib.query.Result object."""
318
+ from .ld import sparql
319
+ return sparql(
320
+ source=hdf_filename,
321
+ query=query,
322
+ structural=structural,
323
+ contextual=contextual,
324
+ skipND=skipND,
325
+ file_uri=file_uri,
326
+ rdf_mappings=rdf_mappings,
327
+ as_dataframe=as_dataframe,
328
+ **kwargs
329
+ )
330
+
331
+
299
332
  def build_pyvis_graph(hdf_filename, output_filename="kg-graph.html", notebook=False,
300
333
  structural: bool = True,
301
334
  contextual: bool = True,