We have to decide and define how to put datamodels into the KB.
It should use the tableparsing for datamodels form dlite.
This is the old implementation that has been removed:
def save_extra_content(ts: Triplestore, source: dict) -> None:
"""Save extra content in `source` to the triplestore.
Currently, this includes:
- statements and mappings
- data models (require that DLite is installed)
Arguments:
ts: Triplestore to load data from.
source: Dict in multi-resource format.
"""
import requests
# Save statements and mappings
statements = get_values(source, "statements")
statements.extend(get_values(source, "mappings"))
if statements:
ts.add_triples(statements)
# Save data models
datamodels = {
d["@id"]: d["datamodel"]
for d in source.get("Dataset", ())
if "datamodel" in d
}
try:
# pylint: disable=import-outside-toplevel
import dlite
from dlite.dataset import add_dataset
except ModuleNotFoundError:
if datamodels:
warnings.warn(
"dlite is not installed - data models will not be added to "
"the triplestore"
)
else:
for url in get_values(source, "datamodelStorage"):
dlite.storage_path.append(url)
for iri, uri in datamodels.items():
ok = False
r = requests.get(uri, timeout=3)
if r.ok:
content = (
r.content.decode()
if isinstance(r.content, bytes)
else str(r.content)
)
dm = dlite.Instance.from_json(content)
add_dataset(ts, dm)
ok = True
else:
try:
dm = dlite.get_instance(uri)
except (
dlite.DLiteMissingInstanceError # pylint: disable=no-member
):
# __FIXME__: check session whether to warn or re-raise
warnings.warn(f"cannot load datamodel: {uri}")
else:
add_dataset(ts, dm)
ok = True
if ok:
# Make our dataset an individual of the new dataset subclass
# that we have created by serialising the datamodel
ts.add((iri, RDF.type, uri))
We have to decide and define how to put datamodels into the KB.
It should use the tableparsing for datamodels form dlite.
This is the old implementation that has been removed: