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.
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/PKG-INFO +105 -34
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/README.md +102 -31
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/__init__.py +47 -14
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/core.py +187 -105
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/convention/__init__.py +58 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/convention/cfg.py +7 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/core.py +313 -157
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/standard_attributes.py +134 -80
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/mongo.py +168 -104
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/magnitude.py +2 -1
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/normalize.py +4 -2
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/units.py +8 -3
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/fairify.py +168 -95
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/__init__.py +282 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/attributes.py +4 -4
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/datasets.py +9 -7
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/hdf/file.py +63 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/rdf.py +26 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/shacl.py +49 -40
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/sparql.py +59 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/user/attributes.py +20 -6
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/datasets.py +76 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/file.py +92 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/groups.py +113 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/ld/user/utils.py +56 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/utils.py +19 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/protocols.py +76 -50
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/repository/utils.py +199 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/__init__.py +82 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/docstring.py +265 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/download.py +341 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/file_io.py +272 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/hdf5.py +315 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils/string.py +37 -0
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/utils.py +78 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/core.py +1039 -573
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5attr.py +162 -114
- h5rdmtoolbox-2.7.4/h5rdmtoolbox/wrapper/h5utils.py +35 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5yaml.py +17 -15
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/jsonld.py +45 -24
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/xr2hdf.py +5 -5
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/PKG-INFO +105 -34
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/SOURCES.txt +7 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/requires.txt +2 -2
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/pyproject.toml +6 -5
- h5rdmtoolbox-2.7.4/tests/test_extensions.py +203 -0
- h5rdmtoolbox-2.7.4/tests/test_readme.py +33 -0
- h5rdmtoolbox-2.7.4/tests/test_repr.py +127 -0
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/convention/__init__.py +0 -41
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/convention/cfg.py +0 -2
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/__init__.py +0 -133
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/hdf/file.py +0 -54
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/datasets.py +0 -45
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/file.py +0 -65
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/groups.py +0 -68
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/ld/user/utils.py +0 -33
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/repository/utils.py +0 -144
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/utils.py +0 -777
- h5rdmtoolbox-2.7.2/h5rdmtoolbox/wrapper/h5utils.py +0 -32
- h5rdmtoolbox-2.7.2/tests/test_extensions.py +0 -148
- h5rdmtoolbox-2.7.2/tests/test_readme.py +0 -22
- h5rdmtoolbox-2.7.2/tests/test_repr.py +0 -114
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/LICENSE +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_cfg.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_repr.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/_version.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/_initialization.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/abstracts.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/profiles.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/query_templates.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/stores/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/stores/hdf5.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/catalog/utils.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/cli.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/consts.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/consts.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/errors.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/generate.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/h5ontocls.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/ontology/hdf_datatypes.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/references.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/toolbox_validators.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/convention/utils.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/def_icon.png +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/fluid-v1.yml +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/h5tbx.yaml +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/id_icon.png +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/iri_icon.png +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/ld_icon.png +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/piv-v1.yml +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/style.css +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_convention.yaml +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_convention_vfuncs.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/tutorial_standard_name_table.yaml +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/data/type_icon.png +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/filedb.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/objdb.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/query.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/hdfdb/utils.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/interface.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/database/lazy.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/errors.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/onto.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/extensions/vector.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/src/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/gui/src/main.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/identifiers.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/layout/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/layout/core.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/_types.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/globals.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/hdf/groups.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/ld/user/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/plotting.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/protected_attributes.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/default_metamapper.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/interface.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/core.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/metadata.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/tokens.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/repository/zenodo/utils.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/tutorial.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/user.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessor.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessors/__init__.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/accessors/provenance.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/ds_decoder.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox/wrapper/h5ext.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/dependency_links.txt +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/entry_points.txt +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/h5rdmtoolbox.egg-info/top_level.txt +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/setup.cfg +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_cli.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_config.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_identifiers.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_plotting.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_user.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_utils.py +0 -0
- {h5rdmtoolbox-2.7.2 → h5rdmtoolbox-2.7.4}/tests/test_version.py +0 -0
- {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.
|
|
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.
|
|
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[
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
hdf:
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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" (h5RDMtoolbox) 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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
-
hdf:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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" (h5RDMtoolbox) 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
|
|
140
|
-
return get_ld(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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 =
|
|
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,
|