Top-level model description (EMD v1.0 Section 2). The following properties provide a top-level description of the model as a whole.


Quick Reference

Type URI emd:model
Entries 1
Validation ✓ Validated
Pydantic Model Model
JSON-LD emd:model
Source View on GitHub
Contribute Submit or Edit
Generated 2026-02-22

Schema

The JSON structure and validation for this vocabulary is defined using the Model Pydantic model in esgvoc. This ensures data consistency and provides automatic validation of all entries. Click field name for description.

Required Fields

Field Type Constraints References
name str min_length=1 -
calendar List[str | Calendar] min_length=1 calendar
dynamic_components List[str | ComponentType] min_length=1 ComponentType, component
family str min_length=1 -
model_components List[str | EMDModelComponent] - -
references List[str | Reference] min_length=1 -
release_year int min=1900, max=2100 -

Optional Fields

Field Type Constraints References
description str min_length=1 -
omitted_components List[str | ComponentType] - ComponentType, component
prescribed_components List[str | ComponentType] - ComponentType, component

Field Descriptions

Description

A scientific overview of the top-level model. The description should include a brief mention of all the components listed in the 7.1 component CV, whether dynamically simulated, prescribed, or omitted.

Validation: validate_non_empty_strings [source]

Validate that string fields are not empty.

def validate_non_empty_strings(cls, v):
        """Validate that string fields are not empty."""
        if isinstance(v, str):
            if not v.strip():
                raise ValueError("Field cannot be empty")
            return v.strip()
        return v

Name

The name of the top-level model. For CMIP7, this name will be registered as the model's source_id.

Validation: validate_non_empty_strings [source]

Validate that string fields are not empty.

def validate_non_empty_strings(cls, v):
        """Validate that string fields are not empty."""
        if isinstance(v, str):
            if not v.strip():
                raise ValueError("Field cannot be empty")
            return v.strip()
        return v

Calendar

The calendar, or calendars, that define which dates are permitted in the top-level model. Taken from 7.2 calendar CV.

Validation: validate_calendar_list [source]

Validate calendar list contains valid strings or Calendar objects.

def validate_calendar_list(cls, v):
        """Validate calendar list contains valid strings or Calendar objects."""
        if not v:
            raise ValueError("At least one calendar must be specified")
        # Filter out empty strings, keep Calendar objects
        cleaned = []
        for item in v:
            if isinstance(item, str):
                if item.strip():
                    cleaned.append(item.strip())
            else:
                cleaned.append(item)
        if not cleaned:
            raise ValueError("Calendar list cannot be empty")
        return cleaned

Dynamic Components

The model components that are dynamically simulated within the top-level model. Taken from 7.1 component CV.

Validation: validate_component_lists [source]

Validate component lists contain valid strings or ComponentType objects.

def validate_component_lists(cls, v):
        """Validate component lists contain valid strings or ComponentType objects."""
        if v is None:
            return []
        # Filter out empty strings, keep ComponentType objects
        cleaned = []
        for item in v:
            if isinstance(item, str):
                if item.strip():
                    cleaned.append(item.strip())
            else:
                cleaned.append(item)
        return cleaned

Family

The top-level model's 'family' name. Use 'none' to indicate that there is no such family.

Validation: validate_non_empty_strings [source]

Validate that string fields are not empty.

def validate_non_empty_strings(cls, v):
        """Validate that string fields are not empty."""
        if isinstance(v, str):
            if not v.strip():
                raise ValueError("Field cannot be empty")
            return v.strip()
        return v

Model Components

The model components that dynamically simulate processes within the model.

Validation: validate_same_dynamic_components [source]

Validate that model_components has the same length as dynamic_components.

def validate_same_dynamic_components(cls, v, info):
        """Validate that model_components has the same length as dynamic_components."""
        if "dynamic_components" in info.data:
            dynamic_components = info.data["dynamic_components"]
            if len(v) != len(dynamic_components):
                raise ValueError(
                    f"Number of model_components ({len(v)}) must equal number of dynamic_components({len(dynamic_components)})"
                )
        return v

Omitted Components

The components that are wholly omitted from the top-level model. Taken from 7.1 component CV.

Validation: validate_component_lists [source]

Validate component lists contain valid strings or ComponentType objects.

def validate_component_lists(cls, v):
        """Validate component lists contain valid strings or ComponentType objects."""
        if v is None:
            return []
        # Filter out empty strings, keep ComponentType objects
        cleaned = []
        for item in v:
            if isinstance(item, str):
                if item.strip():
                    cleaned.append(item.strip())
            else:
                cleaned.append(item)
        return cleaned

Prescribed Components

The components that are represented in the top-level model with prescribed values. Taken from 7.1 component CV.

Validation: validate_component_lists [source]

Validate component lists contain valid strings or ComponentType objects.

def validate_component_lists(cls, v):
        """Validate component lists contain valid strings or ComponentType objects."""
        if v is None:
            return []
        # Filter out empty strings, keep ComponentType objects
        cleaned = []
        for item in v:
            if isinstance(item, str):
                if item.strip():
                    cleaned.append(item.strip())
            else:
                cleaned.append(item)
        return cleaned

References

One or more references to published work for the top-level model as a whole.

Release Year

The year in which the top-level model being documented was released, or first used for published simulations.


Usage

Direct Access:

Python (cmipld):

import cmipld
data = cmipld.get("emd:model/cnrm-esm2-1e")

Python (esgvoc):

from esgvoc.api import search
results = search.find("model", term="cnrm-esm2-1e")