From fb8df9e342d522dd491efa34abe054898573a4b0 Mon Sep 17 00:00:00 2001 From: Daniel Ellis Date: Thu, 25 Jul 2024 16:10:12 +0100 Subject: [PATCH] todo: graph and cv generation --- cmipld/cvs/CV.json | 2690 +++++++++++++---- cmipld/cvs/generate.py | 18 +- cmipld/cvs/parse.py | 49 +- cmipld/file_io.py | 20 +- cmipld/frame_ld/__init__.py | 21 +- .../examples/cmip6plus/activity-id.json | 11 +- .../examples/cmip6plus/descriptors.json | 1 + .../examples/cmip6plus/experiment-id.json | 20 +- .../examples/cmip6plus/organisations.json | 7 + .../examples/cmip6plus/source-id.json | 60 +- cmipld/generate/__init__.py | 1 + cmipld/generate/update_new.py | 287 ++ cmipld/graph/__init__.py | 148 + cmipld/graph/context.py | 7 + cmipld/graph/create.ipynb | 340 +++ cmipld/graph/graph.json | 397 +++ cmipld/graph/serve/Untitled-1 | 6 + cmipld/graph/serve/d3-annotation.min.js | 1 + cmipld/graph/serve/index.html | 383 +++ cmipld/graph/serve/network.json | 1 + cmipld/graph/serve/server.py | 10 + cmipld/graph/walk.ipynb | 208 ++ scripts/directory-utilities/combine-graphs | 64 + scripts/directory-utilities/compile-ld | 6 + scripts/jsonld-util/rmbak.sh | 0 scripts/jsonld-util/rmgraph.sh | 0 scripts/jsonld-util/rmnest.sh | 0 scripts/jsonld-util/rmset.sh | 0 setup.py | 10 +- 29 files changed, 4046 insertions(+), 720 deletions(-) create mode 100644 cmipld/generate/__init__.py create mode 100644 cmipld/generate/update_new.py create mode 100644 cmipld/graph/__init__.py create mode 100644 cmipld/graph/context.py create mode 100644 cmipld/graph/create.ipynb create mode 100644 cmipld/graph/graph.json create mode 100644 cmipld/graph/serve/Untitled-1 create mode 100644 cmipld/graph/serve/d3-annotation.min.js create mode 100644 cmipld/graph/serve/index.html create mode 120000 cmipld/graph/serve/network.json create mode 100644 cmipld/graph/serve/server.py create mode 100644 cmipld/graph/walk.ipynb create mode 100755 scripts/directory-utilities/combine-graphs create mode 100755 scripts/directory-utilities/compile-ld mode change 100644 => 100755 scripts/jsonld-util/rmbak.sh mode change 100644 => 100755 scripts/jsonld-util/rmgraph.sh mode change 100644 => 100755 scripts/jsonld-util/rmnest.sh mode change 100644 => 100755 scripts/jsonld-util/rmset.sh diff --git a/cmipld/cvs/CV.json b/cmipld/cvs/CV.json index c6d3c2e..c95eee0 100644 --- a/cmipld/cvs/CV.json +++ b/cmipld/cvs/CV.json @@ -1,683 +1,2045 @@ { - "activity_id": [ - "CMIP", - "LESFMIP", - "no-parent" - ], - "conventions": "^CF-1.7 CMIP-6.[0-2,5]\\( UGRID-1.0\\)\\{0,\\}$", - "drs": { - "directory_path_example": "CMIP6Plus/CMIP/MOHC/HadGEM3-GC31-MM/historical/r1i1p1f3/Amon/tas/gn/v20191207/", - "directory_path_sub_experiment_example": "CMIP6Plus/DCPP/MOHC/HadGEM3-GC31-MM/dcppA-hindcast/s1960-r1i1p1f2/Amon/tas/gn/v20200417/", - "directory_path_template": "/////////", - "filename_example": "tas_Amon_HadGEM3-GC31-MM_historical_r1i1p1f3_gn_185001-186912.nc", - "filename_sub_experiment_example": "tas_Amon_HadGEM3-GC31-MM_dcppA-hindcast_s1960-r1i1p1f2_gn_196011-196012.nc", - "filename_template": "_____[_].nc" - }, - "experiment_id": [ - { - "activity_id": "CMIP", - "description": "DECK: 1pctCO2", - "experiment": "1 percent per year increase in CO2", - "experiment_id": "1pctCO2", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "CMIP", - "description": "DECK: abrupt-4xCO2", - "experiment": "abrupt quadrupling of CO2", - "experiment_id": "abrupt-4xCO2", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "CMIP", - "description": "DECK: AMIP", - "experiment": "AMIP", - "experiment_id": "amip", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AGCM" - } - }, - { - "activity_id": "CMIP", - "description": "CMIP6 historical (CO2 emission-driven)", - "experiment": "all-forcing simulation of the recent past with atmospheric CO2 concentration calculated (CO2 emission-driven)", - "experiment_id": "esm-hist", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM" - ], - "required": [ - "AOGCM", - "BGC" - ] - } - }, - { - "activity_id": "CMIP", - "description": "DECK: control (emission-driven)", - "experiment": "pre-industrial control simulation with preindustrial CO2 emissions defined (CO2 emission-driven)", - "experiment_id": "esm-piControl", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM" - ], - "required": [ - "AOGCM", - "BGC" - ] - } - }, - { - "activity_id": "CMIP", - "description": "DECK: spin-up portion of the control (emission-driven)", - "experiment": "pre-industrial control simulation with CO2 concentration calculated (spin-up)", - "experiment_id": "esm-piControl-spinup", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM" - ], - "required": [ - "AOGCM", - "BGC" - ] - } - }, - { - "activity_id": "LESFMIP", - "description": "As hist-aer but with updated forcings", - "experiment": "future anthropogenic aerosols-only run", - "experiment_id": "fut-Aer", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "As hist-GHG but with updated forcings", - "experiment": "future well-mixed GHG-only run", - "experiment_id": "fut-GHG", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "As hist-lu but with updated forcings", - "experiment": "Single forcing projections", - "experiment_id": "fut-lu", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } + "CV": { + "DRS": { + "directory_path_example": "CMIP6Plus/CMIP/MOHC/HadGEM3-GC31-MM/historical/r1i1p1f3/Amon/tas/gn/v20191207/", + "directory_path_sub_experiment_example": "CMIP6Plus/DCPP/MOHC/HadGEM3-GC31-MM/dcppA-hindcast/s1960-r1i1p1f2/Amon/tas/gn/v20200417/", + "directory_path_template": "/////////", + "filename_example": "tas_Amon_HadGEM3-GC31-MM_historical_r1i1p1f3_gn_185001-186912.nc", + "filename_sub_experiment_example": "tas_Amon_HadGEM3-GC31-MM_dcppA-hindcast_s1960-r1i1p1f2_gn_196011-196012.nc", + "filename_template": "_____[_].nc" }, - { - "activity_id": "LESFMIP", - "description": "As hist-sol but with updated forcings", - "experiment": "future solar-only run", - "experiment_id": "fut-sol", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "As hist-totalO3 but with updated forcings", - "experiment": "future total ozone-only run", - "experiment_id": "fut-totalO3", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "As hist-volc but with updated forcings", - "experiment": "future volcanic-only run", - "experiment_id": "fut-volc", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Anthropogenic-aerosol-only historical simulations", - "experiment": "historical anthropogenic aerosols-only run", - "experiment_id": "hist-aer", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Well-mixed greenhouse-gas-only historical simulations", - "experiment": "historical well-mixed GHG-only run", - "experiment_id": "hist-GHG", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Historical simulations with only land use changes", - "experiment": "Single forcing historical simulations", - "experiment_id": "hist-lu", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Natural forcings (solar + volcanic)", - "experiment": "historical natural-only run", - "experiment_id": "hist-nat", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Same as CMIP6 historical but with land cover held at 1850, no human activity; concentration driven", - "experiment": "historical with no land-use change", - "experiment_id": "hist-noLu", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" + "activity_id": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" } - }, - { - "activity_id": "LESFMIP", - "description": "Historical WMGHG, halocarbon concentrations and O3 precursor emissions, 1850 aerosol precursor emissions.", - "experiment": "historical forcing, but with pre-industrial aerosol emissions", - "experiment_id": "hist-piAer", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" + ], + "conventions": "^CF-1.7 CMIP-6.[0-2,5]\\( UGRID-1.0\\)\\{0,\\}$", + "experiment_id": { + "1pctCO2": { + "@id": "cmip6plus:experiment/id/1pctco2", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: 1pctCO2", + "experiment": "1 percent per year increase in CO2", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "1pctCO2", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 150, + "start": -999 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "abrupt-4xCO2": { + "@id": "cmip6plus:experiment/id/abrupt-4xco2", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: abrupt-4xCO2", + "experiment": "abrupt quadrupling of CO2", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "abrupt-4xCO2", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 150, + "start": -999 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "amip": { + "@id": "cmip6plus:experiment/id/amip", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: AMIP", + "experiment": "AMIP", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/agcm", + "@type": "mip:source-type", + "name": "AGCM" + } + }, + "experiment_id": "amip", + "parameters": { + "end": 2022, + "min_number_yrs_per_sim": 43, + "start": 1979 + }, + "parent": { + "activity_id": "Missing Link: cmip6plus:activity/no parent", + "experiment_id": "Missing Link: cmip6:experiment/id/no parent" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "esm-hist": { + "@id": "cmip6plus:experiment/id/esm-hist", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "CMIP6 historical (CO2 emission-driven)", + "experiment": "all-forcing simulation of the recent past with atmospheric CO2 concentration calculated (CO2 emission-driven)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + } + ], + "required": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ] + }, + "experiment_id": "esm-hist", + "parameters": { + "end": 2014, + "min_number_yrs_per_sim": 165, + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/esm-picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "esm-piControl": { + "@id": "cmip6plus:experiment/id/esm-picontrol", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: control (emission-driven)", + "experiment": "pre-industrial control simulation with preindustrial CO2 emissions defined (CO2 emission-driven)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + } + ], + "required": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ] + }, + "experiment_id": "esm-piControl", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 500, + "start": -999 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/esm-picontrol-spinup" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "esm-piControl-spinup": { + "@id": "cmip6plus:experiment/id/esm-picontrol-spinup", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: spin-up portion of the control (emission-driven)", + "experiment": "pre-industrial control simulation with CO2 concentration calculated (spin-up)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + } + ], + "required": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ] + }, + "experiment_id": "esm-piControl-spinup", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 100, + "start": -999 + }, + "parent": { + "activity_id": "Missing Link: cmip6plus:activity/no parent", + "experiment_id": "Missing Link: cmip6:experiment/id/no parent" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-Aer": { + "@id": "cmip6plus:experiment/id/fut-aer", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-aer but with updated forcings", + "experiment": "future anthropogenic aerosols-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-Aer", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "description": "The Large Ensemble Single Forcing Model Intercomparison Project", + "name": "LESFMIP", + "url": "https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/hist-aer" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-GHG": { + "@id": "cmip6plus:experiment/id/fut-ghg", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-GHG but with updated forcings", + "experiment": "future well-mixed GHG-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-GHG", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "description": "The Large Ensemble Single Forcing Model Intercomparison Project", + "name": "LESFMIP", + "url": "https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/hist-ghg" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-lu": { + "@id": "cmip6plus:experiment/id/fut-lu", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-lu but with updated forcings", + "experiment": "Single forcing projections", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-lu", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-sol": { + "@id": "cmip6plus:experiment/id/fut-sol", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-sol but with updated forcings", + "experiment": "future solar-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-sol", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "description": "The Large Ensemble Single Forcing Model Intercomparison Project", + "name": "LESFMIP", + "url": "https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/hist-sol" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-totalO3": { + "@id": "cmip6plus:experiment/id/fut-totalo3", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-totalO3 but with updated forcings", + "experiment": "future total ozone-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-totalO3", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "description": "The Large Ensemble Single Forcing Model Intercomparison Project", + "name": "LESFMIP", + "url": "https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/hist-totalo3" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "fut-volc": { + "@id": "cmip6plus:experiment/id/fut-volc", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "As hist-volc but with updated forcings", + "experiment": "future volcanic-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "fut-volc", + "parameters": { + "end": 2024, + "min_number_yrs_per_sim": "none", + "start": 2015 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "description": "The Large Ensemble Single Forcing Model Intercomparison Project", + "name": "LESFMIP", + "url": "https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/hist-volc" + }, + "sub_experiment_id": null, + "tier": 2 + }, + "hist-GHG": { + "@id": "cmip6plus:experiment/id/hist-ghg", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Well-mixed greenhouse-gas-only historical simulations", + "experiment": "historical well-mixed GHG-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-GHG", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "hist-aer": { + "@id": "cmip6plus:experiment/id/hist-aer", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Anthropogenic-aerosol-only historical simulations", + "experiment": "historical anthropogenic aerosols-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-aer", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "hist-lu": { + "@id": "cmip6plus:experiment/id/hist-lu", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Historical simulations with only land use changes", + "experiment": "Single forcing historical simulations", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-lu", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "hist-nat": { + "@id": "cmip6plus:experiment/id/hist-nat", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Natural forcings (solar + volcanic)", + "experiment": "historical natural-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-nat", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-noLu": { + "@id": "cmip6plus:experiment/id/hist-nolu", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Same as CMIP6 historical but with land cover held at 1850, no human activity; concentration driven", + "experiment": "historical with no land-use change", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-noLu", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-piAer": { + "@id": "cmip6plus:experiment/id/hist-piaer", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Historical WMGHG, halocarbon concentrations and O3 precursor emissions, 1850 aerosol precursor emissions.", + "experiment": "historical forcing, but with pre-industrial aerosol emissions", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-piAer", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-piGHG": { + "@id": "cmip6plus:experiment/id/hist-pighg", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Pre-industrial WMGHG, halocarbon and O3 precursor emissions, other forcings as for the historical experiment", + "experiment": "historical forcing but with pre-industrial GHG", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-piGHG", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-piSol": { + "@id": "cmip6plus:experiment/id/hist-pisol", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "historical simulations with 1850 solar forcing", + "experiment": "historical all-but-solar run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-piSol", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-piTotalO3": { + "@id": "cmip6plus:experiment/id/hist-pitotalo3", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "historical simulations with 1850 total ozone", + "experiment": "historical all-but-ozone run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-piTotalO3", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-piVolc": { + "@id": "cmip6plus:experiment/id/hist-pivolc", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "historical simulations with 1850 volcanic emissions", + "experiment": "historical all-but-volcanic run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-piVolc", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 3 + }, + "hist-sol": { + "@id": "cmip6plus:experiment/id/hist-sol", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Solar-only historical simulations", + "experiment": "historical solar-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-sol", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "hist-totalO3": { + "@id": "cmip6plus:experiment/id/hist-totalo3", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Ozone-only historical simulations", + "experiment": "historical total ozone-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-totalO3", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "hist-volc": { + "@id": "cmip6plus:experiment/id/hist-volc", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + "description": "Volcanic-only historical simulations", + "experiment": "historical volcanic-only run", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "hist-volc", + "parameters": { + "end": 2020, + "min_number_yrs_per_sim": "none", + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "historical": { + "@id": "cmip6plus:experiment/id/historical", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "CMIP6 historical", + "experiment": "all-forcing simulation of the recent past (CO2 concentration-driven)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "historical", + "parameters": { + "end": 2014, + "min_number_yrs_per_sim": 165, + "start": 1850 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "piControl": { + "@id": "cmip6plus:experiment/id/picontrol", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: control", + "experiment": "pre-industrial control (CO2 concentration-driven)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "piControl", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 500, + "start": -999 + }, + "parent": { + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "description": "CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments", + "name": "CMIP", + "url": "https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf" + }, + "experiment_id": "Missing Link: cmip6:experiment/id/picontrol-spinup" + }, + "sub_experiment_id": null, + "tier": 1 + }, + "piControl-spinup": { + "@id": "cmip6plus:experiment/id/picontrol-spinup", + "@type": "mip:experiment-id", + "activity_id": { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + "description": "DECK: spin-up portion of the control", + "experiment": "pre-industrial control (spin-up)", + "model_components": { + "additional_allowed": [ + { + "@id": "mip-cmor-tables:auxillary/source-type/aer", + "@type": "mip:source-type", + "name": "AER" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/chem", + "@type": "mip:source-type", + "name": "CHEM" + }, + { + "@id": "mip-cmor-tables:auxillary/source-type/bgc", + "@type": "mip:source-type", + "name": "BGC" + } + ], + "required": { + "@id": "mip-cmor-tables:auxillary/source-type/aogcm", + "@type": "mip:source-type", + "name": "AOGCM" + } + }, + "experiment_id": "piControl-spinup", + "parameters": { + "end": -999, + "min_number_yrs_per_sim": 100, + "start": -999 + }, + "parent": { + "activity_id": "Missing Link: cmip6plus:activity/no parent", + "experiment_id": "Missing Link: cmip6:experiment/id/no parent" + }, + "sub_experiment_id": null, + "tier": 2 } }, - { - "activity_id": "LESFMIP", - "description": "Pre-industrial WMGHG, halocarbon and O3 precursor emissions, other forcings as for the historical experiment", - "experiment": "historical forcing but with pre-industrial GHG", - "experiment_id": "hist-piGHG", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } + "forcing_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", + "frequency": { + "1hr": "sampled hourly", + "1hrCM": "monthly-mean diurnal cycle resolving each day into 1-hour means", + "1hrPt": "sampled hourly, at specified time point within an hour", + "3hr": "3 hourly mean samples", + "3hrPt": "sampled 3 hourly, at specified time point within the time period", + "6hr": "6 hourly mean samples", + "6hrPt": "sampled 6 hourly, at specified time point within the time period", + "day": "daily mean samples", + "dec": "decadal mean samples", + "fx": "fixed (time invariant) field", + "mon": "monthly mean samples", + "monC": "monthly climatology computed from monthly mean samples", + "monPt": "sampled monthly, at specified time point within the time period", + "subhrPt": "sampled sub-hourly, at specified time point within an hour", + "yr": "annual mean samples", + "yrPt": "sampled yearly, at specified time point within the time period" }, - { - "activity_id": "LESFMIP", - "description": "historical simulations with 1850 solar forcing", - "experiment": "historical all-but-solar run", - "experiment_id": "hist-piSol", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } + "grid_label": { + "gm": "global mean data", + "gn": "data reported on a model's native grid", + "gna": "data reported on a native grid in the region of Antarctica", + "gng": "data reported on a native grid in the region of Greenland", + "gnz": "zonal mean data reported on a model's native latitude grid", + "gr": "regridded data reported on the data provider's preferred target grid", + "gr1": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr1a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr1g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr1z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr2": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr2a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr2g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr2z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr3": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr3a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr3g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr3z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr4": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr4a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr4g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr4z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr5": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr5a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr5g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr5z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr6": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr6a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr6g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr6z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr7": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr7a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr7g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr7z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr8": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr8a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr8g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr8z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gr9": "regridded data reported on a grid other than the native grid and other than the preferred target grid", + "gr9a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", + "gr9g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", + "gr9z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", + "gra": "regridded data in the region of Antarctica reported on the data provider's preferred target grid", + "grg": "regridded data in the region of Greenland reported on the data provider's preferred target grid", + "grz": "regridded zonal mean data reported on the data provider's preferred latitude target grid" }, - { - "activity_id": "LESFMIP", - "description": "historical simulations with 1850 total ozone", - "experiment": "historical all-but-ozone run", - "experiment_id": "hist-piTotalO3", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } + "initialization_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", + "mip_era": "CMIP6Plus", + "organisations": { + "NASA-GISS": "Goddard Institute for Space Studies", + "MOHC": "Met Office", + "null": null, + "MPI-M": "Max Planck Institute for Meteorology" }, - { - "activity_id": "LESFMIP", - "description": "historical simulations with 1850 volcanic emissions", - "experiment": "historical all-but-volcanic run", - "experiment_id": "hist-piVolc", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" - ], - "required": "AOGCM" - } + "physics_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", + "product": "model-output", + "realization_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", + "realm": { + "aerosol": "Aerosol", + "atmos": "Atmosphere", + "atmosChem": "Atmospheric Chemistry", + "land": "Land Surface", + "ocean": "Ocean", + "seaIce": "Sea Ice" }, - { - "activity_id": "LESFMIP", - "description": "Solar-only historical simulations", - "experiment": "historical solar-only run", - "experiment_id": "hist-sol", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "required_global_attributes": [ + "conventions", + "activity-id", + "creation-date", + "data-specs-version", + "experiment", + "experiment-id", + "forcing-index", + "frequency", + "grid", + "grid-label", + "initialization-index", + "institution", + "institution-id", + "license", + "mip-era", + "nominal-resolution", + "physics-index", + "realization-index", + "realm", + "source", + "source-id", + "source-type", + "sub-experiment", + "sub-experiment-id", + "table-id", + "tracking-id", + "variable-id", + "variant-label" + ], + "source_id": { + "GISS-E2-1-G": { + "@id": "cmip6plus:source/id/giss-e2-1-g", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + }, + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + } ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Ozone-only historical simulations", - "experiment": "historical total ozone-only run", - "experiment_id": "hist-totalO3", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "cohort": "published", + "contributers": {}, + "label": "GISS-E2.1G", + "label_extended": "GISS-E2.1G", + "license": { + "exceptions_contact": "@lists.nasa.gov <- cmip-giss-l", + "source_specific_info": "", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "GISS-E2-1-G", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/institutions/nasa-giss", + "@type": "mip:institution", + "acronyms": "GISS", + "cmip_acronym": "NASA-GISS", + "established": 1961, + "location": { + "@id": "mip-cmor-tables:organisations/institutions/location/01cyfxe35", + "@type": "institution:location", + "city": "New York", + "country": [ + "United States", + "US" + ], + "lat": 40.71427, + "lon": -74.00597 + }, + "name": "Goddard Institute for Space Studies", + "ror": "01cyfxe35", + "type": "Facility", + "url": "http://www.giss.nasa.gov/" + }, + "release_year": 2019, + "institution_id": "NASA-GISS", + "source": "GISS-E2-1-G (2019): \n " + }, + "HadGEM3-GC31-LL": { + "@id": "cmip6plus:source/id/hadgem3-gc31-ll", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + } ], - "required": "AOGCM" - } - }, - { - "activity_id": "LESFMIP", - "description": "Volcanic-only historical simulations", - "experiment": "historical volcanic-only run", - "experiment_id": "hist-volc", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "cohort": "published", + "contributers": {}, + "label": "HadGEM3-GC31-LL", + "label_extended": "HadGEM3-GC3.1-N96ORCA1", + "license": { + "exceptions_contact": "@metoffice.gov.uk <- cmip6.hadgem3", + "source_specific_info": "https://ukesm.ac.uk/licensing-of-met-office-nerc-and-niwa-cmip6-data/", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "HadGEM3-GC31-LL", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/institutions/mohc", + "@type": "mip:institution", + "aliases": "Meteorological Office", + "cmip_acronym": "MOHC", + "established": 1854, + "location": { + "@id": "mip-cmor-tables:organisations/institutions/location/01ch2yn61", + "@type": "institution:location", + "city": "Exeter", + "country": [ + "United Kingdom", + "GB" + ], + "lat": 50.7236, + "lon": 50.7236 + }, + "name": "Met Office", + "ror": "01ch2yn61", + "type": "Government", + "url": "http://www.metoffice.gov.uk/" + }, + "release_year": 2016, + "institution_id": "MOHC", + "source": "HadGEM3-GC31-LL (2016): \n " + }, + "MIROC6": { + "@id": "cmip6plus:source/id/miroc6", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + } ], - "required": "AOGCM" - } - }, - { - "activity_id": "CMIP", - "description": "CMIP6 historical", - "experiment": "all-forcing simulation of the recent past (CO2 concentration-driven)", - "experiment_id": "historical", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "cohort": "published", + "contributers": {}, + "label": "MIROC6", + "label_extended": "MIROC6", + "license": { + "exceptions_contact": "@jamstec.go.jp <- miroc-cmip6", + "source_specific_info": "", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "MIROC6", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/consortia/miroc", + "@type": "mip:consortium", + "changes": "", + "cmip_acronym": "MIROC", + "members": [ + { + "@type": "consortia:member", + "membership_type": "prior", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/jamstec" + }, + { + "@type": "consortia:member", + "membership_type": "prior", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/aori" + }, + { + "@type": "consortia:member", + "membership_type": "prior", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/nies" + }, + { + "@type": "consortia:member", + "membership_type": "prior", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/r-ccs" + } + ], + "name": "MIROC Consortium", + "status": "active", + "url": "" + }, + "release_year": 2017, + "institution_id": "MIROC", + "source": "MIROC6 (2017): \n " + }, + "MPI-ESM1-2-HR": { + "@id": "cmip6plus:source/id/mpi-esm1-2-hr", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + } ], - "required": "AOGCM" - } - }, - { - "activity_id": "CMIP", - "description": "DECK: control", - "experiment": "pre-industrial control (CO2 concentration-driven)", - "experiment_id": "piControl", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "cohort": "published", + "contributers": {}, + "label": "MPI-ESM1.2-HR", + "label_extended": "MPI-ESM1.2-HR", + "license": { + "exceptions_contact": "@dkrz.de <- cmip6-mpi-esm", + "source_specific_info": "", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "MPI-ESM1-2-HR", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/institutions/mpi-m", + "@type": "mip:institution", + "acronyms": "MPI-M", + "cmip_acronym": "MPI-M", + "established": 1975, + "location": { + "@id": "mip-cmor-tables:organisations/institutions/location/05esem239", + "@type": "institution:location", + "city": "Hamburg", + "country": [ + "Germany", + "DE" + ], + "lat": 53.567794, + "lon": 9.975468 + }, + "name": "Max Planck Institute for Meteorology", + "ror": "05esem239", + "type": "Facility", + "url": "http://www.mpimet.mpg.de/en/home.html" + }, + "release_year": 2017, + "institution_id": "MPI-M", + "source": "MPI-ESM1-2-HR (2017): \n " + }, + "MPI-ESM1-2-LR": { + "@id": "cmip6plus:source/id/mpi-esm1-2-lr", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + } ], - "required": "AOGCM" - } - }, - { - "activity_id": "CMIP", - "description": "DECK: spin-up portion of the control", - "experiment": "pre-industrial control (spin-up)", - "experiment_id": "piControl-spinup", - "model_components": { - "additional_allowed": [ - "AER", - "CHEM", - "BGC" + "cohort": "published", + "contributers": {}, + "label": "MPI-ESM1-2-LR", + "label_extended": "MPI-ESM1.2-LR", + "license": { + "exceptions_contact": "@dkrz.de <- cmip6-mpi-esm", + "source_specific_info": "", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "MPI-ESM1-2-LR", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/institutions/mpi-m", + "@type": "mip:institution", + "acronyms": "MPI-M", + "cmip_acronym": "MPI-M", + "established": 1975, + "location": { + "@id": "mip-cmor-tables:organisations/institutions/location/05esem239", + "@type": "institution:location", + "city": "Hamburg", + "country": [ + "Germany", + "DE" + ], + "lat": 53.567794, + "lon": 9.975468 + }, + "name": "Max Planck Institute for Meteorology", + "ror": "05esem239", + "type": "Facility", + "url": "http://www.mpimet.mpg.de/en/home.html" + }, + "release_year": 2017, + "institution_id": "MPI-M", + "source": "MPI-ESM1-2-LR (2017): \n " + }, + "NorESM2-LM": { + "@id": "cmip6plus:source/id/noresm2-lm", + "@type": "mip:source-id", + "activity_participation": [ + { + "@id": "cmip6plus:activity/cmip", + "@type": "mip:activity-id", + "name": "CMIP" + }, + { + "@id": "cmip6plus:activity/lesfmip", + "@type": "mip:activity-id", + "name": "LESFMIP" + } ], - "required": "AOGCM" + "cohort": "published", + "contributers": {}, + "label": "NorESM2-LM", + "label_extended": "NorESM2-LM (low atmosphere-medium ocean resolution, GHG concentration driven)", + "license": { + "exceptions_contact": "@met.no <- noresm-ncc", + "source_specific_info": "", + "@id": "mip-cmor-tables:license/cc-by-4.0", + "@type": "mip:license", + "license_id": "Creative Commons Attribution 4.0 International", + "license_url": "https://creativecommons.org/licenses/by/4.0/" + }, + "source_id": "NorESM2-LM", + "organisation_id": { + "@id": "mip-cmor-tables:organisations/consortia/ncc", + "@type": "mip:consortium", + "changes": "", + "cmip_acronym": "NCC", + "members": [ + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/noresm", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/met-norway", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/nersc", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/nilu", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/uib", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/uio", + "membership_type": "prior" + }, + { + "@type": "consortia:member", + "dates": { + "from": 2016, + "phase": "CMIP6", + "to": 2022 + }, + "institution": "Missing Link: mip-cmor-tables:organisations/institutions/uni", + "membership_type": "prior" + } + ], + "name": "NCC Consortium", + "status": "active", + "url": "" + }, + "release_year": 2017, + "institution_id": "NCC", + "source": "NorESM2-LM (2017): \n " } - } - ], - "forcing_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", - "frequency": { - "1hr": "sampled hourly", - "1hrCM": "monthly-mean diurnal cycle resolving each day into 1-hour means", - "1hrPt": "sampled hourly, at specified time point within an hour", - "3hr": "3 hourly mean samples", - "3hrPt": "sampled 3 hourly, at specified time point within the time period", - "6hr": "6 hourly mean samples", - "6hrPt": "sampled 6 hourly, at specified time point within the time period", - "day": "daily mean samples", - "dec": "decadal mean samples", - "fx": "fixed (time invariant) field", - "mon": "monthly mean samples", - "monC": "monthly climatology computed from monthly mean samples", - "monPt": "sampled monthly, at specified time point within the time period", - "subhrPt": "sampled sub-hourly, at specified time point within an hour", - "yr": "annual mean samples", - "yrPt": "sampled yearly, at specified time point within the time period" - }, - "grid_label": { - "gm": "global mean data", - "gn": "data reported on a model's native grid", - "gna": "data reported on a native grid in the region of Antarctica", - "gng": "data reported on a native grid in the region of Greenland", - "gnz": "zonal mean data reported on a model's native latitude grid", - "gr": "regridded data reported on the data provider's preferred target grid", - "gr1": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr1a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr1g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr1z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr2": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr2a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr2g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr2z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr3": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr3a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr3g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr3z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr4": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr4a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr4g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr4z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr5": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr5a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr5g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr5z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr6": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr6a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr6g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr6z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr7": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr7a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr7g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr7z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr8": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr8a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr8g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr8z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gr9": "regridded data reported on a grid other than the native grid and other than the preferred target grid", - "gr9a": "regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid", - "gr9g": "regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid", - "gr9z": "regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid", - "gra": "regridded data in the region of Antarctica reported on the data provider's preferred target grid", - "grg": "regridded data in the region of Greenland reported on the data provider's preferred target grid", - "grz": "regridded zonal mean data reported on the data provider's preferred latitude target grid" - }, - "initialization_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", - "mip_era": "CMIP6Plus", - "native_nominal_resolution": [ - "{}km", - "250km", - "100km" - ], - "organisations": { - "NASA_GISS": "Goddard Institute for Space Studies", - "MOHC": "Met Office", - "MIROC": "MIROC Consortium", - "MPI_M": "Max Planck Institute for Meteorology", - "NCC": "NCC Consortium" - }, - "physics_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", - "product": "model-output", - "realization_index": "^\\[\\{0,\\}[[:digit:]]\\{1,\\}\\]\\{0,\\}$", - "realm": { - "aerosol": "Aerosol", - "atmos": "Atmosphere", - "atmosChem": "Atmospheric Chemistry", - "land": "Land Surface", - "ocean": "Ocean", - "seaIce": "Sea Ice" - }, - "required_global_attributes": [ - "conventions", - "activity-id", - "creation-date", - "data-specs-version", - "experiment", - "experiment-id", - "forcing-index", - "frequency", - "grid", - "grid-label", - "initialization-index", - "institution", - "institution-id", - "license", - "mip-era", - "nominal-resolution", - "physics-index", - "realization-index", - "realm", - "source", - "source-id", - "source-type", - "sub-experiment", - "sub-experiment-id", - "table-id", - "tracking-id", - "variable-id", - "variant-label" - ], - "source_id": { - "GISS_E2_1_G": { - "activity_participation": [ - "LESFMIP", - "CMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "GISS-E2.1G", - "label_extended": "GISS-E2.1G", - "license": { - "exceptions_contact": "@lists.nasa.gov <- cmip-giss-l", - "source_specific_info": "", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "GISS-E2-1-G", - "organisation_id": "NASA-GISS", - "release_year": 2019, - "source": "GISS-E2-1-G (2019): \n Varies_with_physics-version (atmosChem)\n GISS-E2.1 (atmos)\n GISS_LSM (land)\n GISS_Ocean (ocean)\n GISS_SI (seaIce)\n ", - "source_id": "GISS-E2-1-G" - }, - "HadGEM3_GC31_LL": { - "activity_participation": [ - "CMIP", - "LESFMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "HadGEM3-GC31-LL", - "label_extended": "HadGEM3-GC3.1-N96ORCA1", - "license": { - "exceptions_contact": "@metoffice.gov.uk <- cmip6.hadgem3", - "source_specific_info": "https://ukesm.ac.uk/licensing-of-met-office-nerc-and-niwa-cmip6-data/", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "HadGEM3-GC31-LL", - "organisation_id": "MOHC", - "release_year": 2016, - "source": "HadGEM3-GC31-LL (2016): \n UKCA-GLOMAP-mode (aerosol)\n MetUM-HadGEM3-GA7.1 (atmos)\n JULES-HadGEM3-GL7.1 (land)\n NEMO-HadGEM3-GO6.0 (ocean)\n CICE-HadGEM3-GSI8 (seaIce)\n ", - "source_id": "HadGEM3-GC31-LL" - }, - "MIROC6": { - "activity_participation": [ - "CMIP", - "LESFMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "MIROC6", - "label_extended": "MIROC6", - "license": { - "exceptions_contact": "@jamstec.go.jp <- miroc-cmip6", - "source_specific_info": "", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "MIROC6", - "organisation_id": "MIROC", - "release_year": 2017, - "source": "MIROC6 (2017): \n SPRINTARS6.0 (aerosol)\n CCSR_AGCM (atmos)\n MATSIRO6.0 (land)\n COCO4.9 (seaIce)\n ", - "source_id": "MIROC6" - }, - "MPI_ESM1_2_HR": { - "activity_participation": [ - "CMIP", - "LESFMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "MPI-ESM1.2-HR", - "label_extended": "MPI-ESM1.2-HR", - "license": { - "exceptions_contact": "@dkrz.de <- cmip6-mpi-esm", - "source_specific_info": "", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "MPI-ESM1-2-HR", - "organisation_id": "MPI-M", - "release_year": 2017, - "source": "MPI-ESM1-2-HR (2017): \n ,_prescribed_MACv2-SP (aerosol)\n ECHAM6.3 (atmos)\n JSBACH3.20 (land)\n MPIOM1.63 (ocean)\n unnamed (seaIce)\n ", - "source_id": "MPI-ESM1-2-HR" }, - "MPI_ESM1_2_LR": { - "activity_participation": [ - "CMIP", - "LESFMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "MPI-ESM1-2-LR", - "label_extended": "MPI-ESM1.2-LR", - "license": { - "exceptions_contact": "@dkrz.de <- cmip6-mpi-esm", - "source_specific_info": "", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "MPI-ESM1-2-LR", - "organisation_id": "MPI-M", - "release_year": 2017, - "source": "MPI-ESM1-2-LR (2017): \n ,_prescribed_MACv2-SP (aerosol)\n ECHAM6.3 (atmos)\n JSBACH3.20 (land)\n MPIOM1.63 (ocean)\n unnamed (seaIce)\n ", - "source_id": "MPI-ESM1-2-LR" + "source_type": [ + "AER", + "RAD", + "ISM", + "CHEM", + "BGC", + "OGCM", + "SLAB", + "AOGCM", + "LAND", + "AGCM" + ], + "sub_experiment_id": { + "null": null }, - "NorESM2_LM": { - "activity_participation": [ - "CMIP", - "LESFMIP" - ], - "cohort": "published", - "contributers": {}, - "label": "NorESM2-LM", - "label_extended": "NorESM2-LM (low atmosphere-medium ocean resolution, GHG concentration driven)", - "license": { - "exceptions_contact": "@met.no <- noresm-ncc", - "source_specific_info": "", - "license_id": "Creative Commons Attribution 4.0 International", - "license_url": "https://creativecommons.org/licenses/by/4.0/" - }, - "name": "NorESM2-LM", - "organisation_id": "NCC", - "release_year": 2017, - "source": "NorESM2-LM (2017): \n OsloAero (aerosol)\n CAM-OSLO (atmos)\n OsloChemSimp (atmosChem)\n CLM (land)\n MICOM (ocean)\n CICE (seaIce)\n ", - "source_id": "NorESM2-LM" - } - }, - "source_type": [ - "AOGCM", - "CHEM", - "RAD", - "OGCM", - "LAND", - "AER", - "ISM", - "AGCM", - "BGC", - "SLAB" - ], - "sub_experiment_id": { - "f2023": "Forcings 2023", - "none": "none" - }, - "tracking_id": "hdl:21.14100/.*", - "variant_label": "r[[:digit:]]\\{1,\\}i[[:digit:]]\\{1,\\}p[[:digit:]]\\{1,\\}f[[:digit:]]\\{1,\\}$" + "tracking_id": "hdl:21.14100/.*", + "variant_label": "r[[:digit:]]\\{1,\\}i[[:digit:]]\\{1,\\}p[[:digit:]]\\{1,\\}f[[:digit:]]\\{1,\\}$" + } } \ No newline at end of file diff --git a/cmipld/cvs/generate.py b/cmipld/cvs/generate.py index 89415fc..9ae1286 100644 --- a/cmipld/cvs/generate.py +++ b/cmipld/cvs/generate.py @@ -20,8 +20,8 @@ async def main(): # latest = await CMIPFileUtils.load_latest(CMIPFileUtils) # manual read since we are in development. - mip= await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/mip-cmor-tables/JSONLD/scripts/compiled/graph_data.json') - cmip6plus = await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/CMIP6Plus_CVs/JSONLD/scripts/compiled/graph_data.json') + mip= await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/mip-cmor-tables/compiled/graph_data.json') + cmip6plus = await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/CMIP6Plus_CVs/ compiled/graph_data.json') latest = sum([mip,cmip6plus],[]) @@ -64,13 +64,14 @@ async def main(): ### CMIP6Plus ##### ################################## # organisations - for key in 'organisations source-id native-nominal-resolution activity-id experiment-id sub-experiment-id'.split(): + # native-nominal-resolution + for key in 'organisations source-id activity-id experiment-id sub-experiment-id'.split(): # run the frame. frame = get_frame('cmip6plus',key) # get results using frame - data = Frame(latest,frame).clean() + data = Frame(latest,frame) # any additional processing? add_new = await process('cmip6plus',key,data) @@ -86,16 +87,11 @@ async def main(): ### fix the file ##### ################################## - def rename_keys(d): - # rename dictionary keys from '-' to '_' - if isinstance(d, dict): return {k.replace('-', '_'): rename_keys(v) for k, v in d.items()} - elif isinstance(d, list): return [rename_keys(item) for item in d] - else: return d - CV = OrderedDict(sorted((k, (v)) for k, v in rename_keys(CV).items())) + CV = OrderedDict(sorted((k, (v)) for k, v in CV.items())) with open('CV.json','w') as f: - json.dump(CV,f,indent=4) + json.dump(dict(CV = CV),f,indent=4) diff --git a/cmipld/cvs/parse.py b/cmipld/cvs/parse.py index d9d77c9..1f7fadb 100644 --- a/cmipld/cvs/parse.py +++ b/cmipld/cvs/parse.py @@ -1,4 +1,6 @@ +from collections import OrderedDict + def name_description(data,key='name',value='description'): return dict([(x[key],x[value]) for x in data]) @@ -27,39 +29,40 @@ def mip_cmor_tables_grid_label (data): ################################## def cmip6plus_organisations (data): - data = [d['organisation-id'] for d in data] - return name_description(data,key='cmip-acronym',value='name') + data = [d['organisation_id'] for d in data] + return name_description(data,key='cmip_acronym',value='name') + def cmip6plus_descriptors (data): data.update(data['index']) del data['index'] + data['DRS'] = data['drs'] + del data['drs'] return data def cmip6plus_source_id (data): - sid = {} - for source in data: - - source['organisation-id'] = source['organisation-id'].get('cmip-acronym','') + sid = OrderedDict() + for source in sorted(data,key=lambda x: x['source_id']): + # ideally organisation + source['institution_id'] = source['organisation_id'].get('cmip_acronym','') source['license'].update(source['license'].get('kind',{})) del source['license']['kind'] del source['license']['conditions'] - source['source'] = f"{source['name']} ({source['release-year']}): \n " + source['source'] = f"{source['source_id']} ({source['release_year']}): \n " # combine the model-components - for i in source['model-component']: + for i in source['model_component']: try: - source['source'] += f"{i['name']} ({i['realm']})\n " + source['source'] += f"{i['source_id']} ({i['realm']})\n " except: - print('Missing',i, source['name']) + print('Missing',i, source['source_id']) - del source['model-component'] - - source['source_id'] = source['name'] + del source['model_component'] sid[source['source_id']] = source @@ -67,12 +70,23 @@ def cmip6plus_source_id (data): def cmip6plus_native_nominal_resolution (data): print(data[0]) - return list(set([f"{x['nominal-resolution'].get('value',x['nominal-resolution'])}{x['nominal-resolution'].get('unit',{}).get('si','km')}" for x in data])) + return list(set([f"{x['nominal_resolution'].get('value',x['nominal_resolution'])}{x['nominal_resolution'].get('unit',{}).get('si','km')}" for x in data])) def cmip6plus_sub_experiment_id (data): - return name_description(data,'sub-experiment-id','description') + return name_description(data,'sub_experiment_id','description') + +def cmip6plus_experiment_id (data): + eid = OrderedDict() + for e in sorted(data,key=lambda x: x['experiment_id']): + for i in ['additional_allowed','required']: + if isinstance(e['model_components'][i],str): + + e['model_components'][i] = [e['model_components'][i]] + eid[e['experiment_id']] = e + + return eid @@ -83,9 +97,10 @@ def cmip6plus_sub_experiment_id (data): async def process(prefix,file,data=None): name = f'{prefix}_{file}'.replace('-','_') + # prepare for use. - data.clean() - # print(list(local_globals) + data.clean_cv + data.print if name in local_globals: data.data = local_globals[name](data.data) else: diff --git a/cmipld/file_io.py b/cmipld/file_io.py index eab9110..cd2ee29 100644 --- a/cmipld/file_io.py +++ b/cmipld/file_io.py @@ -3,6 +3,7 @@ import json import base64 import asyncio +import sys ''' @@ -90,8 +91,6 @@ async def load_latest(self): return sum([await self.gh_read_file(*f) for f in latest],[]) - - @staticmethod @@ -102,3 +101,20 @@ def write_file(content, file): print(f"JSON data has been written to {file}") except Exception as e: print(f"Error writing to file: {e}") + + + @staticmethod + async def load(lddata:list): + read = [] + for f in lddata: + if 'http' in f: + read.append(await CMIPFileUtils.read_file_url(f)) + elif f in LatestFiles.entries: + read.append(await CMIPFileUtils.gh_read_file(*LatestFiles.entries[f])) + elif os.path.exists(f): + read.append(await CMIPFileUtils.read_file_fs(f)) + else: + sys.exit(f"File {f} not found") + + + return sum(read,[]) diff --git a/cmipld/frame_ld/__init__.py b/cmipld/frame_ld/__init__.py index e8e3135..a04cdba 100644 --- a/cmipld/frame_ld/__init__.py +++ b/cmipld/frame_ld/__init__.py @@ -42,7 +42,10 @@ def __init__(self,source,frame,nograph=True): self.source = source self.frame = frame - if nograph: + # if "@embed" not in frame: # make sure each instance is embedded. + # self.frame["@embed"] = "@always" + + if nograph: # usually used if framing an id directly self.data = self.graph_only(jsonld.frame(source, frame)) else: self.data = jsonld.frame(source, frame) @@ -74,6 +77,10 @@ def clean(self, process = None): self.end return self + + @property + def clean_cv(self): + return self.clean(['missing','untag','lower']) # @staticmethod @property @@ -109,6 +116,18 @@ def flatten(self): self.json_string = re.sub(r'{\s*"([^"]*?)":\s*"(.+)"\s*}', r'"\2"', self.json_string) return self + @property + @direct + def lower(self): + self.json_string = re.sub(r'(?<=")([^"]*?)-(.*?)(?=":)', lambda m: m.group(0).replace('-', '_') , self.json_string) + return self + + @property + @direct + def missing(self): + self.json_string = re.sub(r'\{\s*"@id"\s*:\s*"([^"]+)"\s*\}', r'"Missing Link: \1"' , self.json_string) + return self + @staticmethod def graph_only(json_object): return json_object.get('@graph', {}) diff --git a/cmipld/frame_ld/examples/cmip6plus/activity-id.json b/cmipld/frame_ld/examples/cmip6plus/activity-id.json index a5b8352..22021d4 100644 --- a/cmipld/frame_ld/examples/cmip6plus/activity-id.json +++ b/cmipld/frame_ld/examples/cmip6plus/activity-id.json @@ -1,6 +1,11 @@ { + "@context": { + "@vocab": "activity-id", + "@context": { + "@extend": true + } + }, "@type": "mip:activity-id", - "activity-id:name": "", - "@explicit": true - + "activity-id:name": "", + "@explicit": true } \ No newline at end of file diff --git a/cmipld/frame_ld/examples/cmip6plus/descriptors.json b/cmipld/frame_ld/examples/cmip6plus/descriptors.json index 16107a1..6386fd6 100644 --- a/cmipld/frame_ld/examples/cmip6plus/descriptors.json +++ b/cmipld/frame_ld/examples/cmip6plus/descriptors.json @@ -1,5 +1,6 @@ { "@id": "cmip6plus:core/descriptors", + "@context":{"@extend":true}, "@type": "mip:core-descriptors" , diff --git a/cmipld/frame_ld/examples/cmip6plus/experiment-id.json b/cmipld/frame_ld/examples/cmip6plus/experiment-id.json index 54ff2c8..6e38d64 100644 --- a/cmipld/frame_ld/examples/cmip6plus/experiment-id.json +++ b/cmipld/frame_ld/examples/cmip6plus/experiment-id.json @@ -1,5 +1,15 @@ { + "@context": { + "@vocab": "experiment-id", + "experiment-id:activity-id": { + "@extend": true + }, + "experiment-id:sub-experiment-id": { + "@extend": true + } + }, "@type": "mip:experiment-id", + "experiment-id": "", "experiment-id:activity-id": { "activity-id:name": {}, "@explicit": true @@ -13,5 +23,13 @@ "source-type:name": "", "@explicit": true } + }, + "experiment-id:sub-experiment-id": { + "sub-experiment-id:name": {}, + "@explicit": true + }, + "experiment-id:parent":{ + "@embed":"@always" } -} \ No newline at end of file + +} diff --git a/cmipld/frame_ld/examples/cmip6plus/organisations.json b/cmipld/frame_ld/examples/cmip6plus/organisations.json index 9c15e30..8eb134f 100644 --- a/cmipld/frame_ld/examples/cmip6plus/organisations.json +++ b/cmipld/frame_ld/examples/cmip6plus/organisations.json @@ -1,4 +1,11 @@ { + "@context": { + "@vocab": "institution", + "institution:location": {"@context":{ + "@extend": true + } + } + }, "@type": [ "mip:source-id" ], diff --git a/cmipld/frame_ld/examples/cmip6plus/source-id.json b/cmipld/frame_ld/examples/cmip6plus/source-id.json index bfff1c1..6c189be 100644 --- a/cmipld/frame_ld/examples/cmip6plus/source-id.json +++ b/cmipld/frame_ld/examples/cmip6plus/source-id.json @@ -1,34 +1,56 @@ { + "@context": { + "@vocab": "source-id", + "source-id:activity-participation": { + "@context": { + "@extend": true + } + }, + "source-id:model-component": { + "model-component:nominal-resolution": { + "model-native-nominal-resolution:cf:unit": { + "@context": { + "@extend": true + } + } + }, + "model-component:realm": { + "@context": { + "@extend": true + } + } + }, + "source-id:organisation-id": { + "@context": { + "@extend": true + } + } + }, "@type": [ "mip:source-id" ], + "source-id": "", "source-id:activity-participation": [ { "activity-id:name": "", "@explicit": true } ], - "source-id:license": { - "@explicit": false }, - - "source-id:model-component": - { - "model-component:name": "", - "model-component:realm": { - "realm:name": "", - "@explicit": true - }, - "model_component:description": "", - "model_component:native-nominal-resolution": { - "native-nominal-resolution:value": "", - "@explicit": false, - "@expanded": true - }, + "source-id:model-component": { + "model-component:name": "", + "model-component:realm": { + "realm:name": "", "@explicit": true - - } - + }, + "model_component:description": "", + "model_component:native-nominal-resolution": { + "native-nominal-resolution:value": "", + "@explicit": false, + "@expanded": true + }, + "@explicit": true + } } \ No newline at end of file diff --git a/cmipld/generate/__init__.py b/cmipld/generate/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/cmipld/generate/__init__.py @@ -0,0 +1 @@ + diff --git a/cmipld/generate/update_new.py b/cmipld/generate/update_new.py new file mode 100644 index 0000000..48c71d2 --- /dev/null +++ b/cmipld/generate/update_new.py @@ -0,0 +1,287 @@ +""" +CMIP6Plus JSON-LD File Extractor and Organizer + +This script traverses through a directory structure, processes JSON-LD files, and organizes +them into graph, context, and version categories. It supports parallel execution for faster +processing and allows exclusion of specific directories and files. + +Key Features: +- Parallel file reading using ThreadPoolExecutor +- Customizable file and directory exclusion +- Generation of graph and version data +- Minified JSON output for efficient storage +- Base directory specification +- JSON-LD conformance testing +- Override flag to process all non-skipped repos + +Dependencies: +- All libraries are from Python's standard library, except: + - pyld: For JSON-LD conformance testing + +Usage: +python cmip6plus_jsonld_extractor.py [--base-dir DIR] [--exclude-dirs DIR1,DIR2] [--exclude-files FILE1,FILE2] [--override] +""" + +import argparse +import concurrent.futures +import json +import mmap +import os +import re +import subprocess +from typing import List, Dict, Any, Tuple + +from pyld import jsonld + +# Constants +SHORTHAND = "mip-cmor-tables:" +DEFAULT_SKIP_FILES = ['schema.jsonld', 'graph.jsonld', ".DS_Store", "create.ipynb", "version.json"] +DEFAULT_SKIP_DIRS = ['JSONLD/archive', 'JSONLD/scripts'] + +graphfile = './compiled/graph_data.json' + +def get_repo_info() -> Tuple[str, str, str]: + """Retrieve repository information and tags.""" + repo = subprocess.getoutput('git remote get-url origin').replace('.git', '/blob/main/JSONLD').strip() + cv_tag = subprocess.getoutput("curl -s https://api.github.com/repos/WCRP-CMIP/CMIP6Plus_CVs/tags | jq -r '.[0].name'").strip() + mip_tag = subprocess.getoutput("curl -s https://api.github.com/repos/PCMDI/mip-cmor-tables/tags | jq -r '.[0].name'").strip() + return repo, cv_tag, mip_tag + +REPO, CVTAG, MIPTAG = get_repo_info() + +def errprint(*text): + RED = "\033[91m" + RESET = "\033[0m" + print(RED,text,RESET) + + +def bprint(*text): + other = "\033[94m" + RESET = "\033[0m" + print(other,text,RESET) + + +def read_json_file_mmap(file: str, directory: str) -> Tuple[Dict[str, Any], Dict[str, Any]]: + """Read a JSON file using memory mapping for efficiency.""" + file_path = os.path.join(directory, file) + with open(file_path, 'r+b') as f: + with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm: + version_data = githistory(file_path, False) + return json.loads(mm.read().decode('utf-8')), version_data + +def read_all_json_files(directory: str, base_dir: str) -> Tuple[str, str]: + """Read and process all JSON files in a directory.""" + # skipped = [f"{directory}/{f}" for f in DEFAULT_SKIP_FILES] + try: + files = [f for f in os.listdir(directory) if f.endswith('.json') and f not in DEFAULT_SKIP_FILES] + # print(files) + except FileNotFoundError: + errprint('<<< Dir does not exist:', directory) + return None,None + + + if not os.path.exists(f"{directory}/frame.jsonld"): + bprint('\t >>> SKIP ', directory) + return None, None + + try: + frame = json.load(open(f"{directory}/frame.jsonld", 'r')) + prefix = frame['@context']['@vocab'].replace('_','-') + if prefix[-1] != ':': + prefix += ':' + context = frame['@context'] + # print('>>> PASS ', directory) + except Exception as e: + errprint('<<< Error',e, directory) + return None, None + + + + + + # files.remove("frame.json") + all_data = [] + versioning = [] + + def add_prefix_to_keys(data, prefix): + if isinstance(data, dict): + return {prefix + k if not k.startswith('@') else k: add_prefix_to_keys(v, prefix) for k, v in data.items()} + elif isinstance(data, list): + return [add_prefix_to_keys(item, prefix) for item in data] + else: + return data + + with concurrent.futures.ThreadPoolExecutor() as executor: + future_to_file = {executor.submit(read_json_file_mmap, file, directory): file for file in files} + + for future in concurrent.futures.as_completed(future_to_file): + try: + data, v = future.result() + + data['@type'] = f"mip:{data['@type']}" + all_data.append(data) + versioning.append(v) + except Exception as exc: + errprint(f'File {future_to_file[future]} generated an exception: {exc}') + + + # write prefix to all_data + # write context to graph + # all_data = [{prefix + k if not k.startswith('@') else k: v for k, v in z.items()} for z in all_data] + + + all_data = [add_prefix_to_keys(item, prefix) for item in all_data] + + # print(all_data[0]) + + + + print('ADD WALK HERE TO CONTEXT') + complete_graph = { + "@id": directory.replace(base_dir, REPO).replace('blob/main/JSONLD/', ''), + "@type": "graph", + "@context": context, + "ldroot": directory.removeprefix(base_dir), + "@graph": all_data, + "files": files + } + + # JSON-LD conformance test + + + try: + jsonld.expand(complete_graph) + print(f" \t PASS JSON-LD conformance: {directory}") + except jsonld.JsonLdError as e: + errprint(f"<<< FAIL JSON-LD conformance test: {directory}: {e}") + + + + + # Write graph and versioning + gpath = f"{directory}/graph.jsonld" + json.dump(complete_graph, open(gpath, 'w'),indent=4) # Minified for efficiency + vpath = f"{directory}/version.jsonld" + json.dump(versioning, open(vpath, 'w'),indent=4) # Minified for efficiency + + return gpath, vpath + +def githistory(file: str, rstr: bool = True) -> Dict[str, Any] | str: + """Retrieve Git history information for a given file.""" + cmd = rf"""git log -n 1 --pretty=format:'{{ + "version:date": "%cd", + "version:commit": {{ + "hash": "%H", + "message": "%s", + "author": {{ + "name": "%an", + "email": "%ae" + }} + }} + }}' --date=iso-strict -- {file}""" + + rtn = subprocess.getoutput(cmd).strip() + ncommits = int(subprocess.getoutput(f'git log --oneline -- "{file}" | wc -l').strip() or 0) + + update = {} + if rtn: + try: + update = json.loads(rtn) + except json.JSONDecodeError: + print(f"Error decoding JSON from git log for {file}: {rtn}") + + if rstr: + return f'{file.ljust(30)} - {update.get("version:date", "Unknown date")}' + else: + return { + "@id": file.replace(f'JSONLD', REPO), + "@type": "version", + "version:file": file, + "version:release": {"mip-cmor-tables": MIPTAG, "cmip6plus": CVTAG}, + "version:previous_updates": ncommits, + **update, + "version:data": {"@id": file.replace("JSONLD/", SHORTHAND).removesuffix('.json')} + } + +def get_directories_to_process(base_dir: str, skip_dirs: set, override: bool) -> set: + """Get the set of directories to process based on Git status or override flag.""" + if override: + all_dirs = set() + for root, dirs, _ in os.walk(base_dir+'/JSONLD/'): + for d in dirs: + if d not in skip_dirs : + + # full_path = os.path.join(root, d) + newd = root.replace('../../','')+ '/' + d + + all_dirs.add(newd.replace('//','/')) + # if full_path.startswith(base_dir) and not any(full_path.startswith(i) for i in skip_dirs): + # all_dirs.add(full_path.removeprefix(base_dir)) + + return all_dirs + + cmd = f'git diff --name-only $(git log -1 --pretty=format:%H -- {graphfile})^ HEAD' + output = subprocess.getoutput(cmd) + + if not output: + # Remove graph and version files from the output + output = re.sub(r'^JSONLD/.+(?:graph|version)\.json.*\n', "", output, flags=re.MULTILINE) + + # Get unique directories that need updating + return set(re.findall(r'^JSONLD.*(?=/)', output, re.MULTILINE)) - skip_dirs + +def main(base_dir: str, exclude_dirs: List[str], exclude_files: List[str], override: bool): + """ + Main function to orchestrate the JSON-LD file processing. + + :param base_dir: Base directory to start from + :param exclude_dirs: List of directories to exclude + :param exclude_files: List of files to exclude + :param override: Flag to process all non-skipped repos + """ + skip_files = DEFAULT_SKIP_FILES + exclude_files + skip_dirs = set(DEFAULT_SKIP_DIRS + exclude_dirs) + + # Get directories to process + matched = get_directories_to_process(base_dir, skip_dirs, override) + + print(base_dir, matched) + if not matched: + if override: + print('No directories found in the base directory.') + else: + print('EXIT: No new files found! Use --override to process all directories.') + return + + for directory in matched: + print(directory) + full_path = os.path.join(base_dir, directory) + graph_data, _ = read_all_json_files(full_path, base_dir) + # print(graph_data) + + if not graph_data: + continue + # print('<<<', directory) + + + +def init(): + parser = argparse.ArgumentParser(description="Process CMIP6Plus JSON-LD files.") + parser.add_argument("--base-dir", type=str, default="./", help="Base directory to start from") + parser.add_argument("--exclude-dirs", type=str, help="Comma-separated list of directories to exclude") + parser.add_argument("--exclude-files", type=str, help="Comma-separated list of files to exclude") + + parser.add_argument("--output-dir", type=str, default="", help="where to save output") + + parser.add_argument("--override", action="store_true", help="Process all non-skipped repos, ignoring Git status") + args = parser.parse_args() + + base_dir = args.base_dir.rstrip('/') # Remove trailing slash for consistency + exclude_dirs = args.exclude_dirs.split(',') if args.exclude_dirs else [] + exclude_files = args.exclude_files.split(',') if args.exclude_files else [] + + main(base_dir, exclude_dirs, exclude_files, args.override) + + +if __name__ == "__main__": + init() \ No newline at end of file diff --git a/cmipld/graph/__init__.py b/cmipld/graph/__init__.py new file mode 100644 index 0000000..41125ab --- /dev/null +++ b/cmipld/graph/__init__.py @@ -0,0 +1,148 @@ + + +from collections import Counter +from pyld import jsonld +from cmipld import CMIPFileUtils +import re,json,sys + +class JSONLDProcessor: + """ + A class to process JSON-LD files and extract information. + + Attributes: + - latest_data: The latest JSON-LD data. + """ + + def __init__(self): + ... + + def make_graph(self,loaditems): + """ create the graph. """ + + self.ldata = CMIPFileUtils.load(loaditems) + + + + # classic id extraction for checks + ids = set(re.findall(r'"@id"\s*:\s*"([^"]+)"', json.dumps(self.lddata))) + + # get the triplets + triplets = jsonld.to_rdf(self.lddata) + + # grab all the types and ids + type_map = {} + self.nodes = [] + self.links = [] + + clink = lambda s: '/'.join(s.split('/')[:-1]) + prefix = lambda s: s.split(':')[0] + + + for group in triplets.values(): + for t in group: + s = str(t) + if 'literal' not in s and '_:' not in s: + if 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' in s: + type_map[t['subject']['value']] = t['object']['value'] + + node = dict(id=clink(t['subject']['value']),type=t['object']['value'], origin=prefix(t['subject']['value'])) + if node['origin']!='https': + self.nodes.append(node) + else: + try: + link = dict(source=clink(t['subject']['value']),target=clink(t['object']['value']),predicate=t['predicate']['value']) + self.links.append(link) + + # additional origin links + src = link['source'] + path = re.split(r'[:/]',src) + for i in range(1,len(path)): + me = path[i-1] + n2 = dict(id=me,type='directory',origin=path[0]) + self.nodes.append(n2) + l2= dict(source=path[i-1],target=path[i],predicate='_') + self.links.append(l2) + # dont forget the final node. + me = path[i] + n2 = dict(id=me,type='directory-path',origin=path[0]) + self.nodes.append(n2) + # link up to original + l2= dict(source=path[i],target=src,predicate='_') + self.links.append(l2) + + except: + # skips out the blank nodes + print(t) + ... + + directories = list(set(triplets.keys())) + # find missing and problem keys + self.missing = set(ids) - set(type_map.keys()) - set(directories) + from collections import Counter + + nodeweights = Counter([i['id'] for i in self.nodes]) + linkweights = Counter([f"{i['source']} -> {i['target']}" for i in self.links]) + + for i in self.nodes: + i['weight'] = nodeweights[i['id']] + + for i in self.links: + i['weight'] = linkweights[f"{i['source']} -> {i['target']}"] + + + self.nodes = list(dict([(i['id'],i) for i in self.nodes]).values()) + self.links = list(dict([((i['source'],i['target'],i['predicate']),i) for i in self.links]).values()) + + + + self.types = dict([[v,clink(k)] for k,v in type_map.items()]) + + + # since the types are defined by the vocab + self.vocab = {v: k.replace('mip:','') for k, v in self.types.items() if 'https' not in v} + + self.graph = dict(nodes=self.nodes,links=self.links,types=self.types,vocab=self.vocab, missing = self.missing) + + def read_graph(self,location = 'network.json'): + """ read the graph from a file. """ + self.graph = json.load(open(location,'r')) + + def write(self,location = 'network.json'): + """ write the graph to a file. """ + with open(location,'w') as f: + json.dump(self.graph,f,indent=2) + + + def walk_graph(sid): + links = [link for link in self.graph['links'] if link['source'] == sid] + if len(links) == 0: + return {'@extend':True} + + output = {} + for link in links: + output[link['predicate']] = self.walk_graph(link['target']) + + return output + + + def get_context(selection): + # selection = 'mip:source-id' + sid = self.graph.types[selection] + structure = self.walk_graph(sid) + return json.dumps({"@context":{"@vocab":selection.replace('mip:',''),**structure}}, indent=2) + + + + +if __name__ == "__main__": + import argparse + + def context(): + parser = argparse.ArgumentParser(description='Uses the graph.json to generate a context for a type.') + parser.add_argument('type', type=str, help='type you want to check') + parser.add_argument('graph', type=str, help='The file(s) to use to generate the context network.json') + args = parser.parse_args() + + print(args) + + \ No newline at end of file diff --git a/cmipld/graph/context.py b/cmipld/graph/context.py new file mode 100644 index 0000000..17b39f3 --- /dev/null +++ b/cmipld/graph/context.py @@ -0,0 +1,7 @@ +import argparse + +def get_context(): + parser = argparse.ArgumentParser(description='Uses the graph.json to generate a context for a type.') + parser.add_argument('graph', type=str, help='The file to use to generate the context network.json') + args = parser.parse_args() + return args.context \ No newline at end of file diff --git a/cmipld/graph/create.ipynb b/cmipld/graph/create.ipynb new file mode 100644 index 0000000..f72f255 --- /dev/null +++ b/cmipld/graph/create.ipynb @@ -0,0 +1,340 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from cmipld import *\n", + "from pyld import *\n", + "import re,json,sys" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "mip= await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/mip-cmor-tables/JSONLD/scripts/compiled/graph_data.json')\n", + "cmip6plus = await CMIPFileUtils.read_file_fs('/Users/daniel.ellis/WIPwork/CMIP6Plus_CVs/JSONLD/scripts/compiled/graph_data.json')\n", + "\n", + "latest = sum([mip,cmip6plus],[])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# classic id extraction for checks\n", + "ids = set(re.findall(r'\"@id\"\\s*:\\s*\"([^\"]+)\"', json.dumps(latest)))\n", + "\n", + "# get the triplets\n", + "triplets = jsonld.to_rdf(latest)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# grab all the types and ids\n", + "type_map = {}\n", + "nodes = []\n", + "links = []\n", + "\n", + "# clnk = re.compile(r'^[^:]+:(.*?)/')\n", + "def clink (s):\n", + " return '/'.join(s.split('/')[:-1])\n", + "def prefix (s):\n", + " return s.split(':')[0]\n", + "\n", + "# prefix = re.compile(r'^[^:]+')\n", + "\n", + "for group in triplets.values():\n", + " for t in group:\n", + " s = str(t)\n", + " if 'literal' not in s and '_:' not in s:\n", + " if 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' in s:\n", + " type_map[t['subject']['value']] = t['object']['value']\n", + " \n", + " node = dict(id=clink(t['subject']['value']),type=t['object']['value'], origin=prefix(t['subject']['value']))\n", + " if node['origin']!='https':\n", + " nodes.append(node)\n", + " else:\n", + " try:\n", + " link = dict(source=clink(t['subject']['value']),target=clink(t['object']['value']),predicate=t['predicate']['value'])\n", + " links.append(link)\n", + " \n", + " # additional origin links\n", + " src = link['source']\n", + " path = re.split(r'[:/]',src)\n", + " for i in range(1,len(path)):\n", + " me = path[i-1]\n", + " n2 = dict(id=me,type='directory',origin=path[0])\n", + " nodes.append(n2)\n", + " l2= dict(source=path[i-1],target=path[i],predicate='_')\n", + " links.append(l2)\n", + " # dont forget the final node. \n", + " me = path[i]\n", + " n2 = dict(id=me,type='directory-path',origin=path[0])\n", + " nodes.append(n2)\n", + " # link up to original\n", + " l2= dict(source=path[i],target=src,predicate='_')\n", + " links.append(l2)\n", + " \n", + " except:\n", + " # skips out the blank nodes\n", + " print(t)\n", + " ...\n", + "directories = list(set(triplets.keys()))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n" + ] + } + ], + "source": [ + "# find missing and problem keys \n", + "missing = set(ids) - set(type_map.keys()) - set(directories) \n", + "print(len(missing))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import Counter\n", + "\n", + "nodeweights = Counter([i['id'] for i in nodes])\n", + "linkweights = Counter([f\"{i['source']} -> {i['target']}\" for i in links])\n", + "\n", + "for i in nodes:\n", + " i['weight'] = nodeweights[i['id']]\n", + " \n", + "for i in links: \n", + " i['weight'] = linkweights[f\"{i['source']} -> {i['target']}\"]\n", + "\n", + "\n", + "unodes = list(dict([(i['id'],i) for i in nodes]).values())\n", + "ulinks = list(dict([((i['source'],i['target'],i['predicate']),i) for i in links]).values())\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "tmap = dict([[v,clink(k)] for k,v in type_map.items()])" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'mip-cmor-tables:auxillary/frequency': 'frequency',\n", + " 'mip-cmor-tables:auxillary/mip-era': 'mip-era',\n", + " 'mip-cmor-tables:auxillary/native-nominal-resolution': 'native-nominal-resolution',\n", + " 'mip-cmor-tables:auxillary/product': 'product',\n", + " 'mip-cmor-tables:auxillary/realm': 'realm',\n", + " 'mip-cmor-tables:auxillary/source-type': 'source-type',\n", + " 'mip-cmor-tables:grid/label': 'grid-label',\n", + " 'mip-cmor-tables:license': 'license',\n", + " 'mip-cmor-tables:organisations/consortia': 'consortium',\n", + " 'mip-cmor-tables:organisations/institutions': 'institution',\n", + " 'mip-cmor-tables:organisations/institutions/location': 'institution:location',\n", + " 'cmip6plus:activity': 'activity-id',\n", + " 'cmip6plus:core': 'index',\n", + " 'cmip6plus:experiment/id': 'experiment-id',\n", + " 'cmip6plus:experiment/sub-id': 'sub-experiment-id',\n", + " 'cmip6plus:model/component': 'model-component',\n", + " 'cmip6plus:source/id': 'source-id'}" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# graphs = filter(lambda x: 'graph' in x['@type'],latest)\n", + "\n", + "# list(graphs)\n", + "\n", + "# since the types are defined by the vocab\n", + "id2vocab = {v: k.replace('mip:','') for k, v in tmap.items() if 'https' not in v}\n", + "\n", + "id2vocab" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "with open('network.json','w') as f:\n", + " json.dump(dict(nodes=unodes,links=ulinks,types=tmap,vocab=id2vocab),f,indent=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# import xml.etree.ElementTree as ET\n", + "\n", + "# # Create the root element for GraphML\n", + "# graphml = ET.Element('graphml', xmlns=\"http://graphml.graphdrawing.org/xmlns\")\n", + "# # Create the graph element\n", + "# graph = ET.SubElement(graphml, 'graph', id=\"G\", edgedefault=\"directed\")\n", + "\n", + "# # # Create a key element for edge data (predicate)\n", + "# # key = ET.SubElement(graphml, 'key', id=\"predicate\", for=\"edge\", attr.name=\"predicate\", attr.type=\"string\")\n", + "\n", + "\n", + "# for node in nodes:\n", + "# ET.SubElement(graph, 'node', **node)\n", + "\n", + "# # Add edges\n", + "# for entry in links:\n", + "\n", + "# edge = ET.SubElement(graph, 'edge', **entry)\n", + "# # Add predicate as edge data\n", + "# # data_element = ET.SubElement(edge, 'data', key=\"predicate\")\n", + "# # data_element.text = predicate\n", + "\n", + "# # Create an ElementTree object and write to a GraphML file\n", + "# tree = ET.ElementTree(graphml)\n", + "# tree.write('graph.graphml', xml_declaration=True, encoding='utf-8', method='xml')\n", + "\n", + "# print(\"GraphML file saved as 'graph.graphml'\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({'mip-cmor-tables:organisations/institutions -> mip-cmor-tables:organisations/institutions/location': 72,\n", + " 'mip-cmor-tables -> organisations': 72,\n", + " 'organisations -> institutions': 72,\n", + " 'institutions -> mip-cmor-tables:organisations/institutions': 72,\n", + " 'cmip6plus -> model': 58,\n", + " 'model -> component': 58,\n", + " 'component -> cmip6plus:model/component': 58,\n", + " 'cmip6plus -> experiment': 56,\n", + " 'experiment -> id': 56,\n", + " 'id -> cmip6plus:experiment/id': 56,\n", + " 'cmip6plus -> source': 54,\n", + " 'source -> id': 54,\n", + " 'id -> cmip6plus:source/id': 54,\n", + " 'cmip6plus:source/id -> cmip6plus:model/component': 36,\n", + " 'cmip6plus:model/component -> mip-cmor-tables:auxillary/native-nominal-resolution': 29,\n", + " 'cmip6plus:model/component -> mip-cmor-tables:auxillary/realm': 29,\n", + " 'cmip6plus:experiment/id -> cmip6plus:activity': 28,\n", + " 'cmip6plus:experiment/id -> cmip6plus:experiment/sub-id': 28,\n", + " 'cmip6plus:source/id -> cmip6plus:activity': 12,\n", + " 'mip-cmor-tables:auxillary/native-nominal-resolution -> ': 6,\n", + " 'mip-cmor-tables -> auxillary': 6,\n", + " 'auxillary -> native-nominal-resolution': 6,\n", + " 'native-nominal-resolution -> mip-cmor-tables:auxillary/native-nominal-resolution': 6,\n", + " 'cmip6plus -> core': 4,\n", + " 'core -> cmip6plus:core': 4,\n", + " 'cmip6plus:source/id -> mip-cmor-tables:organisations/institutions': 4,\n", + " 'cmip6plus:core -> cmip6plus:core': 2,\n", + " 'cmip6plus:source/id -> mip-cmor-tables:organisations/consortia': 2,\n", + " 'cmip6plus:core -> mip-cmor-tables:auxillary/mip-era': 1,\n", + " 'cmip6plus:core -> mip-cmor-tables:auxillary/product': 1})" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linkweights" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/license\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"license:\", \"@base\": \"https://github.com/PCMDI/mip-cmor-tables\"}, \"ldroot\": \"/JSONLD/license\", \"@graph\": [{\"@id\": \"mip-cmor-tables:license/cc0-1.0\", \"@type\": \"mip:license\", \"license:conditions\": \"The CMIP6Plus model data linking to this entry is licensed under a Creative Commons CC0 1.0 Universal Public Domain Dedication (https://creativecommons.org/publicdomain/zero/1.0/). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6Plus output, including citation requirements and proper acknowledgment. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.\", \"license:kind\": \"CC0 1.0\", \"license:license_id\": \"Creative Commons CC0 1.0 Universal Public Domain Dedication\", \"license:license_url\": \"https://creativecommons.org/publicdomain/zero/1.0/\"}, {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\", \"@type\": \"mip:license\", \"license:conditions\": \"The CMIP6Plus model data linking to this entry is licensed under a Creative Commons Attribution 4.0 International (https://creativecommons.org/licenses/by/4.0/). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6Plus output, including citation requirements and proper acknowledgment. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.\", \"license:kind\": \"CC BY 4.0\", \"license:license_id\": \"Creative Commons Attribution 4.0 International\", \"license:license_url\": \"https://creativecommons.org/licenses/by/4.0/\"}, {\"@id\": \"mip-cmor-tables:license/cc-by-sa-4.0\", \"@type\": \"mip:license\", \"license:conditions\": \"The CMIP6Plus model data linking to this entry is licensed under a Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6Plus output, including citation requirements and proper acknowledgment. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.\", \"license:kind\": \"CC BY-SA 4.0\", \"license:license_id\": \"Creative Commons Attribution-ShareAlike 4.0 International\", \"license:license_url\": \"https://creativecommons.org/licenses/by-sa/4.0/\"}, {\"@id\": \"mip-cmor-tables:license/cc-by-nc-sa-4.0\", \"@type\": \"mip:license\", \"license:conditions\": \"The CMIP6Plus model data linking to this entry is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-nc-sa/4.0/). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6Plus output, including citation requirements and proper acknowledgment. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.\", \"license:kind\": \"CC BY-NC-SA 4.0\", \"license:license_id\": \"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International\", \"license:license_url\": \"https://creativecommons.org/licenses/by-nc-sa/4.0/\"}], \"files\": [\"cc-by-4.0.json\", \"cc0-1.0.json\", \"cc-by-nc-sa-4.0.json\", \"cc-by-sa-4.0.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations/institutions\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"institution:\", \"location\": {\"@context\": {\"@vocab\": \"\"}}}, \"ldroot\": \"/JSONLD/organisations/institutions\", \"@graph\": [{\"@id\": \"mip-cmor-tables:organisations/institutions/bcc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"BCC\", \"institution:established\": 2008, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01spyyb53\", \"@nest\": {\"city\": \"Beijing\", \"country\": [\"China\", \"CN\"], \"lat\": 39.950128, \"lon\": 116.383679}, \"@type\": \"location\"}, \"institution:name\": \"Beijing Biocytogen (China)\", \"institution:ror\": \"01spyyb53\", \"institution:type\": \"Company\", \"institution:url\": [\"http://www.bbctg.com.cn/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ntu\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NTU\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NTU\", \"institution:established\": 1928, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05bqach95\", \"@nest\": {\"city\": \"Taipei\", \"country\": [\"Taiwan\", \"TW\"], \"lat\": 25.016, \"lon\": 121.536}, \"@type\": \"location\"}, \"institution:name\": \"National Taiwan University\", \"institution:ror\": \"05bqach95\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.ntu.edu.tw/english/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ua\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UA\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UA\", \"institution:established\": 1885, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03m2x1q45\", \"@nest\": {\"city\": \"Tucson\", \"country\": [\"United States\", \"US\"], \"lat\": 32.22174, \"lon\": -110.92648}, \"@type\": \"location\"}, \"institution:name\": \"University of Arizona\", \"institution:ror\": \"03m2x1q45\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.arizona.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/mohc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [\"Meteorological Office\"], \"institution:cmip-acronym\": \"MOHC\", \"institution:established\": 1854, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01ch2yn61\", \"@nest\": {\"city\": \"Exeter\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 50.7236, \"lon\": 50.7236}, \"@type\": \"location\"}, \"institution:name\": \"Met Office\", \"institution:ror\": \"01ch2yn61\", \"institution:type\": \"Government\", \"institution:url\": [\"http://www.metoffice.gov.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nasa-gsfc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"GSFC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NASA-GSFC\", \"institution:established\": 1959, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/0171mag52\", \"@nest\": {\"city\": \"Greenbelt\", \"country\": [\"United States\", \"US\"], \"lat\": 39.00455, \"lon\": -76.87553}, \"@type\": \"location\"}, \"institution:name\": \"Goddard Space Flight Center\", \"institution:ror\": \"0171mag52\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.nasa.gov/centers/goddard/home/index.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nuist\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NU\", \"NJU \"], \"institution:aliases\": [\"Nanking University\"], \"institution:cmip-acronym\": \"NUIST\", \"institution:established\": 1902, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01rxvg760\", \"@nest\": {\"city\": \"Nanjing\", \"country\": [\"China\", \"CN\"], \"lat\": 32.056111, \"lon\": 118.775}, \"@type\": \"location\"}, \"institution:name\": \"Nanjing University\", \"institution:ror\": \"01rxvg760\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.nju.edu.cn/english/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/mpi-m\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"MPI-M\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"MPI-M\", \"institution:established\": 1975, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05esem239\", \"@nest\": {\"city\": \"Hamburg\", \"country\": [\"Germany\", \"DE\"], \"lat\": 53.567794, \"lon\": 9.975468}, \"@type\": \"location\"}, \"institution:name\": \"Max Planck Institute for Meteorology\", \"institution:ror\": \"05esem239\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.mpimet.mpg.de/en/home.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cas\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CAS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CAS\", \"institution:established\": 1949, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/034t30j35\", \"@nest\": {\"city\": \"Beijing\", \"country\": [\"China\", \"CN\"], \"lat\": 39.9075, \"lon\": 116.39723}, \"@type\": \"location\"}, \"institution:name\": \"Chinese Academy of Sciences\", \"institution:ror\": \"034t30j35\", \"institution:type\": \"Government\", \"institution:url\": [\"http://english.cas.cn/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uootago\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UoOtago\", \"institution:established\": 1869, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01jmxt844\", \"@nest\": {\"city\": \"Dunedin\", \"country\": [\"New Zealand\", \"NZ\"], \"lat\": -45.87416, \"lon\": -45.87416}, \"@type\": \"location\"}, \"institution:name\": \"University of Otago\", \"institution:ror\": \"01jmxt844\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.otago.ac.nz/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/pmod\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"PMOD\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"PMOD\", \"institution:established\": 1907, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02gtrqv93\", \"@nest\": {\"city\": \"Davos\", \"country\": [\"Switzerland\", \"CH\"], \"lat\": 46.8133161, \"lon\": 46.8133161}, \"@type\": \"location\"}, \"institution:name\": \"Physikalisch-Meteorologisches Observatorium Davos\", \"institution:ror\": \"02gtrqv93\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.pmodwrc.ch/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/aer\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"AER\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"AER\", \"institution:established\": 1977, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04cg70g73\", \"@nest\": {\"city\": \"Lexington\", \"country\": [\"United States\", \"US\"], \"lat\": 42.539472, \"lon\": -71.256946}, \"@type\": \"location\"}, \"institution:name\": \"Atmospheric and Environmental Research\", \"institution:ror\": \"04cg70g73\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.aer.com/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cccma\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"ECCC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CCCma\", \"institution:established\": 1971, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/026ny0e17\", \"@nest\": {\"city\": \"Gatineau\", \"country\": [\"Canada\", \"CA\"], \"lat\": 45.425373, \"lon\": -75.699862}, \"@type\": \"location\"}, \"institution:name\": \"Environment and Climate Change Canada\", \"institution:ror\": \"026ny0e17\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.canada.ca/en/environment-climate-change.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cnes\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CNES\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CNES\", \"institution:established\": 1961, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04h1h0y33\", \"@nest\": {\"city\": \"Paris\", \"country\": [\"France\", \"FR\"], \"lat\": 48.85341, \"lon\": 2.3488}, \"@type\": \"location\"}, \"institution:name\": \"Centre National d'\\u00c9tudes Spatiales\", \"institution:ror\": \"04h1h0y33\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.cnes.fr\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cmcc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CMCC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CMCC\", \"institution:established\": 2005, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01tf11a61\", \"@nest\": {\"city\": \"Lecce\", \"country\": [\"Italy\", \"IT\"], \"lat\": 40.33942, \"lon\": 18.086602}, \"@type\": \"location\"}, \"institution:name\": \"Euro-Mediterranean Center for Climate Change\", \"institution:ror\": \"01tf11a61\", \"institution:type\": \"Nonprofit\", \"institution:url\": [\"http://www.cmcc.it/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uofmd\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UMD\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UofMD\", \"institution:established\": 1856, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/047s2c258\", \"@nest\": {\"city\": \"College Park\", \"country\": [\"United States\", \"US\"], \"lat\": 38.98067, \"lon\": -76.93692}, \"@type\": \"location\"}, \"institution:name\": \"University of Maryland, College Park\", \"institution:ror\": \"047s2c258\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.umd.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/rss\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"RSS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"RSS\", \"institution:established\": 1974, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01vp8h012\", \"@nest\": {\"city\": \"Santa Rosa\", \"country\": [\"United States\", \"US\"], \"lat\": 38.443733, \"lon\": -122.717185}, \"@type\": \"location\"}, \"institution:name\": \"Remote Sensing Systems (United States)\", \"institution:ror\": \"01vp8h012\", \"institution:type\": \"Company\", \"institution:url\": [\"http://www.remss.com/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/mri\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"JMA\"], \"institution:aliases\": [\"Kish\\u014d-ch\\u014d\"], \"institution:cmip-acronym\": \"MRI\", \"institution:established\": 1956, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02772kk97\", \"@nest\": {\"city\": \"Tokyo\", \"country\": [\"Japan\", \"JP\"], \"lat\": 35.6895, \"lon\": 139.69171}, \"@type\": \"location\"}, \"institution:name\": \"Japan Meteorological Agency\", \"institution:ror\": \"02772kk97\", \"institution:type\": \"Other\", \"institution:url\": [\"http://www.jma.go.jp/jma/indexe.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/csiro\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CSIRO\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CSIRO\", \"institution:established\": 1926, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03qn8fb07\", \"@nest\": {\"city\": \"Canberra\", \"country\": [\"Australia\", \"AU\"], \"lat\": -35.28346, \"lon\": 149.12807}, \"@type\": \"location\"}, \"institution:name\": \"Commonwealth Scientific and Industrial Research Organisation\", \"institution:ror\": \"03qn8fb07\", \"institution:type\": \"Government\", \"institution:url\": [\"http://www.csiro.au/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/llnl\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"LLNL\", \"LLL\"], \"institution:aliases\": [\"United States Department of Energy National Nuclear Security Administration Lawrence Livermore National Laboratory\", \"U.S. Department of Energy National Nuclear Security Administration Los Alamos National Laboratory\", \"United States Department of Energy Los Alamos National Laboratory\", \"U.S. Department of Energy Los Alamos National Laboratory\"], \"institution:cmip-acronym\": \"LLNL\", \"institution:established\": 1952, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/041nk4h53\", \"@nest\": {\"city\": \"Livermore\", \"country\": [\"United States\", \"US\"], \"lat\": 37.68187, \"lon\": -121.76801}, \"@type\": \"location\"}, \"institution:name\": \"Lawrence Livermore National Laboratory\", \"institution:ror\": \"041nk4h53\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.llnl.gov/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ncar\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NCAR\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NCAR\", \"institution:established\": 1930, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05cvfcr44\", \"@nest\": {\"city\": \"Boulder\", \"country\": [\"United States\", \"US\"], \"lat\": 40.01499, \"lon\": 40.01499}, \"@type\": \"location\"}, \"institution:name\": \"National Center for Atmospheric Research\", \"institution:ror\": \"05cvfcr44\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://ncar.ucar.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/thu\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"THU\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"THU\", \"institution:established\": 1911, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03cve4549\", \"@nest\": {\"city\": \"Beijing\", \"country\": [\"China\", \"CN\"], \"lat\": 39.999585, \"lon\": 116.325414}, \"@type\": \"location\"}, \"institution:name\": \"Tsinghua University\", \"institution:ror\": \"03cve4549\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.tsinghua.edu.cn/publish/newthuen/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nerc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NERC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NERC\", \"institution:established\": 1965, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02b5d8509\", \"@nest\": {\"city\": \"Swindon\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 51.55797, \"lon\": -1.78116}, \"@type\": \"location\"}, \"institution:name\": \"Natural Environment Research Council\", \"institution:ror\": \"02b5d8509\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.ukri.org/councils/nerc/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/dkrz\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"DKRZ\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"DKRZ\", \"institution:established\": 1987, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03ztgj037\", \"@nest\": {\"city\": \"Hamburg\", \"country\": [\"Germany\", \"DE\"], \"lat\": 53.55073, \"lon\": 9.99302}, \"@type\": \"location\"}, \"institution:name\": \"German Climate Computing Centre\", \"institution:ror\": \"03ztgj037\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.dkrz.de/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/iaceth\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [\"Swiss Federal Institute of Technology in Zurich\", \"Eidgen\\u00f6ssische Technische Hochschule Z\\u00fcrich\", \"\\u00c9cole Polytechnique F\\u00e9d\\u00e9rale de Zurich\", \"Politecnico Federale di Zurigo\"], \"institution:cmip-acronym\": \"IACETH\", \"institution:established\": 1855, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05a28rw58\", \"@nest\": {\"city\": \"Zurich\", \"country\": [\"Switzerland\", \"CH\"], \"lat\": 47.36667, \"lon\": 8.55}, \"@type\": \"location\"}, \"institution:name\": \"ETH Zurich\", \"institution:ror\": \"05a28rw58\", \"institution:type\": \"Education\", \"institution:url\": [\"https://ethz.ch\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/pnnl-waccem\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"PNNL\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"PNNL-WACCEM\", \"institution:established\": 1965, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05h992307\", \"@nest\": {\"city\": \"Richland\", \"country\": [\"United States\", \"US\"], \"lat\": 46.28569, \"lon\": -119.28446}, \"@type\": \"location\"}, \"institution:name\": \"Pacific Northwest National Laboratory\", \"institution:ror\": \"05h992307\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.pnnl.gov/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ifm-geomar\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"IFM-GEOMAR\"], \"institution:aliases\": [\"Leibniz Institute of Marine Sciences\"], \"institution:cmip-acronym\": \"IFM-GEOMAR\", \"institution:established\": 2004, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02h2x0161\", \"@nest\": {\"city\": \"Kiel\", \"country\": [\"Germany\", \"DE\"], \"lat\": 54.327138, \"lon\": 10.180141}, \"@type\": \"location\"}, \"institution:name\": \"GEOMAR Helmholtz Centre for Ocean Research Kiel\", \"institution:ror\": \"02h2x0161\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.geomar.de/en/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uhh\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UHH\"], \"institution:aliases\": [\"University of Hamburg\"], \"institution:cmip-acronym\": \"UHH\", \"institution:established\": 1919, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00g30e956\", \"@nest\": {\"city\": \"Hamburg\", \"country\": [\"Germany\", \"DE\"], \"lat\": 53.55073, \"lon\": 9.99302}, \"@type\": \"location\"}, \"institution:name\": \"Universit\\u00e4t Hamburg\", \"institution:ror\": \"00g30e956\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.uni-hamburg.de\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/esso\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"INCOIS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"ESSO\", \"institution:established\": 1999, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04xbqmj23\", \"@nest\": {\"city\": \"Hyderabad\", \"country\": [\"India\", \"IN\"], \"lat\": 17.528234, \"lon\": 78.400195}, \"@type\": \"location\"}, \"institution:name\": \"Indian National Centre for Ocean Information Services\", \"institution:ror\": \"04xbqmj23\", \"institution:type\": \"Government\", \"institution:url\": [\"http://www.incois.gov.in/portal/index.jsp\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/noaa-ncei\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NCEI\", \"NOAA NCEI\"], \"institution:aliases\": [\"National Climatic Data Center\", \"United States National Environmental Satellites, Data, and Information Service National Centers for Environmental Information\", \"United States National Centers for Environmental Information\", \"U.S. National Centers for Environmental Information\", \"National Centers for Environmental Information\"], \"institution:cmip-acronym\": \"NOAA-NCEI\", \"institution:established\": 1934, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04r0wrp59\", \"@nest\": {\"city\": \"Asheville\", \"country\": [\"United States\", \"US\"], \"lat\": 35.60095, \"lon\": -82.55402}, \"@type\": \"location\"}, \"institution:name\": \"NOAA National Centers for Environmental Information\", \"institution:ror\": \"04r0wrp59\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.ncei.noaa.gov\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cams\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CAMS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CAMS\", \"institution:established\": 1978, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/034b53w38\", \"@nest\": {\"city\": \"Beijing\", \"country\": [\"China\", \"CN\"], \"lat\": 39.9075, \"lon\": 116.39723}, \"@type\": \"location\"}, \"institution:name\": \"Chinese Academy of Meteorological Sciences\", \"institution:ror\": \"034b53w38\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.camscma.cn/en.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/awi\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"AWI\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"AWI\", \"institution:established\": 1980, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/032e6b942\", \"@nest\": {\"city\": \"Bremerhaven\", \"country\": [\"Germany\", \"DE\"], \"lat\": 53.53615, \"lon\": 8.59298}, \"@type\": \"location\"}, \"institution:name\": \"Alfred Wegener Institute for Polar and Marine Research\", \"institution:ror\": \"032e6b942\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.awi.de\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ncas\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NCAS\", \"institution:established\": 1997, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03q36cn05\", \"@nest\": {\"city\": \"Islamabad\", \"country\": [\"Pakistan\", \"PK\"], \"lat\": 33.72148, \"lon\": 73.04329}, \"@type\": \"location\"}, \"institution:name\": \"Uks\", \"institution:ror\": \"03q36cn05\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.uksresearch.com/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/fuberlin\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"FU\"], \"institution:aliases\": [\"FU Berlin\", \"Free University of Berlin\"], \"institution:cmip-acronym\": \"FUBerlin\", \"institution:established\": 1948, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/046ak2485\", \"@nest\": {\"city\": \"Berlin\", \"country\": [\"Germany\", \"DE\"], \"lat\": 52.52437, \"lon\": 52.52437}, \"@type\": \"location\"}, \"institution:name\": \"Freie Universit\\u00e4t Berlin\", \"institution:ror\": \"046ak2485\", \"institution:type\": \"Education\", \"institution:url\": [\"https://www.fu-berlin.de\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ecmwf\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"ECMWF\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"ECMWF\", \"institution:established\": 1975, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/014w0fd65\", \"@nest\": {\"city\": \"Reading\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 51.45625, \"lon\": -0.97113}, \"@type\": \"location\"}, \"institution:name\": \"European Centre for Medium-Range Weather Forecasts\", \"institution:ror\": \"014w0fd65\", \"institution:type\": \"Other\", \"institution:url\": [\"http://www.ecmwf.int/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/pcmdi\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"LLNL\", \"LLL\"], \"institution:aliases\": [\"United States Department of Energy National Nuclear Security Administration Lawrence Livermore National Laboratory\", \"U.S. Department of Energy National Nuclear Security Administration Los Alamos National Laboratory\", \"United States Department of Energy Los Alamos National Laboratory\", \"U.S. Department of Energy Los Alamos National Laboratory\"], \"institution:cmip-acronym\": \"PCMDI\", \"institution:established\": 1952, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/041nk4h53\", \"@nest\": {\"city\": \"Livermore\", \"country\": [\"United States\", \"US\"], \"lat\": 37.68187, \"lon\": -121.76801}, \"@type\": \"location\"}, \"institution:name\": \"Lawrence Livermore National Laboratory\", \"institution:ror\": \"041nk4h53\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.llnl.gov/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/auot\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [\"Aristotelian University\"], \"institution:cmip-acronym\": \"AUoT\", \"institution:established\": 1925, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02j61yw88\", \"@nest\": {\"city\": \"Thessaloniki\", \"country\": [\"Greece\", \"GR\"], \"lat\": 40.64361, \"lon\": 40.64361}, \"@type\": \"location\"}, \"institution:name\": \"Aristotle University of Thessaloniki\", \"institution:ror\": \"02j61yw88\", \"institution:type\": \"Education\", \"institution:url\": [\"https://www.auth.gr/en\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nasa-giss\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"GISS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NASA-GISS\", \"institution:established\": 1961, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01cyfxe35\", \"@nest\": {\"city\": \"New York\", \"country\": [\"United States\", \"US\"], \"lat\": 40.71427, \"lon\": -74.00597}, \"@type\": \"location\"}, \"institution:name\": \"Goddard Institute for Space Studies\", \"institution:ror\": \"01cyfxe35\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.giss.nasa.gov/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/imperialcollege\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"ImperialCollege\", \"institution:established\": 1907, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/041kmwe10\", \"@nest\": {\"city\": \"London\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 51.4986, \"lon\": -0.175478}, \"@type\": \"location\"}, \"institution:name\": \"Imperial College London\", \"institution:ror\": \"041kmwe10\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.imperial.ac.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/vua\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"VU\"], \"institution:aliases\": [\"VU Amsterdam\"], \"institution:cmip-acronym\": \"VUA\", \"institution:established\": 1880, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/008xxew50\", \"@nest\": {\"city\": \"Amsterdam\", \"country\": [\"Netherlands\", \"NL\"], \"lat\": 52.37403, \"lon\": 4.88969}, \"@type\": \"location\"}, \"institution:name\": \"Vrije Universiteit Amsterdam\", \"institution:ror\": \"008xxew50\", \"institution:type\": \"Education\", \"institution:url\": [\"https://vu.nl/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uooulu\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UoOulu\", \"institution:established\": 1958, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03yj89h83\", \"@nest\": {\"city\": \"Oulu\", \"country\": [\"Finland\", \"FI\"], \"lat\": 65.01236, \"lon\": 65.01236}, \"@type\": \"location\"}, \"institution:name\": \"University of Oulu\", \"institution:ror\": \"03yj89h83\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.oulu.fi/english/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/dwd\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"DWD\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"DWD\", \"institution:established\": 1952, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02nrqs528\", \"@nest\": {\"city\": \"Offenbach\", \"country\": [\"Germany\", \"DE\"], \"lat\": 50.103322, \"lon\": 8.747606}, \"@type\": \"location\"}, \"institution:name\": \"German Meteorological Service\", \"institution:ror\": \"02nrqs528\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.dwd.de/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ucolorado\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CU\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UColorado\", \"institution:established\": 1876, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00jc20583\", \"@nest\": {\"city\": \"Boulder\", \"country\": [\"United States\", \"US\"], \"lat\": 40.01499, \"lon\": -105.27055}, \"@type\": \"location\"}, \"institution:name\": \"University of Colorado System\", \"institution:ror\": \"00jc20583\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.cu.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/cccr-iitm\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"IITM\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CCCR-IITM\", \"institution:established\": 1962, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03jf2m686\", \"@nest\": {\"city\": \"Pune\", \"country\": [\"India\", \"IN\"], \"lat\": 18.51957, \"lon\": 73.85535}, \"@type\": \"location\"}, \"institution:name\": \"Indian Institute of Tropical Meteorology\", \"institution:ror\": \"03jf2m686\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.tropmet.res.in/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/kiost\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"KIOST\"], \"institution:aliases\": [\"Korean Ocean Research and Development Institute\"], \"institution:cmip-acronym\": \"KIOST\", \"institution:established\": 1973, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/032m55064\", \"@nest\": {\"city\": \"Busan\", \"country\": [\"South Korea\", \"KR\"], \"lat\": 35.10168, \"lon\": 129.03004}, \"@type\": \"location\"}, \"institution:name\": \"Korea Institute of Ocean Science and Technology\", \"institution:ror\": \"032m55064\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://eng.kiost.ac/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/bas\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"BAS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"BAS\", \"institution:established\": 1962, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01rhff309\", \"@nest\": {\"city\": \"Cambridge\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 52.212965, \"lon\": 52.212965}, \"@type\": \"location\"}, \"institution:name\": \"British Antarctic Survey\", \"institution:ror\": \"01rhff309\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.bas.ac.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uom\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [\"Melbourne University\"], \"institution:cmip-acronym\": \"UoM\", \"institution:established\": 1853, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01ej9dk98\", \"@nest\": {\"city\": \"Melbourne\", \"country\": [\"Australia\", \"AU\"], \"lat\": -37.814, \"lon\": 144.96332}, \"@type\": \"location\"}, \"institution:name\": \"University of Melbourne\", \"institution:ror\": \"01ej9dk98\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.unimelb.edu.au/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/pnnl-jgcri\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"JGCRI\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"PNNL-JGCRI\", \"institution:established\": 2001, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/058cmd703\", \"@nest\": {\"city\": \"Riverdale Park\", \"country\": [\"United States\", \"US\"], \"lat\": 38.971106, \"lon\": -76.9217851}, \"@type\": \"location\"}, \"institution:name\": \"Joint Global Change Research Institute\", \"institution:ror\": \"058cmd703\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.globalchange.umd.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/snu\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"SNU\"], \"institution:aliases\": [\"Seoul Daehakgyo\"], \"institution:cmip-acronym\": \"SNU\", \"institution:established\": 1946, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04h9pn542\", \"@nest\": {\"city\": \"Seoul\", \"country\": [\"South Korea\", \"KR\"], \"lat\": 37.460155, \"lon\": 126.951894}, \"@type\": \"location\"}, \"institution:name\": \"Seoul National University\", \"institution:ror\": \"04h9pn542\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.snu.ac.kr/index.html\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/inm\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"INM RAS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"INM\", \"institution:established\": 1980, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00520ey40\", \"@nest\": {\"city\": \"Moscow\", \"country\": [\"Russia\", \"RU\"], \"lat\": 55.762997, \"lon\": 37.625605}, \"@type\": \"location\"}, \"institution:name\": \"Institute of Numerical Mathematics\", \"institution:ror\": \"00520ey40\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.inm.ras.ru/inm_en_ver/index.htm\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/aor\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"AoR\", \"institution:established\": 1938, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02hnp4676\", \"@nest\": {\"city\": \"Rome\", \"country\": [\"Italy\", \"IT\"], \"lat\": 41.921669, \"lon\": 41.921669}, \"@type\": \"location\"}, \"institution:name\": \"Astronomical Observatory of Rome\", \"institution:ror\": \"02hnp4676\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://web.oa-roma.inaf.it/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nasa-larc\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"LaRC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"NASA-LaRC\", \"institution:established\": 1917, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/0399mhs52\", \"@nest\": {\"city\": \"Hampton\", \"country\": [\"United States\", \"US\"], \"lat\": 37.02987, \"lon\": -76.34522}, \"@type\": \"location\"}, \"institution:name\": \"Langley Research Center\", \"institution:ror\": \"0399mhs52\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.nasa.gov/langley\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/mps\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"MPS\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"MPS\", \"institution:established\": 1934, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02j6gm739\", \"@nest\": {\"city\": \"G\\u00f6ttingen\", \"country\": [\"Germany\", \"DE\"], \"lat\": 51.561218, \"lon\": 51.561218}, \"@type\": \"location\"}, \"institution:name\": \"Max Planck Institute for Solar System Research\", \"institution:ror\": \"02j6gm739\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.mps.mpg.de/en\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/eawag\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"EAWAG\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"EAWAG\", \"institution:established\": 1936, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00pc48d59\", \"@nest\": {\"city\": \"D\\u00fcbendorf\", \"country\": [\"Switzerland\", \"CH\"], \"lat\": 47.39724, \"lon\": 47.39724}, \"@type\": \"location\"}, \"institution:name\": \"Swiss Federal Institute of Aquatic Science and Technology\", \"institution:ror\": \"00pc48d59\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.eawag.ch/en/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uomontreal\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UdeM\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UoMontreal\", \"institution:established\": 1878, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/0161xgx34\", \"@nest\": {\"city\": \"Montreal\", \"country\": [\"Canada\", \"CA\"], \"lat\": 45.50884, \"lon\": 45.50884}, \"@type\": \"location\"}, \"institution:name\": \"Universit\\u00e9 de Montr\\u00e9al\", \"institution:ror\": \"0161xgx34\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.umontreal.ca/english/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/nasa-jpl\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"JPL\"], \"institution:aliases\": [\"Jet Propulsion Lab\", \"Jet Propulsion Laboratory, California Institute of Technology\"], \"institution:cmip-acronym\": \"NASA-JPL\", \"institution:established\": 1936, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/027k65916\", \"@nest\": {\"city\": \"La Ca\\u00f1ada Flintridge\", \"country\": [\"United States\", \"US\"], \"lat\": 34.19917, \"lon\": -118.18785}, \"@type\": \"location\"}, \"institution:name\": \"Jet Propulsion Laboratory\", \"institution:ror\": \"027k65916\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.jpl.nasa.gov/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/as-rcec\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"RCEC\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"AS-RCEC\", \"institution:established\": 0, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/050qpg053\", \"@nest\": {\"city\": \"Taipei\", \"country\": [\"Taiwan\", \"TW\"], \"lat\": 25.040712, \"lon\": 121.614171}, \"@type\": \"location\"}, \"institution:name\": \"Research Center for Environmental Changes, Academia Sinica\", \"institution:ror\": \"050qpg053\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.rcec.sinica.edu.tw/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uci\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UCI\"], \"institution:aliases\": [\"UC Irvine\"], \"institution:cmip-acronym\": \"UCI\", \"institution:established\": 1965, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04gyf1771\", \"@nest\": {\"city\": \"Irvine\", \"country\": [\"United States\", \"US\"], \"lat\": 33.64535, \"lon\": -117.842642}, \"@type\": \"location\"}, \"institution:name\": \"University of California, Irvine\", \"institution:ror\": \"04gyf1771\", \"institution:type\": \"Education\", \"institution:url\": [\"http://uci.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/fmi\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"FMI\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"FMI\", \"institution:established\": 1838, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05hppb561\", \"@nest\": {\"city\": \"Helsinki\", \"country\": [\"Finland\", \"FI\"], \"lat\": 60.16952, \"lon\": 60.16952}, \"@type\": \"location\"}, \"institution:name\": \"Finnish Meteorological Institute\", \"institution:ror\": \"05hppb561\", \"institution:type\": \"Government\", \"institution:url\": [\"http://en.ilmatieteenlaitos.fi/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uobergen\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UiB\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UoBergen\", \"institution:established\": 1946, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/03zga2b32\", \"@nest\": {\"city\": \"Bergen\", \"country\": [\"Norway\", \"NO\"], \"lat\": 60.39299, \"lon\": 60.39299}, \"@type\": \"location\"}, \"institution:name\": \"University of Bergen\", \"institution:ror\": \"03zga2b32\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.uib.no/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ureading\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UReading\", \"institution:established\": 1926, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/05v62cm79\", \"@nest\": {\"city\": \"Reading\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 51.440832, \"lon\": -0.942503}, \"@type\": \"location\"}, \"institution:name\": \"University of Reading\", \"institution:ror\": \"05v62cm79\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.reading.ac.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/niwa\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"NIWA\"], \"institution:aliases\": [\"Taihoro Nukurangi\"], \"institution:cmip-acronym\": \"NIWA\", \"institution:established\": 1992, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04hxcaz34\", \"@nest\": {\"city\": \"Auckland\", \"country\": [\"New Zealand\", \"NZ\"], \"lat\": -36.84403, \"lon\": 174.76172}, \"@type\": \"location\"}, \"institution:name\": \"National Institute of Water and Atmospheric Research\", \"institution:ror\": \"04hxcaz34\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.niwa.co.nz/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/osu\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"OSU\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"OSU\", \"institution:established\": 1868, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00ysfqy60\", \"@nest\": {\"city\": \"Corvallis\", \"country\": [\"United States\", \"US\"], \"lat\": 44.56457, \"lon\": -123.26204}, \"@type\": \"location\"}, \"institution:name\": \"Oregon State University\", \"institution:ror\": \"00ysfqy60\", \"institution:type\": \"Education\", \"institution:url\": [\"http://oregonstate.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/issi\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"ISSI\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"ISSI\", \"institution:established\": 1995, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/01xm30661\", \"@nest\": {\"city\": \"Bern\", \"country\": [\"Switzerland\", \"CH\"], \"lat\": 46.952897, \"lon\": 46.952897}, \"@type\": \"location\"}, \"institution:name\": \"International Space Science Institute\", \"institution:ror\": \"01xm30661\", \"institution:type\": \"Nonprofit\", \"institution:url\": [\"http://www.issibern.ch/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/kit\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"KIT\"], \"institution:aliases\": [\"Karlsruhe Institute of Technology - The Research University in the Helmholtz Association\", \"Das Karlsruher Institut f\\u00fcr Technologie (KIT) \\u2013 Die Forschungsuniversit\\u00e4t in der Helmholtz-Gemeinschaft\"], \"institution:cmip-acronym\": \"KIT\", \"institution:established\": 2009, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04t3en479\", \"@nest\": {\"city\": \"Karlsruhe\", \"country\": [\"Germany\", \"DE\"], \"lat\": 49.00937, \"lon\": 49.00937}, \"@type\": \"location\"}, \"institution:name\": \"Karlsruhe Institute of Technology\", \"institution:ror\": \"04t3en479\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.kit.edu/english/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/mpi-b\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"MPI-B\", \"institution:established\": 1997, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/051yxp643\", \"@nest\": {\"city\": \"Jena\", \"country\": [\"Germany\", \"DE\"], \"lat\": 50.910556, \"lon\": 11.567222}, \"@type\": \"location\"}, \"institution:name\": \"Max Planck Institute for Biogeochemistry\", \"institution:ror\": \"051yxp643\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://www.bgc-jena.mpg.de/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uoleeds\", \"@type\": \"mip:institution\", \"institution:acronyms\": [], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UoLeeds\", \"institution:established\": 1904, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/024mrxd33\", \"@nest\": {\"city\": \"Leeds\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 53.79648, \"lon\": 53.79648}, \"@type\": \"location\"}, \"institution:name\": \"University of Leeds\", \"institution:ror\": \"024mrxd33\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.leeds.ac.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/jaxa\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"JAXA\"], \"institution:aliases\": [\"Dokuritsu-gy\\u014dsei-h\\u014djin Uch\\u016b K\\u014dk\\u016b Kenky\\u016b Kaihatsu Kik\\u014d\", \"Independent Administrative Institution on Aerospace Research and Development\"], \"institution:cmip-acronym\": \"JAXA\", \"institution:established\": 2003, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/059yhyy33\", \"@nest\": {\"city\": \"Tokyo\", \"country\": [\"Japan\", \"JP\"], \"lat\": 35.680834, \"lon\": 139.558269}, \"@type\": \"location\"}, \"institution:name\": \"Japan Aerospace Exploration Agency\", \"institution:ror\": \"059yhyy33\", \"institution:type\": \"Facility\", \"institution:url\": [\"http://global.jaxa.jp/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/lpc2e\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"LPC2E\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"LPC2E\", \"institution:established\": 2012, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/049k66y27\", \"@nest\": {\"city\": \"Orl\\u00e9ans\", \"country\": [\"France\", \"FR\"], \"lat\": 47.90289, \"lon\": 47.90289}, \"@type\": \"location\"}, \"institution:name\": \"Laboratoire de Physique et Chimie de l\\u2019Environnement et de l\\u2019Espace\", \"institution:ror\": \"049k66y27\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.lpc2e.cnrs.fr\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ceda\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"CEDA\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"CEDA\", \"institution:established\": 2005, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/04j4kad11\", \"@nest\": {\"city\": \"Harwell\", \"country\": [\"United Kingdom\", \"GB\"], \"lat\": 53.41667, \"lon\": -0.96667}, \"@type\": \"location\"}, \"institution:name\": \"Centre for Environmental Data Analysis\", \"institution:ror\": \"04j4kad11\", \"institution:type\": \"Government\", \"institution:url\": [\"https://www.ceda.ac.uk/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ipsl\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"IPSL\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"IPSL\", \"institution:established\": 1991, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02haar591\", \"@nest\": {\"city\": \"Paris\", \"country\": [\"France\", \"FR\"], \"lat\": 48.855675, \"lon\": 2.332105}, \"@type\": \"location\"}, \"institution:name\": \"Institut Pierre-Simon Laplace\", \"institution:ror\": \"02haar591\", \"institution:type\": \"Facility\", \"institution:url\": [\"https://www.ipsl.fr/en/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/ucsb\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UCSB\"], \"institution:aliases\": [\"UC Santa Barbara\"], \"institution:cmip-acronym\": \"UCSB\", \"institution:established\": 1891, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/02t274463\", \"@nest\": {\"city\": \"Santa Barbara\", \"country\": [\"United States\", \"US\"], \"lat\": 34.42083, \"lon\": -119.69819}, \"@type\": \"location\"}, \"institution:name\": \"University of California, Santa Barbara\", \"institution:ror\": \"02t274463\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.ucsb.edu/\"]}, {\"@id\": \"mip-cmor-tables:organisations/institutions/uw\", \"@type\": \"mip:institution\", \"institution:acronyms\": [\"UW\"], \"institution:aliases\": [], \"institution:cmip-acronym\": \"UW\", \"institution:established\": 1861, \"institution:labels\": [], \"institution:location\": {\"@id\": \"mip-cmor-tables:organisations/institutions/location/00cvxb145\", \"@nest\": {\"city\": \"Seattle\", \"country\": [\"United States\", \"US\"], \"lat\": 47.60621, \"lon\": -122.33207}, \"@type\": \"location\"}, \"institution:name\": \"University of Washington\", \"institution:ror\": \"00cvxb145\", \"institution:type\": \"Education\", \"institution:url\": [\"http://www.washington.edu/\"]}], \"files\": [\"bcc.json\", \"ua.json\", \"ntu.json\", \"uootago.json\", \"nasa-gsfc.json\", \"cccma.json\", \"cnes.json\", \"mpi-m.json\", \"pmod.json\", \"nuist.json\", \"aer.json\", \"mohc.json\", \"cas.json\", \"cmcc.json\", \"uofmd.json\", \"dkrz.json\", \"noaa-ncei.json\", \"mri.json\", \"pnnl-waccem.json\", \"llnl.json\", \"nerc.json\", \"iaceth.json\", \"rss.json\", \"ncar.json\", \"csiro.json\", \"ifm-geomar.json\", \"esso.json\", \"thu.json\", \"uhh.json\", \"awi.json\", \"fuberlin.json\", \"cams.json\", \"ecmwf.json\", \"imperialcollege.json\", \"pcmdi.json\", \"vua.json\", \"ncas.json\", \"uooulu.json\", \"auot.json\", \"nasa-giss.json\", \"dwd.json\", \"uom.json\", \"kiost.json\", \"ucolorado.json\", \"cccr-iitm.json\", \"uomontreal.json\", \"nasa-larc.json\", \"snu.json\", \"eawag.json\", \"inm.json\", \"bas.json\", \"pnnl-jgcri.json\", \"aor.json\", \"mps.json\", \"fmi.json\", \"ureading.json\", \"uobergen.json\", \"nasa-jpl.json\", \"as-rcec.json\", \"niwa.json\", \"uoleeds.json\", \"uci.json\", \"kit.json\", \"osu.json\", \"mpi-b.json\", \"issi.json\", \"jaxa.json\", \"uw.json\", \"lpc2e.json\", \"ucsb.json\", \"ceda.json\", \"ipsl.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations/consortia\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"consortium:\", \"consortium:members\": {\"@context\": {\"@vocab\": \"institution:\", \"location\": {\"@context\": {\"@vocab\": \"location:\"}}}}}, \"ldroot\": \"/JSONLD/organisations/consortia\", \"@graph\": [{\"@id\": \"mip-cmor-tables:organisations/consortia/solaris-heppa\", \"@type\": \"mip:consortium\", \"consortium:changes\": \"\", \"consortium:cmip-acronym\": \"SOLARIS HEPPA\", \"consortium:members\": [{\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/auot\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/aor\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/bas\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/eawag\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/fmi\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/fuberlin\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/geomar\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/gsfc\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/iaa-csic\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/issi\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/kit\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/lasp\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/lpc2e\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/mohc\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/mps\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/ncar\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/pmod\"}, \"membership-type\": \"current\"}, {\"@tyconsortia:pe\": \"member\", \"dates\": [{\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uobergen\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uoleeds\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uomontreal\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2013, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\"}, \"to\": 2022}, {\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uootago\"}, \"membership-type\": \"current\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2025, \"phase\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\"}, \"to\": \"-\"}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uooulu\"}, \"membership-type\": \"current\"}], \"consortium:name\": \"SOLARIS HEPPA Consortium\", \"consortium:url\": \"https://solarisheppa.geomar.de\"}, {\"@id\": \"mip-cmor-tables:organisations/consortia/miroc\", \"@type\": \"mip:consortium\", \"consortium:changes\": \"\", \"consortium:cmip-acronym\": \"MIROC\", \"consortium:members\": [{\"@type\": \"consortia:member\", \"consortia:membership-type\": \"prior\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/jamstec\"}}, {\"@type\": \"consortia:member\", \"consortia:membership-type\": \"prior\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/aori\"}}, {\"@type\": \"consortia:member\", \"consortia:membership-type\": \"prior\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/nies\"}}, {\"@type\": \"consortia:member\", \"consortia:membership-type\": \"prior\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/r-ccs\"}}], \"consortium:name\": \"MIROC Consortium\", \"consortium:status\": \"active\", \"consortium:url\": \"\"}, {\"@id\": \"mip-cmor-tables:organisations/consortia/ncc\", \"@type\": \"mip:consortium\", \"consortium:changes\": \"\", \"consortium:cmip-acronym\": \"NCC\", \"consortium:members\": [{\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/noresm\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/met-norway\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/nersc\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/nilu\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uib\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uio\"}, \"membership-type\": \"prior\"}, {\"@type\": \"consortia:member\", \"dates\": [{\"from\": 2016, \"phase\": \"CMIP6\", \"to\": 2022}], \"institution\": {\"@id\": \"mip-cmor-tables:organisations/institutions/uni\"}, \"membership-type\": \"prior\"}], \"consortium:name\": \"NCC Consortium\", \"consortium:status\": \"active\", \"consortium:url\": \"\"}], \"files\": [\"ncc.json\", \"miroc.json\", \"solaris-heppa.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/mip-era\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"mip:\"}, \"ldroot\": \"/JSONLD/auxillary/mip-era\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip7\", \"@type\": \"mip:mip-era\", \"mip:end\": 2999, \"mip:name\": \"CMIP7\", \"mip:start\": 2025, \"mip:url\": \"https://wcrp-cmip.org/CMIP7\"}, {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip5\", \"@type\": \"mip:mip-era\", \"mip:end\": 2999, \"mip:name\": \"CMIP5\", \"mip:start\": 2999, \"mip:url\": \"https://wcrp-cmip.org/CMIP5\"}, {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6\", \"@type\": \"mip:mip-era\", \"mip:end\": 2024, \"mip:name\": \"CMIP6\", \"mip:start\": 2013, \"mip:url\": \"https://wcrp-cmip.org/CMIP6\"}, {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6plus\", \"@type\": \"mip:mip-era\", \"mip:end\": 2999, \"mip:name\": \"CMIP6Plus\", \"mip:start\": 2023, \"mip:url\": \"https://wcrp-cmip.org/CMIP6Plus\"}], \"files\": [\"cmip5.json\", \"cmip6plus.json\", \"cmip7.json\", \"cmip6.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/source-type\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"source-type:\"}, \"ldroot\": \"/JSONLD/auxillary/source-type\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\", \"@type\": \"mip:source-type\", \"source-type:description\": \"chemistry treatment in an atmospheric model that calculates atmospheric oxidant concentrations (including at least ozone), rather than prescribing them\", \"source-type:name\": \"CHEM\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/ogcm\", \"@type\": \"mip:source-type\", \"source-type:description\": \"ocean general circulation model run uncoupled from an AGCM but, usually including a sea-ice model\", \"source-type:name\": \"OGCM\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\", \"@type\": \"mip:source-type\", \"source-type:description\": \"aerosol treatment in an atmospheric model where concentrations are calculated based on emissions, transformation, and removal processes (rather than being prescribed or omitted entirely)\", \"source-type:name\": \"AER\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\", \"@type\": \"mip:source-type\", \"source-type:description\": \"biogeochemistry model component that at the very least accounts for carbon reservoirs and fluxes in the atmosphere, terrestrial biosphere, and ocean\", \"source-type:name\": \"BGC\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/land\", \"@type\": \"mip:source-type\", \"source-type:description\": \"land model run uncoupled from the atmosphere\", \"source-type:name\": \"LAND\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/rad\", \"@type\": \"mip:source-type\", \"source-type:description\": \"radiation component of an atmospheric model run 'offline'\", \"source-type:name\": \"RAD\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/ism\", \"@type\": \"mip:source-type\", \"source-type:description\": \"ice-sheet model that includes ice-flow\", \"source-type:name\": \"ISM\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/slab\", \"@type\": \"mip:source-type\", \"source-type:description\": \"slab-ocean used with an AGCM in representing the atmosphere-ocean coupled system\", \"source-type:name\": \"SLAB\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\", \"@type\": \"mip:source-type\", \"source-type:description\": \"coupled atmosphere-ocean global climate model, additionally including explicit representation of at least the land and sea ice\", \"source-type:name\": \"AOGCM\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/agcm\", \"@type\": \"mip:source-type\", \"source-type:description\": \"atmospheric general circulation model run with prescribed ocean surface conditions and usually a model of the land surface\", \"source-type:name\": \"AGCM\"}], \"files\": [\"rad.json\", \"aer.json\", \"chem.json\", \"bgc.json\", \"ogcm.json\", \"land.json\", \"slab.json\", \"ism.json\", \"aogcm.json\", \"agcm.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/native-nominal-resolution\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"model-native-nominal-resolution\"}, \"ldroot\": \"/JSONLD/auxillary/native-nominal-resolution\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:value\": \"250\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}}, {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:value\": \"100\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}}, {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/50km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:value\": \"50\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}}], \"files\": [\"50km.json\", \"100km.json\", \"250km.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/frequency\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"frequency:\", \"@base\": \"https://github.com/PCMDI/mip-cmor-tables\"}, \"ldroot\": \"/JSONLD/auxillary/frequency\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/frequency/dec\", \"@type\": \"mip:frequency\", \"frequency:description\": \"decadal mean samples\", \"frequency:long_name\": \"Decadal Frequency\", \"frequency:name\": \"dec\", \"frequency:unit\": \"decade\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/3hrpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled 3 hourly, at specified time point within the time period\", \"frequency:long_name\": \"3 Hour Point\", \"frequency:name\": \"3hrPt\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/yrpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled yearly, at specified time point within the time period\", \"frequency:long_name\": \"Yearly Point\", \"frequency:name\": \"yrPt\", \"frequency:unit\": \"year\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/6hr\", \"@type\": \"mip:frequency\", \"frequency:description\": \"6 hourly mean samples\", \"frequency:long_name\": \"6 Hourly Frequency\", \"frequency:name\": \"6hr\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/1hr\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled hourly\", \"frequency:long_name\": \"1 Hourly Frequency\", \"frequency:name\": \"1hr\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/mon\", \"@type\": \"mip:frequency\", \"frequency:description\": \"monthly mean samples\", \"frequency:long_name\": \"Monthly Frequency\", \"frequency:name\": \"mon\", \"frequency:unit\": \"month\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/6hrpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled 6 hourly, at specified time point within the time period\", \"frequency:long_name\": \"6 Hour Point\", \"frequency:name\": \"6hrPt\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/monc\", \"@type\": \"mip:frequency\", \"frequency:description\": \"monthly climatology computed from monthly mean samples\", \"frequency:long_name\": \"Monthly Climatology\", \"frequency:name\": \"monC\", \"frequency:unit\": \"month\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/1hrcm\", \"@type\": \"mip:frequency\", \"frequency:description\": \"monthly-mean diurnal cycle resolving each day into 1-hour means\", \"frequency:long_name\": \"1 Hour Climatology Monthly\", \"frequency:name\": \"1hrCM\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/monpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled monthly, at specified time point within the time period\", \"frequency:long_name\": \"Monthly Point\", \"frequency:name\": \"monPt\", \"frequency:unit\": \"month\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/yr\", \"@type\": \"mip:frequency\", \"frequency:description\": \"annual mean samples\", \"frequency:long_name\": \"Yearly Frequency\", \"frequency:name\": \"yr\", \"frequency:unit\": \"year\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/3hr\", \"@type\": \"mip:frequency\", \"frequency:description\": \"3 hourly mean samples\", \"frequency:long_name\": \"3 Hourly Frequency\", \"frequency:name\": \"3hr\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/day\", \"@type\": \"mip:frequency\", \"frequency:description\": \"daily mean samples\", \"frequency:long_name\": \"Daily Frequency\", \"frequency:name\": \"day\", \"frequency:unit\": \"day\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/1hrpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled hourly, at specified time point within an hour\", \"frequency:long_name\": \"1 Hour Point\", \"frequency:name\": \"1hrPt\", \"frequency:unit\": \"hour\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/fx\", \"@type\": \"mip:frequency\", \"frequency:description\": \"fixed (time invariant) field\", \"frequency:long_name\": \"Fixed Frequency\", \"frequency:name\": \"fx\", \"frequency:unit\": \"none\"}, {\"@id\": \"mip-cmor-tables:auxillary/frequency/subhrpt\", \"@type\": \"mip:frequency\", \"frequency:description\": \"sampled sub-hourly, at specified time point within an hour\", \"frequency:long_name\": \"Sub-Hourly Point\", \"frequency:name\": \"subhrPt\", \"frequency:unit\": \"minute\"}], \"files\": [\"1hrcm.json\", \"monc.json\", \"yrpt.json\", \"6hr.json\", \"3hrpt.json\", \"mon.json\", \"dec.json\", \"monpt.json\", \"1hr.json\", \"6hrpt.json\", \"yr.json\", \"day.json\", \"3hr.json\", \"1hrpt.json\", \"subhrpt.json\", \"fx.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/product\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"product:\", \"@base\": \"https://github.com/PCMDI/mip-cmor-tables\"}, \"ldroot\": \"/JSONLD/auxillary/product\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/product/observations\", \"@type\": \"mip:product\", \"product:description\": \"Data collected from direct measurements of the climate system. This includes data from ground stations, satellites, buoys, and other observational platforms, which serve as a reference for validating and comparing model outputs.\", \"product:kind\": \"observations\"}, {\"@id\": \"mip-cmor-tables:auxillary/product/forcing-dataset\", \"@type\": \"mip:product\", \"product:description\": \"Data sets used to drive model simulations. These include external factors like greenhouse gas concentrations, solar radiation, and land use changes that influence the climate model outputs.\", \"product:kind\": \"forcing-dataset\"}, {\"@id\": \"mip-cmor-tables:auxillary/product/model-output\", \"@type\": \"mip:product\", \"product:description\": \"Output produced from a model simulation. This includes the various data points and metrics generated as a result of running climate models, which simulate physical, chemical, and biological processes affecting the climate system.\", \"product:kind\": \"model-output\"}, {\"@id\": \"mip-cmor-tables:auxillary/product/derived\", \"@type\": \"mip:product\", \"product:description\": \"Data that has been processed or transformed from raw model output. Derived data includes value-added products such as anomalies, indices, or other statistics that are computed from the original model outputs.\", \"product:kind\": \"derived\"}], \"files\": [\"forcing-dataset.json\", \"model-output.json\", \"derived.json\", \"observations.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary/realm\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"realm:\"}, \"ldroot\": \"/JSONLD/auxillary/realm\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/realm/land\", \"@type\": \"mip:realm\", \"realm:description\": \"Land Surface\", \"realm:name\": \"land\"}, {\"@id\": \"mip-cmor-tables:auxillary/realm/ocean\", \"@type\": \"mip:realm\", \"realm:description\": \"Ocean\", \"realm:name\": \"ocean\"}, {\"@id\": \"mip-cmor-tables:auxillary/realm/aerosol\", \"@type\": \"mip:realm\", \"realm:description\": \"Aerosol\", \"realm:name\": \"aerosol\"}, {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\", \"@type\": \"mip:realm\", \"realm:description\": \"Sea Ice\", \"realm:name\": \"seaIce\"}, {\"@id\": \"mip-cmor-tables:auxillary/realm/atmoschem\", \"@type\": \"mip:realm\", \"realm:description\": \"Atmospheric Chemistry\", \"realm:name\": \"atmosChem\"}, {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\", \"@type\": \"mip:realm\", \"realm:description\": \"Atmosphere\", \"realm:name\": \"atmos\"}], \"files\": [\"ocean.json\", \"land.json\", \"aerosol.json\", \"atmos.json\", \"seaIce.json\", \"atmosChem.json\"]}, {\"@id\": \"https://github.com/PCMDI/mip-cmor-tables/JSONLD/grid/label\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"grid-label:\", \"@base\": \"https://github.com/PCMDI/mip-cmor-tables\"}, \"ldroot\": \"/JSONLD/grid/label\", \"@graph\": [{\"@id\": \"mip-cmor-tables:grid/label/gr5\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr5\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 5\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr9\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr9\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 9\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr1g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr1g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr2a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr2a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr3g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr3g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr4a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr4a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/grz\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"grz\", \"grid-label:description\": \"regridded zonal mean data reported on the data provider's preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr8z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr8z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr5g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr5g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr6a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr6a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr7g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr7g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gnz\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gnz\", \"grid-label:description\": \"zonal mean data reported on a model's native latitude grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Grid Native Greenland Zonal Mean\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr8\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr8\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 8\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr1a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr1a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr2g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr2g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr3a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr3a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr4\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr4\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 4\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr2\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr2\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 2\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr3\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr3\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 3\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr6g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr6g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr5a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr5a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr9z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr9z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr7a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr7a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gm\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gm\", \"grid-label:description\": \"global mean data\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr4g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr4g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr3z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr3z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr1z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr1z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gn\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gn\", \"grid-label:description\": \"data reported on a model's native grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Grid Native Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr9a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr9a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr8g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr8g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr1\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr1\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 1\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr7z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr7z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gna\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gna\", \"grid-label:description\": \"data reported on a native grid in the region of Antarctica\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Grid Native Antarctica Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gra\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gra\", \"grid-label:description\": \"regridded data in the region of Antarctica reported on the data provider's preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/grg\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"grg\", \"grid-label:description\": \"regridded data in the region of Greenland reported on the data provider's preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr\", \"grid-label:description\": \"regridded data reported on the data provider's preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr5z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr5z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr2z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr2z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr7\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr7\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 7\"}, {\"@id\": \"mip-cmor-tables:grid/label/gng\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gng\", \"grid-label:description\": \"data reported on a native grid in the region of Greenland\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Grid Native Greenland\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr9g\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr9g\", \"grid-label:description\": \"regridded data reported in the region of Greenland on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate g\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr8a\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr8a\", \"grid-label:description\": \"regridded data reported in the region of Antarctica on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"antarctica\", \"grid-label:short name\": \"Regridded Antarctica Greenland Alternate a\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr6\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr6\", \"grid-label:description\": \"regridded data reported on a grid other than the native grid and other than the preferred target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Alternate 6\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr4z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr4z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}, {\"@id\": \"mip-cmor-tables:grid/label/gr6z\", \"@type\": \"mip:grid-label\", \"grid-label:name\": \"gr6z\", \"grid-label:description\": \"regridded zonal mean data reported on a grid other than the native latitude grid and other than the preferred latitude target grid\", \"grid-label:region\": \"greenland\", \"grid-label:short name\": \"Regridded Greenland Zonal Mean Alternate z\"}], \"files\": [\"gr3g.json\", \"gr5.json\", \"gr2a.json\", \"gr8z.json\", \"gr9.json\", \"gr1g.json\", \"gr4a.json\", \"gr5g.json\", \"gr8.json\", \"grz.json\", \"gr7g.json\", \"gr6a.json\", \"gr4.json\", \"gnz.json\", \"gr1a.json\", \"gr3a.json\", \"gr3.json\", \"gr2g.json\", \"gr9z.json\", \"gr7a.json\", \"gr6g.json\", \"gr2.json\", \"gr4g.json\", \"gn.json\", \"gr5a.json\", \"gr3z.json\", \"gm.json\", \"gr9a.json\", \"gr8g.json\", \"gna.json\", \"gr1.json\", \"gr1z.json\", \"gr5z.json\", \"grg.json\", \"gr7z.json\", \"gng.json\", \"gr.json\", \"gr7.json\", \"gr2z.json\", \"gr9g.json\", \"gr8a.json\", \"gra.json\", \"gr6z.json\", \"gr6.json\", \"gr4z.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/core\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"core\"}, \"ldroot\": \"/JSONLD/core\", \"@graph\": [{\"@id\": \"cmip6plus:core/descriptors\", \"@type\": \"mip:core-descriptors\", \"core:drs\": {\"@id\": \"cmip6plus:core/drs\"}, \"core:index\": {\"@id\": \"cmip6plus:core/index\"}, \"core:mip-era\": {\"@id\": \"mip-cmor-tables:auxillary/mip-era/cmip6plus\"}, \"core:product\": {\"@id\": \"mip-cmor-tables:auxillary/product/model-output\"}, \"core:required-global-attributes\": [\"conventions\", \"activity-id\", \"creation-date\", \"data-specs-version\", \"experiment\", \"experiment-id\", \"forcing-index\", \"frequency\", \"grid\", \"grid-label\", \"initialization-index\", \"institution\", \"institution-id\", \"license\", \"mip-era\", \"nominal-resolution\", \"physics-index\", \"realization-index\", \"realm\", \"source\", \"source-id\", \"source-type\", \"sub-experiment\", \"sub-experiment-id\", \"table-id\", \"tracking-id\", \"variable-id\", \"variant-label\"], \"core:tracking-id\": \"hdl:21.14100/.*\"}, {\"@id\": \"cmip6plus:core/index\", \"@type\": \"mip:index\", \"core:conventions\": [\"^CF-1.7 CMIP-6.[0-2,5]\\\\( UGRID-1.0\\\\)\\\\{0,\\\\}$\"], \"core:forcing-index\": [\"^\\\\[\\\\{0,\\\\}[[:digit:]]\\\\{1,\\\\}\\\\]\\\\{0,\\\\}$\"], \"core:initialization-index\": [\"^\\\\[\\\\{0,\\\\}[[:digit:]]\\\\{1,\\\\}\\\\]\\\\{0,\\\\}$\"], \"core:physics-index\": [\"^\\\\[\\\\{0,\\\\}[[:digit:]]\\\\{1,\\\\}\\\\]\\\\{0,\\\\}$\"], \"core:realization-index\": [\"^\\\\[\\\\{0,\\\\}[[:digit:]]\\\\{1,\\\\}\\\\]\\\\{0,\\\\}$\"], \"core:variant-label\": [\"r[[:digit:]]\\\\{1,\\\\}i[[:digit:]]\\\\{1,\\\\}p[[:digit:]]\\\\{1,\\\\}f[[:digit:]]\\\\{1,\\\\}$\"]}, {\"@id\": \"cmip6plus:core/drs\", \"@type\": \"mip:drs\", \"core:directory-path-example\": \"CMIP6Plus/CMIP/MOHC/HadGEM3-GC31-MM/historical/r1i1p1f3/Amon/tas/gn/v20191207/\", \"core:directory-path-sub-experiment-example\": \"CMIP6Plus/DCPP/MOHC/HadGEM3-GC31-MM/dcppA-hindcast/s1960-r1i1p1f2/Amon/tas/gn/v20200417/\", \"core:directory-path-template\": \"/////////\", \"core:filename-example\": \"tas_Amon_HadGEM3-GC31-MM_historical_r1i1p1f3_gn_185001-186912.nc\", \"core:filename-sub-experiment-example\": \"tas_Amon_HadGEM3-GC31-MM_dcppA-hindcast_s1960-r1i1p1f2_gn_196011-196012.nc\", \"core:filename-template\": \"_____[_].nc\"}], \"files\": [\"drs.json\", \"descriptors.json\", \"index.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/activity\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"activity-id:\"}, \"ldroot\": \"/JSONLD/activity\", \"@graph\": [{\"@id\": \"cmip6plus:activity/lesfmip\", \"@type\": \"mip:activity-id\", \"activity-id:description\": \"The Large Ensemble Single Forcing Model Intercomparison Project\", \"activity-id:name\": \"LESFMIP\", \"activity-id:url\": \"https://www.frontiersin.org/articles/10.3389/fclim.2022.955414/full\"}, {\"@id\": \"cmip6plus:activity/cmip\", \"@type\": \"mip:activity-id\", \"activity-id:description\": \"CMIP DECK: 1pctCO2, abrupt4xCO2, amip, esm-piControl, esm-historical, historical, and piControl experiments\", \"activity-id:name\": \"CMIP\", \"activity-id:url\": \"https://gmd.copernicus.org/articles/9/1937/2016/gmd-9-1937-2016.pdf\"}], \"files\": [\"cmip.json\", \"lesfmip.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/source/id\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"source-id\"}, \"ldroot\": \"/JSONLD/source/id\", \"@graph\": [{\"@id\": \"cmip6plus:source/id/giss-e2-1-g\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}, {\"@id\": \"cmip6plus:activity/cmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"GISS-E2.1G\", \"source-id:label-extended\": \"GISS-E2.1G\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@lists.nasa.gov <- cmip-giss-l\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/varies-with-physics-version\"}, {\"@id\": \"cmip6plus:model/component/giss-e2.1\"}, {\"@id\": \"cmip6plus:model/component/varies-with-physics-version\"}, {\"@id\": \"cmip6plus:model/component/giss-lsm\"}, {\"@id\": \"cmip6plus:model/component/giss-ocean\"}, {\"@id\": \"cmip6plus:model/component/giss-si\"}], \"source-id:name\": \"GISS-E2-1-G\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/institutions/nasa-giss\"}, \"source-id:release-year\": 2019}, {\"@id\": \"cmip6plus:source/id/noresm2-lm\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/cmip\"}, {\"@id\": \"cmip6plus:activity/lesfmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"NorESM2-LM\", \"source-id:label-extended\": \"NorESM2-LM (low atmosphere-medium ocean resolution, GHG concentration driven)\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@met.no <- noresm-ncc\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/osloaero\"}, {\"@id\": \"cmip6plus:model/component/cam-oslo\"}, {\"@id\": \"cmip6plus:model/component/oslochemsimp\"}, {\"@id\": \"cmip6plus:model/component/clm\"}, {\"@id\": \"cmip6plus:model/component/cism\"}, {\"@id\": \"cmip6plus:model/component/micom\"}, {\"@id\": \"cmip6plus:model/component/hamocc\"}, {\"@id\": \"cmip6plus:model/component/cice\"}], \"source-id:name\": \"NorESM2-LM\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/consortia/ncc\"}, \"source-id:release-year\": 2017}, {\"@id\": \"cmip6plus:source/id/mpi-esm1-2-hr\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/cmip\"}, {\"@id\": \"cmip6plus:activity/lesfmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"MPI-ESM1.2-HR\", \"source-id:label-extended\": \"MPI-ESM1.2-HR\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@dkrz.de <- cmip6-mpi-esm\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/,-prescribed-macv2-sp\"}, {\"@id\": \"cmip6plus:model/component/echam6.3\"}, {\"@id\": \"cmip6plus:model/component/jsbach3.20\"}, {\"@id\": \"cmip6plus:model/component/prescribed\"}, {\"@id\": \"cmip6plus:model/component/mpiom1.63\"}, {\"@id\": \"cmip6plus:model/component/hamocc6\"}, {\"@id\": \"cmip6plus:model/component/unnamed\"}], \"source-id:name\": \"MPI-ESM1-2-HR\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/institutions/mpi-m\"}, \"source-id:release-year\": 2017}, {\"@id\": \"cmip6plus:source/id/mpi-esm1-2-lr\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/cmip\"}, {\"@id\": \"cmip6plus:activity/lesfmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"MPI-ESM1-2-LR\", \"source-id:label-extended\": \"MPI-ESM1.2-LR\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@dkrz.de <- cmip6-mpi-esm\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/,-prescribed-macv2-sp\"}, {\"@id\": \"cmip6plus:model/component/echam6.3\"}, {\"@id\": \"cmip6plus:model/component/jsbach3.20\"}, {\"@id\": \"cmip6plus:model/component/prescribed\"}, {\"@id\": \"cmip6plus:model/component/mpiom1.63\"}, {\"@id\": \"cmip6plus:model/component/hamocc6\"}, {\"@id\": \"cmip6plus:model/component/unnamed\"}], \"source-id:name\": \"MPI-ESM1-2-LR\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/institutions/mpi-m\"}, \"source-id:release-year\": 2017}, {\"@id\": \"cmip6plus:source/id/hadgem3-gc31-ll\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/cmip\"}, {\"@id\": \"cmip6plus:activity/lesfmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"HadGEM3-GC31-LL\", \"source-id:label-extended\": \"HadGEM3-GC3.1-N96ORCA1\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@metoffice.gov.uk <- cmip6.hadgem3\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"https://ukesm.ac.uk/licensing-of-met-office-nerc-and-niwa-cmip6-data/\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/ukca-glomap-mode\"}, {\"@id\": \"cmip6plus:model/component/metum-hadgem3-ga7.1\"}, {\"@id\": \"cmip6plus:model/component/jules-hadgem3-gl7.1\"}, {\"@id\": \"cmip6plus:model/component/nemo-hadgem3-go6.0\"}, {\"@id\": \"cmip6plus:model/component/cice-hadgem3-gsi8\"}], \"source-id:name\": \"HadGEM3-GC31-LL\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/institutions/mohc\"}, \"source-id:release-year\": 2016}, {\"@id\": \"cmip6plus:source/id/miroc6\", \"@type\": \"mip:source-id\", \"source-id:activity-participation\": [{\"@id\": \"cmip6plus:activity/cmip\"}, {\"@id\": \"cmip6plus:activity/lesfmip\"}], \"source-id:cohort\": \"published\", \"source-id:contributers\": {}, \"source-id:label\": \"MIROC6\", \"source-id:label-extended\": \"MIROC6\", \"source-id:license\": {\"source-id:license:exceptions-contact\": \"@jamstec.go.jp <- miroc-cmip6\", \"source-id:license:kind\": {\"@id\": \"mip-cmor-tables:license/cc-by-4.0\"}, \"source-id:license:source-specific-info\": \"\"}, \"source-id:model-component\": [{\"@id\": \"cmip6plus:model/component/sprintars6.0\"}, {\"@id\": \"cmip6plus:model/component/ccsr-agcm\"}, {\"@id\": \"cmip6plus:model/component/matsiro6.0\"}, {\"@id\": \"cmip6plus:model/component/coco4.9\"}, {\"@id\": \"cmip6plus:model/component/coco4.9\"}], \"source-id:name\": \"MIROC6\", \"source-id:organisation-id\": {\"@id\": \"mip-cmor-tables:organisations/consortia/miroc\"}, \"source-id:release-year\": 2017}], \"files\": [\"mpi-esm1-2-lr.json\", \"mpi-esm1-2-hr.json\", \"noresm2-lm.json\", \"miroc6.json\", \"giss-e2-1-g.json\", \"schema.json\", \"hadgem3-gc31-ll.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/model/native-nominal-resolution\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"model-native-nominal-resolution\"}, \"ldroot\": \"/JSONLD/model/native-nominal-resolution\", \"@graph\": [{\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/50km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}, \"model-native-nominal-resolution:value\": \"50\"}, {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}, \"model-native-nominal-resolution:value\": \"250\"}, {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\", \"@type\": \"mip:mip:native-nominal-resolution\", \"model-native-nominal-resolution:cf:unit\": {\"@id\": \"si:km\"}, \"model-native-nominal-resolution:value\": \"100\"}], \"files\": [\"50km.json\", \"100km.json\", \"250km.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/model/component\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"model-component\"}, \"ldroot\": \"/JSONLD/model/component\", \"@graph\": [{\"@id\": \"cmip6plus:model/component/cism\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CISM\", \"model-component:name\": \"CISM\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/landice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/cice\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CICE\", \"model-component:name\": \"CICE\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/ccsr-agcm\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CCSR AGCM (T85; 256 x 128 longitude/latitude; 81 levels; top level 0.004 hPa)\", \"model-component:name\": \"CCSR_AGCM\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/giss-si\", \"@type\": \"mip:model-component\", \"model-component:description\": \"GISS SI\", \"model-component:name\": \"GISS_SI\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/osloaero\", \"@type\": \"mip:model-component\", \"model-component:description\": \"OsloAero\", \"model-component:name\": \"OsloAero\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/aerosol\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/giss-lsm\", \"@type\": \"mip:model-component\", \"model-component:description\": \"GISS LSM\", \"model-component:name\": \"GISS_LSM\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/land\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/,-prescribed-macv2-sp\", \"@type\": \"mip:model-component\", \"model-component:description\": \", prescribed MACv2-SP\", \"model-component:name\": \",_prescribed_MACv2-SP\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/aerosol\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/nemo-hadgem3-go6.0\", \"@type\": \"mip:model-component\", \"model-component:description\": \"NEMO-HadGEM3-GO6.0 (eORCA1 tripolar primarily 1 deg with meridional refinement down to 1/3 degree in the tropics; 360 x 330 longitude/latitude; 75 levels; top grid cell 0-1 m)\", \"model-component:name\": \"NEMO-HadGEM3-GO6.0\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocean\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/cice-hadgem3-gsi8\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CICE-HadGEM3-GSI8 (eORCA1 tripolar primarily 1 deg; 360 x 330 longitude/latitude)\", \"model-component:name\": \"CICE-HadGEM3-GSI8\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/matsiro6.0\", \"@type\": \"mip:model-component\", \"model-component:description\": \"MATSIRO6.0\", \"model-component:name\": \"MATSIRO6.0\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/land\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/oslochemsimp\", \"@type\": \"mip:model-component\", \"model-component:description\": \"OsloChemSimp\", \"model-component:name\": \"OsloChemSimp\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmoschem\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/micom\", \"@type\": \"mip:model-component\", \"model-component:description\": \"MICOM (1 degree resolution; 360 x 384; 70 levels; top grid cell minimum 0-2.5 m [native model uses hybrid density and generic upper-layer coordinate interpolated to z-level for contributed data])\", \"model-component:name\": \"MICOM\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocean\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/unnamed\", \"@type\": \"mip:model-component\", \"model-component:description\": \"unnamed (thermodynamic (Semtner zero-layer) dynamic (Hibler 79) sea ice model)\", \"model-component:name\": \"unnamed\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/hamocc\", \"@type\": \"mip:model-component\", \"model-component:description\": \"HAMOCC\", \"model-component:name\": \"HAMOCC\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocnbgchem\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/echam6.3\", \"@type\": \"mip:model-component\", \"model-component:description\": \"ECHAM6.3 (spectral T63; 192 x 96 longitude/latitude; 47 levels; top level 0.01 hPa)\", \"model-component:name\": \"ECHAM6.3\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/metum-hadgem3-ga7.1\", \"@type\": \"mip:model-component\", \"model-component:description\": \"MetUM-HadGEM3-GA7.1 (N96; 192 x 144 longitude/latitude; 85 levels; top level 85 km)\", \"model-component:name\": \"MetUM-HadGEM3-GA7.1\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/giss-e2.1\", \"@type\": \"mip:model-component\", \"model-component:description\": \"GISS-E2.1 (2.5x2 degree; 144 x 90 longitude/latitude; 40 levels; top level 0.1 hPa)\", \"model-component:name\": \"GISS-E2.1\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/coco4.9\", \"@type\": \"mip:model-component\", \"model-component:description\": \"COCO4.9\", \"model-component:name\": \"COCO4.9\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/seaice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/cam-oslo\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CAM-OSLO (2 degree resolution; 144 x 96; 32 levels; top level 3 mb)\", \"model-component:name\": \"CAM-OSLO\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmos\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/ukca-glomap-mode\", \"@type\": \"mip:model-component\", \"model-component:description\": \"UKCA-GLOMAP-mode\", \"model-component:name\": \"UKCA-GLOMAP-mode\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/aerosol\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/mpiom1.63\", \"@type\": \"mip:model-component\", \"model-component:description\": \"MPIOM1.63 (bipolar GR1.5, approximately 1.5deg; 256 x 220 longitude/latitude; 40 levels; top grid cell 0-12 m)\", \"model-component:name\": \"MPIOM1.63\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocean\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/varies-with-physics-version\", \"@type\": \"mip:model-component\", \"model-component:description\": \"Varies with physics-version (p==1 Non-interactive, p>1 GPUCCINI)\", \"model-component:name\": \"Varies_with_physics-version\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/atmoschem\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/sprintars6.0\", \"@type\": \"mip:model-component\", \"model-component:description\": \"SPRINTARS6.0\", \"model-component:name\": \"SPRINTARS6.0\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/aerosol\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/jules-hadgem3-gl7.1\", \"@type\": \"mip:model-component\", \"model-component:description\": \"JULES-HadGEM3-GL7.1\", \"model-component:name\": \"JULES-HadGEM3-GL7.1\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/land\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/jsbach3.20\", \"@type\": \"mip:model-component\", \"model-component:description\": \"JSBACH3.20\", \"model-component:name\": \"JSBACH3.20\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/land\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/hamocc6\", \"@type\": \"mip:model-component\", \"model-component:description\": \"HAMOCC6\", \"model-component:name\": \"HAMOCC6\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocnbgchem\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/prescribed\", \"@type\": \"mip:model-component\", \"model-component:description\": \"prescribed\", \"model-component:name\": \"prescribed\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/none\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/landice\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/clm\", \"@type\": \"mip:model-component\", \"model-component:description\": \"CLM\", \"model-component:name\": \"CLM\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/250km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/land\"}, \"model-component:version\": -999}, {\"@id\": \"cmip6plus:model/component/giss-ocean\", \"@type\": \"mip:model-component\", \"model-component:description\": \"GISS Ocean (GO1, 1 degree; 360 x 180 longitude/latitude; 40 levels; top grid cell 0-10 m)\", \"model-component:name\": \"GISS_Ocean\", \"model-component:nominal-resolution\": {\"@id\": \"mip-cmor-tables:auxillary/native-nominal-resolution/100km\"}, \"model-component:realm\": {\"@id\": \"mip-cmor-tables:auxillary/realm/ocean\"}, \"model-component:version\": -999}], \"files\": [\"cice.json\", \"cism.json\", \"unnamed.json\", \"nemo-hadgem3-go6.0.json\", \"giss-si.json\", \",-prescribed-macv2-sp.json\", \"osloaero.json\", \"matsiro6.0.json\", \"hamocc.json\", \"oslochemsimp.json\", \"cice-hadgem3-gsi8.json\", \"ccsr-agcm.json\", \"giss-lsm.json\", \"micom.json\", \"echam6.3.json\", \"coco4.9.json\", \"metum-hadgem3-ga7.1.json\", \"giss-e2.1.json\", \"mpiom1.63.json\", \"sprintars6.0.json\", \"varies-with-physics-version.json\", \"cam-oslo.json\", \"ukca-glomap-mode.json\", \"jules-hadgem3-gl7.1.json\", \"hamocc6.json\", \"jsbach3.20.json\", \"prescribed.json\", \"clm.json\", \"giss-ocean.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/experiment/sub-id\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"experiment-sub-id\"}, \"ldroot\": \"/JSONLD/experiment/sub-id\", \"@graph\": [{\"@id\": \"cmip6plus:experiment/sub-id/none\", \"@type\": \"mip:sub-experiment-id\", \"experiment-sub-id:description\": \"none\", \"experiment-sub-id:sub-experiment-id\": \"none\"}, {\"@id\": \"cmip6plus:experiment/sub-id/f2023\", \"@type\": \"mip:sub-experiment-id\", \"experiment-sub-id:description\": \"Forcings 2023\", \"experiment-sub-id:sub-experiment-id\": \"f2023\"}], \"files\": [\"none.json\", \"f2023.json\"]}, {\"@id\": \"https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD/experiment/id\", \"@type\": \"graph\", \"@context\": {\"@vocab\": \"experiment-id\"}, \"ldroot\": \"/JSONLD/experiment/id\", \"@graph\": [{\"@id\": \"cmip6plus:experiment/id/hist-totalo3\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Ozone-only historical simulations\", \"experiment-id:experiment\": \"historical total ozone-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-totalO3\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/picontrol-spinup\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: spin-up portion of the control\", \"experiment-id:experiment\": \"pre-industrial control (spin-up)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"piControl-spinup\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 100, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/no parent\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/no parent\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/hist-pivolc\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"historical simulations with 1850 volcanic emissions\", \"experiment-id:experiment\": \"historical all-but-volcanic run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-piVolc\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/fut-ghg\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-GHG but with updated forcings\", \"experiment-id:experiment\": \"future well-mixed GHG-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-GHG\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/hist-ghg\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/hist-lu\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Historical simulations with only land use changes\", \"experiment-id:experiment\": \"Single forcing historical simulations\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-lu\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/picontrol\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: control\", \"experiment-id:experiment\": \"pre-industrial control (CO2 concentration-driven)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"piControl\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 500, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol-spinup\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/fut-sol\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-sol but with updated forcings\", \"experiment-id:experiment\": \"future solar-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-sol\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/hist-sol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/1pctco2\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: 1pctCO2\", \"experiment-id:experiment\": \"1 percent per year increase in CO2\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"1pctCO2\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 150, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/esm-hist\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"CMIP6 historical (CO2 emission-driven)\", \"experiment-id:experiment\": \"all-forcing simulation of the recent past with atmospheric CO2 concentration calculated (CO2 emission-driven)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}]}, \"experiment-id:name\": \"esm-hist\", \"experiment-id:parameters\": {\"experiment-id:end\": 2014, \"experiment-id:min-number-yrs-per-sim\": 165, \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/esm-picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/hist-nat\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Natural forcings (solar + volcanic)\", \"experiment-id:experiment\": \"historical natural-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-nat\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/hist-sol\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Solar-only historical simulations\", \"experiment-id:experiment\": \"historical solar-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-sol\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/fut-volc\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-volc but with updated forcings\", \"experiment-id:experiment\": \"future volcanic-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-volc\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/hist-volc\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/esm-picontrol-spinup\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: spin-up portion of the control (emission-driven)\", \"experiment-id:experiment\": \"pre-industrial control simulation with CO2 concentration calculated (spin-up)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}]}, \"experiment-id:name\": \"esm-piControl-spinup\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 100, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/no parent\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/no parent\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/hist-ghg\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Well-mixed greenhouse-gas-only historical simulations\", \"experiment-id:experiment\": \"historical well-mixed GHG-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-GHG\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/abrupt-4xco2\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: abrupt-4xCO2\", \"experiment-id:experiment\": \"abrupt quadrupling of CO2\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"abrupt-4xCO2\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 150, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/esm-picontrol\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: control (emission-driven)\", \"experiment-id:experiment\": \"pre-industrial control simulation with preindustrial CO2 emissions defined (CO2 emission-driven)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}]}, \"experiment-id:name\": \"esm-piControl\", \"experiment-id:parameters\": {\"experiment-id:end\": -999, \"experiment-id:min-number-yrs-per-sim\": 500, \"experiment-id:start\": -999}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/esm-picontrol-spinup\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/historical\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"CMIP6 historical\", \"experiment-id:experiment\": \"all-forcing simulation of the recent past (CO2 concentration-driven)\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"historical\", \"experiment-id:parameters\": {\"experiment-id:end\": 2014, \"experiment-id:min-number-yrs-per-sim\": 165, \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/fut-lu\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-lu but with updated forcings\", \"experiment-id:experiment\": \"Single forcing projections\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-lu\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/hist-piaer\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Historical WMGHG, halocarbon concentrations and O3 precursor emissions, 1850 aerosol precursor emissions.\", \"experiment-id:experiment\": \"historical forcing, but with pre-industrial aerosol emissions\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-piAer\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/hist-pighg\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Pre-industrial WMGHG, halocarbon and O3 precursor emissions, other forcings as for the historical experiment\", \"experiment-id:experiment\": \"historical forcing but with pre-industrial GHG\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-piGHG\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/hist-pitotalo3\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"historical simulations with 1850 total ozone\", \"experiment-id:experiment\": \"historical all-but-ozone run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-piTotalO3\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/amip\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:description\": \"DECK: AMIP\", \"experiment-id:experiment\": \"AMIP\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/agcm\"}]}, \"experiment-id:name\": \"amip\", \"experiment-id:parameters\": {\"experiment-id:end\": 2022, \"experiment-id:min-number-yrs-per-sim\": 43, \"experiment-id:start\": 1979}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/no parent\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/no parent\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/none\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/fut-totalo3\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-totalO3 but with updated forcings\", \"experiment-id:experiment\": \"future total ozone-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-totalO3\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/hist-totalo3\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}, {\"@id\": \"cmip6plus:experiment/id/hist-volc\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Volcanic-only historical simulations\", \"experiment-id:experiment\": \"historical volcanic-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-volc\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/hist-nolu\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Same as CMIP6 historical but with land cover held at 1850, no human activity; concentration driven\", \"experiment-id:experiment\": \"historical with no land-use change\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-noLu\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/hist-aer\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"Anthropogenic-aerosol-only historical simulations\", \"experiment-id:experiment\": \"historical anthropogenic aerosols-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-aer\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 1}, {\"@id\": \"cmip6plus:experiment/id/hist-pisol\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"historical simulations with 1850 solar forcing\", \"experiment-id:experiment\": \"historical all-but-solar run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"hist-piSol\", \"experiment-id:parameters\": {\"experiment-id:end\": 2020, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 1850}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/cmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/picontrol\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 3}, {\"@id\": \"cmip6plus:experiment/id/fut-aer\", \"@type\": \"mip:experiment-id\", \"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:description\": \"As hist-aer but with updated forcings\", \"experiment-id:experiment\": \"future anthropogenic aerosols-only run\", \"experiment-id:model-components\": {\"experiment-id:additional-allowed\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aer\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/chem\"}, {\"@id\": \"mip-cmor-tables:auxillary/source-type/bgc\"}], \"experiment-id:required\": [{\"@id\": \"mip-cmor-tables:auxillary/source-type/aogcm\"}]}, \"experiment-id:name\": \"fut-Aer\", \"experiment-id:parameters\": {\"experiment-id:end\": 2024, \"experiment-id:min-number-yrs-per-sim\": \"none\", \"experiment-id:start\": 2015}, \"experiment-id:parent\": {\"experiment-id:activity-id\": [{\"@id\": \"cmip6plus:activity/lesfmip\"}], \"experiment-id:experiment-id\": [{\"@id\": \"cmip6:experiment/id/hist-aer\"}]}, \"experiment-id:sub-experiment-id\": {\"@id\": \"cmip6plus:experiment/sub-id/f2023\"}, \"experiment-id:tier\": 2}], \"files\": [\"hist-nat.json\", \"esm-hist.json\", \"hist-totalo3.json\", \"fut-sol.json\", \"fut-ghg.json\", \"hist-pivolc.json\", \"picontrol-spinup.json\", \"hist-ghg.json\", \"hist-sol.json\", \"fut-volc.json\", \"1pctco2.json\", \"esm-picontrol-spinup.json\", \"picontrol.json\", \"hist-lu.json\", \"historical.json\", \"esm-picontrol.json\", \"fut-lu.json\", \"hist-pisol.json\", \"hist-pighg.json\", \"hist-piaer.json\", \"abrupt-4xco2.json\", \"fut-totalo3.json\", \"hist-pitotalo3.json\", \"hist-aer.json\", \"amip.json\", \"hist-nolu.json\", \"fut-aer.json\", \"hist-volc.json\"]}]\n" + ] + } + ], + "source": [ + "print(json.dumps(latest))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cmipld/graph/graph.json b/cmipld/graph/graph.json new file mode 100644 index 0000000..faf2f9f --- /dev/null +++ b/cmipld/graph/graph.json @@ -0,0 +1,397 @@ +{ + "nodes": [ + { + "id": "mip-cmor-tables:auxillary/frequency", + "type": "mip:frequency", + "origin": "mip-cmor-tables", + "weight": 16 + }, + { + "id": "mip-cmor-tables:auxillary/mip-era", + "type": "mip:mip-era", + "origin": "mip-cmor-tables", + "weight": 4 + }, + { + "id": "mip-cmor-tables:auxillary/native-nominal-resolution", + "type": "mip:mip:native-nominal-resolution", + "origin": "mip-cmor-tables", + "weight": 6 + }, + { + "id": "mip-cmor-tables", + "type": "directory", + "origin": "mip-cmor-tables", + "weight": 78 + }, + { + "id": "auxillary", + "type": "directory", + "origin": "mip-cmor-tables", + "weight": 6 + }, + { + "id": "native-nominal-resolution", + "type": "directory-path", + "origin": "mip-cmor-tables", + "weight": 6 + }, + { + "id": "mip-cmor-tables:auxillary/product", + "type": "mip:product", + "origin": "mip-cmor-tables", + "weight": 4 + }, + { + "id": "mip-cmor-tables:auxillary/realm", + "type": "mip:realm", + "origin": "mip-cmor-tables", + "weight": 6 + }, + { + "id": "mip-cmor-tables:auxillary/source-type", + "type": "mip:source-type", + "origin": "mip-cmor-tables", + "weight": 10 + }, + { + "id": "mip-cmor-tables:grid/label", + "type": "mip:grid-label", + "origin": "mip-cmor-tables", + "weight": 45 + }, + { + "id": "mip-cmor-tables:license", + "type": "mip:license", + "origin": "mip-cmor-tables", + "weight": 4 + }, + { + "id": "mip-cmor-tables:organisations/consortia", + "type": "mip:consortium", + "origin": "mip-cmor-tables", + "weight": 3 + }, + { + "id": "mip-cmor-tables:organisations/institutions", + "type": "mip:institution", + "origin": "mip-cmor-tables", + "weight": 72 + }, + { + "id": "organisations", + "type": "directory", + "origin": "mip-cmor-tables", + "weight": 72 + }, + { + "id": "institutions", + "type": "directory-path", + "origin": "mip-cmor-tables", + "weight": 72 + }, + { + "id": "mip-cmor-tables:organisations/institutions/location", + "type": "institution:location", + "origin": "mip-cmor-tables", + "weight": 71 + }, + { + "id": "cmip6plus:activity", + "type": "mip:activity-id", + "origin": "cmip6plus", + "weight": 2 + }, + { + "id": "cmip6plus:core", + "type": "mip:index", + "origin": "cmip6plus", + "weight": 3 + }, + { + "id": "cmip6plus", + "type": "directory", + "origin": "cmip6plus", + "weight": 172 + }, + { + "id": "core", + "type": "directory-path", + "origin": "cmip6plus", + "weight": 4 + }, + { + "id": "cmip6plus:experiment/id", + "type": "mip:experiment-id", + "origin": "cmip6plus", + "weight": 28 + }, + { + "id": "experiment", + "type": "directory", + "origin": "cmip6plus", + "weight": 56 + }, + { + "id": "id", + "type": "directory-path", + "origin": "cmip6plus", + "weight": 110 + }, + { + "id": "cmip6plus:experiment/sub-id", + "type": "mip:sub-experiment-id", + "origin": "cmip6plus", + "weight": 2 + }, + { + "id": "cmip6plus:model/component", + "type": "mip:model-component", + "origin": "cmip6plus", + "weight": 29 + }, + { + "id": "model", + "type": "directory", + "origin": "cmip6plus", + "weight": 58 + }, + { + "id": "component", + "type": "directory-path", + "origin": "cmip6plus", + "weight": 58 + }, + { + "id": "cmip6plus:source/id", + "type": "mip:source-id", + "origin": "cmip6plus", + "weight": 6 + }, + { + "id": "source", + "type": "directory", + "origin": "cmip6plus", + "weight": 54 + } + ], + "links": [ + { + "source": "mip-cmor-tables:auxillary/native-nominal-resolution", + "target": "", + "predicate": "model-native-nominal-resolution:cf:unit", + "weight": 6 + }, + { + "source": "mip-cmor-tables", + "target": "auxillary", + "predicate": "_", + "weight": 6 + }, + { + "source": "auxillary", + "target": "native-nominal-resolution", + "predicate": "_", + "weight": 6 + }, + { + "source": "native-nominal-resolution", + "target": "mip-cmor-tables:auxillary/native-nominal-resolution", + "predicate": "_", + "weight": 6 + }, + { + "source": "mip-cmor-tables:organisations/institutions", + "target": "mip-cmor-tables:organisations/institutions/location", + "predicate": "institution:location", + "weight": 72 + }, + { + "source": "mip-cmor-tables", + "target": "organisations", + "predicate": "_", + "weight": 72 + }, + { + "source": "organisations", + "target": "institutions", + "predicate": "_", + "weight": 72 + }, + { + "source": "institutions", + "target": "mip-cmor-tables:organisations/institutions", + "predicate": "_", + "weight": 72 + }, + { + "source": "cmip6plus:core", + "target": "cmip6plus:core", + "predicate": "core:drs", + "weight": 2 + }, + { + "source": "cmip6plus", + "target": "core", + "predicate": "_", + "weight": 4 + }, + { + "source": "core", + "target": "cmip6plus:core", + "predicate": "_", + "weight": 4 + }, + { + "source": "cmip6plus:core", + "target": "cmip6plus:core", + "predicate": "core:index", + "weight": 2 + }, + { + "source": "cmip6plus:core", + "target": "mip-cmor-tables:auxillary/mip-era", + "predicate": "core:mip-era", + "weight": 1 + }, + { + "source": "cmip6plus:core", + "target": "mip-cmor-tables:auxillary/product", + "predicate": "core:product", + "weight": 1 + }, + { + "source": "cmip6plus:experiment/id", + "target": "cmip6plus:activity", + "predicate": "experiment-id:activity-id", + "weight": 28 + }, + { + "source": "cmip6plus", + "target": "experiment", + "predicate": "_", + "weight": 56 + }, + { + "source": "experiment", + "target": "id", + "predicate": "_", + "weight": 56 + }, + { + "source": "id", + "target": "cmip6plus:experiment/id", + "predicate": "_", + "weight": 56 + }, + { + "source": "cmip6plus:experiment/id", + "target": "cmip6plus:experiment/sub-id", + "predicate": "experiment-id:sub-experiment-id", + "weight": 28 + }, + { + "source": "cmip6plus:model/component", + "target": "mip-cmor-tables:auxillary/native-nominal-resolution", + "predicate": "model-component:nominal-resolution", + "weight": 29 + }, + { + "source": "cmip6plus", + "target": "model", + "predicate": "_", + "weight": 58 + }, + { + "source": "model", + "target": "component", + "predicate": "_", + "weight": 58 + }, + { + "source": "component", + "target": "cmip6plus:model/component", + "predicate": "_", + "weight": 58 + }, + { + "source": "cmip6plus:model/component", + "target": "mip-cmor-tables:auxillary/realm", + "predicate": "model-component:realm", + "weight": 29 + }, + { + "source": "cmip6plus:source/id", + "target": "cmip6plus:activity", + "predicate": "source-id:activity-participation", + "weight": 12 + }, + { + "source": "cmip6plus", + "target": "source", + "predicate": "_", + "weight": 54 + }, + { + "source": "source", + "target": "id", + "predicate": "_", + "weight": 54 + }, + { + "source": "id", + "target": "cmip6plus:source/id", + "predicate": "_", + "weight": 54 + }, + { + "source": "cmip6plus:source/id", + "target": "cmip6plus:model/component", + "predicate": "source-id:model-component", + "weight": 36 + }, + { + "source": "cmip6plus:source/id", + "target": "mip-cmor-tables:organisations/institutions", + "predicate": "source-id:organisation-id", + "weight": 4 + }, + { + "source": "cmip6plus:source/id", + "target": "mip-cmor-tables:organisations/consortia", + "predicate": "source-id:organisation-id", + "weight": 2 + } + ], + "types": { + "frequency:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary", + "mip:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary", + "product:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary", + "realm:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary", + "source-type:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary", + "grid-label:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/grid", + "license:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD", + "consortium:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations", + "institution:graph": "https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations", + "activity-id:graph": "https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD", + "mip:frequency": "mip-cmor-tables:auxillary/frequency", + "mip:mip-era": "mip-cmor-tables:auxillary/mip-era", + "mip:mip:native-nominal-resolution": "mip-cmor-tables:auxillary/native-nominal-resolution", + "mip:product": "mip-cmor-tables:auxillary/product", + "mip:realm": "mip-cmor-tables:auxillary/realm", + "mip:source-type": "mip-cmor-tables:auxillary/source-type", + "mip:grid-label": "mip-cmor-tables:grid/label", + "mip:license": "mip-cmor-tables:license", + "mip:consortium": "mip-cmor-tables:organisations/consortia", + "mip:institution": "mip-cmor-tables:organisations/institutions", + "institution:location": "mip-cmor-tables:organisations/institutions/location", + "mip:activity-id": "cmip6plus:activity", + "mip:core-descriptors": "cmip6plus:core", + "mip:drs": "cmip6plus:core", + "mip:index": "cmip6plus:core", + "mip:experiment-id": "cmip6plus:experiment/id", + "mip:sub-experiment-id": "cmip6plus:experiment/sub-id", + "mip:model-component": "cmip6plus:model/component", + "mip:source-id": "cmip6plus:source/id" + } +} \ No newline at end of file diff --git a/cmipld/graph/serve/Untitled-1 b/cmipld/graph/serve/Untitled-1 new file mode 100644 index 0000000..5fce614 --- /dev/null +++ b/cmipld/graph/serve/Untitled-1 @@ -0,0 +1,6 @@ + + + + +IF has "@id" insert context to each element with "@expand""@slawas +when constructings \ No newline at end of file diff --git a/cmipld/graph/serve/d3-annotation.min.js b/cmipld/graph/serve/d3-annotation.min.js new file mode 100644 index 0000000..af20626 --- /dev/null +++ b/cmipld/graph/serve/d3-annotation.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("d3-selection"),require("d3-drag"),require("d3-shape"),require("d3-dispatch")):"function"==typeof define&&define.amd?define(["exports","d3-selection","d3-drag","d3-shape","d3-dispatch"],e):e(t.d3=t.d3||{},t.d3,t.d3,t.d3,t.d3)}(this,function(t,e,n,o,a){"use strict";function i(){var t=[],n=void 0,o=void 0,i=[],s={},r={},c=!1,d=void 0,u=z,h=void 0,l=void 0,p=a.dispatch("subjectover","subjectout","subjectclick","connectorover","connectorout","connectorclick","noteover","noteout","noteclick","dragend","dragstart"),v=void 0,g=function(o){v=o,c||o.selectAll("circle.handle").remove();var a=t.map(function(t){return t.type||(t.type=u),t.disable||(t.disable=i),new y(t)});n=n||new f({annotations:a,accessors:s,accessorsInverse:r,ids:d}),o.selectAll("g").data([n]).enter().append("g").attr("class","annotations");var g=o.select("g.annotations");U(g,n.annotations,"g","annotation"),g.selectAll("g.annotation").each(function(t){var n=e.select(this);n.attr("class","annotation"),U(n,[t],"g","annotation-connector"),U(n,[t],"g","annotation-subject"),U(n,[t],"g","annotation-note"),U(n.select("g.annotation-note"),[t],"g","annotation-note-content"),t.type="[object Object]"===t.type.toString()?t.type:new t.type({a:n,annotation:t,textWrap:h,notePadding:l,editMode:c,dispatcher:p,accessors:s}),t.type.draw(),t.type.drawText&&t.type.drawText()})};return g.json=function(){return console.log("Annotations JSON was copied to your clipboard. Please note the annotation type is not JSON compatible. It appears in the objects array in the console, but not in the copied JSON.",n.json),window.copy(JSON.stringify(n.json.map(function(t){return delete t.type,t}))),g},g.update=function(){return t&&n&&(t=n.annotations.map(function(t){return t.type.draw(),t})),g},g.updateText=function(){return n&&(n.updateText(h),t=n.annotations),g},g.updatedAccessors=function(){return n.setPositionWithAccessors(),t=n.annotations,g},g.disable=function(e){return arguments.length?(i=e,n&&(n.updateDisable(i),t=n.annotations),g):i},g.textWrap=function(e){return arguments.length?(h=e,n&&(n.updateTextWrap(h),t=n.annotations),g):h},g.notePadding=function(e){return arguments.length?(l=e,n&&(n.updateNotePadding(l),t=n.annotations),g):l},g.type=function(e,o){return arguments.length?(u=e,n&&(n.annotations.map(function(t){t.type.note&&t.type.note.selectAll("*:not(.annotation-note-content)").remove(),t.type.noteContent&&t.type.noteContent.selectAll("*").remove(),t.type.subject&&t.type.subject.selectAll("*").remove(),t.type.connector&&t.type.connector.selectAll("*").remove(),t.type.typeSettings={},t.type=u,t.subject=o&&o.subject||t.subject,t.connector=o&&o.connector||t.connector,t.note=o&&o.note||t.note}),t=n.annotations),g):u},g.annotations=function(e){if(!arguments.length)return n&&n.annotations||t;if(t=e,n&&n.annotations){t.some(function(t){return!t.type||"[object Object]"!==t.type.toString()})?(n=null,g(v)):n.annotations=t}return g},g.context=function(t){return arguments.length?(o=t,g):o},g.accessors=function(t){return arguments.length?(s=t,g):s},g.accessorsInverse=function(t){return arguments.length?(r=t,g):r},g.ids=function(t){return arguments.length?(d=t,g):d},g.editMode=function(e){return arguments.length?(c=e,v&&v.selectAll("g.annotation").classed("editable",c),n&&(n.editMode(c),t=n.annotations),g):c},g.collection=function(t){return arguments.length?(n=t,g):n},g.on=function(){var t=p.on.apply(p,arguments);return t===p?g:t},g}var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},c=function(){function t(t,e){for(var n=0;n0&&(t.data=this.data),this.type&&(t.type=this.type),this._className&&(t.className=this._className),Object.keys(this.connector).length>0&&(t.connector=this.connector),Object.keys(this.subject).length>0&&(t.subject=this.subject),Object.keys(this.note).length>0&&(t.note=this.note),t}}]),t}(),f=function(){function t(e){var n=e.annotations,o=e.accessors,a=e.accessorsInverse;r(this,t),this.accessors=o,this.accessorsInverse=a,this.annotations=n}return c(t,[{key:"clearTypes",value:function(t){this.annotations.forEach(function(e){e.type=void 0,e.subject=t&&t.subject||e.subject,e.connector=t&&t.connector||e.connector,e.note=t&&t.note||e.note})}},{key:"setPositionWithAccessors",value:function(){var t=this;this.annotations.forEach(function(e){e.type.setPositionWithAccessors(t.accessors)})}},{key:"editMode",value:function(t){this.annotations.forEach(function(e){e.type&&(e.type.editMode=t,e.type.updateEditMode())})}},{key:"updateDisable",value:function(t){this.annotations.forEach(function(e){e.disable=t,e.type&&t.forEach(function(t){e.type[t]&&(e.type[t].remove&&e.type[t].remove(),e.type[t]=void 0)})})}},{key:"updateTextWrap",value:function(t){this.annotations.forEach(function(e){e.type&&e.type.updateTextWrap&&e.type.updateTextWrap(t)})}},{key:"updateText",value:function(){this.annotations.forEach(function(t){t.type&&t.type.drawText&&t.type.drawText()})}},{key:"updateNotePadding",value:function(t){this.annotations.forEach(function(e){e.type&&(e.type.notePadding=t)})}},{key:"json",get:function(){var t=this;return this.annotations.map(function(e){var n=e.json;return t.accessorsInverse&&e.data&&(n.data={},Object.keys(t.accessorsInverse).forEach(function(o){n.data[o]=t.accessorsInverse[o]({x:e.x,y:e.y})})),n})}},{key:"noteNodes",get:function(){return this.annotations.map(function(t){return d({},t.type.getNoteBBoxOffset(),{positionX:t.x,positionY:t.y})})}}]),t}(),v=function(t){var e=t.cx,n=void 0===e?0:e,o=t.cy;return{move:{x:n,y:void 0===o?0:o}}},g=function(t){var e=t.cx,n=void 0===e?0:e,o=t.cy,a=void 0===o?0:o,i=t.r1,s=t.r2,r=t.padding,c={move:{x:n,y:a}};return void 0!==i&&(c.r1={x:n+i/Math.sqrt(2),y:a+i/Math.sqrt(2)}),void 0!==s&&(c.r2={x:n+s/Math.sqrt(2),y:a+s/Math.sqrt(2)}),void 0!==r&&(c.padding={x:n+i+r,y:a}),c},b=function(t){var o=t.group,a=t.handles,i=t.r,s=void 0===i?10:i,r=o.selectAll("circle.handle").data(a);r.enter().append("circle").attr("class","handle").attr("fill","grey").attr("fill-opacity",.1).attr("cursor","move").attr("stroke-dasharray",5).attr("stroke","grey").call(n.drag().container(e.select("g.annotations").node()).on("start",function(t){return t.start&&t.start(t)}).on("drag",function(t){return t.drag&&t.drag(t)}).on("end",function(t){return t.end&&t.end(t)})),o.selectAll("circle.handle").attr("cx",function(t){return t.x}).attr("cy",function(t){return t.y}).attr("r",function(t){return t.r||s}).attr("class",function(t){return"handle "+(t.className||"")}),r.exit().remove()},x=function(t,e){return"dynamic"!==t&&"left"!==t&&"right"!==t||(t=e<0?"top":"bottom"),t},m=function(t,e){return"dynamic"!==t&&"top"!==t&&"bottom"!==t||(t=e<0?"right":"left"),t},j=["topBottom","top","bottom"],w=["leftRight","left","right"],_=function(t){var e=t.padding,n=void 0===e?0:e,o=t.bbox,a=void 0===o?{x:0,y:0,width:0,height:0}:o,i=t.align,s=t.orientation,r=t.offset,c=void 0===r?{x:0,y:0}:r,d=-a.x,u=0;return j.indexOf(s)!==-1?(i=m(i,c.x),c.y<0&&"topBottom"===s||"top"===s?u-=a.height+n:u+=n,"middle"===i?d-=a.width/2:"right"===i&&(d-=a.width)):w.indexOf(s)!==-1&&(i=x(i,c.y),c.x<0&&"leftRight"===s||"left"===s?d-=a.width+n:d+=n,"middle"===i?u-=a.height/2:"top"===i&&(u-=a.height)),{x:d,y:u}},k=function(t){var e=t.data,n=t.curve,a=void 0===n?o.curveLinear:n,i=t.canvasContext,s=t.className,r=t.classID,c=o.line().curve(a),d={type:"path",className:s,classID:r,data:e};return i?(c.context(i),d.pathMethods=c):d.attrs={d:c(e)},d},O=function(t){var e=t.data,n=t.canvasContext,a=t.className,i=t.classID,s={type:"path",className:a,classID:i,data:e},r=o.arc().innerRadius(e.innerRadius||0).outerRadius(e.outerRadius||e.radius||2).startAngle(e.startAngle||0).endAngle(e.endAngle||2*Math.PI);return n?(r.context(n),s.pathMethods=lineGen):s.attrs={d:r()},s},N=function(t){var e=t.align,n=t.x,o=void 0===n?0:n,a=t.y,i=void 0===a?0:a,s=t.bbox;return e=x(e,t.offset.y),"top"===e?i-=s.height:"middle"===e&&(i-=s.height/2),{components:[k({data:[[o,i],[o,i+s.height]],className:"note-line"})]}},M=function(t){var e=t.align,n=t.x,o=void 0===n?0:n,a=t.y,i=void 0===a?0:a,s=t.offset,r=t.bbox;return e=m(e,s.x),"right"===e?o-=r.width:"middle"===e&&(o-=r.width/2),{components:[k({data:[[o,i],[o+r.width,i]],className:"note-line"})]}},S=function(t){var e=t.type,n=t.subjectType,o=e.annotation,a=o.position,i=o.x-a.x,s=i+o.dx,r=o.y-a.y,c=r+o.dy,d=o.subject;if("circle"===n&&(d.outerRadius||d.radius)){var u=Math.sqrt((i-s)*(i-s)+(r-c)*(r-c)),h=Math.asin(-c/u),l=d.outerRadius||d.radius+(d.radiusPadding||0);i=Math.abs(Math.cos(h)*l)*(s<0?-1:1),r=Math.abs(Math.sin(h)*l)*(c<0?-1:1)}if("rect"===n){var p=d.width,y=d.height;(p>0&&o.dx>0||p<0&&o.dx<0)&&(i=Math.abs(p)>Math.abs(o.dx)?p/2:p),(y>0&&o.dy>0||y<0&&o.dy<0)&&(r=Math.abs(y)>Math.abs(o.dy)?y/2:y),i===p/2&&r===y/2&&(i=s,r=c)}return[[i,r],[s,c]]},C=function(t){return{components:[k({data:S(t),className:"connector"})]}},P=function(t){var e=t.type,n=t.subjectType,o=e.annotation,a=o.position,i=o.x-a.x,s=i+o.dx,r=o.y-a.y,c=r+o.dy,d=o.subject;if("rect"===n){var u=d.width,h=d.height;(u>0&&o.dx>0||u<0&&o.dx<0)&&(i=Math.abs(u)>Math.abs(o.dx)?u/2:u),(h>0&&o.dy>0||h<0&&o.dy<0)&&(r=Math.abs(h)>Math.abs(o.dy)?h/2:h),i===u/2&&r===h/2&&(i=s,r=c)}var l=[[i,r],[s,c]],p=c-r,y=s-i,f=s,v=c,g=ci||sr?-1:1;if(Math.abs(y)x&&Math.abs(p)>x)i=x*(s<0?-1:1),r=x*(c<0?-1:1),l=[[i,r],[f,v],[s,c]];else if(Math.abs(y)>Math.abs(p)){var m=Math.asin(-c/b);i=Math.abs(Math.cos(m)*b)*(s<0?-1:1),l=[[i,c],[s,c]]}else{var j=Math.acos(s/b);r=Math.abs(Math.sin(j)*b)*(c<0?-1:1),l=[[s,r],[s,c]]}}else l=[[i,r],[f,v],[s,c]];return{components:[k({data:l,className:"connector"})]}},T=function(t){var n=t.type,a=t.connectorData,i=t.subjectType;a||(a={}),a.points&&"number"!=typeof a.points||(a.points=A(n.annotation.offset,a.points)),a.curve||(a.curve=o.curveCatmullRom);var s=[];if(n.editMode){var r=a.points.map(function(t,e){return d({},v({cx:t[0],cy:t[1]}),{index:e})}),c=function(t){a.points[t][0]+=e.event.dx,a.points[t][1]+=e.event.dy,n.redrawConnector()};s=n.mapHandles(r.map(function(t){return d({},t.move,{drag:c.bind(n,t.index)})}))}var u=S({type:n,subjectType:i});return u=[u[0]].concat(p(a.points),[u[1]]),{components:[k({data:u,curve:a.curve,className:"connector"})],handles:s}},A=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n={x:t.x/(e+1),y:t.y/(e+1)},o=[],a=1;a<=e;a++)o.push([n.x*a+a%2*20,n.y*a-a%2*20]);return o},E=function(t){var e=t.annotation,n=t.start,o=t.end,a=t.scale,i=void 0===a?1:a,s=e.position;n=n?[-o[0]+n[0],-o[1]+n[1]]:[e.dx,e.dy],o||(o=[e.x-s.x,e.y-s.y]);var r=o[0],c=o[1],d=n[0],u=n[1],h=10*i,l=16/180*Math.PI,p=Math.atan(u/d);return d<0&&(p+=Math.PI),{components:[k({data:[[r,c],[Math.cos(p+l)*h+r,Math.sin(p+l)*h+c],[Math.cos(p-l)*h+r,Math.sin(p-l)*h+c],[r,c]],className:"connector-end connector-arrow",classID:"connector-end"})]}},R=function(t){var e=t.line,n=t.scale,o=void 0===n?1:n,a=O({className:"connector-end connector-dot",classID:"connector-end",data:{radius:3*Math.sqrt(o)}});return a.attrs.transform="translate("+e.data[0][0]+", "+e.data[0][1]+")",{components:[a]}},B=function(t){var n=t.subjectData,o=t.type;n.radius||n.outerRadius||(n.radius=20);var a=[],i=O({data:n,className:"subject"});if(o.editMode){var s=g({r1:i.data.outerRadius||i.data.radius,r2:i.data.innerRadius,padding:n.radiusPadding}),r=function(t){var a=n[t]+e.event.dx*Math.sqrt(2);n[t]=a,o.redrawSubject(),o.redrawConnector()},c=[d({},s.r1,{drag:r.bind(o,void 0!==n.outerRadius?"outerRadius":"radius")})];n.innerRadius&&c.push(d({},s.r2,{drag:r.bind(o,"innerRadius")})),a=o.mapHandles(c)}return i.attrs["fill-opacity"]=0,{components:[i],handles:a}},I=function(t){var n=t.subjectData,o=t.type;n.width||(n.width=100),n.height||(n.height=100);var a=[],i=n.width,s=n.height,r=[[0,0],[i,0],[i,s],[0,s],[0,0]],c=k({data:r,className:"subject"});if(o.editMode){var d=function(){n.width=e.event.x,o.redrawSubject(),o.redrawConnector()},u=function(){n.height=e.event.y,o.redrawSubject(),o.redrawConnector()},h=[{x:i,y:s/2,drag:d.bind(o)},{x:i/2,y:s,drag:u.bind(o)}];a=o.mapHandles(h)}return c.attrs["fill-opacity"]=.1,{components:[c],handles:a}},q=function(t){var e=t.subjectData,n=t.type,o=n.annotation.position,a=(void 0!==e.x1?e.x1:o.x)-o.x,i=(void 0!==e.x2?e.x2:o.x)-o.x;return{components:[k({data:[[a,(void 0!==e.y1?e.y1:o.y)-o.y],[i,(void 0!==e.y2?e.y2:o.y)-o.y]],className:"subject"})]}},D=function(t){var n=t.subjectData,o=void 0===n?{}:n,a=t.type,i=void 0===a?{}:a,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=i.typeSettings&&i.typeSettings.subject;o.radius||(r&&r.radius?o.radius=r.radius:o.radius=14),o.x||r&&r.x&&(o.x=r.x),o.y||r&&r.y&&(o.y=r.y);var c=[],d=[],u=o.radius,h=.7*u,l=0,p=0,y=Math.sqrt(2)*u,f={xleftcorner:-u,xrightcorner:u,ytopcorner:-u,ybottomcorner:u,xleft:-y,xright:y,ytop:-y,ybottom:y};o.x&&!o.y?l=f["x"+o.x]:o.y&&!o.x?p=f["y"+o.y]:o.x&&o.y&&(l=f["x"+o.x+"corner"],p=f["y"+o.y+"corner"]);var v="translate("+l+", "+p+")",g=O({className:"subject",data:{radius:u}});g.attrs.transform=v,g.attrs.fill=s.color,g.attrs["stroke-linecap"]="round",g.attrs["stroke-width"]="3px";var b=O({className:"subject-ring",data:{outerRadius:u,innerRadius:h}});b.attrs.transform=v,b.attrs["stroke-width"]="3px",b.attrs.fill="white";var x=void 0;if(l&&p||!l&&!p)x=k({className:"subject-pointer",data:[[0,0],[l||0,0],[0,p||0],[0,0]]});else if(l||p){var m=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return t&&t/Math.sqrt(2)/Math.sqrt(2)||e*u/Math.sqrt(2)};x=k({className:"subject-pointer",data:[[0,0],[m(l),m(p)],[m(l,-1),m(p,-1)],[0,0]]})}if(x&&(x.attrs.fill=s.color,x.attrs["stroke-linecap"]="round",x.attrs["stroke-width"]="3px",d.push(x)),i.editMode){var j=function(){o.x=e.event.x<2*-u?"left":e.event.x>2*u?"right":void 0,o.y=e.event.y<2*-u?"top":e.event.y>2*u?"bottom":void 0,i.redrawSubject()},w={x:2*l,y:2*p,drag:j.bind(i)};w.x||w.y||(w.y=-u),c=i.mapHandles([w])}var _=void 0;return o.text&&(_={type:"text",className:"badge-text",attrs:{fill:"white",stroke:"none","font-size":".7em",text:o.text,"text-anchor":"middle",dy:".25em",x:l,y:p}}),d.push(g),d.push(b),d.push(_),{components:d,handles:c}},W=function(){function t(e){var n=e.a,o=e.annotation,a=e.editMode,i=e.dispatcher,s=e.notePadding,c=e.accessors;if(r(this,t),this.a=n,this.note=o.disable.indexOf("note")===-1&&n.select("g.annotation-note"),this.noteContent=this.note&&n.select("g.annotation-note-content"),this.connector=o.disable.indexOf("connector")===-1&&n.select("g.annotation-connector"),this.subject=o.disable.indexOf("subject")===-1&&n.select("g.annotation-subject"),this.dispatcher=i,i){var d=Z.bind(null,i,o);d({component:this.note,name:"note"}),d({component:this.connector,name:"connector"}),d({component:this.subject,name:"subject"})}this.annotation=o,this.editMode=o.editMode||a,this.notePadding=void 0!==s?s:3,this.offsetCornerX=0,this.offsetCornerY=0,c&&o.data&&this.init(c)}return c(t,[{key:"init",value:function(t){this.annotation.x||this.mapX(t),this.annotation.y||this.mapY(t)}},{key:"mapY",value:function(t){t.y&&(this.annotation.y=t.y(this.annotation.data))}},{key:"mapX",value:function(t){t.x&&(this.annotation.x=t.x(this.annotation.data))}},{key:"updateEditMode",value:function(){this.a.selectAll("circle.handle").remove()}},{key:"drawOnSVG",value:function(t,e){var n=this;Array.isArray(e)||(e=[e]),e.filter(function(t){return t}).forEach(function(e){var o=e.type,a=e.className,i=e.attrs,s=e.handles,r=e.classID;if("handle"===o)b({group:t,r:i&&i.r,handles:s});else{U(t,[n.annotation],o,a,r);for(var c=t.select(o+"."+(r||a)),d=Object.keys(i),u=[],h=c.node().attributes,l=h.length-1;l>=0;l--){var p=h[l].name;d.indexOf(p)===-1&&"class"!==p&&u.push(p)}d.forEach(function(t){"text"===t?c.text(i[t]):c.attr(t,i[t])}),u.forEach(function(t){return c.attr(t,null)})}})}},{key:"getNoteBBox",value:function(){return tt(this.note,".annotation-note-content text")}},{key:"getNoteBBoxOffset",value:function(){var t=tt(this.note,".annotation-note-content"),e=this.noteContent.attr("transform").split(/\(|\,|\)/g);return t.offsetCornerX=parseFloat(e[1])+this.annotation.dx,t.offsetCornerY=parseFloat(e[2])+this.annotation.dy,t.offsetX=this.annotation.dx,t.offsetY=this.annotation.dy,t}},{key:"drawSubject",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.annotation.subject,o=e.type,a={type:this,subjectData:n},i={};"circle"===o?i=B(a):"rect"===o?i=I(a):"threshold"===o?i=q(a):"badge"===o&&(i=D(a,this.annotation));var s=i,r=s.components,c=void 0===r?[]:r,d=s.handles,u=void 0===d?[]:d;return c.forEach(function(e){e&&e.attrs&&!e.attrs.stroke&&(e.attrs.stroke=t.annotation.color)}),this.editMode&&(u=u.concat(this.mapHandles([{drag:this.dragSubject.bind(this)}])),c.push({type:"handle",handles:u})),c}},{key:"drawConnector",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.annotation.connector,o=n.type||e.type,a={type:this,connectorData:n};a.subjectType=this.typeSettings&&this.typeSettings.subject&&this.typeSettings.subject.type;var i={};i="curve"===o?T(a):"elbow"===o?P(a):C(a);var s=i,r=s.components,c=void 0===r?[]:r,d=s.handles,u=void 0===d?[]:d,h=c[0];h&&(h.attrs.stroke=this.annotation.color,h.attrs.fill="none");var l=n.end||e.end,p={};if("arrow"===l){var y=h.data[1],f=h.data[0];Math.sqrt(Math.pow(y[0]-f[0],2)+Math.pow(y[1]-f[1],2))<5&&h.data[2]&&(y=h.data[2]),p=E({annotation:this.annotation,start:y,end:f,scale:n.endScale})}else"dot"===l?p=R({line:h,scale:n.endScale}):l&&"none"!==l||this.connector&&this.connector.select(".connector-end").remove();return p.components&&(p.components.forEach(function(e){e.attrs.fill=t.annotation.color,e.attrs.stroke=t.annotation.color}),c=c.concat(p.components)),this.editMode&&0!==u.length&&c.push({type:"handle",handles:u}),c}},{key:"drawNote",value:function(){var t=this,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=this.annotation.note,i=a.align||o.align||"dynamic",s={bbox:o.bbox,align:i,offset:this.annotation.offset},r=a.lineType||o.lineType,c={};"vertical"===r?c=N(s):"horizontal"===r&&(c=M(s));var d=c,u=d.components,h=void 0===u?[]:u,l=d.handles,p=void 0===l?[]:l;if(h.forEach(function(e){e.attrs.stroke=t.annotation.color}),this.editMode){p=this.mapHandles([{x:0,y:0,drag:this.dragNote.bind(this)}]),h.push({type:"handle",handles:p});var y=this.dragNote.bind(this),f=this.dragstarted.bind(this),v=this.dragended.bind(this);this.note.call(n.drag().container(e.select("g.annotations").node()).on("start",function(t){return f(t)}).on("drag",function(t){return y(t)}).on("end",function(t){return v(t)}))}else this.note.on("mousedown.drag",null);return h}},{key:"drawNoteContent",value:function(t){var e=this.annotation.note,n=void 0!==e.padding?e.padding:this.notePadding,o=e.orientation||t.orientation||"topBottom",a=e.lineType||t.lineType,i=e.align||t.align||"dynamic";"vertical"===a?o="leftRight":"horizontal"===a&&(o="topBottom");var s={padding:n,bbox:t.bbox,offset:this.annotation.offset,orientation:o,align:i},r=_(s),c=r.x,d=r.y;return this.offsetCornerX=c+this.annotation.dx,this.offsetCornerY=d+this.annotation.dy,this.note&&this.noteContent.attr("transform","translate("+c+", "+d+")"),[]}},{key:"drawOnScreen",value:function(t,e){return this.drawOnSVG(t,e)}},{key:"redrawSubject",value:function(){this.subject&&this.drawOnScreen(this.subject,this.drawSubject())}},{key:"redrawConnector",value:function(){this.connector&&this.drawOnScreen(this.connector,this.drawConnector())}},{key:"redrawNote",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getNoteBBox();this.noteContent&&this.drawOnScreen(this.noteContent,this.drawNoteContent({bbox:t})),this.note&&this.drawOnScreen(this.note,this.drawNote({bbox:t}))}},{key:"setPosition",value:function(){var t=this.annotation.position;this.a.attr("transform","translate("+t.x+", "+t.y+")")}},{key:"clearComponents",value:function(){this.subject&&this.subject.select("*").remove(),this.connector&&this.connector.select("*").remove()}},{key:"setOffset",value:function(){if(this.note){var t=this.annotation.offset;this.note.attr("transform","translate("+t.x+", "+t.y+")")}}},{key:"setPositionWithAccessors",value:function(t){t&&this.annotation.data&&(this.mapX(t),this.mapY(t)),this.setPosition()}},{key:"setClassName",value:function(){this.a.attr("class","annotation "+(this.className&&this.className())+" "+(this.editMode?"editable":"")+" "+(this.annotation.className||""))}},{key:"draw",value:function(){this.setClassName(),this.setPosition(),this.setOffset(),this.redrawSubject(),this.redrawConnector(),this.redrawNote()}},{key:"dragstarted",value:function(){e.event.sourceEvent.stopPropagation(),this.dispatcher&&this.dispatcher.call("dragstart",this.a,this.annotation),this.a.classed("dragging",!0),this.a.selectAll("circle.handle").style("pointer-events","none")}},{key:"dragended",value:function(){this.dispatcher&&this.dispatcher.call("dragend",this.a,this.annotation),this.a.classed("dragging",!1),this.a.selectAll("circle.handle").style("pointer-events","all")}},{key:"dragSubject",value:function(){var t=this.annotation.position;t.x+=e.event.dx,t.y+=e.event.dy,this.annotation.position=t}},{key:"dragNote",value:function(){var t=this.annotation.offset;t.x+=e.event.dx,t.y+=e.event.dy,this.annotation.offset=t}},{key:"mapHandles",value:function(t){var e=this;return t.map(function(t){return d({},t,{start:e.dragstarted.bind(e),end:e.dragended.bind(e)})})}}]),t}(),X=function(t,e,n){return function(t){function o(t){r(this,o);var n=l(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,t));return n.typeSettings=e,e.disable&&e.disable.forEach(function(t){n[t]&&n[t].remove(),n[t]=void 0,"note"===t&&(n.noteContent=void 0)}),n}return h(o,t),c(o,[{key:"className",value:function(){return""+(e.className||u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"className",this)&&u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"className",this).call(this)||"")}},{key:"drawSubject",value:function(t){return this.typeSettings.subject=d({},e.subject,this.typeSettings.subject),u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"drawSubject",this).call(this,d({},t,this.typeSettings.subject))}},{key:"drawConnector",value:function(t){return this.typeSettings.connector=d({},e.connector,this.typeSettings.connector),u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"drawConnector",this).call(this,d({},t,e.connector,this.typeSettings.connector))}},{key:"drawNote",value:function(t){return this.typeSettings.note=d({},e.note,this.typeSettings.note),u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"drawNote",this).call(this,d({},t,e.note,this.typeSettings.note))}},{key:"drawNoteContent",value:function(t){return u(o.prototype.__proto__||Object.getPrototypeOf(o.prototype),"drawNoteContent",this).call(this,d({},t,e.note,this.typeSettings.note))}}],[{key:"init",value:function(t,e){return u(o.__proto__||Object.getPrototypeOf(o),"init",this).call(this,t,e),n&&(t=n(t,e)),t}}]),o}(t)},Y=function(t){function e(t){r(this,e);var n=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return n.textWrap=t.textWrap||120,n.drawText(),n}return h(e,t),c(e,[{key:"updateTextWrap",value:function(t){this.textWrap=t,this.drawText()}},{key:"drawText",value:function(){if(this.note){U(this.note,[this.annotation],"g","annotation-note-content");var t=this.note.select("g.annotation-note-content");U(t,[this.annotation],"rect","annotation-note-bg"),U(t,[this.annotation],"text","annotation-note-label"),U(t,[this.annotation],"text","annotation-note-title");var e={height:0},n=this.a.select("text.annotation-note-label"),o=this.annotation.note&&this.annotation.note.wrap||this.typeSettings&&this.typeSettings.note&&this.typeSettings.note.wrap||this.textWrap,a=this.annotation.note&&this.annotation.note.wrapSplitter||this.typeSettings&&this.typeSettings.note&&this.typeSettings.note.wrapSplitter,i=this.annotation.note&&this.annotation.note.bgPadding||this.typeSettings&&this.typeSettings.note&&this.typeSettings.note.bgPadding,r={top:0,bottom:0,left:0,right:0};if("number"==typeof i?r={top:i,bottom:i,left:i,right:i}:i&&"object"===(void 0===i?"undefined":s(i))&&(r=d(r,i)),this.annotation.note.title){var c=this.a.select("text.annotation-note-title");c.text(this.annotation.note.title),c.attr("fill",this.annotation.color),c.attr("font-weight","bold"),c.call($,o,a),e=c.node().getBBox()}n.text(this.annotation.note.label).attr("dx","0"),n.call($,o,a),n.attr("y",1.1*e.height||0),n.attr("fill",this.annotation.color);var u=this.getNoteBBox();this.a.select("rect.annotation-note-bg").attr("width",u.width+r.left+r.right).attr("height",u.height+r.top+r.bottom).attr("x",u.x-r.left).attr("y",-r.top).attr("fill","white").attr("fill-opacity",0)}}}]),e}(W),H=X(Y,{className:"label",note:{align:"middle"}}),z=X(Y,{className:"callout",note:{lineType:"horizontal"}}),F=X(z,{className:"callout elbow",connector:{type:"elbow"}}),J=X(z,{className:"callout curve",connector:{type:"curve"}}),L=X(W,{className:"badge",subject:{type:"badge"},disable:["connector","note"]}),G=X(Y,{className:"callout circle",subject:{type:"circle"},note:{lineType:"horizontal"},connector:{type:"elbow"}}),V=X(Y,{className:"callout rect",subject:{type:"rect"},note:{lineType:"horizontal"},connector:{type:"elbow"}}),K=function(t){function e(){return r(this,e),l(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return h(e,t),c(e,[{key:"mapY",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"mapY",this).call(this,t);var n=this.annotation;(n.subject.x1||n.subject.x2)&&n.data&&t.y&&(n.y=t.y(n.data)),!n.subject.x1&&!n.subject.x2||n.x||(n.x=n.subject.x1||n.subject.x2)}},{key:"mapX",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"mapX",this).call(this,t);var n=this.annotation;(n.subject.y1||n.subject.y2)&&n.data&&t.x&&(n.x=t.x(n.data)),!n.subject.y1&&!n.subject.y2||n.y||(n.y=n.subject.y1||n.subject.y2)}}]),e}(z),Q=X(K,{className:"callout xythreshold",subject:{type:"threshold"}}),U=function(t,e,n,o,a){var i=t.selectAll(n+"."+(a||o)).data(e);return i.enter().append(n).merge(i).attr("class",o),i.exit().remove(),t},Z=function(t,e,n){var o=n.component,a=n.name;o&&o.on("mouseover.annotations",function(){t.call(a+"over",o,e)}).on("mouseout.annotations",function(){return t.call(a+"out",o,e)}).on("click.annotations",function(){return t.call(a+"click",o,e)})},$=function(t,n,o){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1.2;t.each(function(){for(var t=e.select(this),i=t.text().split(o||/[ \t\r\n]+/).reverse().filter(function(t){return""!==t}),s=void 0,r=[],c=t.text(null).append("tspan").attr("x",0).attr("dy","0.8em");s=i.pop();)r.push(s),c.text(r.join(" ")),c.node().getComputedTextLength()>n&&r.length>1&&(r.pop(),c.text(r.join(" ")),r=[s],c=t.append("tspan").attr("x",0).attr("dy",a+"em").text(s))})},tt=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:":not(.handle)";return t?t.selectAll(e).nodes().reduce(function(t,e){var n=e.getBBox();t.x=Math.min(t.x,n.x),t.y=Math.min(t.y,n.y),t.width=Math.max(t.width,n.width);var o=e&&e.attributes&&e.attributes.y;return t.height=Math.max(t.height,(o&&parseFloat(o.value)||0)+n.height),t},{x:0,y:0,width:0,height:0}):{x:0,y:0,width:0,height:0}},et={annotation:i,annotationTypeBase:W,annotationLabel:H,annotationCallout:z,annotationCalloutCurve:J,annotationCalloutElbow:F,annotationCalloutCircle:G,annotationCalloutRect:V,annotationXYThreshold:Q,annotationBadge:L,annotationCustomType:X};t.annotation=i,t.annotationTypeBase=W,t.annotationLabel=H,t.annotationCallout=z,t.annotationCalloutCurve=J,t.annotationCalloutElbow=F,t.annotationCalloutCircle=G,t.annotationCalloutRect=V,t.annotationXYThreshold=Q,t.annotationBadge=L,t.annotationCustomType=X,t.default=et,Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/cmipld/graph/serve/index.html b/cmipld/graph/serve/index.html new file mode 100644 index 0000000..63af68b --- /dev/null +++ b/cmipld/graph/serve/index.html @@ -0,0 +1,383 @@ + + + + + + + D3 Force Directed Graph with Annotations + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/cmipld/graph/serve/network.json b/cmipld/graph/serve/network.json new file mode 120000 index 0000000..40de889 --- /dev/null +++ b/cmipld/graph/serve/network.json @@ -0,0 +1 @@ +../graph.json \ No newline at end of file diff --git a/cmipld/graph/serve/server.py b/cmipld/graph/serve/server.py new file mode 100644 index 0000000..dbfbb64 --- /dev/null +++ b/cmipld/graph/serve/server.py @@ -0,0 +1,10 @@ +import http.server +import socketserver + +PORT = 8000 + +Handler = http.server.SimpleHTTPRequestHandler + +with socketserver.TCPServer(("", PORT), Handler) as httpd: + print("Serving at port", PORT) + httpd.serve_forever() diff --git a/cmipld/graph/walk.ipynb b/cmipld/graph/walk.ipynb new file mode 100644 index 0000000..1307670 --- /dev/null +++ b/cmipld/graph/walk.ipynb @@ -0,0 +1,208 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import json \n", + "from pprint import pprint\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "graph = json.load(open('graph.json'))\n", + "links = graph['links']\n", + "types = graph['types']" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'frequency:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary',\n", + " 'mip:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary',\n", + " 'product:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary',\n", + " 'realm:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary',\n", + " 'source-type:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/auxillary',\n", + " 'grid-label:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/grid',\n", + " 'license:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD',\n", + " 'consortium:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations',\n", + " 'institution:graph': 'https://github.com/PCMDI/mip-cmor-tables/JSONLD/organisations',\n", + " 'activity-id:graph': 'https://github.com/WCRP-CMIP/CMIP6Plus_CVs/JSONLD',\n", + " 'mip:frequency': 'mip-cmor-tables:auxillary/frequency',\n", + " 'mip:mip-era': 'mip-cmor-tables:auxillary/mip-era',\n", + " 'mip:mip:native-nominal-resolution': 'mip-cmor-tables:auxillary/native-nominal-resolution',\n", + " 'mip:product': 'mip-cmor-tables:auxillary/product',\n", + " 'mip:realm': 'mip-cmor-tables:auxillary/realm',\n", + " 'mip:source-type': 'mip-cmor-tables:auxillary/source-type',\n", + " 'mip:grid-label': 'mip-cmor-tables:grid/label',\n", + " 'mip:license': 'mip-cmor-tables:license',\n", + " 'mip:consortium': 'mip-cmor-tables:organisations/consortia',\n", + " 'mip:institution': 'mip-cmor-tables:organisations/institutions',\n", + " 'institution:location': 'mip-cmor-tables:organisations/institutions/location',\n", + " 'mip:activity-id': 'cmip6plus:activity',\n", + " 'mip:core-descriptors': 'cmip6plus:core',\n", + " 'mip:drs': 'cmip6plus:core',\n", + " 'mip:index': 'cmip6plus:core',\n", + " 'mip:experiment-id': 'cmip6plus:experiment/id',\n", + " 'mip:sub-experiment-id': 'cmip6plus:experiment/sub-id',\n", + " 'mip:model-component': 'cmip6plus:model/component',\n", + " 'mip:source-id': 'cmip6plus:source/id'}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "types" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'source': 'cmip6plus:source/id',\n", + " 'target': 'cmip6plus:activity',\n", + " 'predicate': 'source-id:activity-participation',\n", + " 'weight': 12},\n", + " {'source': 'cmip6plus:source/id',\n", + " 'target': 'cmip6plus:model/component',\n", + " 'predicate': 'source-id:model-component',\n", + " 'weight': 36},\n", + " {'source': 'cmip6plus:source/id',\n", + " 'target': 'mip-cmor-tables:organisations/institutions',\n", + " 'predicate': 'source-id:organisation-id',\n", + " 'weight': 4},\n", + " {'source': 'cmip6plus:source/id',\n", + " 'target': 'mip-cmor-tables:organisations/consortia',\n", + " 'predicate': 'source-id:organisation-id',\n", + " 'weight': 2}]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selection = 'mip:source-id'\n", + "sid = types[selection]\n", + "filtered_links = [link for link in links if link['source'] == sid]\n", + "filtered_links" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "def walk_graph(sid):\n", + " links = [link for link in graph['links'] if link['source'] == sid]\n", + " if len(links) == 0:\n", + " return {'@extend':True}\n", + " \n", + " output = {}\n", + " for link in links:\n", + " output[link['predicate']] = walk_graph(link['target'])\n", + " \n", + " return output\n", + "\n", + "\n", + "def get_context(selection):\n", + "# selection = 'mip:source-id'\n", + " sid = types[selection]\n", + " structure = walk_graph(sid)\n", + " return json.dumps({\"@context\":{\"@vocab\":selection.replace('mip:',''),**structure}}, indent=2)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"@context\": {\n", + " \"@vocab\": \"activity-id\",\n", + " \"@extend\": true\n", + " }\n", + "},\n" + ] + } + ], + "source": [ + "print(get_context('mip:activity-id')+',')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'latest' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[28], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mlatest\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'latest' is not defined" + ] + } + ], + "source": [ + "EXTEND NEEDS TO BE IN get_context" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/scripts/directory-utilities/combine-graphs b/scripts/directory-utilities/combine-graphs new file mode 100755 index 0000000..ea58a31 --- /dev/null +++ b/scripts/directory-utilities/combine-graphs @@ -0,0 +1,64 @@ +#!/bin/bash + +# ./combine_graphs.sh compiled/graph_data .. graph ../miptables +# ./combine_graphs.sh compiled/data_request ../miptables graph none +# ./combine_graphs.sh compiled/versioning .. version none + +# Check if the correct number of arguments is provided +if [ "$#" -lt 4 ]; then + echo "Usage: $0 [ ...]" + exit 1 +fi + +# Assign arguments to variables +OUTPUT_FILE="$1.json" +MINIFIED_OUTPUT_FILE="${OUTPUT_FILE%.*}.min.json" +SEARCH_DIR="$2" +FILE_NAME="$3.jsonld" +shift 3 +SKIP_DIRS=("$@") + +# Function to check if a directory is in the skip list +function is_skipped { + local dir=$1 + for skip in "${SKIP_DIRS[@]}"; do + if [[ "$dir" == *"$skip"* ]]; then + return 0 + fi + done + return 1 +} + +# Remove the output files if they exist +[ -f "$OUTPUT_FILE" ] && rm "$OUTPUT_FILE" +[ -f "$MINIFIED_OUTPUT_FILE" ] && rm "$MINIFIED_OUTPUT_FILE" + +# Initialize/clear the output files and start the JSON array +echo "[" > "$OUTPUT_FILE" +echo "[" > "$MINIFIED_OUTPUT_FILE" + +# Variable to track if an entry has been added (to handle commas correctly) +first_entry=true + +# Find all specified JSON files, skipping directories in SKIP_DIRS +find "$SEARCH_DIR" -type f -name "$FILE_NAME" | while read -r file; do + dir=$(dirname "$file") + if ! is_skipped "$dir"; then + if [ "$first_entry" = true ]; then + first_entry=false + else + echo "," >> "$OUTPUT_FILE" + fi + echo "Found: $file" + cat "$file" >> "$OUTPUT_FILE" + fi +done + +# Close the JSON array +echo "]" >> "$OUTPUT_FILE" + +# Create a minified version of the concatenated file +jq -c . "$OUTPUT_FILE" > "$MINIFIED_OUTPUT_FILE" + +echo "All $FILE_NAME files have been concatenated into $OUTPUT_FILE" +echo "A minified version has been created as $MINIFIED_OUTPUT_FILE" diff --git a/scripts/directory-utilities/compile-ld b/scripts/directory-utilities/compile-ld new file mode 100755 index 0000000..1f6f197 --- /dev/null +++ b/scripts/directory-utilities/compile-ld @@ -0,0 +1,6 @@ +#! /bin/bash +#make this a script to read args of both! +updateld $@; + +mkdir compiled +combine-graphs compiled/graph_data . graph ./scripts diff --git a/scripts/jsonld-util/rmbak.sh b/scripts/jsonld-util/rmbak.sh old mode 100644 new mode 100755 diff --git a/scripts/jsonld-util/rmgraph.sh b/scripts/jsonld-util/rmgraph.sh old mode 100644 new mode 100755 diff --git a/scripts/jsonld-util/rmnest.sh b/scripts/jsonld-util/rmnest.sh old mode 100644 new mode 100755 diff --git a/scripts/jsonld-util/rmset.sh b/scripts/jsonld-util/rmset.sh old mode 100644 new mode 100755 diff --git a/setup.py b/setup.py index 31bf8cc..b5ee157 100644 --- a/setup.py +++ b/setup.py @@ -12,11 +12,17 @@ ], entry_points={ "console_scripts": [ - "cmipld=cmipld.cmipld:main", + "cmipgraph=cmipld.graph:main", + "updateld=cmipld.generate.update_new:init", + "ldcontext=cmipld.generate.update_new:init", ], }, + scripts=[ + "scripts/directory-utilities/combine-graphs", + "scripts/directory-utilities/compile-ld", + ], include_package_data=True, package_data={ - "cmipld": ["scripts/*.sh"], + "cmipld": ["scripts/*/*.sh"], }, )