# Auto generated from mixs.yaml by pythongen.py version: 0.9.0
# Generation date: 2022-03-22T15:58:29
# Schema: MIxS
#
# id: http://w3id.org/mixs
# description: Minimal Information about any Sequence Standard
# license: https://creativecommons.org/publicdomain/zero/1.0/

import dataclasses
import sys
import re
from jsonasobj2 import JsonObj, as_dict
from typing import Optional, List, Union, Dict, ClassVar, Any
from dataclasses import dataclass
from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions

from linkml_runtime.utils.slot import Slot
from linkml_runtime.utils.metamodelcore import empty_list, empty_dict, bnode
from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str, extended_float, extended_int
from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs
from linkml_runtime.utils.formatutils import camelcase, underscore, sfx
from linkml_runtime.utils.enumerations import EnumDefinitionImpl
from rdflib import Namespace, URIRef
from linkml_runtime.utils.curienamespace import CurieNamespace
from linkml_runtime.linkml_model.types import Date, Double, Integer, String
from linkml_runtime.utils.metamodelcore import XSDDate

metamodel_version = "1.7.0"
version = None

# Overwrite dataclasses _init_fn to add **kwargs in __init__
dataclasses._init_fn = dataclasses_init_fn_with_kwargs

# Namespaces
MIGS = CurieNamespace('MIGS', 'https://w3id.org/mixs/migs/')
MIXS = CurieNamespace('MIXS', 'https://w3id.org/mixs/terms/')
LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/')
MIXS_VOCAB = CurieNamespace('mixs_vocab', 'https://w3id.org/mixs/vocab/')
DEFAULT_ = MIXS.VOCAB


# Types

# Class references



@dataclass
class MIGSEukaryote(YAMLRoot):
    """
    Minimal Information about a Genome Sequence: eukaryote
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:MIGSEukaryote"
    class_name: ClassVar[str] = "MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSEukaryote

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIGSBacteria(YAMLRoot):
    """
    Minimal Information about a Genome Sequence: cultured bacteria/archaea
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:MIGSBacteria"
    class_name: ClassVar[str] = "MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSBacteria

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIGSPlant(YAMLRoot):
    """
    Minimal Information about a Genome Sequence: plant
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:MIGSPlant"
    class_name: ClassVar[str] = "MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSPlant

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIGSVirus(YAMLRoot):
    """
    Minimal Information about a Genome Sequence: cultured bacteria/archaea
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:MIGSVirus"
    class_name: ClassVar[str] = "MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSVirus

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIGSOrg(YAMLRoot):
    """
    Minimal Information about a Genome Sequence: org
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:MIGSOrg"
    class_name: ClassVar[str] = "MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIGSOrg

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIMS(YAMLRoot):
    """
    Metagenome or Environmental
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:MIMS"
    class_name: ClassVar[str] = "MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMS

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIMARKSSpecimen(YAMLRoot):
    """
    Minimal Information about a Marker Specimen: specimen
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:MIMARKSSpecimen"
    class_name: ClassVar[str] = "MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMARKSSpecimen

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    target_gene: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIMARKSSurvey(YAMLRoot):
    """
    Minimal Information about a Marker Specimen: survey
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:MIMARKSSurvey"
    class_name: ClassVar[str] = "MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMARKSSurvey

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MISAG(YAMLRoot):
    """
    Minimum Information About a Single Amplified Genome
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MISAG"
    class_name: ClassVar[str] = "MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MISAG

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIMAG(YAMLRoot):
    """
    Minimum Information About a Metagenome-Assembled Genome
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MIMAG"
    class_name: ClassVar[str] = "MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIMAG

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MIUVIG(YAMLRoot):
    """
    Minimum Information About an Uncultivated Virus Genome
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:MIUVIG"
    class_name: ClassVar[str] = "MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MIUVIG

    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Core(YAMLRoot):
    """
    Core package. Do not use this directly, this is used to build other packages
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Core
    class_class_curie: ClassVar[str] = "mixs.vocab:Core"
    class_name: ClassVar[str] = "core"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Core

    samp_name: Optional[str] = None
    samp_taxon_id: Optional[str] = None
    project_name: Optional[str] = None
    experimental_factor: Optional[str] = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    isol_growth_condt: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    source_uvig: Optional[Union[str, "SourceUvigEnum"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_gene: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_meth: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_score: Optional[str] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    vir_ident_software: Optional[str] = None
    pred_genome_type: Optional[Union[str, "PredGenomeTypeEnum"]] = None
    pred_genome_struc: Optional[Union[str, "PredGenomeStrucEnum"]] = None
    detec_type: Optional[str] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self.samp_name is not None and not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self.samp_taxon_id is not None and not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self.project_name is not None and not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.isol_growth_condt is not None and not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.source_uvig is not None and not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_gene is not None and not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_meth is not None and not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_score is not None and not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.vir_ident_software is not None and not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self.pred_genome_type is not None and not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self.pred_genome_struc is not None and not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self.detec_type is not None and not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Air(YAMLRoot):
    """
    air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Air
    class_class_curie: ClassVar[str] = "mixs.vocab:Air"
    class_name: ClassVar[str] = "air"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Air

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    barometric_press: Optional[Union[dict, "QuantityValue"]] = None
    carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    carb_monoxide: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    humidity: Optional[Union[dict, "QuantityValue"]] = None
    methane: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxygen: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    pollutants: Optional[Union[str, List[str]]] = empty_list()
    air_particulate_matter_concentration: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    solar_irradiance: Optional[Union[dict, "QuantityValue"]] = None
    ventilation_rate: Optional[Union[dict, "QuantityValue"]] = None
    ventilation_type: Optional[str] = None
    volatile_org_comp: Optional[Union[str, List[str]]] = empty_list()
    wind_direction: Optional[str] = None
    wind_speed: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.alt):
            self.MissingRequiredField("alt")
        if not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.barometric_press is not None and not isinstance(self.barometric_press, QuantityValue):
            self.barometric_press = QuantityValue(**as_dict(self.barometric_press))

        if self.carb_dioxide is not None and not isinstance(self.carb_dioxide, QuantityValue):
            self.carb_dioxide = QuantityValue(**as_dict(self.carb_dioxide))

        if self.carb_monoxide is not None and not isinstance(self.carb_monoxide, QuantityValue):
            self.carb_monoxide = QuantityValue(**as_dict(self.carb_monoxide))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.humidity is not None and not isinstance(self.humidity, QuantityValue):
            self.humidity = QuantityValue(**as_dict(self.humidity))

        if self.methane is not None and not isinstance(self.methane, QuantityValue):
            self.methane = QuantityValue(**as_dict(self.methane))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxygen is not None and not isinstance(self.oxygen, QuantityValue):
            self.oxygen = QuantityValue(**as_dict(self.oxygen))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if not isinstance(self.pollutants, list):
            self.pollutants = [self.pollutants] if self.pollutants is not None else []
        self.pollutants = [v if isinstance(v, str) else str(v) for v in self.pollutants]

        if not isinstance(self.air_particulate_matter_concentration, list):
            self.air_particulate_matter_concentration = [self.air_particulate_matter_concentration] if self.air_particulate_matter_concentration is not None else []
        self.air_particulate_matter_concentration = [v if isinstance(v, str) else str(v) for v in self.air_particulate_matter_concentration]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.solar_irradiance is not None and not isinstance(self.solar_irradiance, QuantityValue):
            self.solar_irradiance = QuantityValue(**as_dict(self.solar_irradiance))

        if self.ventilation_rate is not None and not isinstance(self.ventilation_rate, QuantityValue):
            self.ventilation_rate = QuantityValue(**as_dict(self.ventilation_rate))

        if self.ventilation_type is not None and not isinstance(self.ventilation_type, str):
            self.ventilation_type = str(self.ventilation_type)

        if not isinstance(self.volatile_org_comp, list):
            self.volatile_org_comp = [self.volatile_org_comp] if self.volatile_org_comp is not None else []
        self.volatile_org_comp = [v if isinstance(v, str) else str(v) for v in self.volatile_org_comp]

        if self.wind_direction is not None and not isinstance(self.wind_direction, str):
            self.wind_direction = str(self.wind_direction)

        if self.wind_speed is not None and not isinstance(self.wind_speed, QuantityValue):
            self.wind_speed = QuantityValue(**as_dict(self.wind_speed))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class AirMIGSEukaryote(Air):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIGSEukaryote"
    class_name: ClassVar[str] = "air MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSEukaryote

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIGSBacteria(Air):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIGSBacteria"
    class_name: ClassVar[str] = "air MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSBacteria

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIGSPlant(Air):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIGSPlant"
    class_name: ClassVar[str] = "air MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSPlant

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIGSVirus(Air):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIGSVirus"
    class_name: ClassVar[str] = "air MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSVirus

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIGSOrg(Air):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIGSOrg"
    class_name: ClassVar[str] = "air MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIGSOrg

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIMS(Air):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIMS"
    class_name: ClassVar[str] = "air MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMS

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIMARKSSpecimen(Air):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIMARKSSpecimen"
    class_name: ClassVar[str] = "air MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMARKSSpecimen

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIMARKSSurvey(Air):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIMARKSSurvey"
    class_name: ClassVar[str] = "air MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMARKSSurvey

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMISAG(Air):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMISAG"
    class_name: ClassVar[str] = "air MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMISAG

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIMAG(Air):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIMAG"
    class_name: ClassVar[str] = "air MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIMAG

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class AirMIUVIG(Air):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package air
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:AirMIUVIG"
    class_name: ClassVar[str] = "air MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AirMIUVIG

    alt: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironment(YAMLRoot):
    """
    built environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironment
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironment"
    class_name: ClassVar[str] = "built environment"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironment

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    surf_material: Optional[Union[str, "SurfMaterialEnum"]] = None
    surf_air_cont: Optional[Union[Union[str, "SurfAirContEnum"], List[Union[str, "SurfAirContEnum"]]]] = empty_list()
    surf_humidity: Optional[Union[dict, "QuantityValue"]] = None
    surf_temp: Optional[Union[dict, "QuantityValue"]] = None
    surf_moisture_ph: Optional[float] = None
    surf_moisture: Optional[Union[dict, "QuantityValue"]] = None
    dew_point: Optional[Union[dict, "QuantityValue"]] = None
    indoor_surf: Optional[Union[str, "IndoorSurfEnum"]] = None
    substructure_type: Optional[Union[Union[str, "SubstructureTypeEnum"], List[Union[str, "SubstructureTypeEnum"]]]] = empty_list()
    samp_sort_meth: Optional[Union[str, List[str]]] = empty_list()
    address: Optional[str] = None
    adj_room: Optional[str] = None
    aero_struc: Optional[str] = None
    amount_light: Optional[Union[dict, "QuantityValue"]] = None
    arch_struc: Optional[Union[str, "ArchStrucEnum"]] = None
    avg_occup: Optional[float] = None
    avg_dew_point: Optional[Union[dict, "QuantityValue"]] = None
    avg_temp: Optional[Union[dict, "QuantityValue"]] = None
    bathroom_count: Optional[int] = None
    bedroom_count: Optional[int] = None
    built_struc_age: Optional[Union[dict, "QuantityValue"]] = None
    built_struc_set: Optional[str] = None
    built_struc_type: Optional[str] = None
    ceil_area: Optional[Union[dict, "QuantityValue"]] = None
    ceil_cond: Optional[Union[str, "CeilCondEnum"]] = None
    ceil_finish_mat: Optional[Union[str, "CeilFinishMatEnum"]] = None
    ceil_water_mold: Optional[str] = None
    ceil_struc: Optional[str] = None
    ceil_texture: Optional[Union[str, "CeilTextureEnum"]] = None
    ceil_thermal_mass: Optional[Union[dict, "QuantityValue"]] = None
    ceil_type: Optional[Union[str, "CeilTypeEnum"]] = None
    cool_syst_id: Optional[int] = None
    date_last_rain: Optional[Union[str, XSDDate]] = None
    build_docs: Optional[Union[str, "BuildDocsEnum"]] = None
    door_size: Optional[Union[dict, "QuantityValue"]] = None
    door_cond: Optional[Union[str, "DoorCondEnum"]] = None
    door_direct: Optional[Union[str, "DoorDirectEnum"]] = None
    door_loc: Optional[Union[str, "DoorLocEnum"]] = None
    door_mat: Optional[Union[str, "DoorMatEnum"]] = None
    door_move: Optional[Union[str, "DoorMoveEnum"]] = None
    door_water_mold: Optional[str] = None
    door_type: Optional[Union[str, "DoorTypeEnum"]] = None
    door_comp_type: Optional[Union[str, "DoorCompTypeEnum"]] = None
    door_type_metal: Optional[Union[str, "DoorTypeMetalEnum"]] = None
    door_type_wood: Optional[Union[str, "DoorTypeWoodEnum"]] = None
    drawings: Optional[Union[str, "DrawingsEnum"]] = None
    elevator: Optional[int] = None
    escalator: Optional[int] = None
    exp_duct: Optional[Union[dict, "QuantityValue"]] = None
    exp_pipe: Optional[int] = None
    ext_door: Optional[int] = None
    fireplace_type: Optional[str] = None
    floor_age: Optional[Union[dict, "QuantityValue"]] = None
    floor_area: Optional[Union[dict, "QuantityValue"]] = None
    floor_cond: Optional[Union[str, "FloorCondEnum"]] = None
    floor_count: Optional[int] = None
    floor_finish_mat: Optional[Union[str, "FloorFinishMatEnum"]] = None
    floor_water_mold: Optional[Union[str, "FloorWaterMoldEnum"]] = None
    floor_struc: Optional[Union[str, "FloorStrucEnum"]] = None
    floor_thermal_mass: Optional[Union[dict, "QuantityValue"]] = None
    freq_clean: Optional[Union[str, "FreqCleanEnum"]] = None
    freq_cook: Optional[int] = None
    furniture: Optional[Union[str, "FurnitureEnum"]] = None
    gender_restroom: Optional[Union[str, "GenderRestroomEnum"]] = None
    hall_count: Optional[int] = None
    handidness: Optional[Union[str, "HandidnessEnum"]] = None
    heat_deliv_loc: Optional[Union[str, "HeatDelivLocEnum"]] = None
    heat_sys_deliv_meth: Optional[str] = None
    heat_system_id: Optional[int] = None
    height_carper_fiber: Optional[Union[dict, "QuantityValue"]] = None
    inside_lux: Optional[Union[dict, "QuantityValue"]] = None
    int_wall_cond: Optional[Union[str, "IntWallCondEnum"]] = None
    last_clean: Optional[Union[str, XSDDate]] = None
    max_occup: Optional[int] = None
    mech_struc: Optional[Union[str, "MechStrucEnum"]] = None
    number_plants: Optional[int] = None
    number_pets: Optional[int] = None
    number_resident: Optional[int] = None
    occup_document: Optional[Union[str, "OccupDocumentEnum"]] = None
    ext_wall_orient: Optional[Union[str, "ExtWallOrientEnum"]] = None
    ext_window_orient: Optional[Union[str, "ExtWindowOrientEnum"]] = None
    rel_humidity_out: Optional[Union[dict, "QuantityValue"]] = None
    pres_animal_insect: Optional[str] = None
    quad_pos: Optional[Union[str, "QuadPosEnum"]] = None
    rel_samp_loc: Optional[Union[str, "RelSampLocEnum"]] = None
    room_air_exch_rate: Optional[Union[dict, "QuantityValue"]] = None
    room_architec_elem: Optional[str] = None
    room_condt: Optional[Union[str, "RoomCondtEnum"]] = None
    room_count: Optional[int] = None
    room_dim: Optional[str] = None
    room_door_dist: Optional[str] = None
    room_loc: Optional[Union[str, "RoomLocEnum"]] = None
    room_moist_dam_hist: Optional[int] = None
    room_net_area: Optional[str] = None
    room_occup: Optional[int] = None
    room_samp_pos: Optional[Union[str, "RoomSampPosEnum"]] = None
    room_type: Optional[Union[str, "RoomTypeEnum"]] = None
    room_vol: Optional[str] = None
    room_window_count: Optional[int] = None
    room_connected: Optional[Union[str, "RoomConnectedEnum"]] = None
    room_hallway: Optional[str] = None
    room_door_share: Optional[str] = None
    room_wall_share: Optional[str] = None
    samp_weather: Optional[Union[str, "SampWeatherEnum"]] = None
    samp_floor: Optional[Union[str, "SampFloorEnum"]] = None
    samp_room_id: Optional[int] = None
    samp_time_out: Optional[float] = None
    season: Optional[str] = None
    season_use: Optional[Union[str, "SeasonUseEnum"]] = None
    shading_device_cond: Optional[Union[str, "ShadingDeviceCondEnum"]] = None
    shading_device_loc: Optional[str] = None
    shading_device_mat: Optional[str] = None
    shad_dev_water_mold: Optional[str] = None
    shading_device_type: Optional[Union[str, "ShadingDeviceTypeEnum"]] = None
    specific_humidity: Optional[Union[dict, "QuantityValue"]] = None
    specific: Optional[Union[str, "SpecificEnum"]] = None
    temp_out: Optional[Union[dict, "QuantityValue"]] = None
    train_line: Optional[Union[str, "TrainLineEnum"]] = None
    train_stat_loc: Optional[Union[str, "TrainStatLocEnum"]] = None
    train_stop_loc: Optional[Union[str, "TrainStopLocEnum"]] = None
    vis_media: Optional[Union[str, "VisMediaEnum"]] = None
    wall_area: Optional[Union[dict, "QuantityValue"]] = None
    wall_const_type: Optional[Union[str, "WallConstTypeEnum"]] = None
    wall_finish_mat: Optional[Union[str, "WallFinishMatEnum"]] = None
    wall_height: Optional[Union[dict, "QuantityValue"]] = None
    wall_loc: Optional[Union[str, "WallLocEnum"]] = None
    wall_water_mold: Optional[str] = None
    wall_surf_treatment: Optional[Union[str, "WallSurfTreatmentEnum"]] = None
    wall_texture: Optional[Union[str, "WallTextureEnum"]] = None
    wall_thermal_mass: Optional[Union[dict, "QuantityValue"]] = None
    water_feat_size: Optional[Union[dict, "QuantityValue"]] = None
    water_feat_type: Optional[Union[str, "WaterFeatTypeEnum"]] = None
    weekday: Optional[Union[str, "WeekdayEnum"]] = None
    window_size: Optional[str] = None
    window_cond: Optional[Union[str, "WindowCondEnum"]] = None
    window_cover: Optional[Union[str, "WindowCoverEnum"]] = None
    window_horiz_pos: Optional[Union[str, "WindowHorizPosEnum"]] = None
    window_loc: Optional[Union[str, "WindowLocEnum"]] = None
    window_mat: Optional[Union[str, "WindowMatEnum"]] = None
    window_open_freq: Optional[int] = None
    window_water_mold: Optional[str] = None
    window_status: Optional[str] = None
    window_type: Optional[Union[str, "WindowTypeEnum"]] = None
    window_vert_pos: Optional[Union[str, "WindowVertPosEnum"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.rel_air_humidity):
            self.MissingRequiredField("rel_air_humidity")
        if not isinstance(self.rel_air_humidity, QuantityValue):
            self.rel_air_humidity = QuantityValue(**as_dict(self.rel_air_humidity))

        if self._is_empty(self.abs_air_humidity):
            self.MissingRequiredField("abs_air_humidity")
        if not isinstance(self.abs_air_humidity, QuantityValue):
            self.abs_air_humidity = QuantityValue(**as_dict(self.abs_air_humidity))

        if self._is_empty(self.temp):
            self.MissingRequiredField("temp")
        if not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self._is_empty(self.build_occup_type):
            self.MissingRequiredField("build_occup_type")
        if not isinstance(self.build_occup_type, list):
            self.build_occup_type = [self.build_occup_type] if self.build_occup_type is not None else []
        self.build_occup_type = [v if isinstance(v, BuildOccupTypeEnum) else BuildOccupTypeEnum(v) for v in self.build_occup_type]

        if self._is_empty(self.carb_dioxide):
            self.MissingRequiredField("carb_dioxide")
        if not isinstance(self.carb_dioxide, QuantityValue):
            self.carb_dioxide = QuantityValue(**as_dict(self.carb_dioxide))

        if self._is_empty(self.ventilation_type):
            self.MissingRequiredField("ventilation_type")
        if not isinstance(self.ventilation_type, str):
            self.ventilation_type = str(self.ventilation_type)

        if self._is_empty(self.organism_count):
            self.MissingRequiredField("organism_count")
        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self._is_empty(self.indoor_space):
            self.MissingRequiredField("indoor_space")
        if not isinstance(self.indoor_space, IndoorSpaceEnum):
            self.indoor_space = IndoorSpaceEnum(self.indoor_space)

        if self._is_empty(self.filter_type):
            self.MissingRequiredField("filter_type")
        if not isinstance(self.filter_type, list):
            self.filter_type = [self.filter_type] if self.filter_type is not None else []
        self.filter_type = [v if isinstance(v, FilterTypeEnum) else FilterTypeEnum(v) for v in self.filter_type]

        if self._is_empty(self.heat_cool_type):
            self.MissingRequiredField("heat_cool_type")
        if not isinstance(self.heat_cool_type, list):
            self.heat_cool_type = [self.heat_cool_type] if self.heat_cool_type is not None else []
        self.heat_cool_type = [v if isinstance(v, HeatCoolTypeEnum) else HeatCoolTypeEnum(v) for v in self.heat_cool_type]

        if self._is_empty(self.building_setting):
            self.MissingRequiredField("building_setting")
        if not isinstance(self.building_setting, BuildingSettingEnum):
            self.building_setting = BuildingSettingEnum(self.building_setting)

        if self._is_empty(self.light_type):
            self.MissingRequiredField("light_type")
        if not isinstance(self.light_type, list):
            self.light_type = [self.light_type] if self.light_type is not None else []
        self.light_type = [v if isinstance(v, LightTypeEnum) else LightTypeEnum(v) for v in self.light_type]

        if self._is_empty(self.space_typ_state):
            self.MissingRequiredField("space_typ_state")
        if not isinstance(self.space_typ_state, str):
            self.space_typ_state = str(self.space_typ_state)

        if self._is_empty(self.typ_occup_density):
            self.MissingRequiredField("typ_occup_density")
        if not isinstance(self.typ_occup_density, float):
            self.typ_occup_density = float(self.typ_occup_density)

        if self._is_empty(self.occup_samp):
            self.MissingRequiredField("occup_samp")
        if not isinstance(self.occup_samp, int):
            self.occup_samp = int(self.occup_samp)

        if self._is_empty(self.occup_density_samp):
            self.MissingRequiredField("occup_density_samp")
        if not isinstance(self.occup_density_samp, float):
            self.occup_density_samp = float(self.occup_density_samp)

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.surf_material is not None and not isinstance(self.surf_material, SurfMaterialEnum):
            self.surf_material = SurfMaterialEnum(self.surf_material)

        if not isinstance(self.surf_air_cont, list):
            self.surf_air_cont = [self.surf_air_cont] if self.surf_air_cont is not None else []
        self.surf_air_cont = [v if isinstance(v, SurfAirContEnum) else SurfAirContEnum(v) for v in self.surf_air_cont]

        if self.surf_humidity is not None and not isinstance(self.surf_humidity, QuantityValue):
            self.surf_humidity = QuantityValue(**as_dict(self.surf_humidity))

        if self.surf_temp is not None and not isinstance(self.surf_temp, QuantityValue):
            self.surf_temp = QuantityValue(**as_dict(self.surf_temp))

        if self.surf_moisture_ph is not None and not isinstance(self.surf_moisture_ph, float):
            self.surf_moisture_ph = float(self.surf_moisture_ph)

        if self.surf_moisture is not None and not isinstance(self.surf_moisture, QuantityValue):
            self.surf_moisture = QuantityValue(**as_dict(self.surf_moisture))

        if self.dew_point is not None and not isinstance(self.dew_point, QuantityValue):
            self.dew_point = QuantityValue(**as_dict(self.dew_point))

        if self.indoor_surf is not None and not isinstance(self.indoor_surf, IndoorSurfEnum):
            self.indoor_surf = IndoorSurfEnum(self.indoor_surf)

        if not isinstance(self.substructure_type, list):
            self.substructure_type = [self.substructure_type] if self.substructure_type is not None else []
        self.substructure_type = [v if isinstance(v, SubstructureTypeEnum) else SubstructureTypeEnum(v) for v in self.substructure_type]

        if not isinstance(self.samp_sort_meth, list):
            self.samp_sort_meth = [self.samp_sort_meth] if self.samp_sort_meth is not None else []
        self.samp_sort_meth = [v if isinstance(v, str) else str(v) for v in self.samp_sort_meth]

        if self.address is not None and not isinstance(self.address, str):
            self.address = str(self.address)

        if self.adj_room is not None and not isinstance(self.adj_room, str):
            self.adj_room = str(self.adj_room)

        if self.aero_struc is not None and not isinstance(self.aero_struc, str):
            self.aero_struc = str(self.aero_struc)

        if self.amount_light is not None and not isinstance(self.amount_light, QuantityValue):
            self.amount_light = QuantityValue(**as_dict(self.amount_light))

        if self.arch_struc is not None and not isinstance(self.arch_struc, ArchStrucEnum):
            self.arch_struc = ArchStrucEnum(self.arch_struc)

        if self.avg_occup is not None and not isinstance(self.avg_occup, float):
            self.avg_occup = float(self.avg_occup)

        if self.avg_dew_point is not None and not isinstance(self.avg_dew_point, QuantityValue):
            self.avg_dew_point = QuantityValue(**as_dict(self.avg_dew_point))

        if self.avg_temp is not None and not isinstance(self.avg_temp, QuantityValue):
            self.avg_temp = QuantityValue(**as_dict(self.avg_temp))

        if self.bathroom_count is not None and not isinstance(self.bathroom_count, int):
            self.bathroom_count = int(self.bathroom_count)

        if self.bedroom_count is not None and not isinstance(self.bedroom_count, int):
            self.bedroom_count = int(self.bedroom_count)

        if self.built_struc_age is not None and not isinstance(self.built_struc_age, QuantityValue):
            self.built_struc_age = QuantityValue(**as_dict(self.built_struc_age))

        if self.built_struc_set is not None and not isinstance(self.built_struc_set, str):
            self.built_struc_set = str(self.built_struc_set)

        if self.built_struc_type is not None and not isinstance(self.built_struc_type, str):
            self.built_struc_type = str(self.built_struc_type)

        if self.ceil_area is not None and not isinstance(self.ceil_area, QuantityValue):
            self.ceil_area = QuantityValue(**as_dict(self.ceil_area))

        if self.ceil_cond is not None and not isinstance(self.ceil_cond, CeilCondEnum):
            self.ceil_cond = CeilCondEnum(self.ceil_cond)

        if self.ceil_finish_mat is not None and not isinstance(self.ceil_finish_mat, CeilFinishMatEnum):
            self.ceil_finish_mat = CeilFinishMatEnum(self.ceil_finish_mat)

        if self.ceil_water_mold is not None and not isinstance(self.ceil_water_mold, str):
            self.ceil_water_mold = str(self.ceil_water_mold)

        if self.ceil_struc is not None and not isinstance(self.ceil_struc, str):
            self.ceil_struc = str(self.ceil_struc)

        if self.ceil_texture is not None and not isinstance(self.ceil_texture, CeilTextureEnum):
            self.ceil_texture = CeilTextureEnum(self.ceil_texture)

        if self.ceil_thermal_mass is not None and not isinstance(self.ceil_thermal_mass, QuantityValue):
            self.ceil_thermal_mass = QuantityValue(**as_dict(self.ceil_thermal_mass))

        if self.ceil_type is not None and not isinstance(self.ceil_type, CeilTypeEnum):
            self.ceil_type = CeilTypeEnum(self.ceil_type)

        if self.cool_syst_id is not None and not isinstance(self.cool_syst_id, int):
            self.cool_syst_id = int(self.cool_syst_id)

        if self.date_last_rain is not None and not isinstance(self.date_last_rain, XSDDate):
            self.date_last_rain = XSDDate(self.date_last_rain)

        if self.build_docs is not None and not isinstance(self.build_docs, BuildDocsEnum):
            self.build_docs = BuildDocsEnum(self.build_docs)

        if self.door_size is not None and not isinstance(self.door_size, QuantityValue):
            self.door_size = QuantityValue(**as_dict(self.door_size))

        if self.door_cond is not None and not isinstance(self.door_cond, DoorCondEnum):
            self.door_cond = DoorCondEnum(self.door_cond)

        if self.door_direct is not None and not isinstance(self.door_direct, DoorDirectEnum):
            self.door_direct = DoorDirectEnum(self.door_direct)

        if self.door_loc is not None and not isinstance(self.door_loc, DoorLocEnum):
            self.door_loc = DoorLocEnum(self.door_loc)

        if self.door_mat is not None and not isinstance(self.door_mat, DoorMatEnum):
            self.door_mat = DoorMatEnum(self.door_mat)

        if self.door_move is not None and not isinstance(self.door_move, DoorMoveEnum):
            self.door_move = DoorMoveEnum(self.door_move)

        if self.door_water_mold is not None and not isinstance(self.door_water_mold, str):
            self.door_water_mold = str(self.door_water_mold)

        if self.door_type is not None and not isinstance(self.door_type, DoorTypeEnum):
            self.door_type = DoorTypeEnum(self.door_type)

        if self.door_comp_type is not None and not isinstance(self.door_comp_type, DoorCompTypeEnum):
            self.door_comp_type = DoorCompTypeEnum(self.door_comp_type)

        if self.door_type_metal is not None and not isinstance(self.door_type_metal, DoorTypeMetalEnum):
            self.door_type_metal = DoorTypeMetalEnum(self.door_type_metal)

        if self.door_type_wood is not None and not isinstance(self.door_type_wood, DoorTypeWoodEnum):
            self.door_type_wood = DoorTypeWoodEnum(self.door_type_wood)

        if self.drawings is not None and not isinstance(self.drawings, DrawingsEnum):
            self.drawings = DrawingsEnum(self.drawings)

        if self.elevator is not None and not isinstance(self.elevator, int):
            self.elevator = int(self.elevator)

        if self.escalator is not None and not isinstance(self.escalator, int):
            self.escalator = int(self.escalator)

        if self.exp_duct is not None and not isinstance(self.exp_duct, QuantityValue):
            self.exp_duct = QuantityValue(**as_dict(self.exp_duct))

        if self.exp_pipe is not None and not isinstance(self.exp_pipe, int):
            self.exp_pipe = int(self.exp_pipe)

        if self.ext_door is not None and not isinstance(self.ext_door, int):
            self.ext_door = int(self.ext_door)

        if self.fireplace_type is not None and not isinstance(self.fireplace_type, str):
            self.fireplace_type = str(self.fireplace_type)

        if self.floor_age is not None and not isinstance(self.floor_age, QuantityValue):
            self.floor_age = QuantityValue(**as_dict(self.floor_age))

        if self.floor_area is not None and not isinstance(self.floor_area, QuantityValue):
            self.floor_area = QuantityValue(**as_dict(self.floor_area))

        if self.floor_cond is not None and not isinstance(self.floor_cond, FloorCondEnum):
            self.floor_cond = FloorCondEnum(self.floor_cond)

        if self.floor_count is not None and not isinstance(self.floor_count, int):
            self.floor_count = int(self.floor_count)

        if self.floor_finish_mat is not None and not isinstance(self.floor_finish_mat, FloorFinishMatEnum):
            self.floor_finish_mat = FloorFinishMatEnum(self.floor_finish_mat)

        if self.floor_water_mold is not None and not isinstance(self.floor_water_mold, FloorWaterMoldEnum):
            self.floor_water_mold = FloorWaterMoldEnum(self.floor_water_mold)

        if self.floor_struc is not None and not isinstance(self.floor_struc, FloorStrucEnum):
            self.floor_struc = FloorStrucEnum(self.floor_struc)

        if self.floor_thermal_mass is not None and not isinstance(self.floor_thermal_mass, QuantityValue):
            self.floor_thermal_mass = QuantityValue(**as_dict(self.floor_thermal_mass))

        if self.freq_clean is not None and not isinstance(self.freq_clean, FreqCleanEnum):
            self.freq_clean = FreqCleanEnum(self.freq_clean)

        if self.freq_cook is not None and not isinstance(self.freq_cook, int):
            self.freq_cook = int(self.freq_cook)

        if self.furniture is not None and not isinstance(self.furniture, FurnitureEnum):
            self.furniture = FurnitureEnum(self.furniture)

        if self.gender_restroom is not None and not isinstance(self.gender_restroom, GenderRestroomEnum):
            self.gender_restroom = GenderRestroomEnum(self.gender_restroom)

        if self.hall_count is not None and not isinstance(self.hall_count, int):
            self.hall_count = int(self.hall_count)

        if self.handidness is not None and not isinstance(self.handidness, HandidnessEnum):
            self.handidness = HandidnessEnum(self.handidness)

        if self.heat_deliv_loc is not None and not isinstance(self.heat_deliv_loc, HeatDelivLocEnum):
            self.heat_deliv_loc = HeatDelivLocEnum(self.heat_deliv_loc)

        if self.heat_sys_deliv_meth is not None and not isinstance(self.heat_sys_deliv_meth, str):
            self.heat_sys_deliv_meth = str(self.heat_sys_deliv_meth)

        if self.heat_system_id is not None and not isinstance(self.heat_system_id, int):
            self.heat_system_id = int(self.heat_system_id)

        if self.height_carper_fiber is not None and not isinstance(self.height_carper_fiber, QuantityValue):
            self.height_carper_fiber = QuantityValue(**as_dict(self.height_carper_fiber))

        if self.inside_lux is not None and not isinstance(self.inside_lux, QuantityValue):
            self.inside_lux = QuantityValue(**as_dict(self.inside_lux))

        if self.int_wall_cond is not None and not isinstance(self.int_wall_cond, IntWallCondEnum):
            self.int_wall_cond = IntWallCondEnum(self.int_wall_cond)

        if self.last_clean is not None and not isinstance(self.last_clean, XSDDate):
            self.last_clean = XSDDate(self.last_clean)

        if self.max_occup is not None and not isinstance(self.max_occup, int):
            self.max_occup = int(self.max_occup)

        if self.mech_struc is not None and not isinstance(self.mech_struc, MechStrucEnum):
            self.mech_struc = MechStrucEnum(self.mech_struc)

        if self.number_plants is not None and not isinstance(self.number_plants, int):
            self.number_plants = int(self.number_plants)

        if self.number_pets is not None and not isinstance(self.number_pets, int):
            self.number_pets = int(self.number_pets)

        if self.number_resident is not None and not isinstance(self.number_resident, int):
            self.number_resident = int(self.number_resident)

        if self.occup_document is not None and not isinstance(self.occup_document, OccupDocumentEnum):
            self.occup_document = OccupDocumentEnum(self.occup_document)

        if self.ext_wall_orient is not None and not isinstance(self.ext_wall_orient, ExtWallOrientEnum):
            self.ext_wall_orient = ExtWallOrientEnum(self.ext_wall_orient)

        if self.ext_window_orient is not None and not isinstance(self.ext_window_orient, ExtWindowOrientEnum):
            self.ext_window_orient = ExtWindowOrientEnum(self.ext_window_orient)

        if self.rel_humidity_out is not None and not isinstance(self.rel_humidity_out, QuantityValue):
            self.rel_humidity_out = QuantityValue(**as_dict(self.rel_humidity_out))

        if self.pres_animal_insect is not None and not isinstance(self.pres_animal_insect, str):
            self.pres_animal_insect = str(self.pres_animal_insect)

        if self.quad_pos is not None and not isinstance(self.quad_pos, QuadPosEnum):
            self.quad_pos = QuadPosEnum(self.quad_pos)

        if self.rel_samp_loc is not None and not isinstance(self.rel_samp_loc, RelSampLocEnum):
            self.rel_samp_loc = RelSampLocEnum(self.rel_samp_loc)

        if self.room_air_exch_rate is not None and not isinstance(self.room_air_exch_rate, QuantityValue):
            self.room_air_exch_rate = QuantityValue(**as_dict(self.room_air_exch_rate))

        if self.room_architec_elem is not None and not isinstance(self.room_architec_elem, str):
            self.room_architec_elem = str(self.room_architec_elem)

        if self.room_condt is not None and not isinstance(self.room_condt, RoomCondtEnum):
            self.room_condt = RoomCondtEnum(self.room_condt)

        if self.room_count is not None and not isinstance(self.room_count, int):
            self.room_count = int(self.room_count)

        if self.room_dim is not None and not isinstance(self.room_dim, str):
            self.room_dim = str(self.room_dim)

        if self.room_door_dist is not None and not isinstance(self.room_door_dist, str):
            self.room_door_dist = str(self.room_door_dist)

        if self.room_loc is not None and not isinstance(self.room_loc, RoomLocEnum):
            self.room_loc = RoomLocEnum(self.room_loc)

        if self.room_moist_dam_hist is not None and not isinstance(self.room_moist_dam_hist, int):
            self.room_moist_dam_hist = int(self.room_moist_dam_hist)

        if self.room_net_area is not None and not isinstance(self.room_net_area, str):
            self.room_net_area = str(self.room_net_area)

        if self.room_occup is not None and not isinstance(self.room_occup, int):
            self.room_occup = int(self.room_occup)

        if self.room_samp_pos is not None and not isinstance(self.room_samp_pos, RoomSampPosEnum):
            self.room_samp_pos = RoomSampPosEnum(self.room_samp_pos)

        if self.room_type is not None and not isinstance(self.room_type, RoomTypeEnum):
            self.room_type = RoomTypeEnum(self.room_type)

        if self.room_vol is not None and not isinstance(self.room_vol, str):
            self.room_vol = str(self.room_vol)

        if self.room_window_count is not None and not isinstance(self.room_window_count, int):
            self.room_window_count = int(self.room_window_count)

        if self.room_connected is not None and not isinstance(self.room_connected, RoomConnectedEnum):
            self.room_connected = RoomConnectedEnum(self.room_connected)

        if self.room_hallway is not None and not isinstance(self.room_hallway, str):
            self.room_hallway = str(self.room_hallway)

        if self.room_door_share is not None and not isinstance(self.room_door_share, str):
            self.room_door_share = str(self.room_door_share)

        if self.room_wall_share is not None and not isinstance(self.room_wall_share, str):
            self.room_wall_share = str(self.room_wall_share)

        if self.samp_weather is not None and not isinstance(self.samp_weather, SampWeatherEnum):
            self.samp_weather = SampWeatherEnum(self.samp_weather)

        if self.samp_floor is not None and not isinstance(self.samp_floor, SampFloorEnum):
            self.samp_floor = SampFloorEnum(self.samp_floor)

        if self.samp_room_id is not None and not isinstance(self.samp_room_id, int):
            self.samp_room_id = int(self.samp_room_id)

        if self.samp_time_out is not None and not isinstance(self.samp_time_out, float):
            self.samp_time_out = float(self.samp_time_out)

        if self.season is not None and not isinstance(self.season, str):
            self.season = str(self.season)

        if self.season_use is not None and not isinstance(self.season_use, SeasonUseEnum):
            self.season_use = SeasonUseEnum(self.season_use)

        if self.shading_device_cond is not None and not isinstance(self.shading_device_cond, ShadingDeviceCondEnum):
            self.shading_device_cond = ShadingDeviceCondEnum(self.shading_device_cond)

        if self.shading_device_loc is not None and not isinstance(self.shading_device_loc, str):
            self.shading_device_loc = str(self.shading_device_loc)

        if self.shading_device_mat is not None and not isinstance(self.shading_device_mat, str):
            self.shading_device_mat = str(self.shading_device_mat)

        if self.shad_dev_water_mold is not None and not isinstance(self.shad_dev_water_mold, str):
            self.shad_dev_water_mold = str(self.shad_dev_water_mold)

        if self.shading_device_type is not None and not isinstance(self.shading_device_type, ShadingDeviceTypeEnum):
            self.shading_device_type = ShadingDeviceTypeEnum(self.shading_device_type)

        if self.specific_humidity is not None and not isinstance(self.specific_humidity, QuantityValue):
            self.specific_humidity = QuantityValue(**as_dict(self.specific_humidity))

        if self.specific is not None and not isinstance(self.specific, SpecificEnum):
            self.specific = SpecificEnum(self.specific)

        if self.temp_out is not None and not isinstance(self.temp_out, QuantityValue):
            self.temp_out = QuantityValue(**as_dict(self.temp_out))

        if self.train_line is not None and not isinstance(self.train_line, TrainLineEnum):
            self.train_line = TrainLineEnum(self.train_line)

        if self.train_stat_loc is not None and not isinstance(self.train_stat_loc, TrainStatLocEnum):
            self.train_stat_loc = TrainStatLocEnum(self.train_stat_loc)

        if self.train_stop_loc is not None and not isinstance(self.train_stop_loc, TrainStopLocEnum):
            self.train_stop_loc = TrainStopLocEnum(self.train_stop_loc)

        if self.vis_media is not None and not isinstance(self.vis_media, VisMediaEnum):
            self.vis_media = VisMediaEnum(self.vis_media)

        if self.wall_area is not None and not isinstance(self.wall_area, QuantityValue):
            self.wall_area = QuantityValue(**as_dict(self.wall_area))

        if self.wall_const_type is not None and not isinstance(self.wall_const_type, WallConstTypeEnum):
            self.wall_const_type = WallConstTypeEnum(self.wall_const_type)

        if self.wall_finish_mat is not None and not isinstance(self.wall_finish_mat, WallFinishMatEnum):
            self.wall_finish_mat = WallFinishMatEnum(self.wall_finish_mat)

        if self.wall_height is not None and not isinstance(self.wall_height, QuantityValue):
            self.wall_height = QuantityValue(**as_dict(self.wall_height))

        if self.wall_loc is not None and not isinstance(self.wall_loc, WallLocEnum):
            self.wall_loc = WallLocEnum(self.wall_loc)

        if self.wall_water_mold is not None and not isinstance(self.wall_water_mold, str):
            self.wall_water_mold = str(self.wall_water_mold)

        if self.wall_surf_treatment is not None and not isinstance(self.wall_surf_treatment, WallSurfTreatmentEnum):
            self.wall_surf_treatment = WallSurfTreatmentEnum(self.wall_surf_treatment)

        if self.wall_texture is not None and not isinstance(self.wall_texture, WallTextureEnum):
            self.wall_texture = WallTextureEnum(self.wall_texture)

        if self.wall_thermal_mass is not None and not isinstance(self.wall_thermal_mass, QuantityValue):
            self.wall_thermal_mass = QuantityValue(**as_dict(self.wall_thermal_mass))

        if self.water_feat_size is not None and not isinstance(self.water_feat_size, QuantityValue):
            self.water_feat_size = QuantityValue(**as_dict(self.water_feat_size))

        if self.water_feat_type is not None and not isinstance(self.water_feat_type, WaterFeatTypeEnum):
            self.water_feat_type = WaterFeatTypeEnum(self.water_feat_type)

        if self.weekday is not None and not isinstance(self.weekday, WeekdayEnum):
            self.weekday = WeekdayEnum(self.weekday)

        if self.window_size is not None and not isinstance(self.window_size, str):
            self.window_size = str(self.window_size)

        if self.window_cond is not None and not isinstance(self.window_cond, WindowCondEnum):
            self.window_cond = WindowCondEnum(self.window_cond)

        if self.window_cover is not None and not isinstance(self.window_cover, WindowCoverEnum):
            self.window_cover = WindowCoverEnum(self.window_cover)

        if self.window_horiz_pos is not None and not isinstance(self.window_horiz_pos, WindowHorizPosEnum):
            self.window_horiz_pos = WindowHorizPosEnum(self.window_horiz_pos)

        if self.window_loc is not None and not isinstance(self.window_loc, WindowLocEnum):
            self.window_loc = WindowLocEnum(self.window_loc)

        if self.window_mat is not None and not isinstance(self.window_mat, WindowMatEnum):
            self.window_mat = WindowMatEnum(self.window_mat)

        if self.window_open_freq is not None and not isinstance(self.window_open_freq, int):
            self.window_open_freq = int(self.window_open_freq)

        if self.window_water_mold is not None and not isinstance(self.window_water_mold, str):
            self.window_water_mold = str(self.window_water_mold)

        if self.window_status is not None and not isinstance(self.window_status, str):
            self.window_status = str(self.window_status)

        if self.window_type is not None and not isinstance(self.window_type, WindowTypeEnum):
            self.window_type = WindowTypeEnum(self.window_type)

        if self.window_vert_pos is not None and not isinstance(self.window_vert_pos, WindowVertPosEnum):
            self.window_vert_pos = WindowVertPosEnum(self.window_vert_pos)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIGSEukaryote(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIGSEukaryote"
    class_name: ClassVar[str] = "built environment MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSEukaryote

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIGSBacteria(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package built environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIGSBacteria"
    class_name: ClassVar[str] = "built environment MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSBacteria

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIGSPlant(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIGSPlant"
    class_name: ClassVar[str] = "built environment MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSPlant

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIGSVirus(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package built environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIGSVirus"
    class_name: ClassVar[str] = "built environment MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSVirus

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIGSOrg(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIGSOrg"
    class_name: ClassVar[str] = "built environment MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIGSOrg

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIMS(BuiltEnvironment):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package built environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIMS"
    class_name: ClassVar[str] = "built environment MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMS

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIMARKSSpecimen(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIMARKSSpecimen"
    class_name: ClassVar[str] = "built environment MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMARKSSpecimen

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIMARKSSurvey(BuiltEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIMARKSSurvey"
    class_name: ClassVar[str] = "built environment MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMARKSSurvey

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMISAG(BuiltEnvironment):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMISAG"
    class_name: ClassVar[str] = "built environment MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMISAG

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIMAG(BuiltEnvironment):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIMAG"
    class_name: ClassVar[str] = "built environment MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIMAG

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class BuiltEnvironmentMIUVIG(BuiltEnvironment):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package built
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:BuiltEnvironmentMIUVIG"
    class_name: ClassVar[str] = "built environment MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.BuiltEnvironmentMIUVIG

    rel_air_humidity: Union[dict, "QuantityValue"] = None
    abs_air_humidity: Union[dict, "QuantityValue"] = None
    temp: Union[dict, "QuantityValue"] = None
    build_occup_type: Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]] = None
    carb_dioxide: Union[dict, "QuantityValue"] = None
    ventilation_type: str = None
    organism_count: Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]] = None
    indoor_space: Union[str, "IndoorSpaceEnum"] = None
    filter_type: Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]] = None
    heat_cool_type: Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]] = None
    building_setting: Union[str, "BuildingSettingEnum"] = None
    light_type: Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]] = None
    space_typ_state: str = None
    typ_occup_density: float = None
    occup_samp: int = None
    occup_density_samp: float = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associated(YAMLRoot):
    """
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associated"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associated"
    class_name: ClassVar[str] = "host-associated"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associated

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    ances_data: Optional[str] = None
    biol_stat: Optional[Union[str, "BiolStatEnum"]] = None
    genetic_mod: Optional[str] = None
    host_common_name: Optional[str] = None
    samp_capt_status: Optional[Union[str, "SampCaptStatusEnum"]] = None
    samp_dis_stage: Optional[Union[str, "SampDisStageEnum"]] = None
    host_taxid: Optional[str] = None
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_life_stage: Optional[str] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_habitat: Optional[str] = None
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_length: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_growth_cond: Optional[str] = None
    host_substrate: Optional[str] = None
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_subspecf_genlin: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    host_dry_mass: Optional[Union[dict, "QuantityValue"]] = None
    blood_press_diast: Optional[Union[dict, "QuantityValue"]] = None
    blood_press_syst: Optional[Union[dict, "QuantityValue"]] = None
    host_color: Optional[str] = None
    host_shape: Optional[str] = None
    gravidity: Optional[str] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.ances_data is not None and not isinstance(self.ances_data, str):
            self.ances_data = str(self.ances_data)

        if self.biol_stat is not None and not isinstance(self.biol_stat, BiolStatEnum):
            self.biol_stat = BiolStatEnum(self.biol_stat)

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if self.host_common_name is not None and not isinstance(self.host_common_name, str):
            self.host_common_name = str(self.host_common_name)

        if self.samp_capt_status is not None and not isinstance(self.samp_capt_status, SampCaptStatusEnum):
            self.samp_capt_status = SampCaptStatusEnum(self.samp_capt_status)

        if self.samp_dis_stage is not None and not isinstance(self.samp_dis_stage, SampDisStageEnum):
            self.samp_dis_stage = SampDisStageEnum(self.samp_dis_stage)

        if self.host_taxid is not None and not isinstance(self.host_taxid, str):
            self.host_taxid = str(self.host_taxid)

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_life_stage is not None and not isinstance(self.host_life_stage, str):
            self.host_life_stage = str(self.host_life_stage)

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_habitat is not None and not isinstance(self.host_body_habitat, str):
            self.host_body_habitat = str(self.host_body_habitat)

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if self.host_length is not None and not isinstance(self.host_length, QuantityValue):
            self.host_length = QuantityValue(**as_dict(self.host_length))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if self.host_growth_cond is not None and not isinstance(self.host_growth_cond, str):
            self.host_growth_cond = str(self.host_growth_cond)

        if self.host_substrate is not None and not isinstance(self.host_substrate, str):
            self.host_substrate = str(self.host_substrate)

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if not isinstance(self.host_subspecf_genlin, list):
            self.host_subspecf_genlin = [self.host_subspecf_genlin] if self.host_subspecf_genlin is not None else []
        self.host_subspecf_genlin = [v if isinstance(v, str) else str(v) for v in self.host_subspecf_genlin]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.host_dry_mass is not None and not isinstance(self.host_dry_mass, QuantityValue):
            self.host_dry_mass = QuantityValue(**as_dict(self.host_dry_mass))

        if self.blood_press_diast is not None and not isinstance(self.blood_press_diast, QuantityValue):
            self.blood_press_diast = QuantityValue(**as_dict(self.blood_press_diast))

        if self.blood_press_syst is not None and not isinstance(self.blood_press_syst, QuantityValue):
            self.blood_press_syst = QuantityValue(**as_dict(self.blood_press_syst))

        if self.host_color is not None and not isinstance(self.host_color, str):
            self.host_color = str(self.host_color)

        if self.host_shape is not None and not isinstance(self.host_shape, str):
            self.host_shape = str(self.host_shape)

        if self.gravidity is not None and not isinstance(self.gravidity, str):
            self.gravidity = str(self.gravidity)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIGSEukaryote(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIGSEukaryote"
    class_name: ClassVar[str] = "host-associated MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIGSBacteria(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIGSBacteria"
    class_name: ClassVar[str] = "host-associated MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIGSPlant(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIGSPlant"
    class_name: ClassVar[str] = "host-associated MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIGSVirus(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIGSVirus"
    class_name: ClassVar[str] = "host-associated MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIGSOrg(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIGSOrg"
    class_name: ClassVar[str] = "host-associated MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIMS(Host-associated):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIMS"
    class_name: ClassVar[str] = "host-associated MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIMARKSSpecimen(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIMARKSSpecimen"
    class_name: ClassVar[str] = "host-associated MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIMARKSSurvey(Host-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIMARKSSurvey"
    class_name: ClassVar[str] = "host-associated MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMISAG(Host-associated):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMISAG"
    class_name: ClassVar[str] = "host-associated MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIMAG(Host-associated):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIMAG"
    class_name: ClassVar[str] = "host-associated MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Host-associatedMIUVIG(Host-associated):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    host-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Host-associatedMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Host-associatedMIUVIG"
    class_name: ClassVar[str] = "host-associated MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Host-associatedMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associated(YAMLRoot):
    """
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associated"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associated"
    class_name: ClassVar[str] = "human-associated"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associated

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    ihmc_medication_code: Optional[Union[int, List[int]]] = empty_list()
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    smoker: Optional[str] = None
    host_hiv_stat: Optional[str] = None
    drug_usage: Optional[Union[Union[str, "DrugUsageEnum"], List[Union[str, "DrugUsageEnum"]]]] = empty_list()
    host_body_mass_index: Optional[Union[dict, "QuantityValue"]] = None
    diet_last_six_month: Optional[str] = None
    weight_loss_3_month: Optional[str] = None
    ethnicity: Optional[Union[str, List[str]]] = empty_list()
    host_occupation: Optional[int] = None
    pet_farm_animal: Optional[Union[str, List[str]]] = empty_list()
    travel_out_six_month: Optional[Union[str, List[str]]] = empty_list()
    twin_sibling: Optional[str] = None
    medic_hist_perform: Optional[str] = None
    study_complt_stat: Optional[Union[str, "StudyCompltStatEnum"]] = None
    pulmonary_disord: Optional[Union[str, List[str]]] = empty_list()
    nose_throat_disord: Optional[Union[str, List[str]]] = empty_list()
    blood_blood_disord: Optional[Union[str, List[str]]] = empty_list()
    host_pulse: Optional[Union[dict, "QuantityValue"]] = None
    gestation_state: Optional[str] = None
    maternal_health_stat: Optional[str] = None
    foetal_health_stat: Optional[str] = None
    amniotic_fluid_color: Optional[str] = None
    kidney_disord: Optional[Union[str, List[str]]] = empty_list()
    urogenit_tract_disor: Optional[Union[str, List[str]]] = empty_list()
    urine_collect_meth: Optional[str] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    samp_store_loc: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.ihmc_medication_code, list):
            self.ihmc_medication_code = [self.ihmc_medication_code] if self.ihmc_medication_code is not None else []
        self.ihmc_medication_code = [v if isinstance(v, int) else int(v) for v in self.ihmc_medication_code]

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.smoker is not None and not isinstance(self.smoker, str):
            self.smoker = str(self.smoker)

        if self.host_hiv_stat is not None and not isinstance(self.host_hiv_stat, str):
            self.host_hiv_stat = str(self.host_hiv_stat)

        if not isinstance(self.drug_usage, list):
            self.drug_usage = [self.drug_usage] if self.drug_usage is not None else []
        self.drug_usage = [v if isinstance(v, DrugUsageEnum) else DrugUsageEnum(v) for v in self.drug_usage]

        if self.host_body_mass_index is not None and not isinstance(self.host_body_mass_index, QuantityValue):
            self.host_body_mass_index = QuantityValue(**as_dict(self.host_body_mass_index))

        if self.diet_last_six_month is not None and not isinstance(self.diet_last_six_month, str):
            self.diet_last_six_month = str(self.diet_last_six_month)

        if self.weight_loss_3_month is not None and not isinstance(self.weight_loss_3_month, str):
            self.weight_loss_3_month = str(self.weight_loss_3_month)

        if not isinstance(self.ethnicity, list):
            self.ethnicity = [self.ethnicity] if self.ethnicity is not None else []
        self.ethnicity = [v if isinstance(v, str) else str(v) for v in self.ethnicity]

        if self.host_occupation is not None and not isinstance(self.host_occupation, int):
            self.host_occupation = int(self.host_occupation)

        if not isinstance(self.pet_farm_animal, list):
            self.pet_farm_animal = [self.pet_farm_animal] if self.pet_farm_animal is not None else []
        self.pet_farm_animal = [v if isinstance(v, str) else str(v) for v in self.pet_farm_animal]

        if not isinstance(self.travel_out_six_month, list):
            self.travel_out_six_month = [self.travel_out_six_month] if self.travel_out_six_month is not None else []
        self.travel_out_six_month = [v if isinstance(v, str) else str(v) for v in self.travel_out_six_month]

        if self.twin_sibling is not None and not isinstance(self.twin_sibling, str):
            self.twin_sibling = str(self.twin_sibling)

        if self.medic_hist_perform is not None and not isinstance(self.medic_hist_perform, str):
            self.medic_hist_perform = str(self.medic_hist_perform)

        if self.study_complt_stat is not None and not isinstance(self.study_complt_stat, StudyCompltStatEnum):
            self.study_complt_stat = StudyCompltStatEnum(self.study_complt_stat)

        if not isinstance(self.pulmonary_disord, list):
            self.pulmonary_disord = [self.pulmonary_disord] if self.pulmonary_disord is not None else []
        self.pulmonary_disord = [v if isinstance(v, str) else str(v) for v in self.pulmonary_disord]

        if not isinstance(self.nose_throat_disord, list):
            self.nose_throat_disord = [self.nose_throat_disord] if self.nose_throat_disord is not None else []
        self.nose_throat_disord = [v if isinstance(v, str) else str(v) for v in self.nose_throat_disord]

        if not isinstance(self.blood_blood_disord, list):
            self.blood_blood_disord = [self.blood_blood_disord] if self.blood_blood_disord is not None else []
        self.blood_blood_disord = [v if isinstance(v, str) else str(v) for v in self.blood_blood_disord]

        if self.host_pulse is not None and not isinstance(self.host_pulse, QuantityValue):
            self.host_pulse = QuantityValue(**as_dict(self.host_pulse))

        if self.gestation_state is not None and not isinstance(self.gestation_state, str):
            self.gestation_state = str(self.gestation_state)

        if self.maternal_health_stat is not None and not isinstance(self.maternal_health_stat, str):
            self.maternal_health_stat = str(self.maternal_health_stat)

        if self.foetal_health_stat is not None and not isinstance(self.foetal_health_stat, str):
            self.foetal_health_stat = str(self.foetal_health_stat)

        if self.amniotic_fluid_color is not None and not isinstance(self.amniotic_fluid_color, str):
            self.amniotic_fluid_color = str(self.amniotic_fluid_color)

        if not isinstance(self.kidney_disord, list):
            self.kidney_disord = [self.kidney_disord] if self.kidney_disord is not None else []
        self.kidney_disord = [v if isinstance(v, str) else str(v) for v in self.kidney_disord]

        if not isinstance(self.urogenit_tract_disor, list):
            self.urogenit_tract_disor = [self.urogenit_tract_disor] if self.urogenit_tract_disor is not None else []
        self.urogenit_tract_disor = [v if isinstance(v, str) else str(v) for v in self.urogenit_tract_disor]

        if self.urine_collect_meth is not None and not isinstance(self.urine_collect_meth, str):
            self.urine_collect_meth = str(self.urine_collect_meth)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIGSEukaryote(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIGSEukaryote"
    class_name: ClassVar[str] = "human-associated MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIGSBacteria(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIGSBacteria"
    class_name: ClassVar[str] = "human-associated MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIGSPlant(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIGSPlant"
    class_name: ClassVar[str] = "human-associated MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIGSVirus(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIGSVirus"
    class_name: ClassVar[str] = "human-associated MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIGSOrg(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIGSOrg"
    class_name: ClassVar[str] = "human-associated MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIMS(Human-associated):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIMS"
    class_name: ClassVar[str] = "human-associated MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIMARKSSpecimen(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIMARKSSpecimen"
    class_name: ClassVar[str] = "human-associated MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIMARKSSurvey(Human-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIMARKSSurvey"
    class_name: ClassVar[str] = "human-associated MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMISAG(Human-associated):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMISAG"
    class_name: ClassVar[str] = "human-associated MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIMAG(Human-associated):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIMAG"
    class_name: ClassVar[str] = "human-associated MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-associatedMIUVIG(Human-associated):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    human-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-associatedMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-associatedMIUVIG"
    class_name: ClassVar[str] = "human-associated MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-associatedMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gut(YAMLRoot):
    """
    human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gut"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gut"
    class_name: ClassVar[str] = "human-gut"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gut

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    gastrointest_disord: Optional[Union[str, List[str]]] = empty_list()
    liver_disord: Optional[Union[str, List[str]]] = empty_list()
    special_diet: Optional[Union[Union[str, "SpecialDietEnum"], List[Union[str, "SpecialDietEnum"]]]] = empty_list()
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    ihmc_medication_code: Optional[Union[int, List[int]]] = empty_list()
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    host_body_mass_index: Optional[Union[dict, "QuantityValue"]] = None
    ethnicity: Optional[Union[str, List[str]]] = empty_list()
    host_occupation: Optional[int] = None
    medic_hist_perform: Optional[str] = None
    host_pulse: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    samp_store_loc: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if not isinstance(self.gastrointest_disord, list):
            self.gastrointest_disord = [self.gastrointest_disord] if self.gastrointest_disord is not None else []
        self.gastrointest_disord = [v if isinstance(v, str) else str(v) for v in self.gastrointest_disord]

        if not isinstance(self.liver_disord, list):
            self.liver_disord = [self.liver_disord] if self.liver_disord is not None else []
        self.liver_disord = [v if isinstance(v, str) else str(v) for v in self.liver_disord]

        if not isinstance(self.special_diet, list):
            self.special_diet = [self.special_diet] if self.special_diet is not None else []
        self.special_diet = [v if isinstance(v, SpecialDietEnum) else SpecialDietEnum(v) for v in self.special_diet]

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.ihmc_medication_code, list):
            self.ihmc_medication_code = [self.ihmc_medication_code] if self.ihmc_medication_code is not None else []
        self.ihmc_medication_code = [v if isinstance(v, int) else int(v) for v in self.ihmc_medication_code]

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.host_body_mass_index is not None and not isinstance(self.host_body_mass_index, QuantityValue):
            self.host_body_mass_index = QuantityValue(**as_dict(self.host_body_mass_index))

        if not isinstance(self.ethnicity, list):
            self.ethnicity = [self.ethnicity] if self.ethnicity is not None else []
        self.ethnicity = [v if isinstance(v, str) else str(v) for v in self.ethnicity]

        if self.host_occupation is not None and not isinstance(self.host_occupation, int):
            self.host_occupation = int(self.host_occupation)

        if self.medic_hist_perform is not None and not isinstance(self.medic_hist_perform, str):
            self.medic_hist_perform = str(self.medic_hist_perform)

        if self.host_pulse is not None and not isinstance(self.host_pulse, QuantityValue):
            self.host_pulse = QuantityValue(**as_dict(self.host_pulse))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIGSEukaryote(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIGSEukaryote"
    class_name: ClassVar[str] = "human-gut MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIGSBacteria(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIGSBacteria"
    class_name: ClassVar[str] = "human-gut MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIGSPlant(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIGSPlant"
    class_name: ClassVar[str] = "human-gut MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIGSVirus(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIGSVirus"
    class_name: ClassVar[str] = "human-gut MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIGSOrg(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIGSOrg"
    class_name: ClassVar[str] = "human-gut MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIMS(Human-gut):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIMS"
    class_name: ClassVar[str] = "human-gut MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIMARKSSpecimen(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIMARKSSpecimen"
    class_name: ClassVar[str] = "human-gut MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIMARKSSurvey(Human-gut):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIMARKSSurvey"
    class_name: ClassVar[str] = "human-gut MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMISAG(Human-gut):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMISAG"
    class_name: ClassVar[str] = "human-gut MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIMAG(Human-gut):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIMAG"
    class_name: ClassVar[str] = "human-gut MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-gutMIUVIG(Human-gut):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package human-gut
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-gutMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-gutMIUVIG"
    class_name: ClassVar[str] = "human-gut MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-gutMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oral(YAMLRoot):
    """
    human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oral"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oral"
    class_name: ClassVar[str] = "human-oral"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oral

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    nose_throat_disord: Optional[Union[str, List[str]]] = empty_list()
    time_last_toothbrush: Optional[str] = None
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    ihmc_medication_code: Optional[Union[int, List[int]]] = empty_list()
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    host_body_mass_index: Optional[Union[dict, "QuantityValue"]] = None
    ethnicity: Optional[Union[str, List[str]]] = empty_list()
    host_occupation: Optional[int] = None
    medic_hist_perform: Optional[str] = None
    host_pulse: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    samp_store_loc: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if not isinstance(self.nose_throat_disord, list):
            self.nose_throat_disord = [self.nose_throat_disord] if self.nose_throat_disord is not None else []
        self.nose_throat_disord = [v if isinstance(v, str) else str(v) for v in self.nose_throat_disord]

        if self.time_last_toothbrush is not None and not isinstance(self.time_last_toothbrush, str):
            self.time_last_toothbrush = str(self.time_last_toothbrush)

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.ihmc_medication_code, list):
            self.ihmc_medication_code = [self.ihmc_medication_code] if self.ihmc_medication_code is not None else []
        self.ihmc_medication_code = [v if isinstance(v, int) else int(v) for v in self.ihmc_medication_code]

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.host_body_mass_index is not None and not isinstance(self.host_body_mass_index, QuantityValue):
            self.host_body_mass_index = QuantityValue(**as_dict(self.host_body_mass_index))

        if not isinstance(self.ethnicity, list):
            self.ethnicity = [self.ethnicity] if self.ethnicity is not None else []
        self.ethnicity = [v if isinstance(v, str) else str(v) for v in self.ethnicity]

        if self.host_occupation is not None and not isinstance(self.host_occupation, int):
            self.host_occupation = int(self.host_occupation)

        if self.medic_hist_perform is not None and not isinstance(self.medic_hist_perform, str):
            self.medic_hist_perform = str(self.medic_hist_perform)

        if self.host_pulse is not None and not isinstance(self.host_pulse, QuantityValue):
            self.host_pulse = QuantityValue(**as_dict(self.host_pulse))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIGSEukaryote(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIGSEukaryote"
    class_name: ClassVar[str] = "human-oral MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIGSBacteria(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIGSBacteria"
    class_name: ClassVar[str] = "human-oral MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIGSPlant(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIGSPlant"
    class_name: ClassVar[str] = "human-oral MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIGSVirus(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIGSVirus"
    class_name: ClassVar[str] = "human-oral MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIGSOrg(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIGSOrg"
    class_name: ClassVar[str] = "human-oral MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIMS(Human-oral):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIMS"
    class_name: ClassVar[str] = "human-oral MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIMARKSSpecimen(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIMARKSSpecimen"
    class_name: ClassVar[str] = "human-oral MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIMARKSSurvey(Human-oral):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIMARKSSurvey"
    class_name: ClassVar[str] = "human-oral MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMISAG(Human-oral):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMISAG"
    class_name: ClassVar[str] = "human-oral MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIMAG(Human-oral):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIMAG"
    class_name: ClassVar[str] = "human-oral MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-oralMIUVIG(Human-oral):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    human-oral
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-oralMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-oralMIUVIG"
    class_name: ClassVar[str] = "human-oral MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-oralMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skin(YAMLRoot):
    """
    human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skin"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skin"
    class_name: ClassVar[str] = "human-skin"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skin

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    dermatology_disord: Optional[Union[str, List[str]]] = empty_list()
    time_since_last_wash: Optional[str] = None
    dominant_hand: Optional[Union[str, "DominantHandEnum"]] = None
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    ihmc_medication_code: Optional[Union[int, List[int]]] = empty_list()
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    host_body_mass_index: Optional[Union[dict, "QuantityValue"]] = None
    ethnicity: Optional[Union[str, List[str]]] = empty_list()
    host_occupation: Optional[int] = None
    medic_hist_perform: Optional[str] = None
    host_pulse: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if not isinstance(self.dermatology_disord, list):
            self.dermatology_disord = [self.dermatology_disord] if self.dermatology_disord is not None else []
        self.dermatology_disord = [v if isinstance(v, str) else str(v) for v in self.dermatology_disord]

        if self.time_since_last_wash is not None and not isinstance(self.time_since_last_wash, str):
            self.time_since_last_wash = str(self.time_since_last_wash)

        if self.dominant_hand is not None and not isinstance(self.dominant_hand, DominantHandEnum):
            self.dominant_hand = DominantHandEnum(self.dominant_hand)

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.ihmc_medication_code, list):
            self.ihmc_medication_code = [self.ihmc_medication_code] if self.ihmc_medication_code is not None else []
        self.ihmc_medication_code = [v if isinstance(v, int) else int(v) for v in self.ihmc_medication_code]

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.host_body_mass_index is not None and not isinstance(self.host_body_mass_index, QuantityValue):
            self.host_body_mass_index = QuantityValue(**as_dict(self.host_body_mass_index))

        if not isinstance(self.ethnicity, list):
            self.ethnicity = [self.ethnicity] if self.ethnicity is not None else []
        self.ethnicity = [v if isinstance(v, str) else str(v) for v in self.ethnicity]

        if self.host_occupation is not None and not isinstance(self.host_occupation, int):
            self.host_occupation = int(self.host_occupation)

        if self.medic_hist_perform is not None and not isinstance(self.medic_hist_perform, str):
            self.medic_hist_perform = str(self.medic_hist_perform)

        if self.host_pulse is not None and not isinstance(self.host_pulse, QuantityValue):
            self.host_pulse = QuantityValue(**as_dict(self.host_pulse))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIGSEukaryote(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIGSEukaryote"
    class_name: ClassVar[str] = "human-skin MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIGSBacteria(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIGSBacteria"
    class_name: ClassVar[str] = "human-skin MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIGSPlant(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIGSPlant"
    class_name: ClassVar[str] = "human-skin MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIGSVirus(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIGSVirus"
    class_name: ClassVar[str] = "human-skin MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIGSOrg(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIGSOrg"
    class_name: ClassVar[str] = "human-skin MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIMS(Human-skin):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIMS"
    class_name: ClassVar[str] = "human-skin MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIMARKSSpecimen(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIMARKSSpecimen"
    class_name: ClassVar[str] = "human-skin MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIMARKSSurvey(Human-skin):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIMARKSSurvey"
    class_name: ClassVar[str] = "human-skin MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMISAG(Human-skin):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMISAG"
    class_name: ClassVar[str] = "human-skin MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIMAG(Human-skin):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIMAG"
    class_name: ClassVar[str] = "human-skin MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-skinMIUVIG(Human-skin):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    human-skin
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-skinMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-skinMIUVIG"
    class_name: ClassVar[str] = "human-skin MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-skinMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginal(YAMLRoot):
    """
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginal"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginal"
    class_name: ClassVar[str] = "human-vaginal"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginal

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    menarche: Optional[Union[str, XSDDate]] = None
    sexual_act: Optional[str] = None
    pregnancy: Optional[Union[str, XSDDate]] = None
    douche: Optional[Union[str, XSDDate]] = None
    birth_control: Optional[str] = None
    menopause: Optional[Union[str, XSDDate]] = None
    hrt: Optional[Union[str, XSDDate]] = None
    hysterectomy: Optional[str] = None
    gynecologic_disord: Optional[Union[str, List[str]]] = empty_list()
    urogenit_disord: Optional[Union[str, List[str]]] = empty_list()
    host_subject_id: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    ihmc_medication_code: Optional[Union[int, List[int]]] = empty_list()
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_diet: Optional[Union[str, List[str]]] = empty_list()
    host_last_meal: Optional[Union[str, List[str]]] = empty_list()
    host_family_relation: Optional[Union[str, List[str]]] = empty_list()
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_body_temp: Optional[Union[dict, "QuantityValue"]] = None
    host_body_mass_index: Optional[Union[dict, "QuantityValue"]] = None
    ethnicity: Optional[Union[str, List[str]]] = empty_list()
    host_occupation: Optional[int] = None
    medic_hist_perform: Optional[str] = None
    host_pulse: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    samp_salinity: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_loc: Optional[str] = None
    samp_store_dur: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.menarche is not None and not isinstance(self.menarche, XSDDate):
            self.menarche = XSDDate(self.menarche)

        if self.sexual_act is not None and not isinstance(self.sexual_act, str):
            self.sexual_act = str(self.sexual_act)

        if self.pregnancy is not None and not isinstance(self.pregnancy, XSDDate):
            self.pregnancy = XSDDate(self.pregnancy)

        if self.douche is not None and not isinstance(self.douche, XSDDate):
            self.douche = XSDDate(self.douche)

        if self.birth_control is not None and not isinstance(self.birth_control, str):
            self.birth_control = str(self.birth_control)

        if self.menopause is not None and not isinstance(self.menopause, XSDDate):
            self.menopause = XSDDate(self.menopause)

        if self.hrt is not None and not isinstance(self.hrt, XSDDate):
            self.hrt = XSDDate(self.hrt)

        if self.hysterectomy is not None and not isinstance(self.hysterectomy, str):
            self.hysterectomy = str(self.hysterectomy)

        if not isinstance(self.gynecologic_disord, list):
            self.gynecologic_disord = [self.gynecologic_disord] if self.gynecologic_disord is not None else []
        self.gynecologic_disord = [v if isinstance(v, str) else str(v) for v in self.gynecologic_disord]

        if not isinstance(self.urogenit_disord, list):
            self.urogenit_disord = [self.urogenit_disord] if self.urogenit_disord is not None else []
        self.urogenit_disord = [v if isinstance(v, str) else str(v) for v in self.urogenit_disord]

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if not isinstance(self.ihmc_medication_code, list):
            self.ihmc_medication_code = [self.ihmc_medication_code] if self.ihmc_medication_code is not None else []
        self.ihmc_medication_code = [v if isinstance(v, int) else int(v) for v in self.ihmc_medication_code]

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_diet, list):
            self.host_diet = [self.host_diet] if self.host_diet is not None else []
        self.host_diet = [v if isinstance(v, str) else str(v) for v in self.host_diet]

        if not isinstance(self.host_last_meal, list):
            self.host_last_meal = [self.host_last_meal] if self.host_last_meal is not None else []
        self.host_last_meal = [v if isinstance(v, str) else str(v) for v in self.host_last_meal]

        if not isinstance(self.host_family_relation, list):
            self.host_family_relation = [self.host_family_relation] if self.host_family_relation is not None else []
        self.host_family_relation = [v if isinstance(v, str) else str(v) for v in self.host_family_relation]

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_body_temp is not None and not isinstance(self.host_body_temp, QuantityValue):
            self.host_body_temp = QuantityValue(**as_dict(self.host_body_temp))

        if self.host_body_mass_index is not None and not isinstance(self.host_body_mass_index, QuantityValue):
            self.host_body_mass_index = QuantityValue(**as_dict(self.host_body_mass_index))

        if not isinstance(self.ethnicity, list):
            self.ethnicity = [self.ethnicity] if self.ethnicity is not None else []
        self.ethnicity = [v if isinstance(v, str) else str(v) for v in self.ethnicity]

        if self.host_occupation is not None and not isinstance(self.host_occupation, int):
            self.host_occupation = int(self.host_occupation)

        if self.medic_hist_perform is not None and not isinstance(self.medic_hist_perform, str):
            self.medic_hist_perform = str(self.medic_hist_perform)

        if self.host_pulse is not None and not isinstance(self.host_pulse, QuantityValue):
            self.host_pulse = QuantityValue(**as_dict(self.host_pulse))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.samp_salinity is not None and not isinstance(self.samp_salinity, QuantityValue):
            self.samp_salinity = QuantityValue(**as_dict(self.samp_salinity))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIGSEukaryote(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIGSEukaryote"
    class_name: ClassVar[str] = "human-vaginal MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIGSBacteria(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIGSBacteria"
    class_name: ClassVar[str] = "human-vaginal MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIGSPlant(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIGSPlant"
    class_name: ClassVar[str] = "human-vaginal MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIGSVirus(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIGSVirus"
    class_name: ClassVar[str] = "human-vaginal MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIGSOrg(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIGSOrg"
    class_name: ClassVar[str] = "human-vaginal MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIMS(Human-vaginal):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIMS"
    class_name: ClassVar[str] = "human-vaginal MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIMARKSSpecimen(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIMARKSSpecimen"
    class_name: ClassVar[str] = "human-vaginal MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIMARKSSurvey(Human-vaginal):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIMARKSSurvey"
    class_name: ClassVar[str] = "human-vaginal MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMISAG(Human-vaginal):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMISAG"
    class_name: ClassVar[str] = "human-vaginal MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIMAG(Human-vaginal):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIMAG"
    class_name: ClassVar[str] = "human-vaginal MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Human-vaginalMIUVIG(Human-vaginal):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    human-vaginal
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Human-vaginalMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Human-vaginalMIUVIG"
    class_name: ClassVar[str] = "human-vaginal MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Human-vaginalMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-cores(YAMLRoot):
    """
    hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-cores"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-cores"
    class_name: ClassVar[str] = "hydrocarbon resources-cores"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-cores

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    field: Optional[str] = None
    reservoir: Optional[str] = None
    tvdss_of_hcr_temp: Optional[Union[dict, "QuantityValue"]] = None
    hcr_pressure: Optional[str] = None
    tvdss_of_hcr_press: Optional[Union[dict, "QuantityValue"]] = None
    permeability: Optional[str] = None
    porosity: Optional[str] = None
    lithology: Optional[Union[str, "LithologyEnum"]] = None
    depos_env: Optional[Union[str, "DeposEnvEnum"]] = None
    hcr_geol_age: Optional[Union[str, "HcrGeolAgeEnum"]] = None
    owc_tvdss: Optional[Union[dict, "QuantityValue"]] = None
    hcr_fw_salinity: Optional[Union[dict, "QuantityValue"]] = None
    sr_kerog_type: Optional[Union[str, "SrKerogTypeEnum"]] = None
    sr_lithology: Optional[Union[str, "SrLithologyEnum"]] = None
    sr_dep_env: Optional[Union[str, "SrDepEnvEnum"]] = None
    sr_geol_age: Optional[Union[str, "SrGeolAgeEnum"]] = None
    samp_well_name: Optional[str] = None
    win: Optional[str] = None
    samp_subtype: Optional[Union[str, "SampSubtypeEnum"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    samp_tvdss: Optional[str] = None
    samp_md: Optional[Union[str, "SampMdEnum"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    samp_transport_cond: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    org_count_qpcr_info: Optional[str] = None
    ph: Optional[float] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    alkalinity_method: Optional[str] = None
    sulfate: Optional[Union[dict, "QuantityValue"]] = None
    sulfide: Optional[Union[dict, "QuantityValue"]] = None
    tot_sulfur: Optional[Union[dict, "QuantityValue"]] = None
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_iron: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    magnesium: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    tot_iron: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_phosp: Optional[Union[dict, "QuantityValue"]] = None
    tot_phosp: Optional[Union[dict, "QuantityValue"]] = None
    suspend_solids: Optional[Union[str, List[str]]] = empty_list()
    density: Optional[Union[dict, "QuantityValue"]] = None
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen_fluid: Optional[Union[dict, "QuantityValue"]] = None
    vfa: Optional[Union[dict, "QuantityValue"]] = None
    benzene: Optional[Union[dict, "QuantityValue"]] = None
    toluene: Optional[Union[dict, "QuantityValue"]] = None
    ethylbenzene: Optional[Union[dict, "QuantityValue"]] = None
    xylene: Optional[Union[dict, "QuantityValue"]] = None
    tan: Optional[Union[dict, "QuantityValue"]] = None
    viscosity: Optional[str] = None
    pour_point: Optional[Union[dict, "QuantityValue"]] = None
    saturates_pc: Optional[str] = None
    aromatics_pc: Optional[str] = None
    resins_pc: Optional[str] = None
    asphaltenes_pc: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    additional_info: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.temp):
            self.MissingRequiredField("temp")
        if not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self._is_empty(self.hcr):
            self.MissingRequiredField("hcr")
        if not isinstance(self.hcr, HcrEnum):
            self.hcr = HcrEnum(self.hcr)

        if self._is_empty(self.hc_produced):
            self.MissingRequiredField("hc_produced")
        if not isinstance(self.hc_produced, HcProducedEnum):
            self.hc_produced = HcProducedEnum(self.hc_produced)

        if self._is_empty(self.basin):
            self.MissingRequiredField("basin")
        if not isinstance(self.basin, str):
            self.basin = str(self.basin)

        if self._is_empty(self.hcr_temp):
            self.MissingRequiredField("hcr_temp")
        if not isinstance(self.hcr_temp, str):
            self.hcr_temp = str(self.hcr_temp)

        if self._is_empty(self.sulfate_fw):
            self.MissingRequiredField("sulfate_fw")
        if not isinstance(self.sulfate_fw, QuantityValue):
            self.sulfate_fw = QuantityValue(**as_dict(self.sulfate_fw))

        if self._is_empty(self.vfa_fw):
            self.MissingRequiredField("vfa_fw")
        if not isinstance(self.vfa_fw, QuantityValue):
            self.vfa_fw = QuantityValue(**as_dict(self.vfa_fw))

        if self._is_empty(self.samp_type):
            self.MissingRequiredField("samp_type")
        if not isinstance(self.samp_type, str):
            self.samp_type = str(self.samp_type)

        if self._is_empty(self.api):
            self.MissingRequiredField("api")
        if not isinstance(self.api, QuantityValue):
            self.api = QuantityValue(**as_dict(self.api))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.field is not None and not isinstance(self.field, str):
            self.field = str(self.field)

        if self.reservoir is not None and not isinstance(self.reservoir, str):
            self.reservoir = str(self.reservoir)

        if self.tvdss_of_hcr_temp is not None and not isinstance(self.tvdss_of_hcr_temp, QuantityValue):
            self.tvdss_of_hcr_temp = QuantityValue(**as_dict(self.tvdss_of_hcr_temp))

        if self.hcr_pressure is not None and not isinstance(self.hcr_pressure, str):
            self.hcr_pressure = str(self.hcr_pressure)

        if self.tvdss_of_hcr_press is not None and not isinstance(self.tvdss_of_hcr_press, QuantityValue):
            self.tvdss_of_hcr_press = QuantityValue(**as_dict(self.tvdss_of_hcr_press))

        if self.permeability is not None and not isinstance(self.permeability, str):
            self.permeability = str(self.permeability)

        if self.porosity is not None and not isinstance(self.porosity, str):
            self.porosity = str(self.porosity)

        if self.lithology is not None and not isinstance(self.lithology, LithologyEnum):
            self.lithology = LithologyEnum(self.lithology)

        if self.depos_env is not None and not isinstance(self.depos_env, DeposEnvEnum):
            self.depos_env = DeposEnvEnum(self.depos_env)

        if self.hcr_geol_age is not None and not isinstance(self.hcr_geol_age, HcrGeolAgeEnum):
            self.hcr_geol_age = HcrGeolAgeEnum(self.hcr_geol_age)

        if self.owc_tvdss is not None and not isinstance(self.owc_tvdss, QuantityValue):
            self.owc_tvdss = QuantityValue(**as_dict(self.owc_tvdss))

        if self.hcr_fw_salinity is not None and not isinstance(self.hcr_fw_salinity, QuantityValue):
            self.hcr_fw_salinity = QuantityValue(**as_dict(self.hcr_fw_salinity))

        if self.sr_kerog_type is not None and not isinstance(self.sr_kerog_type, SrKerogTypeEnum):
            self.sr_kerog_type = SrKerogTypeEnum(self.sr_kerog_type)

        if self.sr_lithology is not None and not isinstance(self.sr_lithology, SrLithologyEnum):
            self.sr_lithology = SrLithologyEnum(self.sr_lithology)

        if self.sr_dep_env is not None and not isinstance(self.sr_dep_env, SrDepEnvEnum):
            self.sr_dep_env = SrDepEnvEnum(self.sr_dep_env)

        if self.sr_geol_age is not None and not isinstance(self.sr_geol_age, SrGeolAgeEnum):
            self.sr_geol_age = SrGeolAgeEnum(self.sr_geol_age)

        if self.samp_well_name is not None and not isinstance(self.samp_well_name, str):
            self.samp_well_name = str(self.samp_well_name)

        if self.win is not None and not isinstance(self.win, str):
            self.win = str(self.win)

        if self.samp_subtype is not None and not isinstance(self.samp_subtype, SampSubtypeEnum):
            self.samp_subtype = SampSubtypeEnum(self.samp_subtype)

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.samp_tvdss is not None and not isinstance(self.samp_tvdss, str):
            self.samp_tvdss = str(self.samp_tvdss)

        if self.samp_md is not None and not isinstance(self.samp_md, SampMdEnum):
            self.samp_md = SampMdEnum(self.samp_md)

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.samp_transport_cond is not None and not isinstance(self.samp_transport_cond, str):
            self.samp_transport_cond = str(self.samp_transport_cond)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.org_count_qpcr_info is not None and not isinstance(self.org_count_qpcr_info, str):
            self.org_count_qpcr_info = str(self.org_count_qpcr_info)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.alkalinity_method is not None and not isinstance(self.alkalinity_method, str):
            self.alkalinity_method = str(self.alkalinity_method)

        if self.sulfate is not None and not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self.sulfide is not None and not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self.tot_sulfur is not None and not isinstance(self.tot_sulfur, QuantityValue):
            self.tot_sulfur = QuantityValue(**as_dict(self.tot_sulfur))

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if self.tot_nitro is not None and not isinstance(self.tot_nitro, QuantityValue):
            self.tot_nitro = QuantityValue(**as_dict(self.tot_nitro))

        if self.diss_iron is not None and not isinstance(self.diss_iron, QuantityValue):
            self.diss_iron = QuantityValue(**as_dict(self.diss_iron))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.magnesium is not None and not isinstance(self.magnesium, QuantityValue):
            self.magnesium = QuantityValue(**as_dict(self.magnesium))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if self.tot_iron is not None and not isinstance(self.tot_iron, QuantityValue):
            self.tot_iron = QuantityValue(**as_dict(self.tot_iron))

        if self.diss_org_carb is not None and not isinstance(self.diss_org_carb, QuantityValue):
            self.diss_org_carb = QuantityValue(**as_dict(self.diss_org_carb))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_inorg_phosp is not None and not isinstance(self.diss_inorg_phosp, QuantityValue):
            self.diss_inorg_phosp = QuantityValue(**as_dict(self.diss_inorg_phosp))

        if self.tot_phosp is not None and not isinstance(self.tot_phosp, QuantityValue):
            self.tot_phosp = QuantityValue(**as_dict(self.tot_phosp))

        if not isinstance(self.suspend_solids, list):
            self.suspend_solids = [self.suspend_solids] if self.suspend_solids is not None else []
        self.suspend_solids = [v if isinstance(v, str) else str(v) for v in self.suspend_solids]

        if self.density is not None and not isinstance(self.density, QuantityValue):
            self.density = QuantityValue(**as_dict(self.density))

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_oxygen_fluid is not None and not isinstance(self.diss_oxygen_fluid, QuantityValue):
            self.diss_oxygen_fluid = QuantityValue(**as_dict(self.diss_oxygen_fluid))

        if self.vfa is not None and not isinstance(self.vfa, QuantityValue):
            self.vfa = QuantityValue(**as_dict(self.vfa))

        if self.benzene is not None and not isinstance(self.benzene, QuantityValue):
            self.benzene = QuantityValue(**as_dict(self.benzene))

        if self.toluene is not None and not isinstance(self.toluene, QuantityValue):
            self.toluene = QuantityValue(**as_dict(self.toluene))

        if self.ethylbenzene is not None and not isinstance(self.ethylbenzene, QuantityValue):
            self.ethylbenzene = QuantityValue(**as_dict(self.ethylbenzene))

        if self.xylene is not None and not isinstance(self.xylene, QuantityValue):
            self.xylene = QuantityValue(**as_dict(self.xylene))

        if self.tan is not None and not isinstance(self.tan, QuantityValue):
            self.tan = QuantityValue(**as_dict(self.tan))

        if self.viscosity is not None and not isinstance(self.viscosity, str):
            self.viscosity = str(self.viscosity)

        if self.pour_point is not None and not isinstance(self.pour_point, QuantityValue):
            self.pour_point = QuantityValue(**as_dict(self.pour_point))

        if self.saturates_pc is not None and not isinstance(self.saturates_pc, str):
            self.saturates_pc = str(self.saturates_pc)

        if self.aromatics_pc is not None and not isinstance(self.aromatics_pc, str):
            self.aromatics_pc = str(self.aromatics_pc)

        if self.resins_pc is not None and not isinstance(self.resins_pc, str):
            self.resins_pc = str(self.resins_pc)

        if self.asphaltenes_pc is not None and not isinstance(self.asphaltenes_pc, str):
            self.asphaltenes_pc = str(self.asphaltenes_pc)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.additional_info is not None and not isinstance(self.additional_info, str):
            self.additional_info = str(self.additional_info)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIGSEukaryote(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIGSEukaryote"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIGSEukaryote

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIGSBacteria(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIGSBacteria"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIGSBacteria

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIGSPlant(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package hydrocarbon
    resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIGSPlant"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIGSPlant

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIGSVirus(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIGSVirus"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIGSVirus

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIGSOrg(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package hydrocarbon
    resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIGSOrg"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIGSOrg

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIMS(HydrocarbonResources-cores):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIMS"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIMS

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIMARKSSpecimen(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIMARKSSpecimen"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIMARKSSpecimen

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIMARKSSurvey(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package hydrocarbon
    resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIMARKSSurvey"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIMARKSSurvey

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMISAG(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package hydrocarbon
    resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMISAG"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMISAG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIMAG(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIMAG"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIMAG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-coresMIUVIG(HydrocarbonResources-cores):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    hydrocarbon resources-cores
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-coresMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-coresMIUVIG"
    class_name: ClassVar[str] = "hydrocarbon resources-cores MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-coresMIUVIG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    hcr_temp: str = None
    sulfate_fw: Union[dict, "QuantityValue"] = None
    vfa_fw: Union[dict, "QuantityValue"] = None
    samp_type: str = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabs(YAMLRoot):
    """
    hydrocarbon resources-fluids/swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabs"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabs"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabs

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    field: Optional[str] = None
    reservoir: Optional[str] = None
    hcr_temp: Optional[str] = None
    tvdss_of_hcr_temp: Optional[Union[dict, "QuantityValue"]] = None
    hcr_pressure: Optional[str] = None
    tvdss_of_hcr_press: Optional[Union[dict, "QuantityValue"]] = None
    lithology: Optional[Union[str, "LithologyEnum"]] = None
    depos_env: Optional[Union[str, "DeposEnvEnum"]] = None
    hcr_geol_age: Optional[Union[str, "HcrGeolAgeEnum"]] = None
    hcr_fw_salinity: Optional[Union[dict, "QuantityValue"]] = None
    sulfate_fw: Optional[Union[dict, "QuantityValue"]] = None
    vfa_fw: Optional[Union[dict, "QuantityValue"]] = None
    prod_start_date: Optional[Union[str, XSDDate]] = None
    prod_rate: Optional[Union[dict, "QuantityValue"]] = None
    water_prod_rate: Optional[Union[dict, "QuantityValue"]] = None
    iw_bt_date_well: Optional[Union[str, XSDDate]] = None
    biocide: Optional[str] = None
    biocide_admin_method: Optional[str] = None
    chem_treatment: Optional[str] = None
    chem_treat_method: Optional[str] = None
    samp_loc_corr_rate: Optional[str] = None
    samp_well_name: Optional[str] = None
    win: Optional[str] = None
    samp_subtype: Optional[Union[str, "SampSubtypeEnum"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    samp_preserv: Optional[str] = None
    samp_transport_cond: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    org_count_qpcr_info: Optional[str] = None
    ph: Optional[float] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    alkalinity_method: Optional[str] = None
    tot_sulfur: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_iron: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    magnesium: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    tot_iron: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_phosp: Optional[Union[dict, "QuantityValue"]] = None
    tot_phosp: Optional[Union[dict, "QuantityValue"]] = None
    suspend_solids: Optional[Union[str, List[str]]] = empty_list()
    density: Optional[Union[dict, "QuantityValue"]] = None
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen_fluid: Optional[Union[dict, "QuantityValue"]] = None
    vfa: Optional[Union[dict, "QuantityValue"]] = None
    benzene: Optional[Union[dict, "QuantityValue"]] = None
    toluene: Optional[Union[dict, "QuantityValue"]] = None
    ethylbenzene: Optional[Union[dict, "QuantityValue"]] = None
    xylene: Optional[Union[dict, "QuantityValue"]] = None
    tan: Optional[Union[dict, "QuantityValue"]] = None
    viscosity: Optional[str] = None
    pour_point: Optional[Union[dict, "QuantityValue"]] = None
    saturates_pc: Optional[str] = None
    aromatics_pc: Optional[str] = None
    resins_pc: Optional[str] = None
    asphaltenes_pc: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    additional_info: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.temp):
            self.MissingRequiredField("temp")
        if not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self._is_empty(self.hcr):
            self.MissingRequiredField("hcr")
        if not isinstance(self.hcr, HcrEnum):
            self.hcr = HcrEnum(self.hcr)

        if self._is_empty(self.hc_produced):
            self.MissingRequiredField("hc_produced")
        if not isinstance(self.hc_produced, HcProducedEnum):
            self.hc_produced = HcProducedEnum(self.hc_produced)

        if self._is_empty(self.basin):
            self.MissingRequiredField("basin")
        if not isinstance(self.basin, str):
            self.basin = str(self.basin)

        if self._is_empty(self.water_cut):
            self.MissingRequiredField("water_cut")
        if not isinstance(self.water_cut, QuantityValue):
            self.water_cut = QuantityValue(**as_dict(self.water_cut))

        if self._is_empty(self.iwf):
            self.MissingRequiredField("iwf")
        if not isinstance(self.iwf, QuantityValue):
            self.iwf = QuantityValue(**as_dict(self.iwf))

        if self._is_empty(self.add_recov_method):
            self.MissingRequiredField("add_recov_method")
        if not isinstance(self.add_recov_method, str):
            self.add_recov_method = str(self.add_recov_method)

        if self._is_empty(self.samp_type):
            self.MissingRequiredField("samp_type")
        if not isinstance(self.samp_type, str):
            self.samp_type = str(self.samp_type)

        if self._is_empty(self.samp_collect_point):
            self.MissingRequiredField("samp_collect_point")
        if not isinstance(self.samp_collect_point, SampCollectPointEnum):
            self.samp_collect_point = SampCollectPointEnum(self.samp_collect_point)

        if self._is_empty(self.sulfate):
            self.MissingRequiredField("sulfate")
        if not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self._is_empty(self.sulfide):
            self.MissingRequiredField("sulfide")
        if not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self._is_empty(self.nitrate):
            self.MissingRequiredField("nitrate")
        if not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self._is_empty(self.api):
            self.MissingRequiredField("api")
        if not isinstance(self.api, QuantityValue):
            self.api = QuantityValue(**as_dict(self.api))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.field is not None and not isinstance(self.field, str):
            self.field = str(self.field)

        if self.reservoir is not None and not isinstance(self.reservoir, str):
            self.reservoir = str(self.reservoir)

        if self.hcr_temp is not None and not isinstance(self.hcr_temp, str):
            self.hcr_temp = str(self.hcr_temp)

        if self.tvdss_of_hcr_temp is not None and not isinstance(self.tvdss_of_hcr_temp, QuantityValue):
            self.tvdss_of_hcr_temp = QuantityValue(**as_dict(self.tvdss_of_hcr_temp))

        if self.hcr_pressure is not None and not isinstance(self.hcr_pressure, str):
            self.hcr_pressure = str(self.hcr_pressure)

        if self.tvdss_of_hcr_press is not None and not isinstance(self.tvdss_of_hcr_press, QuantityValue):
            self.tvdss_of_hcr_press = QuantityValue(**as_dict(self.tvdss_of_hcr_press))

        if self.lithology is not None and not isinstance(self.lithology, LithologyEnum):
            self.lithology = LithologyEnum(self.lithology)

        if self.depos_env is not None and not isinstance(self.depos_env, DeposEnvEnum):
            self.depos_env = DeposEnvEnum(self.depos_env)

        if self.hcr_geol_age is not None and not isinstance(self.hcr_geol_age, HcrGeolAgeEnum):
            self.hcr_geol_age = HcrGeolAgeEnum(self.hcr_geol_age)

        if self.hcr_fw_salinity is not None and not isinstance(self.hcr_fw_salinity, QuantityValue):
            self.hcr_fw_salinity = QuantityValue(**as_dict(self.hcr_fw_salinity))

        if self.sulfate_fw is not None and not isinstance(self.sulfate_fw, QuantityValue):
            self.sulfate_fw = QuantityValue(**as_dict(self.sulfate_fw))

        if self.vfa_fw is not None and not isinstance(self.vfa_fw, QuantityValue):
            self.vfa_fw = QuantityValue(**as_dict(self.vfa_fw))

        if self.prod_start_date is not None and not isinstance(self.prod_start_date, XSDDate):
            self.prod_start_date = XSDDate(self.prod_start_date)

        if self.prod_rate is not None and not isinstance(self.prod_rate, QuantityValue):
            self.prod_rate = QuantityValue(**as_dict(self.prod_rate))

        if self.water_prod_rate is not None and not isinstance(self.water_prod_rate, QuantityValue):
            self.water_prod_rate = QuantityValue(**as_dict(self.water_prod_rate))

        if self.iw_bt_date_well is not None and not isinstance(self.iw_bt_date_well, XSDDate):
            self.iw_bt_date_well = XSDDate(self.iw_bt_date_well)

        if self.biocide is not None and not isinstance(self.biocide, str):
            self.biocide = str(self.biocide)

        if self.biocide_admin_method is not None and not isinstance(self.biocide_admin_method, str):
            self.biocide_admin_method = str(self.biocide_admin_method)

        if self.chem_treatment is not None and not isinstance(self.chem_treatment, str):
            self.chem_treatment = str(self.chem_treatment)

        if self.chem_treat_method is not None and not isinstance(self.chem_treat_method, str):
            self.chem_treat_method = str(self.chem_treat_method)

        if self.samp_loc_corr_rate is not None and not isinstance(self.samp_loc_corr_rate, str):
            self.samp_loc_corr_rate = str(self.samp_loc_corr_rate)

        if self.samp_well_name is not None and not isinstance(self.samp_well_name, str):
            self.samp_well_name = str(self.samp_well_name)

        if self.win is not None and not isinstance(self.win, str):
            self.win = str(self.win)

        if self.samp_subtype is not None and not isinstance(self.samp_subtype, SampSubtypeEnum):
            self.samp_subtype = SampSubtypeEnum(self.samp_subtype)

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.samp_preserv is not None and not isinstance(self.samp_preserv, str):
            self.samp_preserv = str(self.samp_preserv)

        if self.samp_transport_cond is not None and not isinstance(self.samp_transport_cond, str):
            self.samp_transport_cond = str(self.samp_transport_cond)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.org_count_qpcr_info is not None and not isinstance(self.org_count_qpcr_info, str):
            self.org_count_qpcr_info = str(self.org_count_qpcr_info)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.alkalinity_method is not None and not isinstance(self.alkalinity_method, str):
            self.alkalinity_method = str(self.alkalinity_method)

        if self.tot_sulfur is not None and not isinstance(self.tot_sulfur, QuantityValue):
            self.tot_sulfur = QuantityValue(**as_dict(self.tot_sulfur))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if self.tot_nitro is not None and not isinstance(self.tot_nitro, QuantityValue):
            self.tot_nitro = QuantityValue(**as_dict(self.tot_nitro))

        if self.diss_iron is not None and not isinstance(self.diss_iron, QuantityValue):
            self.diss_iron = QuantityValue(**as_dict(self.diss_iron))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.magnesium is not None and not isinstance(self.magnesium, QuantityValue):
            self.magnesium = QuantityValue(**as_dict(self.magnesium))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if self.tot_iron is not None and not isinstance(self.tot_iron, QuantityValue):
            self.tot_iron = QuantityValue(**as_dict(self.tot_iron))

        if self.diss_org_carb is not None and not isinstance(self.diss_org_carb, QuantityValue):
            self.diss_org_carb = QuantityValue(**as_dict(self.diss_org_carb))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_inorg_phosp is not None and not isinstance(self.diss_inorg_phosp, QuantityValue):
            self.diss_inorg_phosp = QuantityValue(**as_dict(self.diss_inorg_phosp))

        if self.tot_phosp is not None and not isinstance(self.tot_phosp, QuantityValue):
            self.tot_phosp = QuantityValue(**as_dict(self.tot_phosp))

        if not isinstance(self.suspend_solids, list):
            self.suspend_solids = [self.suspend_solids] if self.suspend_solids is not None else []
        self.suspend_solids = [v if isinstance(v, str) else str(v) for v in self.suspend_solids]

        if self.density is not None and not isinstance(self.density, QuantityValue):
            self.density = QuantityValue(**as_dict(self.density))

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_oxygen_fluid is not None and not isinstance(self.diss_oxygen_fluid, QuantityValue):
            self.diss_oxygen_fluid = QuantityValue(**as_dict(self.diss_oxygen_fluid))

        if self.vfa is not None and not isinstance(self.vfa, QuantityValue):
            self.vfa = QuantityValue(**as_dict(self.vfa))

        if self.benzene is not None and not isinstance(self.benzene, QuantityValue):
            self.benzene = QuantityValue(**as_dict(self.benzene))

        if self.toluene is not None and not isinstance(self.toluene, QuantityValue):
            self.toluene = QuantityValue(**as_dict(self.toluene))

        if self.ethylbenzene is not None and not isinstance(self.ethylbenzene, QuantityValue):
            self.ethylbenzene = QuantityValue(**as_dict(self.ethylbenzene))

        if self.xylene is not None and not isinstance(self.xylene, QuantityValue):
            self.xylene = QuantityValue(**as_dict(self.xylene))

        if self.tan is not None and not isinstance(self.tan, QuantityValue):
            self.tan = QuantityValue(**as_dict(self.tan))

        if self.viscosity is not None and not isinstance(self.viscosity, str):
            self.viscosity = str(self.viscosity)

        if self.pour_point is not None and not isinstance(self.pour_point, QuantityValue):
            self.pour_point = QuantityValue(**as_dict(self.pour_point))

        if self.saturates_pc is not None and not isinstance(self.saturates_pc, str):
            self.saturates_pc = str(self.saturates_pc)

        if self.aromatics_pc is not None and not isinstance(self.aromatics_pc, str):
            self.aromatics_pc = str(self.aromatics_pc)

        if self.resins_pc is not None and not isinstance(self.resins_pc, str):
            self.resins_pc = str(self.resins_pc)

        if self.asphaltenes_pc is not None and not isinstance(self.asphaltenes_pc, str):
            self.asphaltenes_pc = str(self.asphaltenes_pc)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.additional_info is not None and not isinstance(self.additional_info, str):
            self.additional_info = str(self.additional_info)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIGSEukaryote(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIGSEukaryote"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIGSEukaryote

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIGSBacteria(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIGSBacteria"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIGSBacteria

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIGSPlant(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package hydrocarbon
    resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIGSPlant"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIGSPlant

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIGSVirus(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIGSVirus"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIGSVirus

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIGSOrg(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package hydrocarbon
    resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIGSOrg"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIGSOrg

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIMS(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIMS"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIMS

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIMARKSSpecimen(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIMARKSSpecimen"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIMARKSSpecimen

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIMARKSSurvey(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package hydrocarbon
    resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIMARKSSurvey"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIMARKSSurvey

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMISAG(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package hydrocarbon
    resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMISAG"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMISAG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIMAG(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIMAG"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIMAG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class HydrocarbonResources-fluidsSwabsMIUVIG(HydrocarbonResources-fluidsSwabs):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    hydrocarbon resources-fluids_swabs
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["HydrocarbonResources-fluidsSwabsMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:HydrocarbonResources-fluidsSwabsMIUVIG"
    class_name: ClassVar[str] = "hydrocarbon resources-fluids_swabs MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.HydrocarbonResources-fluidsSwabsMIUVIG

    temp: Union[dict, "QuantityValue"] = None
    hcr: Union[str, "HcrEnum"] = None
    hc_produced: Union[str, "HcProducedEnum"] = None
    basin: str = None
    water_cut: Union[dict, "QuantityValue"] = None
    iwf: Union[dict, "QuantityValue"] = None
    add_recov_method: str = None
    samp_type: str = None
    samp_collect_point: Union[str, "SampCollectPointEnum"] = None
    sulfate: Union[dict, "QuantityValue"] = None
    sulfide: Union[dict, "QuantityValue"] = None
    nitrate: Union[dict, "QuantityValue"] = None
    api: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilm(YAMLRoot):
    """
    microbial mat/biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilm
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilm"
    class_name: ClassVar[str] = "microbial mat_biofilm"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilm

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    alkyl_diethers: Optional[Union[dict, "QuantityValue"]] = None
    aminopept_act: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    bacteria_carb_prod: Optional[Union[dict, "QuantityValue"]] = None
    biomass: Optional[Union[str, List[str]]] = empty_list()
    bishomohopanol: Optional[Union[dict, "QuantityValue"]] = None
    bromide: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    carb_nitro_ratio: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    chlorophyll: Optional[Union[dict, "QuantityValue"]] = None
    diether_lipids: Optional[Union[str, List[str]]] = empty_list()
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_hydrogen: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen: Optional[Union[dict, "QuantityValue"]] = None
    glucosidase_act: Optional[Union[dict, "QuantityValue"]] = None
    magnesium: Optional[Union[dict, "QuantityValue"]] = None
    mean_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    mean_peak_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    methane: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    n_alkanes: Optional[Union[str, List[str]]] = empty_list()
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    nitro: Optional[Union[dict, "QuantityValue"]] = None
    org_carb: Optional[Union[dict, "QuantityValue"]] = None
    org_matter: Optional[Union[dict, "QuantityValue"]] = None
    org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph: Optional[float] = None
    part_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    petroleum_hydrocarb: Optional[Union[dict, "QuantityValue"]] = None
    phaeopigments: Optional[Union[str, List[str]]] = empty_list()
    phosphate: Optional[Union[dict, "QuantityValue"]] = None
    phosplipid_fatt_acid: Optional[Union[str, List[str]]] = empty_list()
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    redox_potential: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    silicate: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    sulfate: Optional[Union[dict, "QuantityValue"]] = None
    sulfide: Optional[Union[dict, "QuantityValue"]] = None
    tot_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro_content: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    turbidity: Optional[Union[dict, "QuantityValue"]] = None
    water_content: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.alkyl_diethers is not None and not isinstance(self.alkyl_diethers, QuantityValue):
            self.alkyl_diethers = QuantityValue(**as_dict(self.alkyl_diethers))

        if self.aminopept_act is not None and not isinstance(self.aminopept_act, QuantityValue):
            self.aminopept_act = QuantityValue(**as_dict(self.aminopept_act))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if self.bacteria_carb_prod is not None and not isinstance(self.bacteria_carb_prod, QuantityValue):
            self.bacteria_carb_prod = QuantityValue(**as_dict(self.bacteria_carb_prod))

        if not isinstance(self.biomass, list):
            self.biomass = [self.biomass] if self.biomass is not None else []
        self.biomass = [v if isinstance(v, str) else str(v) for v in self.biomass]

        if self.bishomohopanol is not None and not isinstance(self.bishomohopanol, QuantityValue):
            self.bishomohopanol = QuantityValue(**as_dict(self.bishomohopanol))

        if self.bromide is not None and not isinstance(self.bromide, QuantityValue):
            self.bromide = QuantityValue(**as_dict(self.bromide))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if self.carb_nitro_ratio is not None and not isinstance(self.carb_nitro_ratio, QuantityValue):
            self.carb_nitro_ratio = QuantityValue(**as_dict(self.carb_nitro_ratio))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.chlorophyll is not None and not isinstance(self.chlorophyll, QuantityValue):
            self.chlorophyll = QuantityValue(**as_dict(self.chlorophyll))

        if not isinstance(self.diether_lipids, list):
            self.diether_lipids = [self.diether_lipids] if self.diether_lipids is not None else []
        self.diether_lipids = [v if isinstance(v, str) else str(v) for v in self.diether_lipids]

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_hydrogen is not None and not isinstance(self.diss_hydrogen, QuantityValue):
            self.diss_hydrogen = QuantityValue(**as_dict(self.diss_hydrogen))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_org_carb is not None and not isinstance(self.diss_org_carb, QuantityValue):
            self.diss_org_carb = QuantityValue(**as_dict(self.diss_org_carb))

        if self.diss_org_nitro is not None and not isinstance(self.diss_org_nitro, QuantityValue):
            self.diss_org_nitro = QuantityValue(**as_dict(self.diss_org_nitro))

        if self.diss_oxygen is not None and not isinstance(self.diss_oxygen, QuantityValue):
            self.diss_oxygen = QuantityValue(**as_dict(self.diss_oxygen))

        if self.glucosidase_act is not None and not isinstance(self.glucosidase_act, QuantityValue):
            self.glucosidase_act = QuantityValue(**as_dict(self.glucosidase_act))

        if self.magnesium is not None and not isinstance(self.magnesium, QuantityValue):
            self.magnesium = QuantityValue(**as_dict(self.magnesium))

        if self.mean_frict_vel is not None and not isinstance(self.mean_frict_vel, QuantityValue):
            self.mean_frict_vel = QuantityValue(**as_dict(self.mean_frict_vel))

        if self.mean_peak_frict_vel is not None and not isinstance(self.mean_peak_frict_vel, QuantityValue):
            self.mean_peak_frict_vel = QuantityValue(**as_dict(self.mean_peak_frict_vel))

        if self.methane is not None and not isinstance(self.methane, QuantityValue):
            self.methane = QuantityValue(**as_dict(self.methane))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if not isinstance(self.n_alkanes, list):
            self.n_alkanes = [self.n_alkanes] if self.n_alkanes is not None else []
        self.n_alkanes = [v if isinstance(v, str) else str(v) for v in self.n_alkanes]

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.nitro is not None and not isinstance(self.nitro, QuantityValue):
            self.nitro = QuantityValue(**as_dict(self.nitro))

        if self.org_carb is not None and not isinstance(self.org_carb, QuantityValue):
            self.org_carb = QuantityValue(**as_dict(self.org_carb))

        if self.org_matter is not None and not isinstance(self.org_matter, QuantityValue):
            self.org_matter = QuantityValue(**as_dict(self.org_matter))

        if self.org_nitro is not None and not isinstance(self.org_nitro, QuantityValue):
            self.org_nitro = QuantityValue(**as_dict(self.org_nitro))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.part_org_carb is not None and not isinstance(self.part_org_carb, QuantityValue):
            self.part_org_carb = QuantityValue(**as_dict(self.part_org_carb))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.petroleum_hydrocarb is not None and not isinstance(self.petroleum_hydrocarb, QuantityValue):
            self.petroleum_hydrocarb = QuantityValue(**as_dict(self.petroleum_hydrocarb))

        if not isinstance(self.phaeopigments, list):
            self.phaeopigments = [self.phaeopigments] if self.phaeopigments is not None else []
        self.phaeopigments = [v if isinstance(v, str) else str(v) for v in self.phaeopigments]

        if self.phosphate is not None and not isinstance(self.phosphate, QuantityValue):
            self.phosphate = QuantityValue(**as_dict(self.phosphate))

        if not isinstance(self.phosplipid_fatt_acid, list):
            self.phosplipid_fatt_acid = [self.phosplipid_fatt_acid] if self.phosplipid_fatt_acid is not None else []
        self.phosplipid_fatt_acid = [v if isinstance(v, str) else str(v) for v in self.phosplipid_fatt_acid]

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.redox_potential is not None and not isinstance(self.redox_potential, QuantityValue):
            self.redox_potential = QuantityValue(**as_dict(self.redox_potential))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.silicate is not None and not isinstance(self.silicate, QuantityValue):
            self.silicate = QuantityValue(**as_dict(self.silicate))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.sulfate is not None and not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self.sulfide is not None and not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self.tot_carb is not None and not isinstance(self.tot_carb, QuantityValue):
            self.tot_carb = QuantityValue(**as_dict(self.tot_carb))

        if self.tot_nitro_content is not None and not isinstance(self.tot_nitro_content, QuantityValue):
            self.tot_nitro_content = QuantityValue(**as_dict(self.tot_nitro_content))

        if self.tot_org_carb is not None and not isinstance(self.tot_org_carb, QuantityValue):
            self.tot_org_carb = QuantityValue(**as_dict(self.tot_org_carb))

        if self.turbidity is not None and not isinstance(self.turbidity, QuantityValue):
            self.turbidity = QuantityValue(**as_dict(self.turbidity))

        if self.water_content is not None and not isinstance(self.water_content, QuantityValue):
            self.water_content = QuantityValue(**as_dict(self.water_content))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIGSEukaryote(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIGSEukaryote"
    class_name: ClassVar[str] = "microbial mat_biofilm MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIGSBacteria(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIGSBacteria"
    class_name: ClassVar[str] = "microbial mat_biofilm MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIGSPlant(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package microbial
    mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIGSPlant"
    class_name: ClassVar[str] = "microbial mat_biofilm MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIGSVirus(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIGSVirus"
    class_name: ClassVar[str] = "microbial mat_biofilm MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIGSOrg(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package microbial
    mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIGSOrg"
    class_name: ClassVar[str] = "microbial mat_biofilm MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIMS(MicrobialMatBiofilm):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIMS"
    class_name: ClassVar[str] = "microbial mat_biofilm MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIMARKSSpecimen(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package microbial
    mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIMARKSSpecimen"
    class_name: ClassVar[str] = "microbial mat_biofilm MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIMARKSSurvey(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package microbial
    mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIMARKSSurvey"
    class_name: ClassVar[str] = "microbial mat_biofilm MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMISAG(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package microbial
    mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMISAG"
    class_name: ClassVar[str] = "microbial mat_biofilm MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIMAG(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIMAG"
    class_name: ClassVar[str] = "microbial mat_biofilm MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MicrobialMatBiofilmMIUVIG(MicrobialMatBiofilm):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    microbial mat_biofilm
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:MicrobialMatBiofilmMIUVIG"
    class_name: ClassVar[str] = "microbial mat_biofilm MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MicrobialMatBiofilmMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironment(YAMLRoot):
    """
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironment
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironment"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironment

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    biomass: Optional[Union[str, List[str]]] = empty_list()
    bromide: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    chlorophyll: Optional[Union[dict, "QuantityValue"]] = None
    density: Optional[Union[dict, "QuantityValue"]] = None
    diether_lipids: Optional[Union[str, List[str]]] = empty_list()
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_hydrogen: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    nitro: Optional[Union[dict, "QuantityValue"]] = None
    org_carb: Optional[Union[dict, "QuantityValue"]] = None
    org_matter: Optional[Union[dict, "QuantityValue"]] = None
    org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph: Optional[float] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    phosphate: Optional[Union[dict, "QuantityValue"]] = None
    phosplipid_fatt_acid: Optional[Union[str, List[str]]] = empty_list()
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    silicate: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    sulfate: Optional[Union[dict, "QuantityValue"]] = None
    sulfide: Optional[Union[dict, "QuantityValue"]] = None
    water_current: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if not isinstance(self.biomass, list):
            self.biomass = [self.biomass] if self.biomass is not None else []
        self.biomass = [v if isinstance(v, str) else str(v) for v in self.biomass]

        if self.bromide is not None and not isinstance(self.bromide, QuantityValue):
            self.bromide = QuantityValue(**as_dict(self.bromide))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.chlorophyll is not None and not isinstance(self.chlorophyll, QuantityValue):
            self.chlorophyll = QuantityValue(**as_dict(self.chlorophyll))

        if self.density is not None and not isinstance(self.density, QuantityValue):
            self.density = QuantityValue(**as_dict(self.density))

        if not isinstance(self.diether_lipids, list):
            self.diether_lipids = [self.diether_lipids] if self.diether_lipids is not None else []
        self.diether_lipids = [v if isinstance(v, str) else str(v) for v in self.diether_lipids]

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_hydrogen is not None and not isinstance(self.diss_hydrogen, QuantityValue):
            self.diss_hydrogen = QuantityValue(**as_dict(self.diss_hydrogen))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_org_nitro is not None and not isinstance(self.diss_org_nitro, QuantityValue):
            self.diss_org_nitro = QuantityValue(**as_dict(self.diss_org_nitro))

        if self.diss_oxygen is not None and not isinstance(self.diss_oxygen, QuantityValue):
            self.diss_oxygen = QuantityValue(**as_dict(self.diss_oxygen))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.nitro is not None and not isinstance(self.nitro, QuantityValue):
            self.nitro = QuantityValue(**as_dict(self.nitro))

        if self.org_carb is not None and not isinstance(self.org_carb, QuantityValue):
            self.org_carb = QuantityValue(**as_dict(self.org_carb))

        if self.org_matter is not None and not isinstance(self.org_matter, QuantityValue):
            self.org_matter = QuantityValue(**as_dict(self.org_matter))

        if self.org_nitro is not None and not isinstance(self.org_nitro, QuantityValue):
            self.org_nitro = QuantityValue(**as_dict(self.org_nitro))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.phosphate is not None and not isinstance(self.phosphate, QuantityValue):
            self.phosphate = QuantityValue(**as_dict(self.phosphate))

        if not isinstance(self.phosplipid_fatt_acid, list):
            self.phosplipid_fatt_acid = [self.phosplipid_fatt_acid] if self.phosplipid_fatt_acid is not None else []
        self.phosplipid_fatt_acid = [v if isinstance(v, str) else str(v) for v in self.phosplipid_fatt_acid]

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.silicate is not None and not isinstance(self.silicate, QuantityValue):
            self.silicate = QuantityValue(**as_dict(self.silicate))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.sulfate is not None and not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self.sulfide is not None and not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self.water_current is not None and not isinstance(self.water_current, QuantityValue):
            self.water_current = QuantityValue(**as_dict(self.water_current))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIGSEukaryote(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIGSEukaryote"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIGSBacteria(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIGSBacteria"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIGSPlant(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIGSPlant"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIGSVirus(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIGSVirus"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIGSOrg(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package miscellaneous
    natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIGSOrg"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIMS(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package miscellaneous natural or artificial
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIMS"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSpecimen(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSpecimen"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSurvey(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSurvey"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMISAG(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMISAG"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIMAG(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIMAG"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class MiscellaneousNaturalOrArtificialEnvironmentMIUVIG(MiscellaneousNaturalOrArtificialEnvironment):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    miscellaneous natural or artificial environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:MiscellaneousNaturalOrArtificialEnvironmentMIUVIG"
    class_name: ClassVar[str] = "miscellaneous natural or artificial environment MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.MiscellaneousNaturalOrArtificialEnvironmentMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associated(YAMLRoot):
    """
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associated"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associated"
    class_name: ClassVar[str] = "plant-associated"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associated

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    air_temp_regm: Optional[Union[str, List[str]]] = empty_list()
    ances_data: Optional[str] = None
    antibiotic_regm: Optional[Union[str, List[str]]] = empty_list()
    biol_stat: Optional[Union[str, "BiolStatEnum"]] = None
    biotic_regm: Optional[str] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chem_mutagen: Optional[Union[str, List[str]]] = empty_list()
    climate_environment: Optional[Union[str, List[str]]] = empty_list()
    cult_root_med: Optional[str] = None
    fertilizer_regm: Optional[Union[str, List[str]]] = empty_list()
    fungicide_regm: Optional[Union[str, List[str]]] = empty_list()
    gaseous_environment: Optional[Union[str, List[str]]] = empty_list()
    genetic_mod: Optional[str] = None
    gravity: Optional[Union[str, List[str]]] = empty_list()
    growth_facil: Optional[str] = None
    growth_habit: Optional[Union[str, "GrowthHabitEnum"]] = None
    growth_hormone_regm: Optional[Union[str, List[str]]] = empty_list()
    herbicide_regm: Optional[Union[str, List[str]]] = empty_list()
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_common_name: Optional[str] = None
    host_dry_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_genotype: Optional[str] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_subspecf_genlin: Optional[Union[str, List[str]]] = empty_list()
    host_length: Optional[Union[dict, "QuantityValue"]] = None
    host_life_stage: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_taxid: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_wet_mass: Optional[Union[dict, "QuantityValue"]] = None
    humidity_regm: Optional[Union[str, List[str]]] = empty_list()
    light_regm: Optional[str] = None
    mechanical_damage: Optional[Union[str, List[str]]] = empty_list()
    mineral_nutr_regm: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    non_min_nutr_regm: Optional[Union[str, List[str]]] = empty_list()
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph_regm: Optional[Union[str, List[str]]] = empty_list()
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    pesticide_regm: Optional[Union[str, List[str]]] = empty_list()
    plant_growth_med: Optional[Union[str, "PlantGrowthMedEnum"]] = None
    plant_product: Optional[str] = None
    plant_sex: Optional[Union[str, "PlantSexEnum"]] = None
    plant_struc: Optional[str] = None
    radiation_regm: Optional[Union[str, List[str]]] = empty_list()
    rainfall_regm: Optional[Union[str, List[str]]] = empty_list()
    root_cond: Optional[str] = None
    root_med_carbon: Optional[str] = None
    root_med_macronutr: Optional[str] = None
    root_med_micronutr: Optional[str] = None
    root_med_suppl: Optional[str] = None
    root_med_ph: Optional[float] = None
    root_med_regl: Optional[str] = None
    root_med_solid: Optional[str] = None
    salt_regm: Optional[Union[str, List[str]]] = empty_list()
    samp_capt_status: Optional[Union[str, "SampCaptStatusEnum"]] = None
    samp_dis_stage: Optional[Union[str, "SampDisStageEnum"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    season_environment: Optional[Union[str, List[str]]] = empty_list()
    standing_water_regm: Optional[Union[str, List[str]]] = empty_list()
    tiss_cult_growth_med: Optional[str] = None
    water_temp_regm: Optional[Union[str, List[str]]] = empty_list()
    watering_regm: Optional[Union[str, List[str]]] = empty_list()
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if not isinstance(self.air_temp_regm, list):
            self.air_temp_regm = [self.air_temp_regm] if self.air_temp_regm is not None else []
        self.air_temp_regm = [v if isinstance(v, str) else str(v) for v in self.air_temp_regm]

        if self.ances_data is not None and not isinstance(self.ances_data, str):
            self.ances_data = str(self.ances_data)

        if not isinstance(self.antibiotic_regm, list):
            self.antibiotic_regm = [self.antibiotic_regm] if self.antibiotic_regm is not None else []
        self.antibiotic_regm = [v if isinstance(v, str) else str(v) for v in self.antibiotic_regm]

        if self.biol_stat is not None and not isinstance(self.biol_stat, BiolStatEnum):
            self.biol_stat = BiolStatEnum(self.biol_stat)

        if self.biotic_regm is not None and not isinstance(self.biotic_regm, str):
            self.biotic_regm = str(self.biotic_regm)

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if not isinstance(self.chem_mutagen, list):
            self.chem_mutagen = [self.chem_mutagen] if self.chem_mutagen is not None else []
        self.chem_mutagen = [v if isinstance(v, str) else str(v) for v in self.chem_mutagen]

        if not isinstance(self.climate_environment, list):
            self.climate_environment = [self.climate_environment] if self.climate_environment is not None else []
        self.climate_environment = [v if isinstance(v, str) else str(v) for v in self.climate_environment]

        if self.cult_root_med is not None and not isinstance(self.cult_root_med, str):
            self.cult_root_med = str(self.cult_root_med)

        if not isinstance(self.fertilizer_regm, list):
            self.fertilizer_regm = [self.fertilizer_regm] if self.fertilizer_regm is not None else []
        self.fertilizer_regm = [v if isinstance(v, str) else str(v) for v in self.fertilizer_regm]

        if not isinstance(self.fungicide_regm, list):
            self.fungicide_regm = [self.fungicide_regm] if self.fungicide_regm is not None else []
        self.fungicide_regm = [v if isinstance(v, str) else str(v) for v in self.fungicide_regm]

        if not isinstance(self.gaseous_environment, list):
            self.gaseous_environment = [self.gaseous_environment] if self.gaseous_environment is not None else []
        self.gaseous_environment = [v if isinstance(v, str) else str(v) for v in self.gaseous_environment]

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if not isinstance(self.gravity, list):
            self.gravity = [self.gravity] if self.gravity is not None else []
        self.gravity = [v if isinstance(v, str) else str(v) for v in self.gravity]

        if self.growth_facil is not None and not isinstance(self.growth_facil, str):
            self.growth_facil = str(self.growth_facil)

        if self.growth_habit is not None and not isinstance(self.growth_habit, GrowthHabitEnum):
            self.growth_habit = GrowthHabitEnum(self.growth_habit)

        if not isinstance(self.growth_hormone_regm, list):
            self.growth_hormone_regm = [self.growth_hormone_regm] if self.growth_hormone_regm is not None else []
        self.growth_hormone_regm = [v if isinstance(v, str) else str(v) for v in self.growth_hormone_regm]

        if not isinstance(self.herbicide_regm, list):
            self.herbicide_regm = [self.herbicide_regm] if self.herbicide_regm is not None else []
        self.herbicide_regm = [v if isinstance(v, str) else str(v) for v in self.herbicide_regm]

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_common_name is not None and not isinstance(self.host_common_name, str):
            self.host_common_name = str(self.host_common_name)

        if self.host_dry_mass is not None and not isinstance(self.host_dry_mass, QuantityValue):
            self.host_dry_mass = QuantityValue(**as_dict(self.host_dry_mass))

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if not isinstance(self.host_subspecf_genlin, list):
            self.host_subspecf_genlin = [self.host_subspecf_genlin] if self.host_subspecf_genlin is not None else []
        self.host_subspecf_genlin = [v if isinstance(v, str) else str(v) for v in self.host_subspecf_genlin]

        if self.host_length is not None and not isinstance(self.host_length, QuantityValue):
            self.host_length = QuantityValue(**as_dict(self.host_length))

        if self.host_life_stage is not None and not isinstance(self.host_life_stage, str):
            self.host_life_stage = str(self.host_life_stage)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_taxid is not None and not isinstance(self.host_taxid, str):
            self.host_taxid = str(self.host_taxid)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_wet_mass is not None and not isinstance(self.host_wet_mass, QuantityValue):
            self.host_wet_mass = QuantityValue(**as_dict(self.host_wet_mass))

        if not isinstance(self.humidity_regm, list):
            self.humidity_regm = [self.humidity_regm] if self.humidity_regm is not None else []
        self.humidity_regm = [v if isinstance(v, str) else str(v) for v in self.humidity_regm]

        if self.light_regm is not None and not isinstance(self.light_regm, str):
            self.light_regm = str(self.light_regm)

        if not isinstance(self.mechanical_damage, list):
            self.mechanical_damage = [self.mechanical_damage] if self.mechanical_damage is not None else []
        self.mechanical_damage = [v if isinstance(v, str) else str(v) for v in self.mechanical_damage]

        if not isinstance(self.mineral_nutr_regm, list):
            self.mineral_nutr_regm = [self.mineral_nutr_regm] if self.mineral_nutr_regm is not None else []
        self.mineral_nutr_regm = [v if isinstance(v, str) else str(v) for v in self.mineral_nutr_regm]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if not isinstance(self.non_min_nutr_regm, list):
            self.non_min_nutr_regm = [self.non_min_nutr_regm] if self.non_min_nutr_regm is not None else []
        self.non_min_nutr_regm = [v if isinstance(v, str) else str(v) for v in self.non_min_nutr_regm]

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.ph_regm, list):
            self.ph_regm = [self.ph_regm] if self.ph_regm is not None else []
        self.ph_regm = [v if isinstance(v, str) else str(v) for v in self.ph_regm]

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if not isinstance(self.pesticide_regm, list):
            self.pesticide_regm = [self.pesticide_regm] if self.pesticide_regm is not None else []
        self.pesticide_regm = [v if isinstance(v, str) else str(v) for v in self.pesticide_regm]

        if self.plant_growth_med is not None and not isinstance(self.plant_growth_med, PlantGrowthMedEnum):
            self.plant_growth_med = PlantGrowthMedEnum(self.plant_growth_med)

        if self.plant_product is not None and not isinstance(self.plant_product, str):
            self.plant_product = str(self.plant_product)

        if self.plant_sex is not None and not isinstance(self.plant_sex, PlantSexEnum):
            self.plant_sex = PlantSexEnum(self.plant_sex)

        if self.plant_struc is not None and not isinstance(self.plant_struc, str):
            self.plant_struc = str(self.plant_struc)

        if not isinstance(self.radiation_regm, list):
            self.radiation_regm = [self.radiation_regm] if self.radiation_regm is not None else []
        self.radiation_regm = [v if isinstance(v, str) else str(v) for v in self.radiation_regm]

        if not isinstance(self.rainfall_regm, list):
            self.rainfall_regm = [self.rainfall_regm] if self.rainfall_regm is not None else []
        self.rainfall_regm = [v if isinstance(v, str) else str(v) for v in self.rainfall_regm]

        if self.root_cond is not None and not isinstance(self.root_cond, str):
            self.root_cond = str(self.root_cond)

        if self.root_med_carbon is not None and not isinstance(self.root_med_carbon, str):
            self.root_med_carbon = str(self.root_med_carbon)

        if self.root_med_macronutr is not None and not isinstance(self.root_med_macronutr, str):
            self.root_med_macronutr = str(self.root_med_macronutr)

        if self.root_med_micronutr is not None and not isinstance(self.root_med_micronutr, str):
            self.root_med_micronutr = str(self.root_med_micronutr)

        if self.root_med_suppl is not None and not isinstance(self.root_med_suppl, str):
            self.root_med_suppl = str(self.root_med_suppl)

        if self.root_med_ph is not None and not isinstance(self.root_med_ph, float):
            self.root_med_ph = float(self.root_med_ph)

        if self.root_med_regl is not None and not isinstance(self.root_med_regl, str):
            self.root_med_regl = str(self.root_med_regl)

        if self.root_med_solid is not None and not isinstance(self.root_med_solid, str):
            self.root_med_solid = str(self.root_med_solid)

        if not isinstance(self.salt_regm, list):
            self.salt_regm = [self.salt_regm] if self.salt_regm is not None else []
        self.salt_regm = [v if isinstance(v, str) else str(v) for v in self.salt_regm]

        if self.samp_capt_status is not None and not isinstance(self.samp_capt_status, SampCaptStatusEnum):
            self.samp_capt_status = SampCaptStatusEnum(self.samp_capt_status)

        if self.samp_dis_stage is not None and not isinstance(self.samp_dis_stage, SampDisStageEnum):
            self.samp_dis_stage = SampDisStageEnum(self.samp_dis_stage)

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if not isinstance(self.season_environment, list):
            self.season_environment = [self.season_environment] if self.season_environment is not None else []
        self.season_environment = [v if isinstance(v, str) else str(v) for v in self.season_environment]

        if not isinstance(self.standing_water_regm, list):
            self.standing_water_regm = [self.standing_water_regm] if self.standing_water_regm is not None else []
        self.standing_water_regm = [v if isinstance(v, str) else str(v) for v in self.standing_water_regm]

        if self.tiss_cult_growth_med is not None and not isinstance(self.tiss_cult_growth_med, str):
            self.tiss_cult_growth_med = str(self.tiss_cult_growth_med)

        if not isinstance(self.water_temp_regm, list):
            self.water_temp_regm = [self.water_temp_regm] if self.water_temp_regm is not None else []
        self.water_temp_regm = [v if isinstance(v, str) else str(v) for v in self.water_temp_regm]

        if not isinstance(self.watering_regm, list):
            self.watering_regm = [self.watering_regm] if self.watering_regm is not None else []
        self.watering_regm = [v if isinstance(v, str) else str(v) for v in self.watering_regm]

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIGSEukaryote(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIGSEukaryote"
    class_name: ClassVar[str] = "plant-associated MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIGSBacteria(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIGSBacteria"
    class_name: ClassVar[str] = "plant-associated MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIGSPlant(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIGSPlant"
    class_name: ClassVar[str] = "plant-associated MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIGSVirus(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIGSVirus"
    class_name: ClassVar[str] = "plant-associated MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIGSOrg(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIGSOrg"
    class_name: ClassVar[str] = "plant-associated MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIMS(Plant-associated):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIMS"
    class_name: ClassVar[str] = "plant-associated MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIMARKSSpecimen(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIMARKSSpecimen"
    class_name: ClassVar[str] = "plant-associated MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIMARKSSurvey(Plant-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIMARKSSurvey"
    class_name: ClassVar[str] = "plant-associated MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMISAG(Plant-associated):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMISAG"
    class_name: ClassVar[str] = "plant-associated MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIMAG(Plant-associated):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIMAG"
    class_name: ClassVar[str] = "plant-associated MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Plant-associatedMIUVIG(Plant-associated):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    plant-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Plant-associatedMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Plant-associatedMIUVIG"
    class_name: ClassVar[str] = "plant-associated MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Plant-associatedMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Sediment(YAMLRoot):
    """
    sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Sediment
    class_class_curie: ClassVar[str] = "mixs.vocab:Sediment"
    class_name: ClassVar[str] = "sediment"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Sediment

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    alkyl_diethers: Optional[Union[dict, "QuantityValue"]] = None
    aminopept_act: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    bacteria_carb_prod: Optional[Union[dict, "QuantityValue"]] = None
    biomass: Optional[Union[str, List[str]]] = empty_list()
    bishomohopanol: Optional[Union[dict, "QuantityValue"]] = None
    bromide: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    carb_nitro_ratio: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    chlorophyll: Optional[Union[dict, "QuantityValue"]] = None
    density: Optional[Union[dict, "QuantityValue"]] = None
    diether_lipids: Optional[Union[str, List[str]]] = empty_list()
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_hydrogen: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen: Optional[Union[dict, "QuantityValue"]] = None
    glucosidase_act: Optional[Union[dict, "QuantityValue"]] = None
    magnesium: Optional[Union[dict, "QuantityValue"]] = None
    mean_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    mean_peak_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    methane: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    n_alkanes: Optional[Union[str, List[str]]] = empty_list()
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    nitro: Optional[Union[dict, "QuantityValue"]] = None
    org_carb: Optional[Union[dict, "QuantityValue"]] = None
    org_matter: Optional[Union[dict, "QuantityValue"]] = None
    org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph: Optional[float] = None
    particle_class: Optional[Union[str, List[str]]] = empty_list()
    part_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    petroleum_hydrocarb: Optional[Union[dict, "QuantityValue"]] = None
    phaeopigments: Optional[Union[str, List[str]]] = empty_list()
    phosphate: Optional[Union[dict, "QuantityValue"]] = None
    phosplipid_fatt_acid: Optional[Union[str, List[str]]] = empty_list()
    porosity: Optional[str] = None
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    redox_potential: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    sediment_type: Optional[Union[str, "SedimentTypeEnum"]] = None
    silicate: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    sulfate: Optional[Union[dict, "QuantityValue"]] = None
    sulfide: Optional[Union[dict, "QuantityValue"]] = None
    tidal_stage: Optional[Union[str, "TidalStageEnum"]] = None
    tot_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_depth_water_col: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro_content: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    turbidity: Optional[Union[dict, "QuantityValue"]] = None
    water_content: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.depth):
            self.MissingRequiredField("depth")
        if not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.alkyl_diethers is not None and not isinstance(self.alkyl_diethers, QuantityValue):
            self.alkyl_diethers = QuantityValue(**as_dict(self.alkyl_diethers))

        if self.aminopept_act is not None and not isinstance(self.aminopept_act, QuantityValue):
            self.aminopept_act = QuantityValue(**as_dict(self.aminopept_act))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if self.bacteria_carb_prod is not None and not isinstance(self.bacteria_carb_prod, QuantityValue):
            self.bacteria_carb_prod = QuantityValue(**as_dict(self.bacteria_carb_prod))

        if not isinstance(self.biomass, list):
            self.biomass = [self.biomass] if self.biomass is not None else []
        self.biomass = [v if isinstance(v, str) else str(v) for v in self.biomass]

        if self.bishomohopanol is not None and not isinstance(self.bishomohopanol, QuantityValue):
            self.bishomohopanol = QuantityValue(**as_dict(self.bishomohopanol))

        if self.bromide is not None and not isinstance(self.bromide, QuantityValue):
            self.bromide = QuantityValue(**as_dict(self.bromide))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if self.carb_nitro_ratio is not None and not isinstance(self.carb_nitro_ratio, QuantityValue):
            self.carb_nitro_ratio = QuantityValue(**as_dict(self.carb_nitro_ratio))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.chlorophyll is not None and not isinstance(self.chlorophyll, QuantityValue):
            self.chlorophyll = QuantityValue(**as_dict(self.chlorophyll))

        if self.density is not None and not isinstance(self.density, QuantityValue):
            self.density = QuantityValue(**as_dict(self.density))

        if not isinstance(self.diether_lipids, list):
            self.diether_lipids = [self.diether_lipids] if self.diether_lipids is not None else []
        self.diether_lipids = [v if isinstance(v, str) else str(v) for v in self.diether_lipids]

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_hydrogen is not None and not isinstance(self.diss_hydrogen, QuantityValue):
            self.diss_hydrogen = QuantityValue(**as_dict(self.diss_hydrogen))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_org_carb is not None and not isinstance(self.diss_org_carb, QuantityValue):
            self.diss_org_carb = QuantityValue(**as_dict(self.diss_org_carb))

        if self.diss_org_nitro is not None and not isinstance(self.diss_org_nitro, QuantityValue):
            self.diss_org_nitro = QuantityValue(**as_dict(self.diss_org_nitro))

        if self.diss_oxygen is not None and not isinstance(self.diss_oxygen, QuantityValue):
            self.diss_oxygen = QuantityValue(**as_dict(self.diss_oxygen))

        if self.glucosidase_act is not None and not isinstance(self.glucosidase_act, QuantityValue):
            self.glucosidase_act = QuantityValue(**as_dict(self.glucosidase_act))

        if self.magnesium is not None and not isinstance(self.magnesium, QuantityValue):
            self.magnesium = QuantityValue(**as_dict(self.magnesium))

        if self.mean_frict_vel is not None and not isinstance(self.mean_frict_vel, QuantityValue):
            self.mean_frict_vel = QuantityValue(**as_dict(self.mean_frict_vel))

        if self.mean_peak_frict_vel is not None and not isinstance(self.mean_peak_frict_vel, QuantityValue):
            self.mean_peak_frict_vel = QuantityValue(**as_dict(self.mean_peak_frict_vel))

        if self.methane is not None and not isinstance(self.methane, QuantityValue):
            self.methane = QuantityValue(**as_dict(self.methane))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if not isinstance(self.n_alkanes, list):
            self.n_alkanes = [self.n_alkanes] if self.n_alkanes is not None else []
        self.n_alkanes = [v if isinstance(v, str) else str(v) for v in self.n_alkanes]

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.nitro is not None and not isinstance(self.nitro, QuantityValue):
            self.nitro = QuantityValue(**as_dict(self.nitro))

        if self.org_carb is not None and not isinstance(self.org_carb, QuantityValue):
            self.org_carb = QuantityValue(**as_dict(self.org_carb))

        if self.org_matter is not None and not isinstance(self.org_matter, QuantityValue):
            self.org_matter = QuantityValue(**as_dict(self.org_matter))

        if self.org_nitro is not None and not isinstance(self.org_nitro, QuantityValue):
            self.org_nitro = QuantityValue(**as_dict(self.org_nitro))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if not isinstance(self.particle_class, list):
            self.particle_class = [self.particle_class] if self.particle_class is not None else []
        self.particle_class = [v if isinstance(v, str) else str(v) for v in self.particle_class]

        if self.part_org_carb is not None and not isinstance(self.part_org_carb, QuantityValue):
            self.part_org_carb = QuantityValue(**as_dict(self.part_org_carb))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.petroleum_hydrocarb is not None and not isinstance(self.petroleum_hydrocarb, QuantityValue):
            self.petroleum_hydrocarb = QuantityValue(**as_dict(self.petroleum_hydrocarb))

        if not isinstance(self.phaeopigments, list):
            self.phaeopigments = [self.phaeopigments] if self.phaeopigments is not None else []
        self.phaeopigments = [v if isinstance(v, str) else str(v) for v in self.phaeopigments]

        if self.phosphate is not None and not isinstance(self.phosphate, QuantityValue):
            self.phosphate = QuantityValue(**as_dict(self.phosphate))

        if not isinstance(self.phosplipid_fatt_acid, list):
            self.phosplipid_fatt_acid = [self.phosplipid_fatt_acid] if self.phosplipid_fatt_acid is not None else []
        self.phosplipid_fatt_acid = [v if isinstance(v, str) else str(v) for v in self.phosplipid_fatt_acid]

        if self.porosity is not None and not isinstance(self.porosity, str):
            self.porosity = str(self.porosity)

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.redox_potential is not None and not isinstance(self.redox_potential, QuantityValue):
            self.redox_potential = QuantityValue(**as_dict(self.redox_potential))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.sediment_type is not None and not isinstance(self.sediment_type, SedimentTypeEnum):
            self.sediment_type = SedimentTypeEnum(self.sediment_type)

        if self.silicate is not None and not isinstance(self.silicate, QuantityValue):
            self.silicate = QuantityValue(**as_dict(self.silicate))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.sulfate is not None and not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self.sulfide is not None and not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self.tidal_stage is not None and not isinstance(self.tidal_stage, TidalStageEnum):
            self.tidal_stage = TidalStageEnum(self.tidal_stage)

        if self.tot_carb is not None and not isinstance(self.tot_carb, QuantityValue):
            self.tot_carb = QuantityValue(**as_dict(self.tot_carb))

        if self.tot_depth_water_col is not None and not isinstance(self.tot_depth_water_col, QuantityValue):
            self.tot_depth_water_col = QuantityValue(**as_dict(self.tot_depth_water_col))

        if self.tot_nitro_content is not None and not isinstance(self.tot_nitro_content, QuantityValue):
            self.tot_nitro_content = QuantityValue(**as_dict(self.tot_nitro_content))

        if self.tot_org_carb is not None and not isinstance(self.tot_org_carb, QuantityValue):
            self.tot_org_carb = QuantityValue(**as_dict(self.tot_org_carb))

        if self.turbidity is not None and not isinstance(self.turbidity, QuantityValue):
            self.turbidity = QuantityValue(**as_dict(self.turbidity))

        if self.water_content is not None and not isinstance(self.water_content, QuantityValue):
            self.water_content = QuantityValue(**as_dict(self.water_content))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIGSEukaryote(Sediment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIGSEukaryote"
    class_name: ClassVar[str] = "sediment MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSEukaryote

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIGSBacteria(Sediment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIGSBacteria"
    class_name: ClassVar[str] = "sediment MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSBacteria

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIGSPlant(Sediment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIGSPlant"
    class_name: ClassVar[str] = "sediment MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSPlant

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIGSVirus(Sediment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIGSVirus"
    class_name: ClassVar[str] = "sediment MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSVirus

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIGSOrg(Sediment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIGSOrg"
    class_name: ClassVar[str] = "sediment MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIGSOrg

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIMS(Sediment):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIMS"
    class_name: ClassVar[str] = "sediment MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMS

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIMARKSSpecimen(Sediment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIMARKSSpecimen"
    class_name: ClassVar[str] = "sediment MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMARKSSpecimen

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIMARKSSurvey(Sediment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIMARKSSurvey"
    class_name: ClassVar[str] = "sediment MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMARKSSurvey

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMISAG(Sediment):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMISAG"
    class_name: ClassVar[str] = "sediment MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMISAG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIMAG(Sediment):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIMAG"
    class_name: ClassVar[str] = "sediment MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIMAG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SedimentMIUVIG(Sediment):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package sediment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:SedimentMIUVIG"
    class_name: ClassVar[str] = "sediment MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SedimentMIUVIG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Soil(YAMLRoot):
    """
    soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Soil
    class_class_curie: ClassVar[str] = "mixs.vocab:Soil"
    class_name: ClassVar[str] = "soil"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Soil

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    cur_land_use: Optional[Union[str, "CurLandUseEnum"]] = None
    cur_vegetation: Optional[str] = None
    cur_vegetation_meth: Optional[str] = None
    previous_land_use: Optional[str] = None
    prev_land_use_meth: Optional[str] = None
    crop_rotation: Optional[str] = None
    agrochem_addition: Optional[Union[str, List[str]]] = empty_list()
    tillage: Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]] = empty_list()
    fire: Optional[Union[str, XSDDate]] = None
    flooding: Optional[Union[str, XSDDate]] = None
    extreme_event: Optional[Union[str, XSDDate]] = None
    soil_horizon: Optional[Union[str, "SoilHorizonEnum"]] = None
    horizon_meth: Optional[str] = None
    sieving: Optional[str] = None
    water_content: Optional[Union[dict, "QuantityValue"]] = None
    water_cont_soil_meth: Optional[str] = None
    pool_dna_extracts: Optional[str] = None
    store_cond: Optional[str] = None
    link_climate_info: Optional[str] = None
    annual_temp: Optional[Union[dict, "QuantityValue"]] = None
    season_temp: Optional[Union[dict, "QuantityValue"]] = None
    annual_precpt: Optional[Union[dict, "QuantityValue"]] = None
    season_precpt: Optional[Union[dict, "QuantityValue"]] = None
    link_class_info: Optional[str] = None
    fao_class: Optional[Union[str, "FaoClassEnum"]] = None
    local_class: Optional[str] = None
    local_class_meth: Optional[str] = None
    org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    soil_type: Optional[str] = None
    soil_type_meth: Optional[str] = None
    slope_gradient: Optional[Union[dict, "QuantityValue"]] = None
    slope_aspect: Optional[Union[dict, "QuantityValue"]] = None
    profile_position: Optional[Union[str, "ProfilePositionEnum"]] = None
    drainage_class: Optional[Union[str, "DrainageClassEnum"]] = None
    soil_text_measure: Optional[Union[dict, "QuantityValue"]] = None
    soil_texture_meth: Optional[str] = None
    ph: Optional[float] = None
    ph_meth: Optional[str] = None
    org_matter: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_c_meth: Optional[str] = None
    tot_nitro_content: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro_cont_meth: Optional[str] = None
    microbial_biomass: Optional[Union[dict, "QuantityValue"]] = None
    micro_biomass_meth: Optional[str] = None
    link_addit_analys: Optional[str] = None
    salinity_meth: Optional[str] = None
    heavy_metals: Optional[Union[str, List[str]]] = empty_list()
    heavy_metals_meth: Optional[str] = None
    al_sat: Optional[Union[dict, "QuantityValue"]] = None
    al_sat_meth: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.depth):
            self.MissingRequiredField("depth")
        if not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self._is_empty(self.elev):
            self.MissingRequiredField("elev")
        if not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.cur_land_use is not None and not isinstance(self.cur_land_use, CurLandUseEnum):
            self.cur_land_use = CurLandUseEnum(self.cur_land_use)

        if self.cur_vegetation is not None and not isinstance(self.cur_vegetation, str):
            self.cur_vegetation = str(self.cur_vegetation)

        if self.cur_vegetation_meth is not None and not isinstance(self.cur_vegetation_meth, str):
            self.cur_vegetation_meth = str(self.cur_vegetation_meth)

        if self.previous_land_use is not None and not isinstance(self.previous_land_use, str):
            self.previous_land_use = str(self.previous_land_use)

        if self.prev_land_use_meth is not None and not isinstance(self.prev_land_use_meth, str):
            self.prev_land_use_meth = str(self.prev_land_use_meth)

        if self.crop_rotation is not None and not isinstance(self.crop_rotation, str):
            self.crop_rotation = str(self.crop_rotation)

        if not isinstance(self.agrochem_addition, list):
            self.agrochem_addition = [self.agrochem_addition] if self.agrochem_addition is not None else []
        self.agrochem_addition = [v if isinstance(v, str) else str(v) for v in self.agrochem_addition]

        if not isinstance(self.tillage, list):
            self.tillage = [self.tillage] if self.tillage is not None else []
        self.tillage = [v if isinstance(v, TillageEnum) else TillageEnum(v) for v in self.tillage]

        if self.fire is not None and not isinstance(self.fire, XSDDate):
            self.fire = XSDDate(self.fire)

        if self.flooding is not None and not isinstance(self.flooding, XSDDate):
            self.flooding = XSDDate(self.flooding)

        if self.extreme_event is not None and not isinstance(self.extreme_event, XSDDate):
            self.extreme_event = XSDDate(self.extreme_event)

        if self.soil_horizon is not None and not isinstance(self.soil_horizon, SoilHorizonEnum):
            self.soil_horizon = SoilHorizonEnum(self.soil_horizon)

        if self.horizon_meth is not None and not isinstance(self.horizon_meth, str):
            self.horizon_meth = str(self.horizon_meth)

        if self.sieving is not None and not isinstance(self.sieving, str):
            self.sieving = str(self.sieving)

        if self.water_content is not None and not isinstance(self.water_content, QuantityValue):
            self.water_content = QuantityValue(**as_dict(self.water_content))

        if self.water_cont_soil_meth is not None and not isinstance(self.water_cont_soil_meth, str):
            self.water_cont_soil_meth = str(self.water_cont_soil_meth)

        if self.pool_dna_extracts is not None and not isinstance(self.pool_dna_extracts, str):
            self.pool_dna_extracts = str(self.pool_dna_extracts)

        if self.store_cond is not None and not isinstance(self.store_cond, str):
            self.store_cond = str(self.store_cond)

        if self.link_climate_info is not None and not isinstance(self.link_climate_info, str):
            self.link_climate_info = str(self.link_climate_info)

        if self.annual_temp is not None and not isinstance(self.annual_temp, QuantityValue):
            self.annual_temp = QuantityValue(**as_dict(self.annual_temp))

        if self.season_temp is not None and not isinstance(self.season_temp, QuantityValue):
            self.season_temp = QuantityValue(**as_dict(self.season_temp))

        if self.annual_precpt is not None and not isinstance(self.annual_precpt, QuantityValue):
            self.annual_precpt = QuantityValue(**as_dict(self.annual_precpt))

        if self.season_precpt is not None and not isinstance(self.season_precpt, QuantityValue):
            self.season_precpt = QuantityValue(**as_dict(self.season_precpt))

        if self.link_class_info is not None and not isinstance(self.link_class_info, str):
            self.link_class_info = str(self.link_class_info)

        if self.fao_class is not None and not isinstance(self.fao_class, FaoClassEnum):
            self.fao_class = FaoClassEnum(self.fao_class)

        if self.local_class is not None and not isinstance(self.local_class, str):
            self.local_class = str(self.local_class)

        if self.local_class_meth is not None and not isinstance(self.local_class_meth, str):
            self.local_class_meth = str(self.local_class_meth)

        if self.org_nitro is not None and not isinstance(self.org_nitro, QuantityValue):
            self.org_nitro = QuantityValue(**as_dict(self.org_nitro))

        if self.soil_type is not None and not isinstance(self.soil_type, str):
            self.soil_type = str(self.soil_type)

        if self.soil_type_meth is not None and not isinstance(self.soil_type_meth, str):
            self.soil_type_meth = str(self.soil_type_meth)

        if self.slope_gradient is not None and not isinstance(self.slope_gradient, QuantityValue):
            self.slope_gradient = QuantityValue(**as_dict(self.slope_gradient))

        if self.slope_aspect is not None and not isinstance(self.slope_aspect, QuantityValue):
            self.slope_aspect = QuantityValue(**as_dict(self.slope_aspect))

        if self.profile_position is not None and not isinstance(self.profile_position, ProfilePositionEnum):
            self.profile_position = ProfilePositionEnum(self.profile_position)

        if self.drainage_class is not None and not isinstance(self.drainage_class, DrainageClassEnum):
            self.drainage_class = DrainageClassEnum(self.drainage_class)

        if self.soil_text_measure is not None and not isinstance(self.soil_text_measure, QuantityValue):
            self.soil_text_measure = QuantityValue(**as_dict(self.soil_text_measure))

        if self.soil_texture_meth is not None and not isinstance(self.soil_texture_meth, str):
            self.soil_texture_meth = str(self.soil_texture_meth)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.ph_meth is not None and not isinstance(self.ph_meth, str):
            self.ph_meth = str(self.ph_meth)

        if self.org_matter is not None and not isinstance(self.org_matter, QuantityValue):
            self.org_matter = QuantityValue(**as_dict(self.org_matter))

        if self.tot_org_carb is not None and not isinstance(self.tot_org_carb, QuantityValue):
            self.tot_org_carb = QuantityValue(**as_dict(self.tot_org_carb))

        if self.tot_org_c_meth is not None and not isinstance(self.tot_org_c_meth, str):
            self.tot_org_c_meth = str(self.tot_org_c_meth)

        if self.tot_nitro_content is not None and not isinstance(self.tot_nitro_content, QuantityValue):
            self.tot_nitro_content = QuantityValue(**as_dict(self.tot_nitro_content))

        if self.tot_nitro_cont_meth is not None and not isinstance(self.tot_nitro_cont_meth, str):
            self.tot_nitro_cont_meth = str(self.tot_nitro_cont_meth)

        if self.microbial_biomass is not None and not isinstance(self.microbial_biomass, QuantityValue):
            self.microbial_biomass = QuantityValue(**as_dict(self.microbial_biomass))

        if self.micro_biomass_meth is not None and not isinstance(self.micro_biomass_meth, str):
            self.micro_biomass_meth = str(self.micro_biomass_meth)

        if self.link_addit_analys is not None and not isinstance(self.link_addit_analys, str):
            self.link_addit_analys = str(self.link_addit_analys)

        if self.salinity_meth is not None and not isinstance(self.salinity_meth, str):
            self.salinity_meth = str(self.salinity_meth)

        if not isinstance(self.heavy_metals, list):
            self.heavy_metals = [self.heavy_metals] if self.heavy_metals is not None else []
        self.heavy_metals = [v if isinstance(v, str) else str(v) for v in self.heavy_metals]

        if self.heavy_metals_meth is not None and not isinstance(self.heavy_metals_meth, str):
            self.heavy_metals_meth = str(self.heavy_metals_meth)

        if self.al_sat is not None and not isinstance(self.al_sat, QuantityValue):
            self.al_sat = QuantityValue(**as_dict(self.al_sat))

        if self.al_sat_meth is not None and not isinstance(self.al_sat_meth, str):
            self.al_sat_meth = str(self.al_sat_meth)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class SoilMIGSEukaryote(Soil):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIGSEukaryote"
    class_name: ClassVar[str] = "soil MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSEukaryote

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIGSBacteria(Soil):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIGSBacteria"
    class_name: ClassVar[str] = "soil MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSBacteria

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIGSPlant(Soil):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIGSPlant"
    class_name: ClassVar[str] = "soil MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSPlant

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIGSVirus(Soil):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIGSVirus"
    class_name: ClassVar[str] = "soil MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSVirus

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIGSOrg(Soil):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIGSOrg"
    class_name: ClassVar[str] = "soil MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIGSOrg

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIMS(Soil):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIMS"
    class_name: ClassVar[str] = "soil MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMS

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIMARKSSpecimen(Soil):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIMARKSSpecimen"
    class_name: ClassVar[str] = "soil MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMARKSSpecimen

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIMARKSSurvey(Soil):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIMARKSSurvey"
    class_name: ClassVar[str] = "soil MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMARKSSurvey

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMISAG(Soil):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMISAG"
    class_name: ClassVar[str] = "soil MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMISAG

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIMAG(Soil):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIMAG"
    class_name: ClassVar[str] = "soil MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIMAG

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class SoilMIUVIG(Soil):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package soil
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:SoilMIUVIG"
    class_name: ClassVar[str] = "soil MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.SoilMIUVIG

    depth: Union[dict, "QuantityValue"] = None
    elev: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludge(YAMLRoot):
    """
    wastewater/sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludge
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludge"
    class_name: ClassVar[str] = "wastewater_sludge"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludge

    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    biochem_oxygen_dem: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chem_oxygen_dem: Optional[Union[dict, "QuantityValue"]] = None
    efficiency_percent: Optional[Union[dict, "QuantityValue"]] = None
    emulsions: Optional[Union[str, List[str]]] = empty_list()
    gaseous_substances: Optional[Union[str, List[str]]] = empty_list()
    indust_eff_percent: Optional[Union[dict, "QuantityValue"]] = None
    inorg_particles: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    org_particles: Optional[Union[str, List[str]]] = empty_list()
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph: Optional[float] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    phosphate: Optional[Union[dict, "QuantityValue"]] = None
    pre_treatment: Optional[str] = None
    primary_treatment: Optional[str] = None
    reactor_type: Optional[str] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    secondary_treatment: Optional[str] = None
    sewage_type: Optional[str] = None
    sludge_retent_time: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    soluble_inorg_mat: Optional[Union[str, List[str]]] = empty_list()
    soluble_org_mat: Optional[Union[str, List[str]]] = empty_list()
    suspend_solids: Optional[Union[str, List[str]]] = empty_list()
    tertiary_treatment: Optional[str] = None
    tot_nitro: Optional[Union[dict, "QuantityValue"]] = None
    tot_phosphate: Optional[Union[dict, "QuantityValue"]] = None
    wastewater_type: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.biochem_oxygen_dem is not None and not isinstance(self.biochem_oxygen_dem, QuantityValue):
            self.biochem_oxygen_dem = QuantityValue(**as_dict(self.biochem_oxygen_dem))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.chem_oxygen_dem is not None and not isinstance(self.chem_oxygen_dem, QuantityValue):
            self.chem_oxygen_dem = QuantityValue(**as_dict(self.chem_oxygen_dem))

        if self.efficiency_percent is not None and not isinstance(self.efficiency_percent, QuantityValue):
            self.efficiency_percent = QuantityValue(**as_dict(self.efficiency_percent))

        if not isinstance(self.emulsions, list):
            self.emulsions = [self.emulsions] if self.emulsions is not None else []
        self.emulsions = [v if isinstance(v, str) else str(v) for v in self.emulsions]

        if not isinstance(self.gaseous_substances, list):
            self.gaseous_substances = [self.gaseous_substances] if self.gaseous_substances is not None else []
        self.gaseous_substances = [v if isinstance(v, str) else str(v) for v in self.gaseous_substances]

        if self.indust_eff_percent is not None and not isinstance(self.indust_eff_percent, QuantityValue):
            self.indust_eff_percent = QuantityValue(**as_dict(self.indust_eff_percent))

        if not isinstance(self.inorg_particles, list):
            self.inorg_particles = [self.inorg_particles] if self.inorg_particles is not None else []
        self.inorg_particles = [v if isinstance(v, str) else str(v) for v in self.inorg_particles]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if not isinstance(self.org_particles, list):
            self.org_particles = [self.org_particles] if self.org_particles is not None else []
        self.org_particles = [v if isinstance(v, str) else str(v) for v in self.org_particles]

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.phosphate is not None and not isinstance(self.phosphate, QuantityValue):
            self.phosphate = QuantityValue(**as_dict(self.phosphate))

        if self.pre_treatment is not None and not isinstance(self.pre_treatment, str):
            self.pre_treatment = str(self.pre_treatment)

        if self.primary_treatment is not None and not isinstance(self.primary_treatment, str):
            self.primary_treatment = str(self.primary_treatment)

        if self.reactor_type is not None and not isinstance(self.reactor_type, str):
            self.reactor_type = str(self.reactor_type)

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.secondary_treatment is not None and not isinstance(self.secondary_treatment, str):
            self.secondary_treatment = str(self.secondary_treatment)

        if self.sewage_type is not None and not isinstance(self.sewage_type, str):
            self.sewage_type = str(self.sewage_type)

        if self.sludge_retent_time is not None and not isinstance(self.sludge_retent_time, QuantityValue):
            self.sludge_retent_time = QuantityValue(**as_dict(self.sludge_retent_time))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if not isinstance(self.soluble_inorg_mat, list):
            self.soluble_inorg_mat = [self.soluble_inorg_mat] if self.soluble_inorg_mat is not None else []
        self.soluble_inorg_mat = [v if isinstance(v, str) else str(v) for v in self.soluble_inorg_mat]

        if not isinstance(self.soluble_org_mat, list):
            self.soluble_org_mat = [self.soluble_org_mat] if self.soluble_org_mat is not None else []
        self.soluble_org_mat = [v if isinstance(v, str) else str(v) for v in self.soluble_org_mat]

        if not isinstance(self.suspend_solids, list):
            self.suspend_solids = [self.suspend_solids] if self.suspend_solids is not None else []
        self.suspend_solids = [v if isinstance(v, str) else str(v) for v in self.suspend_solids]

        if self.tertiary_treatment is not None and not isinstance(self.tertiary_treatment, str):
            self.tertiary_treatment = str(self.tertiary_treatment)

        if self.tot_nitro is not None and not isinstance(self.tot_nitro, QuantityValue):
            self.tot_nitro = QuantityValue(**as_dict(self.tot_nitro))

        if self.tot_phosphate is not None and not isinstance(self.tot_phosphate, QuantityValue):
            self.tot_phosphate = QuantityValue(**as_dict(self.tot_phosphate))

        if self.wastewater_type is not None and not isinstance(self.wastewater_type, str):
            self.wastewater_type = str(self.wastewater_type)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIGSEukaryote(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIGSEukaryote"
    class_name: ClassVar[str] = "wastewater_sludge MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSEukaryote

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIGSBacteria(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIGSBacteria"
    class_name: ClassVar[str] = "wastewater_sludge MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSBacteria

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIGSPlant(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIGSPlant"
    class_name: ClassVar[str] = "wastewater_sludge MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSPlant

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIGSVirus(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIGSVirus"
    class_name: ClassVar[str] = "wastewater_sludge MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSVirus

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIGSOrg(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIGSOrg"
    class_name: ClassVar[str] = "wastewater_sludge MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIGSOrg

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIMS(WastewaterSludge):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIMS"
    class_name: ClassVar[str] = "wastewater_sludge MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMS

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIMARKSSpecimen(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIMARKSSpecimen"
    class_name: ClassVar[str] = "wastewater_sludge MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMARKSSpecimen

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIMARKSSurvey(WastewaterSludge):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIMARKSSurvey"
    class_name: ClassVar[str] = "wastewater_sludge MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMARKSSurvey

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMISAG(WastewaterSludge):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMISAG"
    class_name: ClassVar[str] = "wastewater_sludge MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMISAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIMAG(WastewaterSludge):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIMAG"
    class_name: ClassVar[str] = "wastewater_sludge MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIMAG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WastewaterSludgeMIUVIG(WastewaterSludge):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    wastewater_sludge
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:WastewaterSludgeMIUVIG"
    class_name: ClassVar[str] = "wastewater_sludge MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WastewaterSludgeMIUVIG

    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Water(YAMLRoot):
    """
    water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Water
    class_class_curie: ClassVar[str] = "mixs.vocab:Water"
    class_name: ClassVar[str] = "water"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Water

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    alkalinity: Optional[Union[dict, "QuantityValue"]] = None
    alkalinity_method: Optional[str] = None
    alkyl_diethers: Optional[Union[dict, "QuantityValue"]] = None
    aminopept_act: Optional[Union[dict, "QuantityValue"]] = None
    ammonium: Optional[Union[dict, "QuantityValue"]] = None
    atmospheric_data: Optional[Union[str, List[str]]] = empty_list()
    bacteria_carb_prod: Optional[Union[dict, "QuantityValue"]] = None
    bac_prod: Optional[Union[dict, "QuantityValue"]] = None
    bac_resp: Optional[Union[dict, "QuantityValue"]] = None
    biomass: Optional[Union[str, List[str]]] = empty_list()
    bishomohopanol: Optional[Union[dict, "QuantityValue"]] = None
    bromide: Optional[Union[dict, "QuantityValue"]] = None
    calcium: Optional[Union[dict, "QuantityValue"]] = None
    carb_nitro_ratio: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    chloride: Optional[Union[dict, "QuantityValue"]] = None
    chlorophyll: Optional[Union[dict, "QuantityValue"]] = None
    conduc: Optional[Union[dict, "QuantityValue"]] = None
    density: Optional[Union[dict, "QuantityValue"]] = None
    diether_lipids: Optional[Union[str, List[str]]] = empty_list()
    diss_carb_dioxide: Optional[Union[dict, "QuantityValue"]] = None
    diss_hydrogen: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_inorg_phosp: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    diss_org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    diss_oxygen: Optional[Union[dict, "QuantityValue"]] = None
    down_par: Optional[Union[dict, "QuantityValue"]] = None
    fluor: Optional[Union[dict, "QuantityValue"]] = None
    glucosidase_act: Optional[Union[dict, "QuantityValue"]] = None
    light_intensity: Optional[Union[dict, "QuantityValue"]] = None
    magnesium: Optional[Union[dict, "QuantityValue"]] = None
    mean_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    mean_peak_frict_vel: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    n_alkanes: Optional[Union[str, List[str]]] = empty_list()
    nitrate: Optional[Union[dict, "QuantityValue"]] = None
    nitrite: Optional[Union[dict, "QuantityValue"]] = None
    nitro: Optional[Union[dict, "QuantityValue"]] = None
    org_carb: Optional[Union[dict, "QuantityValue"]] = None
    org_matter: Optional[Union[dict, "QuantityValue"]] = None
    org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    ph: Optional[float] = None
    part_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    part_org_nitro: Optional[Union[dict, "QuantityValue"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    petroleum_hydrocarb: Optional[Union[dict, "QuantityValue"]] = None
    phaeopigments: Optional[Union[str, List[str]]] = empty_list()
    phosphate: Optional[Union[dict, "QuantityValue"]] = None
    phosplipid_fatt_acid: Optional[Union[str, List[str]]] = empty_list()
    photon_flux: Optional[Union[dict, "QuantityValue"]] = None
    potassium: Optional[Union[dict, "QuantityValue"]] = None
    pressure: Optional[Union[dict, "QuantityValue"]] = None
    primary_prod: Optional[Union[dict, "QuantityValue"]] = None
    redox_potential: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    silicate: Optional[Union[dict, "QuantityValue"]] = None
    size_frac_low: Optional[Union[dict, "QuantityValue"]] = None
    size_frac_up: Optional[Union[dict, "QuantityValue"]] = None
    sodium: Optional[Union[dict, "QuantityValue"]] = None
    soluble_react_phosp: Optional[Union[dict, "QuantityValue"]] = None
    sulfate: Optional[Union[dict, "QuantityValue"]] = None
    sulfide: Optional[Union[dict, "QuantityValue"]] = None
    suspend_part_matter: Optional[Union[dict, "QuantityValue"]] = None
    tidal_stage: Optional[Union[str, "TidalStageEnum"]] = None
    tot_depth_water_col: Optional[Union[dict, "QuantityValue"]] = None
    tot_diss_nitro: Optional[Union[dict, "QuantityValue"]] = None
    tot_inorg_nitro: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro: Optional[Union[dict, "QuantityValue"]] = None
    tot_part_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_phosp: Optional[Union[dict, "QuantityValue"]] = None
    turbidity: Optional[Union[dict, "QuantityValue"]] = None
    water_current: Optional[Union[dict, "QuantityValue"]] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.depth):
            self.MissingRequiredField("depth")
        if not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.alkalinity is not None and not isinstance(self.alkalinity, QuantityValue):
            self.alkalinity = QuantityValue(**as_dict(self.alkalinity))

        if self.alkalinity_method is not None and not isinstance(self.alkalinity_method, str):
            self.alkalinity_method = str(self.alkalinity_method)

        if self.alkyl_diethers is not None and not isinstance(self.alkyl_diethers, QuantityValue):
            self.alkyl_diethers = QuantityValue(**as_dict(self.alkyl_diethers))

        if self.aminopept_act is not None and not isinstance(self.aminopept_act, QuantityValue):
            self.aminopept_act = QuantityValue(**as_dict(self.aminopept_act))

        if self.ammonium is not None and not isinstance(self.ammonium, QuantityValue):
            self.ammonium = QuantityValue(**as_dict(self.ammonium))

        if not isinstance(self.atmospheric_data, list):
            self.atmospheric_data = [self.atmospheric_data] if self.atmospheric_data is not None else []
        self.atmospheric_data = [v if isinstance(v, str) else str(v) for v in self.atmospheric_data]

        if self.bacteria_carb_prod is not None and not isinstance(self.bacteria_carb_prod, QuantityValue):
            self.bacteria_carb_prod = QuantityValue(**as_dict(self.bacteria_carb_prod))

        if self.bac_prod is not None and not isinstance(self.bac_prod, QuantityValue):
            self.bac_prod = QuantityValue(**as_dict(self.bac_prod))

        if self.bac_resp is not None and not isinstance(self.bac_resp, QuantityValue):
            self.bac_resp = QuantityValue(**as_dict(self.bac_resp))

        if not isinstance(self.biomass, list):
            self.biomass = [self.biomass] if self.biomass is not None else []
        self.biomass = [v if isinstance(v, str) else str(v) for v in self.biomass]

        if self.bishomohopanol is not None and not isinstance(self.bishomohopanol, QuantityValue):
            self.bishomohopanol = QuantityValue(**as_dict(self.bishomohopanol))

        if self.bromide is not None and not isinstance(self.bromide, QuantityValue):
            self.bromide = QuantityValue(**as_dict(self.bromide))

        if self.calcium is not None and not isinstance(self.calcium, QuantityValue):
            self.calcium = QuantityValue(**as_dict(self.calcium))

        if self.carb_nitro_ratio is not None and not isinstance(self.carb_nitro_ratio, QuantityValue):
            self.carb_nitro_ratio = QuantityValue(**as_dict(self.carb_nitro_ratio))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self.chloride is not None and not isinstance(self.chloride, QuantityValue):
            self.chloride = QuantityValue(**as_dict(self.chloride))

        if self.chlorophyll is not None and not isinstance(self.chlorophyll, QuantityValue):
            self.chlorophyll = QuantityValue(**as_dict(self.chlorophyll))

        if self.conduc is not None and not isinstance(self.conduc, QuantityValue):
            self.conduc = QuantityValue(**as_dict(self.conduc))

        if self.density is not None and not isinstance(self.density, QuantityValue):
            self.density = QuantityValue(**as_dict(self.density))

        if not isinstance(self.diether_lipids, list):
            self.diether_lipids = [self.diether_lipids] if self.diether_lipids is not None else []
        self.diether_lipids = [v if isinstance(v, str) else str(v) for v in self.diether_lipids]

        if self.diss_carb_dioxide is not None and not isinstance(self.diss_carb_dioxide, QuantityValue):
            self.diss_carb_dioxide = QuantityValue(**as_dict(self.diss_carb_dioxide))

        if self.diss_hydrogen is not None and not isinstance(self.diss_hydrogen, QuantityValue):
            self.diss_hydrogen = QuantityValue(**as_dict(self.diss_hydrogen))

        if self.diss_inorg_carb is not None and not isinstance(self.diss_inorg_carb, QuantityValue):
            self.diss_inorg_carb = QuantityValue(**as_dict(self.diss_inorg_carb))

        if self.diss_inorg_nitro is not None and not isinstance(self.diss_inorg_nitro, QuantityValue):
            self.diss_inorg_nitro = QuantityValue(**as_dict(self.diss_inorg_nitro))

        if self.diss_inorg_phosp is not None and not isinstance(self.diss_inorg_phosp, QuantityValue):
            self.diss_inorg_phosp = QuantityValue(**as_dict(self.diss_inorg_phosp))

        if self.diss_org_carb is not None and not isinstance(self.diss_org_carb, QuantityValue):
            self.diss_org_carb = QuantityValue(**as_dict(self.diss_org_carb))

        if self.diss_org_nitro is not None and not isinstance(self.diss_org_nitro, QuantityValue):
            self.diss_org_nitro = QuantityValue(**as_dict(self.diss_org_nitro))

        if self.diss_oxygen is not None and not isinstance(self.diss_oxygen, QuantityValue):
            self.diss_oxygen = QuantityValue(**as_dict(self.diss_oxygen))

        if self.down_par is not None and not isinstance(self.down_par, QuantityValue):
            self.down_par = QuantityValue(**as_dict(self.down_par))

        if self.fluor is not None and not isinstance(self.fluor, QuantityValue):
            self.fluor = QuantityValue(**as_dict(self.fluor))

        if self.glucosidase_act is not None and not isinstance(self.glucosidase_act, QuantityValue):
            self.glucosidase_act = QuantityValue(**as_dict(self.glucosidase_act))

        if self.light_intensity is not None and not isinstance(self.light_intensity, QuantityValue):
            self.light_intensity = QuantityValue(**as_dict(self.light_intensity))

        if self.magnesium is not None and not isinstance(self.magnesium, QuantityValue):
            self.magnesium = QuantityValue(**as_dict(self.magnesium))

        if self.mean_frict_vel is not None and not isinstance(self.mean_frict_vel, QuantityValue):
            self.mean_frict_vel = QuantityValue(**as_dict(self.mean_frict_vel))

        if self.mean_peak_frict_vel is not None and not isinstance(self.mean_peak_frict_vel, QuantityValue):
            self.mean_peak_frict_vel = QuantityValue(**as_dict(self.mean_peak_frict_vel))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if not isinstance(self.n_alkanes, list):
            self.n_alkanes = [self.n_alkanes] if self.n_alkanes is not None else []
        self.n_alkanes = [v if isinstance(v, str) else str(v) for v in self.n_alkanes]

        if self.nitrate is not None and not isinstance(self.nitrate, QuantityValue):
            self.nitrate = QuantityValue(**as_dict(self.nitrate))

        if self.nitrite is not None and not isinstance(self.nitrite, QuantityValue):
            self.nitrite = QuantityValue(**as_dict(self.nitrite))

        if self.nitro is not None and not isinstance(self.nitro, QuantityValue):
            self.nitro = QuantityValue(**as_dict(self.nitro))

        if self.org_carb is not None and not isinstance(self.org_carb, QuantityValue):
            self.org_carb = QuantityValue(**as_dict(self.org_carb))

        if self.org_matter is not None and not isinstance(self.org_matter, QuantityValue):
            self.org_matter = QuantityValue(**as_dict(self.org_matter))

        if self.org_nitro is not None and not isinstance(self.org_nitro, QuantityValue):
            self.org_nitro = QuantityValue(**as_dict(self.org_nitro))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.part_org_carb is not None and not isinstance(self.part_org_carb, QuantityValue):
            self.part_org_carb = QuantityValue(**as_dict(self.part_org_carb))

        if self.part_org_nitro is not None and not isinstance(self.part_org_nitro, QuantityValue):
            self.part_org_nitro = QuantityValue(**as_dict(self.part_org_nitro))

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.petroleum_hydrocarb is not None and not isinstance(self.petroleum_hydrocarb, QuantityValue):
            self.petroleum_hydrocarb = QuantityValue(**as_dict(self.petroleum_hydrocarb))

        if not isinstance(self.phaeopigments, list):
            self.phaeopigments = [self.phaeopigments] if self.phaeopigments is not None else []
        self.phaeopigments = [v if isinstance(v, str) else str(v) for v in self.phaeopigments]

        if self.phosphate is not None and not isinstance(self.phosphate, QuantityValue):
            self.phosphate = QuantityValue(**as_dict(self.phosphate))

        if not isinstance(self.phosplipid_fatt_acid, list):
            self.phosplipid_fatt_acid = [self.phosplipid_fatt_acid] if self.phosplipid_fatt_acid is not None else []
        self.phosplipid_fatt_acid = [v if isinstance(v, str) else str(v) for v in self.phosplipid_fatt_acid]

        if self.photon_flux is not None and not isinstance(self.photon_flux, QuantityValue):
            self.photon_flux = QuantityValue(**as_dict(self.photon_flux))

        if self.potassium is not None and not isinstance(self.potassium, QuantityValue):
            self.potassium = QuantityValue(**as_dict(self.potassium))

        if self.pressure is not None and not isinstance(self.pressure, QuantityValue):
            self.pressure = QuantityValue(**as_dict(self.pressure))

        if self.primary_prod is not None and not isinstance(self.primary_prod, QuantityValue):
            self.primary_prod = QuantityValue(**as_dict(self.primary_prod))

        if self.redox_potential is not None and not isinstance(self.redox_potential, QuantityValue):
            self.redox_potential = QuantityValue(**as_dict(self.redox_potential))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.silicate is not None and not isinstance(self.silicate, QuantityValue):
            self.silicate = QuantityValue(**as_dict(self.silicate))

        if self.size_frac_low is not None and not isinstance(self.size_frac_low, QuantityValue):
            self.size_frac_low = QuantityValue(**as_dict(self.size_frac_low))

        if self.size_frac_up is not None and not isinstance(self.size_frac_up, QuantityValue):
            self.size_frac_up = QuantityValue(**as_dict(self.size_frac_up))

        if self.sodium is not None and not isinstance(self.sodium, QuantityValue):
            self.sodium = QuantityValue(**as_dict(self.sodium))

        if self.soluble_react_phosp is not None and not isinstance(self.soluble_react_phosp, QuantityValue):
            self.soluble_react_phosp = QuantityValue(**as_dict(self.soluble_react_phosp))

        if self.sulfate is not None and not isinstance(self.sulfate, QuantityValue):
            self.sulfate = QuantityValue(**as_dict(self.sulfate))

        if self.sulfide is not None and not isinstance(self.sulfide, QuantityValue):
            self.sulfide = QuantityValue(**as_dict(self.sulfide))

        if self.suspend_part_matter is not None and not isinstance(self.suspend_part_matter, QuantityValue):
            self.suspend_part_matter = QuantityValue(**as_dict(self.suspend_part_matter))

        if self.tidal_stage is not None and not isinstance(self.tidal_stage, TidalStageEnum):
            self.tidal_stage = TidalStageEnum(self.tidal_stage)

        if self.tot_depth_water_col is not None and not isinstance(self.tot_depth_water_col, QuantityValue):
            self.tot_depth_water_col = QuantityValue(**as_dict(self.tot_depth_water_col))

        if self.tot_diss_nitro is not None and not isinstance(self.tot_diss_nitro, QuantityValue):
            self.tot_diss_nitro = QuantityValue(**as_dict(self.tot_diss_nitro))

        if self.tot_inorg_nitro is not None and not isinstance(self.tot_inorg_nitro, QuantityValue):
            self.tot_inorg_nitro = QuantityValue(**as_dict(self.tot_inorg_nitro))

        if self.tot_nitro is not None and not isinstance(self.tot_nitro, QuantityValue):
            self.tot_nitro = QuantityValue(**as_dict(self.tot_nitro))

        if self.tot_part_carb is not None and not isinstance(self.tot_part_carb, QuantityValue):
            self.tot_part_carb = QuantityValue(**as_dict(self.tot_part_carb))

        if self.tot_phosp is not None and not isinstance(self.tot_phosp, QuantityValue):
            self.tot_phosp = QuantityValue(**as_dict(self.tot_phosp))

        if self.turbidity is not None and not isinstance(self.turbidity, QuantityValue):
            self.turbidity = QuantityValue(**as_dict(self.turbidity))

        if self.water_current is not None and not isinstance(self.water_current, QuantityValue):
            self.water_current = QuantityValue(**as_dict(self.water_current))

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class WaterMIGSEukaryote(Water):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIGSEukaryote"
    class_name: ClassVar[str] = "water MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSEukaryote

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIGSBacteria(Water):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIGSBacteria"
    class_name: ClassVar[str] = "water MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSBacteria

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIGSPlant(Water):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIGSPlant"
    class_name: ClassVar[str] = "water MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSPlant

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIGSVirus(Water):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIGSVirus"
    class_name: ClassVar[str] = "water MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSVirus

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIGSOrg(Water):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIGSOrg"
    class_name: ClassVar[str] = "water MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIGSOrg

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIMS(Water):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIMS"
    class_name: ClassVar[str] = "water MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMS

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIMARKSSpecimen(Water):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIMARKSSpecimen"
    class_name: ClassVar[str] = "water MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMARKSSpecimen

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIMARKSSurvey(Water):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIMARKSSurvey"
    class_name: ClassVar[str] = "water MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMARKSSurvey

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMISAG(Water):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMISAG"
    class_name: ClassVar[str] = "water MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMISAG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIMAG(Water):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIMAG"
    class_name: ClassVar[str] = "water MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIMAG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class WaterMIUVIG(Water):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package water
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:WaterMIUVIG"
    class_name: ClassVar[str] = "water MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.WaterMIUVIG

    depth: Union[dict, "QuantityValue"] = None
    samp_name: str = None
    project_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associated(YAMLRoot):
    """
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associated"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associated"
    class_name: ClassVar[str] = "symbiont-associated"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associated

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    host_subject_id: Optional[str] = None
    host_common_name: Optional[str] = None
    host_taxid: Optional[str] = None
    type_of_symbiosis: Optional[Union[str, "TypeOfSymbiosisEnum"]] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_sex: Optional[Union[str, "HostSexEnum"]] = None
    mode_transmission: Optional[Union[str, "ModeTransmissionEnum"]] = None
    route_transmission: Optional[Union[str, "RouteTransmissionEnum"]] = None
    host_body_habitat: Optional[str] = None
    host_body_site: Optional[str] = None
    host_body_product: Optional[str] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_length: Optional[Union[dict, "QuantityValue"]] = None
    host_growth_cond: Optional[str] = None
    host_substrate: Optional[str] = None
    host_family_relationship: Optional[str] = None
    host_infra_specific_name: Optional[str] = None
    host_infra_specific_rank: Optional[str] = None
    host_genotype: Optional[str] = None
    host_phenotype: Optional[str] = None
    host_dry_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_color: Optional[str] = None
    host_shape: Optional[str] = None
    gravidity: Optional[str] = None
    host_number: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    host_specificity: Optional[Union[str, "HostSpecificityEnum"]] = None
    symbiont_host_role: Optional[Union[str, "SymbiontHostRoleEnum"]] = None
    host_cellular_loc: Optional[Union[str, "HostCellularLocEnum"]] = None
    association_duration: Optional[Union[dict, "QuantityValue"]] = None
    host_of_host_coinf: Optional[str] = None
    host_of_host_name: Optional[str] = None
    host_of_host_env_loc: Optional[Union[str, List[str]]] = empty_list()
    host_of_host_env_med: Optional[str] = None
    host_of_host_taxid: Optional[int] = None
    host_of_host_sub_id: Optional[str] = None
    host_of_host_disease: Optional[Union[str, List[str]]] = empty_list()
    host_of_host_fam_rel: Optional[Union[str, List[str]]] = empty_list()
    host_of_host_infname: Optional[str] = None
    host_of_host_infrank: Optional[str] = None
    host_of_host_geno: Optional[str] = None
    host_of_host_pheno: Optional[str] = None
    host_of_host_gravid: Optional[str] = None
    host_of_host_totmass: Optional[Union[dict, "QuantityValue"]] = None
    chem_administration: Optional[Union[str, List[str]]] = empty_list()
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    samp_salinity: Optional[Union[dict, "QuantityValue"]] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_store_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_store_dur: Optional[str] = None
    samp_store_loc: Optional[str] = None
    samp_store_sol: Optional[str] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    source_mat_id: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.sample_name):
            self.MissingRequiredField("sample_name")
        if not isinstance(self.sample_name, str):
            self.sample_name = str(self.sample_name)

        if self._is_empty(self.host_dependence):
            self.MissingRequiredField("host_dependence")
        if not isinstance(self.host_dependence, str):
            self.host_dependence = str(self.host_dependence)

        if self._is_empty(self.sym_life_cycle_type):
            self.MissingRequiredField("sym_life_cycle_type")
        if not isinstance(self.sym_life_cycle_type, str):
            self.sym_life_cycle_type = str(self.sym_life_cycle_type)

        if self._is_empty(self.host_life_stage):
            self.MissingRequiredField("host_life_stage")
        if not isinstance(self.host_life_stage, str):
            self.host_life_stage = str(self.host_life_stage)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.host_subject_id is not None and not isinstance(self.host_subject_id, str):
            self.host_subject_id = str(self.host_subject_id)

        if self.host_common_name is not None and not isinstance(self.host_common_name, str):
            self.host_common_name = str(self.host_common_name)

        if self.host_taxid is not None and not isinstance(self.host_taxid, str):
            self.host_taxid = str(self.host_taxid)

        if self.type_of_symbiosis is not None and not isinstance(self.type_of_symbiosis, TypeOfSymbiosisEnum):
            self.type_of_symbiosis = TypeOfSymbiosisEnum(self.type_of_symbiosis)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_sex is not None and not isinstance(self.host_sex, HostSexEnum):
            self.host_sex = HostSexEnum(self.host_sex)

        if self.mode_transmission is not None and not isinstance(self.mode_transmission, ModeTransmissionEnum):
            self.mode_transmission = ModeTransmissionEnum(self.mode_transmission)

        if self.route_transmission is not None and not isinstance(self.route_transmission, RouteTransmissionEnum):
            self.route_transmission = RouteTransmissionEnum(self.route_transmission)

        if self.host_body_habitat is not None and not isinstance(self.host_body_habitat, str):
            self.host_body_habitat = str(self.host_body_habitat)

        if self.host_body_site is not None and not isinstance(self.host_body_site, str):
            self.host_body_site = str(self.host_body_site)

        if self.host_body_product is not None and not isinstance(self.host_body_product, str):
            self.host_body_product = str(self.host_body_product)

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if self.host_length is not None and not isinstance(self.host_length, QuantityValue):
            self.host_length = QuantityValue(**as_dict(self.host_length))

        if self.host_growth_cond is not None and not isinstance(self.host_growth_cond, str):
            self.host_growth_cond = str(self.host_growth_cond)

        if self.host_substrate is not None and not isinstance(self.host_substrate, str):
            self.host_substrate = str(self.host_substrate)

        if self.host_family_relationship is not None and not isinstance(self.host_family_relationship, str):
            self.host_family_relationship = str(self.host_family_relationship)

        if self.host_infra_specific_name is not None and not isinstance(self.host_infra_specific_name, str):
            self.host_infra_specific_name = str(self.host_infra_specific_name)

        if self.host_infra_specific_rank is not None and not isinstance(self.host_infra_specific_rank, str):
            self.host_infra_specific_rank = str(self.host_infra_specific_rank)

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.host_dry_mass is not None and not isinstance(self.host_dry_mass, QuantityValue):
            self.host_dry_mass = QuantityValue(**as_dict(self.host_dry_mass))

        if self.host_color is not None and not isinstance(self.host_color, str):
            self.host_color = str(self.host_color)

        if self.host_shape is not None and not isinstance(self.host_shape, str):
            self.host_shape = str(self.host_shape)

        if self.gravidity is not None and not isinstance(self.gravidity, str):
            self.gravidity = str(self.gravidity)

        if self.host_number is not None and not isinstance(self.host_number, str):
            self.host_number = str(self.host_number)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if self.host_specificity is not None and not isinstance(self.host_specificity, HostSpecificityEnum):
            self.host_specificity = HostSpecificityEnum(self.host_specificity)

        if self.symbiont_host_role is not None and not isinstance(self.symbiont_host_role, SymbiontHostRoleEnum):
            self.symbiont_host_role = SymbiontHostRoleEnum(self.symbiont_host_role)

        if self.host_cellular_loc is not None and not isinstance(self.host_cellular_loc, HostCellularLocEnum):
            self.host_cellular_loc = HostCellularLocEnum(self.host_cellular_loc)

        if self.association_duration is not None and not isinstance(self.association_duration, QuantityValue):
            self.association_duration = QuantityValue(**as_dict(self.association_duration))

        if self.host_of_host_coinf is not None and not isinstance(self.host_of_host_coinf, str):
            self.host_of_host_coinf = str(self.host_of_host_coinf)

        if self.host_of_host_name is not None and not isinstance(self.host_of_host_name, str):
            self.host_of_host_name = str(self.host_of_host_name)

        if not isinstance(self.host_of_host_env_loc, list):
            self.host_of_host_env_loc = [self.host_of_host_env_loc] if self.host_of_host_env_loc is not None else []
        self.host_of_host_env_loc = [v if isinstance(v, str) else str(v) for v in self.host_of_host_env_loc]

        if self.host_of_host_env_med is not None and not isinstance(self.host_of_host_env_med, str):
            self.host_of_host_env_med = str(self.host_of_host_env_med)

        if self.host_of_host_taxid is not None and not isinstance(self.host_of_host_taxid, int):
            self.host_of_host_taxid = int(self.host_of_host_taxid)

        if self.host_of_host_sub_id is not None and not isinstance(self.host_of_host_sub_id, str):
            self.host_of_host_sub_id = str(self.host_of_host_sub_id)

        if not isinstance(self.host_of_host_disease, list):
            self.host_of_host_disease = [self.host_of_host_disease] if self.host_of_host_disease is not None else []
        self.host_of_host_disease = [v if isinstance(v, str) else str(v) for v in self.host_of_host_disease]

        if not isinstance(self.host_of_host_fam_rel, list):
            self.host_of_host_fam_rel = [self.host_of_host_fam_rel] if self.host_of_host_fam_rel is not None else []
        self.host_of_host_fam_rel = [v if isinstance(v, str) else str(v) for v in self.host_of_host_fam_rel]

        if self.host_of_host_infname is not None and not isinstance(self.host_of_host_infname, str):
            self.host_of_host_infname = str(self.host_of_host_infname)

        if self.host_of_host_infrank is not None and not isinstance(self.host_of_host_infrank, str):
            self.host_of_host_infrank = str(self.host_of_host_infrank)

        if self.host_of_host_geno is not None and not isinstance(self.host_of_host_geno, str):
            self.host_of_host_geno = str(self.host_of_host_geno)

        if self.host_of_host_pheno is not None and not isinstance(self.host_of_host_pheno, str):
            self.host_of_host_pheno = str(self.host_of_host_pheno)

        if self.host_of_host_gravid is not None and not isinstance(self.host_of_host_gravid, str):
            self.host_of_host_gravid = str(self.host_of_host_gravid)

        if self.host_of_host_totmass is not None and not isinstance(self.host_of_host_totmass, QuantityValue):
            self.host_of_host_totmass = QuantityValue(**as_dict(self.host_of_host_totmass))

        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.samp_salinity is not None and not isinstance(self.samp_salinity, QuantityValue):
            self.samp_salinity = QuantityValue(**as_dict(self.samp_salinity))

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_store_temp is not None and not isinstance(self.samp_store_temp, QuantityValue):
            self.samp_store_temp = QuantityValue(**as_dict(self.samp_store_temp))

        if self.samp_store_dur is not None and not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self.samp_store_loc is not None and not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self.samp_store_sol is not None and not isinstance(self.samp_store_sol, str):
            self.samp_store_sol = str(self.samp_store_sol)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIGSEukaryote(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIGSEukaryote"
    class_name: ClassVar[str] = "symbiont-associated MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIGSEukaryote

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIGSBacteria(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIGSBacteria"
    class_name: ClassVar[str] = "symbiont-associated MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIGSBacteria

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIGSPlant(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIGSPlant"
    class_name: ClassVar[str] = "symbiont-associated MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIGSPlant

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIGSVirus(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIGSVirus"
    class_name: ClassVar[str] = "symbiont-associated MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIGSVirus

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIGSOrg(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIGSOrg"
    class_name: ClassVar[str] = "symbiont-associated MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIGSOrg

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    seq_meth: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIMS(Symbiont-associated):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIMS"
    class_name: ClassVar[str] = "symbiont-associated MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIMS

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIMARKSSpecimen(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIMARKSSpecimen"
    class_name: ClassVar[str] = "symbiont-associated MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIMARKSSpecimen

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIMARKSSurvey(Symbiont-associated):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIMARKSSurvey"
    class_name: ClassVar[str] = "symbiont-associated MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIMARKSSurvey

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    seq_meth: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMISAG(Symbiont-associated):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMISAG"
    class_name: ClassVar[str] = "symbiont-associated MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMISAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIMAG(Symbiont-associated):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIMAG"
    class_name: ClassVar[str] = "symbiont-associated MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIMAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    seq_meth: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Symbiont-associatedMIUVIG(Symbiont-associated):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    symbiont-associated
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Symbiont-associatedMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Symbiont-associatedMIUVIG"
    class_name: ClassVar[str] = "symbiont-associated MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Symbiont-associatedMIUVIG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    sample_name: str = None
    host_dependence: str = None
    sym_life_cycle_type: str = None
    host_life_stage: str = None
    project_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    seq_meth: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoods(YAMLRoot):
    """
    food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoods"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoods"
    class_name: ClassVar[str] = "food-human foods"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoods

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_collect_device: Optional[str] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    spikein_count: Optional[Union[str, "SpikeinCountEnum"]] = None
    samp_stor_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_stor_dur: Optional[str] = None
    pool_dna_extracts: Optional[str] = None
    samp_stor_loc: Optional[str] = None
    genetic_mod: Optional[str] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    ferm_chem_add: Optional[Union[Union[dict, "QuantityValue"], List[Union[dict, "QuantityValue"]]]] = empty_list()
    ferm_chem_add_perc: Optional[Union[str, List[str]]] = empty_list()
    ferm_headspace_oxy: Optional[str] = None
    ferm_medium: Optional[str] = None
    ferm_pH: Optional[float] = None
    ferm_rel_humidity: Optional[Union[dict, "QuantityValue"]] = None
    ferm_temp: Optional[Union[dict, "QuantityValue"]] = None
    ferm_time: Optional[str] = None
    ferm_vessel: Optional[str] = None
    bacterial_density: Optional[Union[dict, "QuantityValue"]] = None
    cons_food_stor_dur: Optional[str] = None
    cons_food_stor_temp: Optional[str] = None
    cons_purch_date: Optional[Union[str, XSDDate]] = None
    cons_qty_purchased: Optional[str] = None
    cult_isol_date: Optional[Union[str, XSDDate]] = None
    cult_result: Optional[Union[str, "CultResultEnum"]] = None
    cult_result_org: Optional[Union[str, List[str]]] = empty_list()
    cult_target: Optional[Union[str, List[str]]] = empty_list()
    dietary_claim_use: Optional[Union[str, List[str]]] = empty_list()
    enrichment_protocol: Optional[str] = None
    food_additive: Optional[Union[str, List[str]]] = empty_list()
    food_allergen_label: Optional[Union[str, List[str]]] = empty_list()
    food_contact_surf: Optional[Union[str, List[str]]] = empty_list()
    food_contain_wrap: Optional[str] = None
    food_cooking_proc: Optional[Union[str, List[str]]] = empty_list()
    food_dis_point: Optional[Union[str, List[str]]] = empty_list()
    food_ingredient: Optional[Union[str, List[str]]] = empty_list()
    food_name_status: Optional[str] = None
    food_origin: Optional[str] = None
    food_pack_capacity: Optional[Union[dict, "QuantityValue"]] = None
    food_pack_integrity: Optional[Union[str, List[str]]] = empty_list()
    food_pack_medium: Optional[Union[str, List[str]]] = empty_list()
    food_preserv_proc: Optional[Union[str, List[str]]] = empty_list()
    food_prior_contact: Optional[Union[str, List[str]]] = empty_list()
    food_prod: Optional[Union[str, List[str]]] = empty_list()
    food_prod_synonym: Optional[Union[str, List[str]]] = empty_list()
    food_product_qual: Optional[str] = None
    food_quality_date: Optional[str] = None
    food_source: Optional[str] = None
    food_trace_list: Optional[Union[str, "FoodTraceListEnum"]] = None
    food_trav_mode: Optional[Union[str, List[str]]] = empty_list()
    food_trav_vehic: Optional[Union[str, List[str]]] = empty_list()
    food_treat_proc: Optional[Union[str, List[str]]] = empty_list()
    HACCP_term: Optional[Union[str, List[str]]] = empty_list()
    intended_consumer: Optional[Union[str, List[str]]] = empty_list()
    library_prep_kit: Optional[str] = None
    lot_number: Optional[Union[str, List[str]]] = empty_list()
    microb_cult_med: Optional[str] = None
    microb_start: Optional[str] = None
    microb_start_count: Optional[Union[str, "MicrobStartCountEnum"]] = None
    microb_start_inoc: Optional[Union[dict, "QuantityValue"]] = None
    microb_start_prep: Optional[str] = None
    microb_start_source: Optional[str] = None
    microb_start_taxID: Optional[str] = None
    nucl_acid_ext_kit: Optional[Union[str, List[str]]] = empty_list()
    num_samp_collect: Optional[Union[dict, "QuantityValue"]] = None
    part_plant_animal: Optional[Union[str, List[str]]] = empty_list()
    repository_name: Optional[Union[str, List[str]]] = empty_list()
    sample_collec_method: Optional[str] = None
    samp_pooling: Optional[Union[str, List[str]]] = empty_list()
    samp_rep_biol: Optional[Union[dict, "QuantityValue"]] = None
    samp_rep_tech: Optional[Union[dict, "QuantityValue"]] = None
    samp_source_mat_cat: Optional[str] = None
    samp_stor_device: Optional[str] = None
    samp_stor_media: Optional[str] = None
    samp_transport_cont: Optional[Union[str, "SampTransportContEnum"]] = None
    samp_transport_dur: Optional[Union[dict, "QuantityValue"]] = None
    samp_transport_temp: Optional[str] = None
    samp_purpose: Optional[str] = None
    sequencing_kit: Optional[str] = None
    sequencing_location: Optional[str] = None
    serovar_or_serotype: Optional[Union[str, List[str]]] = empty_list()
    spikein_AMR: Optional[Union[str, List[str]]] = empty_list()
    spikein_antibiotic: Optional[Union[str, List[str]]] = empty_list()
    spikein_growth_med: Optional[Union[str, List[str]]] = empty_list()
    spikein_metal: Optional[Union[str, List[str]]] = empty_list()
    spikein_org: Optional[Union[str, List[str]]] = empty_list()
    spikein_serovar: Optional[Union[str, List[str]]] = empty_list()
    spikein_strain: Optional[Union[str, List[str]]] = empty_list()
    study_design: Optional[Union[str, List[str]]] = empty_list()
    study_inc_dur: Optional[Union[dict, "QuantityValue"]] = None
    study_inc_temp: Optional[Union[dict, "QuantityValue"]] = None
    study_timecourse: Optional[Union[dict, "QuantityValue"]] = None
    study_tmnt: Optional[Union[str, List[str]]] = empty_list()
    timepoint: Optional[float] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    experimental_factor: Optional[str] = None
    nucl_acid_ext: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.coll_site_geo_feat):
            self.MissingRequiredField("coll_site_geo_feat")
        if not isinstance(self.coll_site_geo_feat, str):
            self.coll_site_geo_feat = str(self.coll_site_geo_feat)

        if self._is_empty(self.food_product_type):
            self.MissingRequiredField("food_product_type")
        if not isinstance(self.food_product_type, list):
            self.food_product_type = [self.food_product_type] if self.food_product_type is not None else []
        self.food_product_type = [v if isinstance(v, str) else str(v) for v in self.food_product_type]

        if self._is_empty(self.IFSAC_category):
            self.MissingRequiredField("IFSAC_category")
        if not isinstance(self.IFSAC_category, list):
            self.IFSAC_category = [self.IFSAC_category] if self.IFSAC_category is not None else []
        self.IFSAC_category = [v if isinstance(v, str) else str(v) for v in self.IFSAC_category]

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.samp_collect_device is not None and not isinstance(self.samp_collect_device, str):
            self.samp_collect_device = str(self.samp_collect_device)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.spikein_count is not None and not isinstance(self.spikein_count, SpikeinCountEnum):
            self.spikein_count = SpikeinCountEnum(self.spikein_count)

        if self.samp_stor_temp is not None and not isinstance(self.samp_stor_temp, QuantityValue):
            self.samp_stor_temp = QuantityValue(**as_dict(self.samp_stor_temp))

        if self.samp_stor_dur is not None and not isinstance(self.samp_stor_dur, str):
            self.samp_stor_dur = str(self.samp_stor_dur)

        if self.pool_dna_extracts is not None and not isinstance(self.pool_dna_extracts, str):
            self.pool_dna_extracts = str(self.pool_dna_extracts)

        if self.samp_stor_loc is not None and not isinstance(self.samp_stor_loc, str):
            self.samp_stor_loc = str(self.samp_stor_loc)

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if not isinstance(self.ferm_chem_add, list):
            self.ferm_chem_add = [self.ferm_chem_add] if self.ferm_chem_add is not None else []
        self.ferm_chem_add = [v if isinstance(v, QuantityValue) else QuantityValue(**as_dict(v)) for v in self.ferm_chem_add]

        if not isinstance(self.ferm_chem_add_perc, list):
            self.ferm_chem_add_perc = [self.ferm_chem_add_perc] if self.ferm_chem_add_perc is not None else []
        self.ferm_chem_add_perc = [v if isinstance(v, str) else str(v) for v in self.ferm_chem_add_perc]

        if self.ferm_headspace_oxy is not None and not isinstance(self.ferm_headspace_oxy, str):
            self.ferm_headspace_oxy = str(self.ferm_headspace_oxy)

        if self.ferm_medium is not None and not isinstance(self.ferm_medium, str):
            self.ferm_medium = str(self.ferm_medium)

        if self.ferm_pH is not None and not isinstance(self.ferm_pH, float):
            self.ferm_pH = float(self.ferm_pH)

        if self.ferm_rel_humidity is not None and not isinstance(self.ferm_rel_humidity, QuantityValue):
            self.ferm_rel_humidity = QuantityValue(**as_dict(self.ferm_rel_humidity))

        if self.ferm_temp is not None and not isinstance(self.ferm_temp, QuantityValue):
            self.ferm_temp = QuantityValue(**as_dict(self.ferm_temp))

        if self.ferm_time is not None and not isinstance(self.ferm_time, str):
            self.ferm_time = str(self.ferm_time)

        if self.ferm_vessel is not None and not isinstance(self.ferm_vessel, str):
            self.ferm_vessel = str(self.ferm_vessel)

        if self.bacterial_density is not None and not isinstance(self.bacterial_density, QuantityValue):
            self.bacterial_density = QuantityValue(**as_dict(self.bacterial_density))

        if self.cons_food_stor_dur is not None and not isinstance(self.cons_food_stor_dur, str):
            self.cons_food_stor_dur = str(self.cons_food_stor_dur)

        if self.cons_food_stor_temp is not None and not isinstance(self.cons_food_stor_temp, str):
            self.cons_food_stor_temp = str(self.cons_food_stor_temp)

        if self.cons_purch_date is not None and not isinstance(self.cons_purch_date, XSDDate):
            self.cons_purch_date = XSDDate(self.cons_purch_date)

        if self.cons_qty_purchased is not None and not isinstance(self.cons_qty_purchased, str):
            self.cons_qty_purchased = str(self.cons_qty_purchased)

        if self.cult_isol_date is not None and not isinstance(self.cult_isol_date, XSDDate):
            self.cult_isol_date = XSDDate(self.cult_isol_date)

        if self.cult_result is not None and not isinstance(self.cult_result, CultResultEnum):
            self.cult_result = CultResultEnum(self.cult_result)

        if not isinstance(self.cult_result_org, list):
            self.cult_result_org = [self.cult_result_org] if self.cult_result_org is not None else []
        self.cult_result_org = [v if isinstance(v, str) else str(v) for v in self.cult_result_org]

        if not isinstance(self.cult_target, list):
            self.cult_target = [self.cult_target] if self.cult_target is not None else []
        self.cult_target = [v if isinstance(v, str) else str(v) for v in self.cult_target]

        if not isinstance(self.dietary_claim_use, list):
            self.dietary_claim_use = [self.dietary_claim_use] if self.dietary_claim_use is not None else []
        self.dietary_claim_use = [v if isinstance(v, str) else str(v) for v in self.dietary_claim_use]

        if self.enrichment_protocol is not None and not isinstance(self.enrichment_protocol, str):
            self.enrichment_protocol = str(self.enrichment_protocol)

        if not isinstance(self.food_additive, list):
            self.food_additive = [self.food_additive] if self.food_additive is not None else []
        self.food_additive = [v if isinstance(v, str) else str(v) for v in self.food_additive]

        if not isinstance(self.food_allergen_label, list):
            self.food_allergen_label = [self.food_allergen_label] if self.food_allergen_label is not None else []
        self.food_allergen_label = [v if isinstance(v, str) else str(v) for v in self.food_allergen_label]

        if not isinstance(self.food_contact_surf, list):
            self.food_contact_surf = [self.food_contact_surf] if self.food_contact_surf is not None else []
        self.food_contact_surf = [v if isinstance(v, str) else str(v) for v in self.food_contact_surf]

        if self.food_contain_wrap is not None and not isinstance(self.food_contain_wrap, str):
            self.food_contain_wrap = str(self.food_contain_wrap)

        if not isinstance(self.food_cooking_proc, list):
            self.food_cooking_proc = [self.food_cooking_proc] if self.food_cooking_proc is not None else []
        self.food_cooking_proc = [v if isinstance(v, str) else str(v) for v in self.food_cooking_proc]

        if not isinstance(self.food_dis_point, list):
            self.food_dis_point = [self.food_dis_point] if self.food_dis_point is not None else []
        self.food_dis_point = [v if isinstance(v, str) else str(v) for v in self.food_dis_point]

        if not isinstance(self.food_ingredient, list):
            self.food_ingredient = [self.food_ingredient] if self.food_ingredient is not None else []
        self.food_ingredient = [v if isinstance(v, str) else str(v) for v in self.food_ingredient]

        if self.food_name_status is not None and not isinstance(self.food_name_status, str):
            self.food_name_status = str(self.food_name_status)

        if self.food_origin is not None and not isinstance(self.food_origin, str):
            self.food_origin = str(self.food_origin)

        if self.food_pack_capacity is not None and not isinstance(self.food_pack_capacity, QuantityValue):
            self.food_pack_capacity = QuantityValue(**as_dict(self.food_pack_capacity))

        if not isinstance(self.food_pack_integrity, list):
            self.food_pack_integrity = [self.food_pack_integrity] if self.food_pack_integrity is not None else []
        self.food_pack_integrity = [v if isinstance(v, str) else str(v) for v in self.food_pack_integrity]

        if not isinstance(self.food_pack_medium, list):
            self.food_pack_medium = [self.food_pack_medium] if self.food_pack_medium is not None else []
        self.food_pack_medium = [v if isinstance(v, str) else str(v) for v in self.food_pack_medium]

        if not isinstance(self.food_preserv_proc, list):
            self.food_preserv_proc = [self.food_preserv_proc] if self.food_preserv_proc is not None else []
        self.food_preserv_proc = [v if isinstance(v, str) else str(v) for v in self.food_preserv_proc]

        if not isinstance(self.food_prior_contact, list):
            self.food_prior_contact = [self.food_prior_contact] if self.food_prior_contact is not None else []
        self.food_prior_contact = [v if isinstance(v, str) else str(v) for v in self.food_prior_contact]

        if not isinstance(self.food_prod, list):
            self.food_prod = [self.food_prod] if self.food_prod is not None else []
        self.food_prod = [v if isinstance(v, str) else str(v) for v in self.food_prod]

        if not isinstance(self.food_prod_synonym, list):
            self.food_prod_synonym = [self.food_prod_synonym] if self.food_prod_synonym is not None else []
        self.food_prod_synonym = [v if isinstance(v, str) else str(v) for v in self.food_prod_synonym]

        if self.food_product_qual is not None and not isinstance(self.food_product_qual, str):
            self.food_product_qual = str(self.food_product_qual)

        if self.food_quality_date is not None and not isinstance(self.food_quality_date, str):
            self.food_quality_date = str(self.food_quality_date)

        if self.food_source is not None and not isinstance(self.food_source, str):
            self.food_source = str(self.food_source)

        if self.food_trace_list is not None and not isinstance(self.food_trace_list, FoodTraceListEnum):
            self.food_trace_list = FoodTraceListEnum(self.food_trace_list)

        if not isinstance(self.food_trav_mode, list):
            self.food_trav_mode = [self.food_trav_mode] if self.food_trav_mode is not None else []
        self.food_trav_mode = [v if isinstance(v, str) else str(v) for v in self.food_trav_mode]

        if not isinstance(self.food_trav_vehic, list):
            self.food_trav_vehic = [self.food_trav_vehic] if self.food_trav_vehic is not None else []
        self.food_trav_vehic = [v if isinstance(v, str) else str(v) for v in self.food_trav_vehic]

        if not isinstance(self.food_treat_proc, list):
            self.food_treat_proc = [self.food_treat_proc] if self.food_treat_proc is not None else []
        self.food_treat_proc = [v if isinstance(v, str) else str(v) for v in self.food_treat_proc]

        if not isinstance(self.HACCP_term, list):
            self.HACCP_term = [self.HACCP_term] if self.HACCP_term is not None else []
        self.HACCP_term = [v if isinstance(v, str) else str(v) for v in self.HACCP_term]

        if not isinstance(self.intended_consumer, list):
            self.intended_consumer = [self.intended_consumer] if self.intended_consumer is not None else []
        self.intended_consumer = [v if isinstance(v, str) else str(v) for v in self.intended_consumer]

        if self.library_prep_kit is not None and not isinstance(self.library_prep_kit, str):
            self.library_prep_kit = str(self.library_prep_kit)

        if not isinstance(self.lot_number, list):
            self.lot_number = [self.lot_number] if self.lot_number is not None else []
        self.lot_number = [v if isinstance(v, str) else str(v) for v in self.lot_number]

        if self.microb_cult_med is not None and not isinstance(self.microb_cult_med, str):
            self.microb_cult_med = str(self.microb_cult_med)

        if self.microb_start is not None and not isinstance(self.microb_start, str):
            self.microb_start = str(self.microb_start)

        if self.microb_start_count is not None and not isinstance(self.microb_start_count, MicrobStartCountEnum):
            self.microb_start_count = MicrobStartCountEnum(self.microb_start_count)

        if self.microb_start_inoc is not None and not isinstance(self.microb_start_inoc, QuantityValue):
            self.microb_start_inoc = QuantityValue(**as_dict(self.microb_start_inoc))

        if self.microb_start_prep is not None and not isinstance(self.microb_start_prep, str):
            self.microb_start_prep = str(self.microb_start_prep)

        if self.microb_start_source is not None and not isinstance(self.microb_start_source, str):
            self.microb_start_source = str(self.microb_start_source)

        if self.microb_start_taxID is not None and not isinstance(self.microb_start_taxID, str):
            self.microb_start_taxID = str(self.microb_start_taxID)

        if not isinstance(self.nucl_acid_ext_kit, list):
            self.nucl_acid_ext_kit = [self.nucl_acid_ext_kit] if self.nucl_acid_ext_kit is not None else []
        self.nucl_acid_ext_kit = [v if isinstance(v, str) else str(v) for v in self.nucl_acid_ext_kit]

        if self.num_samp_collect is not None and not isinstance(self.num_samp_collect, QuantityValue):
            self.num_samp_collect = QuantityValue(**as_dict(self.num_samp_collect))

        if not isinstance(self.part_plant_animal, list):
            self.part_plant_animal = [self.part_plant_animal] if self.part_plant_animal is not None else []
        self.part_plant_animal = [v if isinstance(v, str) else str(v) for v in self.part_plant_animal]

        if not isinstance(self.repository_name, list):
            self.repository_name = [self.repository_name] if self.repository_name is not None else []
        self.repository_name = [v if isinstance(v, str) else str(v) for v in self.repository_name]

        if self.sample_collec_method is not None and not isinstance(self.sample_collec_method, str):
            self.sample_collec_method = str(self.sample_collec_method)

        if not isinstance(self.samp_pooling, list):
            self.samp_pooling = [self.samp_pooling] if self.samp_pooling is not None else []
        self.samp_pooling = [v if isinstance(v, str) else str(v) for v in self.samp_pooling]

        if self.samp_rep_biol is not None and not isinstance(self.samp_rep_biol, QuantityValue):
            self.samp_rep_biol = QuantityValue(**as_dict(self.samp_rep_biol))

        if self.samp_rep_tech is not None and not isinstance(self.samp_rep_tech, QuantityValue):
            self.samp_rep_tech = QuantityValue(**as_dict(self.samp_rep_tech))

        if self.samp_source_mat_cat is not None and not isinstance(self.samp_source_mat_cat, str):
            self.samp_source_mat_cat = str(self.samp_source_mat_cat)

        if self.samp_stor_device is not None and not isinstance(self.samp_stor_device, str):
            self.samp_stor_device = str(self.samp_stor_device)

        if self.samp_stor_media is not None and not isinstance(self.samp_stor_media, str):
            self.samp_stor_media = str(self.samp_stor_media)

        if self.samp_transport_cont is not None and not isinstance(self.samp_transport_cont, SampTransportContEnum):
            self.samp_transport_cont = SampTransportContEnum(self.samp_transport_cont)

        if self.samp_transport_dur is not None and not isinstance(self.samp_transport_dur, QuantityValue):
            self.samp_transport_dur = QuantityValue(**as_dict(self.samp_transport_dur))

        if self.samp_transport_temp is not None and not isinstance(self.samp_transport_temp, str):
            self.samp_transport_temp = str(self.samp_transport_temp)

        if self.samp_purpose is not None and not isinstance(self.samp_purpose, str):
            self.samp_purpose = str(self.samp_purpose)

        if self.sequencing_kit is not None and not isinstance(self.sequencing_kit, str):
            self.sequencing_kit = str(self.sequencing_kit)

        if self.sequencing_location is not None and not isinstance(self.sequencing_location, str):
            self.sequencing_location = str(self.sequencing_location)

        if not isinstance(self.serovar_or_serotype, list):
            self.serovar_or_serotype = [self.serovar_or_serotype] if self.serovar_or_serotype is not None else []
        self.serovar_or_serotype = [v if isinstance(v, str) else str(v) for v in self.serovar_or_serotype]

        if not isinstance(self.spikein_AMR, list):
            self.spikein_AMR = [self.spikein_AMR] if self.spikein_AMR is not None else []
        self.spikein_AMR = [v if isinstance(v, str) else str(v) for v in self.spikein_AMR]

        if not isinstance(self.spikein_antibiotic, list):
            self.spikein_antibiotic = [self.spikein_antibiotic] if self.spikein_antibiotic is not None else []
        self.spikein_antibiotic = [v if isinstance(v, str) else str(v) for v in self.spikein_antibiotic]

        if not isinstance(self.spikein_growth_med, list):
            self.spikein_growth_med = [self.spikein_growth_med] if self.spikein_growth_med is not None else []
        self.spikein_growth_med = [v if isinstance(v, str) else str(v) for v in self.spikein_growth_med]

        if not isinstance(self.spikein_metal, list):
            self.spikein_metal = [self.spikein_metal] if self.spikein_metal is not None else []
        self.spikein_metal = [v if isinstance(v, str) else str(v) for v in self.spikein_metal]

        if not isinstance(self.spikein_org, list):
            self.spikein_org = [self.spikein_org] if self.spikein_org is not None else []
        self.spikein_org = [v if isinstance(v, str) else str(v) for v in self.spikein_org]

        if not isinstance(self.spikein_serovar, list):
            self.spikein_serovar = [self.spikein_serovar] if self.spikein_serovar is not None else []
        self.spikein_serovar = [v if isinstance(v, str) else str(v) for v in self.spikein_serovar]

        if not isinstance(self.spikein_strain, list):
            self.spikein_strain = [self.spikein_strain] if self.spikein_strain is not None else []
        self.spikein_strain = [v if isinstance(v, str) else str(v) for v in self.spikein_strain]

        if not isinstance(self.study_design, list):
            self.study_design = [self.study_design] if self.study_design is not None else []
        self.study_design = [v if isinstance(v, str) else str(v) for v in self.study_design]

        if self.study_inc_dur is not None and not isinstance(self.study_inc_dur, QuantityValue):
            self.study_inc_dur = QuantityValue(**as_dict(self.study_inc_dur))

        if self.study_inc_temp is not None and not isinstance(self.study_inc_temp, QuantityValue):
            self.study_inc_temp = QuantityValue(**as_dict(self.study_inc_temp))

        if self.study_timecourse is not None and not isinstance(self.study_timecourse, QuantityValue):
            self.study_timecourse = QuantityValue(**as_dict(self.study_timecourse))

        if not isinstance(self.study_tmnt, list):
            self.study_tmnt = [self.study_tmnt] if self.study_tmnt is not None else []
        self.study_tmnt = [v if isinstance(v, str) else str(v) for v in self.study_tmnt]

        if self.timepoint is not None and not isinstance(self.timepoint, float):
            self.timepoint = float(self.timepoint)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIGSEukaryote(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIGSEukaryote"
    class_name: ClassVar[str] = "food-human foods MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIGSEukaryote

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIGSBacteria(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIGSBacteria"
    class_name: ClassVar[str] = "food-human foods MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIGSBacteria

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIGSPlant(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package food-human
    foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIGSPlant"
    class_name: ClassVar[str] = "food-human foods MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIGSPlant

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIGSVirus(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIGSVirus"
    class_name: ClassVar[str] = "food-human foods MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIGSVirus

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIGSOrg(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package food-human
    foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIGSOrg"
    class_name: ClassVar[str] = "food-human foods MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIGSOrg

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIMS(Food-humanFoods):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIMS"
    class_name: ClassVar[str] = "food-human foods MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIMS

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIMARKSSpecimen(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIMARKSSpecimen"
    class_name: ClassVar[str] = "food-human foods MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIMARKSSpecimen

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIMARKSSurvey(Food-humanFoods):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package food-human
    foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIMARKSSurvey"
    class_name: ClassVar[str] = "food-human foods MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIMARKSSurvey

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMISAG(Food-humanFoods):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package food-human
    foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMISAG"
    class_name: ClassVar[str] = "food-human foods MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMISAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIMAG(Food-humanFoods):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIMAG"
    class_name: ClassVar[str] = "food-human foods MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIMAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-humanFoodsMIUVIG(Food-humanFoods):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    food-human foods
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-humanFoodsMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-humanFoodsMIUVIG"
    class_name: ClassVar[str] = "food-human foods MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-humanFoodsMIUVIG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeed(YAMLRoot):
    """
    food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeed"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeed"
    class_name: ClassVar[str] = "food-animal and animal feed"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeed

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_collect_device: Optional[str] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    spikein_count: Optional[Union[str, "SpikeinCountEnum"]] = None
    samp_stor_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_stor_dur: Optional[str] = None
    pool_dna_extracts: Optional[str] = None
    samp_stor_loc: Optional[str] = None
    samp_transport_cont: Optional[Union[str, "SampTransportContEnum"]] = None
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    food_source: Optional[str] = None
    animal_am: Optional[str] = None
    animal_am_dur: Optional[str] = None
    animal_am_freq: Optional[Union[dict, "QuantityValue"]] = None
    animal_am_route: Optional[str] = None
    animal_am_use: Optional[str] = None
    animal_body_cond: Optional[Union[str, "AnimalBodyCondEnum"]] = None
    animal_diet: Optional[Union[str, List[str]]] = empty_list()
    animal_feed_equip: Optional[Union[str, List[str]]] = empty_list()
    animal_group_size: Optional[int] = None
    animal_housing: Optional[Union[str, List[str]]] = empty_list()
    animal_sex: Optional[Union[str, "AnimalSexEnum"]] = None
    bacterial_density: Optional[Union[dict, "QuantityValue"]] = None
    cons_food_stor_dur: Optional[str] = None
    cons_food_stor_temp: Optional[str] = None
    cons_purch_date: Optional[Union[str, XSDDate]] = None
    cons_qty_purchased: Optional[str] = None
    cult_isol_date: Optional[Union[str, XSDDate]] = None
    cult_result: Optional[Union[str, "CultResultEnum"]] = None
    cult_result_org: Optional[Union[str, List[str]]] = empty_list()
    cult_target: Optional[Union[str, List[str]]] = empty_list()
    enrichment_protocol: Optional[str] = None
    food_additive: Optional[Union[str, List[str]]] = empty_list()
    food_contact_surf: Optional[Union[str, List[str]]] = empty_list()
    food_contain_wrap: Optional[str] = None
    food_cooking_proc: Optional[Union[str, List[str]]] = empty_list()
    food_dis_point: Optional[Union[str, List[str]]] = empty_list()
    food_dis_point_city: Optional[str] = None
    food_ingredient: Optional[Union[str, List[str]]] = empty_list()
    food_pack_capacity: Optional[Union[dict, "QuantityValue"]] = None
    food_pack_integrity: Optional[Union[str, List[str]]] = empty_list()
    food_pack_medium: Optional[Union[str, List[str]]] = empty_list()
    food_preserv_proc: Optional[Union[str, List[str]]] = empty_list()
    food_prior_contact: Optional[Union[str, List[str]]] = empty_list()
    food_prod_synonym: Optional[Union[str, List[str]]] = empty_list()
    food_product_qual: Optional[str] = None
    food_quality_date: Optional[str] = None
    food_source_age: Optional[Union[dict, "QuantityValue"]] = None
    food_trace_list: Optional[Union[str, "FoodTraceListEnum"]] = None
    food_trav_mode: Optional[Union[str, List[str]]] = empty_list()
    food_trav_vehic: Optional[Union[str, List[str]]] = empty_list()
    food_treat_proc: Optional[Union[str, List[str]]] = empty_list()
    HACCP_term: Optional[Union[str, List[str]]] = empty_list()
    library_prep_kit: Optional[str] = None
    lot_number: Optional[Union[str, List[str]]] = empty_list()
    microb_cult_med: Optional[str] = None
    part_plant_animal: Optional[Union[str, List[str]]] = empty_list()
    repository_name: Optional[Union[str, List[str]]] = empty_list()
    samp_collect_method: Optional[str] = None
    samp_pooling: Optional[Union[str, List[str]]] = empty_list()
    samp_rep_biol: Optional[Union[dict, "QuantityValue"]] = None
    samp_rep_tech: Optional[Union[dict, "QuantityValue"]] = None
    samp_source_mat_cat: Optional[str] = None
    samp_stor_device: Optional[str] = None
    samp_stor_media: Optional[str] = None
    samp_transport_dur: Optional[Union[dict, "QuantityValue"]] = None
    samp_transport_temp: Optional[str] = None
    sequencing_kit: Optional[str] = None
    sequencing_location: Optional[str] = None
    serovar_or_serotype: Optional[Union[str, List[str]]] = empty_list()
    spikein_AMR: Optional[Union[str, List[str]]] = empty_list()
    spikein_antibiotic: Optional[Union[str, List[str]]] = empty_list()
    spikein_growth_med: Optional[Union[str, List[str]]] = empty_list()
    spikein_metal: Optional[Union[str, List[str]]] = empty_list()
    spikein_org: Optional[Union[str, List[str]]] = empty_list()
    spikein_serovar: Optional[Union[str, List[str]]] = empty_list()
    spikein_strain: Optional[Union[str, List[str]]] = empty_list()
    study_design: Optional[Union[str, List[str]]] = empty_list()
    study_inc_dur: Optional[Union[dict, "QuantityValue"]] = None
    study_inc_temp: Optional[Union[dict, "QuantityValue"]] = None
    study_timecourse: Optional[Union[dict, "QuantityValue"]] = None
    study_tmnt: Optional[Union[str, List[str]]] = empty_list()
    timepoint: Optional[float] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    experimental_factor: Optional[str] = None
    nucl_acid_ext: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.coll_site_geo_feat):
            self.MissingRequiredField("coll_site_geo_feat")
        if not isinstance(self.coll_site_geo_feat, str):
            self.coll_site_geo_feat = str(self.coll_site_geo_feat)

        if self._is_empty(self.food_origin):
            self.MissingRequiredField("food_origin")
        if not isinstance(self.food_origin, str):
            self.food_origin = str(self.food_origin)

        if self._is_empty(self.food_prod):
            self.MissingRequiredField("food_prod")
        if not isinstance(self.food_prod, list):
            self.food_prod = [self.food_prod] if self.food_prod is not None else []
        self.food_prod = [v if isinstance(v, str) else str(v) for v in self.food_prod]

        if self._is_empty(self.food_product_type):
            self.MissingRequiredField("food_product_type")
        if not isinstance(self.food_product_type, list):
            self.food_product_type = [self.food_product_type] if self.food_product_type is not None else []
        self.food_product_type = [v if isinstance(v, str) else str(v) for v in self.food_product_type]

        if self._is_empty(self.IFSAC_category):
            self.MissingRequiredField("IFSAC_category")
        if not isinstance(self.IFSAC_category, list):
            self.IFSAC_category = [self.IFSAC_category] if self.IFSAC_category is not None else []
        self.IFSAC_category = [v if isinstance(v, str) else str(v) for v in self.IFSAC_category]

        if self._is_empty(self.intended_consumer):
            self.MissingRequiredField("intended_consumer")
        if not isinstance(self.intended_consumer, list):
            self.intended_consumer = [self.intended_consumer] if self.intended_consumer is not None else []
        self.intended_consumer = [v if isinstance(v, str) else str(v) for v in self.intended_consumer]

        if self._is_empty(self.samp_purpose):
            self.MissingRequiredField("samp_purpose")
        if not isinstance(self.samp_purpose, str):
            self.samp_purpose = str(self.samp_purpose)

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.samp_collect_device is not None and not isinstance(self.samp_collect_device, str):
            self.samp_collect_device = str(self.samp_collect_device)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.spikein_count is not None and not isinstance(self.spikein_count, SpikeinCountEnum):
            self.spikein_count = SpikeinCountEnum(self.spikein_count)

        if self.samp_stor_temp is not None and not isinstance(self.samp_stor_temp, QuantityValue):
            self.samp_stor_temp = QuantityValue(**as_dict(self.samp_stor_temp))

        if self.samp_stor_dur is not None and not isinstance(self.samp_stor_dur, str):
            self.samp_stor_dur = str(self.samp_stor_dur)

        if self.pool_dna_extracts is not None and not isinstance(self.pool_dna_extracts, str):
            self.pool_dna_extracts = str(self.pool_dna_extracts)

        if self.samp_stor_loc is not None and not isinstance(self.samp_stor_loc, str):
            self.samp_stor_loc = str(self.samp_stor_loc)

        if self.samp_transport_cont is not None and not isinstance(self.samp_transport_cont, SampTransportContEnum):
            self.samp_transport_cont = SampTransportContEnum(self.samp_transport_cont)

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.food_source is not None and not isinstance(self.food_source, str):
            self.food_source = str(self.food_source)

        if self.animal_am is not None and not isinstance(self.animal_am, str):
            self.animal_am = str(self.animal_am)

        if self.animal_am_dur is not None and not isinstance(self.animal_am_dur, str):
            self.animal_am_dur = str(self.animal_am_dur)

        if self.animal_am_freq is not None and not isinstance(self.animal_am_freq, QuantityValue):
            self.animal_am_freq = QuantityValue(**as_dict(self.animal_am_freq))

        if self.animal_am_route is not None and not isinstance(self.animal_am_route, str):
            self.animal_am_route = str(self.animal_am_route)

        if self.animal_am_use is not None and not isinstance(self.animal_am_use, str):
            self.animal_am_use = str(self.animal_am_use)

        if self.animal_body_cond is not None and not isinstance(self.animal_body_cond, AnimalBodyCondEnum):
            self.animal_body_cond = AnimalBodyCondEnum(self.animal_body_cond)

        if not isinstance(self.animal_diet, list):
            self.animal_diet = [self.animal_diet] if self.animal_diet is not None else []
        self.animal_diet = [v if isinstance(v, str) else str(v) for v in self.animal_diet]

        if not isinstance(self.animal_feed_equip, list):
            self.animal_feed_equip = [self.animal_feed_equip] if self.animal_feed_equip is not None else []
        self.animal_feed_equip = [v if isinstance(v, str) else str(v) for v in self.animal_feed_equip]

        if self.animal_group_size is not None and not isinstance(self.animal_group_size, int):
            self.animal_group_size = int(self.animal_group_size)

        if not isinstance(self.animal_housing, list):
            self.animal_housing = [self.animal_housing] if self.animal_housing is not None else []
        self.animal_housing = [v if isinstance(v, str) else str(v) for v in self.animal_housing]

        if self.animal_sex is not None and not isinstance(self.animal_sex, AnimalSexEnum):
            self.animal_sex = AnimalSexEnum(self.animal_sex)

        if self.bacterial_density is not None and not isinstance(self.bacterial_density, QuantityValue):
            self.bacterial_density = QuantityValue(**as_dict(self.bacterial_density))

        if self.cons_food_stor_dur is not None and not isinstance(self.cons_food_stor_dur, str):
            self.cons_food_stor_dur = str(self.cons_food_stor_dur)

        if self.cons_food_stor_temp is not None and not isinstance(self.cons_food_stor_temp, str):
            self.cons_food_stor_temp = str(self.cons_food_stor_temp)

        if self.cons_purch_date is not None and not isinstance(self.cons_purch_date, XSDDate):
            self.cons_purch_date = XSDDate(self.cons_purch_date)

        if self.cons_qty_purchased is not None and not isinstance(self.cons_qty_purchased, str):
            self.cons_qty_purchased = str(self.cons_qty_purchased)

        if self.cult_isol_date is not None and not isinstance(self.cult_isol_date, XSDDate):
            self.cult_isol_date = XSDDate(self.cult_isol_date)

        if self.cult_result is not None and not isinstance(self.cult_result, CultResultEnum):
            self.cult_result = CultResultEnum(self.cult_result)

        if not isinstance(self.cult_result_org, list):
            self.cult_result_org = [self.cult_result_org] if self.cult_result_org is not None else []
        self.cult_result_org = [v if isinstance(v, str) else str(v) for v in self.cult_result_org]

        if not isinstance(self.cult_target, list):
            self.cult_target = [self.cult_target] if self.cult_target is not None else []
        self.cult_target = [v if isinstance(v, str) else str(v) for v in self.cult_target]

        if self.enrichment_protocol is not None and not isinstance(self.enrichment_protocol, str):
            self.enrichment_protocol = str(self.enrichment_protocol)

        if not isinstance(self.food_additive, list):
            self.food_additive = [self.food_additive] if self.food_additive is not None else []
        self.food_additive = [v if isinstance(v, str) else str(v) for v in self.food_additive]

        if not isinstance(self.food_contact_surf, list):
            self.food_contact_surf = [self.food_contact_surf] if self.food_contact_surf is not None else []
        self.food_contact_surf = [v if isinstance(v, str) else str(v) for v in self.food_contact_surf]

        if self.food_contain_wrap is not None and not isinstance(self.food_contain_wrap, str):
            self.food_contain_wrap = str(self.food_contain_wrap)

        if not isinstance(self.food_cooking_proc, list):
            self.food_cooking_proc = [self.food_cooking_proc] if self.food_cooking_proc is not None else []
        self.food_cooking_proc = [v if isinstance(v, str) else str(v) for v in self.food_cooking_proc]

        if not isinstance(self.food_dis_point, list):
            self.food_dis_point = [self.food_dis_point] if self.food_dis_point is not None else []
        self.food_dis_point = [v if isinstance(v, str) else str(v) for v in self.food_dis_point]

        if self.food_dis_point_city is not None and not isinstance(self.food_dis_point_city, str):
            self.food_dis_point_city = str(self.food_dis_point_city)

        if not isinstance(self.food_ingredient, list):
            self.food_ingredient = [self.food_ingredient] if self.food_ingredient is not None else []
        self.food_ingredient = [v if isinstance(v, str) else str(v) for v in self.food_ingredient]

        if self.food_pack_capacity is not None and not isinstance(self.food_pack_capacity, QuantityValue):
            self.food_pack_capacity = QuantityValue(**as_dict(self.food_pack_capacity))

        if not isinstance(self.food_pack_integrity, list):
            self.food_pack_integrity = [self.food_pack_integrity] if self.food_pack_integrity is not None else []
        self.food_pack_integrity = [v if isinstance(v, str) else str(v) for v in self.food_pack_integrity]

        if not isinstance(self.food_pack_medium, list):
            self.food_pack_medium = [self.food_pack_medium] if self.food_pack_medium is not None else []
        self.food_pack_medium = [v if isinstance(v, str) else str(v) for v in self.food_pack_medium]

        if not isinstance(self.food_preserv_proc, list):
            self.food_preserv_proc = [self.food_preserv_proc] if self.food_preserv_proc is not None else []
        self.food_preserv_proc = [v if isinstance(v, str) else str(v) for v in self.food_preserv_proc]

        if not isinstance(self.food_prior_contact, list):
            self.food_prior_contact = [self.food_prior_contact] if self.food_prior_contact is not None else []
        self.food_prior_contact = [v if isinstance(v, str) else str(v) for v in self.food_prior_contact]

        if not isinstance(self.food_prod_synonym, list):
            self.food_prod_synonym = [self.food_prod_synonym] if self.food_prod_synonym is not None else []
        self.food_prod_synonym = [v if isinstance(v, str) else str(v) for v in self.food_prod_synonym]

        if self.food_product_qual is not None and not isinstance(self.food_product_qual, str):
            self.food_product_qual = str(self.food_product_qual)

        if self.food_quality_date is not None and not isinstance(self.food_quality_date, str):
            self.food_quality_date = str(self.food_quality_date)

        if self.food_source_age is not None and not isinstance(self.food_source_age, QuantityValue):
            self.food_source_age = QuantityValue(**as_dict(self.food_source_age))

        if self.food_trace_list is not None and not isinstance(self.food_trace_list, FoodTraceListEnum):
            self.food_trace_list = FoodTraceListEnum(self.food_trace_list)

        if not isinstance(self.food_trav_mode, list):
            self.food_trav_mode = [self.food_trav_mode] if self.food_trav_mode is not None else []
        self.food_trav_mode = [v if isinstance(v, str) else str(v) for v in self.food_trav_mode]

        if not isinstance(self.food_trav_vehic, list):
            self.food_trav_vehic = [self.food_trav_vehic] if self.food_trav_vehic is not None else []
        self.food_trav_vehic = [v if isinstance(v, str) else str(v) for v in self.food_trav_vehic]

        if not isinstance(self.food_treat_proc, list):
            self.food_treat_proc = [self.food_treat_proc] if self.food_treat_proc is not None else []
        self.food_treat_proc = [v if isinstance(v, str) else str(v) for v in self.food_treat_proc]

        if not isinstance(self.HACCP_term, list):
            self.HACCP_term = [self.HACCP_term] if self.HACCP_term is not None else []
        self.HACCP_term = [v if isinstance(v, str) else str(v) for v in self.HACCP_term]

        if self.library_prep_kit is not None and not isinstance(self.library_prep_kit, str):
            self.library_prep_kit = str(self.library_prep_kit)

        if not isinstance(self.lot_number, list):
            self.lot_number = [self.lot_number] if self.lot_number is not None else []
        self.lot_number = [v if isinstance(v, str) else str(v) for v in self.lot_number]

        if self.microb_cult_med is not None and not isinstance(self.microb_cult_med, str):
            self.microb_cult_med = str(self.microb_cult_med)

        if not isinstance(self.part_plant_animal, list):
            self.part_plant_animal = [self.part_plant_animal] if self.part_plant_animal is not None else []
        self.part_plant_animal = [v if isinstance(v, str) else str(v) for v in self.part_plant_animal]

        if not isinstance(self.repository_name, list):
            self.repository_name = [self.repository_name] if self.repository_name is not None else []
        self.repository_name = [v if isinstance(v, str) else str(v) for v in self.repository_name]

        if self.samp_collect_method is not None and not isinstance(self.samp_collect_method, str):
            self.samp_collect_method = str(self.samp_collect_method)

        if not isinstance(self.samp_pooling, list):
            self.samp_pooling = [self.samp_pooling] if self.samp_pooling is not None else []
        self.samp_pooling = [v if isinstance(v, str) else str(v) for v in self.samp_pooling]

        if self.samp_rep_biol is not None and not isinstance(self.samp_rep_biol, QuantityValue):
            self.samp_rep_biol = QuantityValue(**as_dict(self.samp_rep_biol))

        if self.samp_rep_tech is not None and not isinstance(self.samp_rep_tech, QuantityValue):
            self.samp_rep_tech = QuantityValue(**as_dict(self.samp_rep_tech))

        if self.samp_source_mat_cat is not None and not isinstance(self.samp_source_mat_cat, str):
            self.samp_source_mat_cat = str(self.samp_source_mat_cat)

        if self.samp_stor_device is not None and not isinstance(self.samp_stor_device, str):
            self.samp_stor_device = str(self.samp_stor_device)

        if self.samp_stor_media is not None and not isinstance(self.samp_stor_media, str):
            self.samp_stor_media = str(self.samp_stor_media)

        if self.samp_transport_cont is not None and not isinstance(self.samp_transport_cont, SampTransportContEnum):
            self.samp_transport_cont = SampTransportContEnum(self.samp_transport_cont)

        if self.samp_transport_dur is not None and not isinstance(self.samp_transport_dur, QuantityValue):
            self.samp_transport_dur = QuantityValue(**as_dict(self.samp_transport_dur))

        if self.samp_transport_temp is not None and not isinstance(self.samp_transport_temp, str):
            self.samp_transport_temp = str(self.samp_transport_temp)

        if self.sequencing_kit is not None and not isinstance(self.sequencing_kit, str):
            self.sequencing_kit = str(self.sequencing_kit)

        if self.sequencing_location is not None and not isinstance(self.sequencing_location, str):
            self.sequencing_location = str(self.sequencing_location)

        if not isinstance(self.serovar_or_serotype, list):
            self.serovar_or_serotype = [self.serovar_or_serotype] if self.serovar_or_serotype is not None else []
        self.serovar_or_serotype = [v if isinstance(v, str) else str(v) for v in self.serovar_or_serotype]

        if not isinstance(self.spikein_AMR, list):
            self.spikein_AMR = [self.spikein_AMR] if self.spikein_AMR is not None else []
        self.spikein_AMR = [v if isinstance(v, str) else str(v) for v in self.spikein_AMR]

        if not isinstance(self.spikein_antibiotic, list):
            self.spikein_antibiotic = [self.spikein_antibiotic] if self.spikein_antibiotic is not None else []
        self.spikein_antibiotic = [v if isinstance(v, str) else str(v) for v in self.spikein_antibiotic]

        if not isinstance(self.spikein_growth_med, list):
            self.spikein_growth_med = [self.spikein_growth_med] if self.spikein_growth_med is not None else []
        self.spikein_growth_med = [v if isinstance(v, str) else str(v) for v in self.spikein_growth_med]

        if not isinstance(self.spikein_metal, list):
            self.spikein_metal = [self.spikein_metal] if self.spikein_metal is not None else []
        self.spikein_metal = [v if isinstance(v, str) else str(v) for v in self.spikein_metal]

        if not isinstance(self.spikein_org, list):
            self.spikein_org = [self.spikein_org] if self.spikein_org is not None else []
        self.spikein_org = [v if isinstance(v, str) else str(v) for v in self.spikein_org]

        if not isinstance(self.spikein_serovar, list):
            self.spikein_serovar = [self.spikein_serovar] if self.spikein_serovar is not None else []
        self.spikein_serovar = [v if isinstance(v, str) else str(v) for v in self.spikein_serovar]

        if not isinstance(self.spikein_strain, list):
            self.spikein_strain = [self.spikein_strain] if self.spikein_strain is not None else []
        self.spikein_strain = [v if isinstance(v, str) else str(v) for v in self.spikein_strain]

        if not isinstance(self.study_design, list):
            self.study_design = [self.study_design] if self.study_design is not None else []
        self.study_design = [v if isinstance(v, str) else str(v) for v in self.study_design]

        if self.study_inc_dur is not None and not isinstance(self.study_inc_dur, QuantityValue):
            self.study_inc_dur = QuantityValue(**as_dict(self.study_inc_dur))

        if self.study_inc_temp is not None and not isinstance(self.study_inc_temp, QuantityValue):
            self.study_inc_temp = QuantityValue(**as_dict(self.study_inc_temp))

        if self.study_timecourse is not None and not isinstance(self.study_timecourse, QuantityValue):
            self.study_timecourse = QuantityValue(**as_dict(self.study_timecourse))

        if not isinstance(self.study_tmnt, list):
            self.study_tmnt = [self.study_tmnt] if self.study_tmnt is not None else []
        self.study_tmnt = [v if isinstance(v, str) else str(v) for v in self.study_tmnt]

        if self.timepoint is not None and not isinstance(self.timepoint, float):
            self.timepoint = float(self.timepoint)

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIGSEukaryote(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIGSEukaryote"
    class_name: ClassVar[str] = "food-animal and animal feed MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIGSEukaryote

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIGSBacteria(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIGSBacteria"
    class_name: ClassVar[str] = "food-animal and animal feed MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIGSBacteria

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIGSPlant(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package food-animal
    and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIGSPlant"
    class_name: ClassVar[str] = "food-animal and animal feed MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIGSPlant

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIGSVirus(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIGSVirus"
    class_name: ClassVar[str] = "food-animal and animal feed MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIGSVirus

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIGSOrg(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package food-animal
    and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIGSOrg"
    class_name: ClassVar[str] = "food-animal and animal feed MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIGSOrg

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIMS(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIMS"
    class_name: ClassVar[str] = "food-animal and animal feed MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIMS

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIMARKSSpecimen(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIMARKSSpecimen"
    class_name: ClassVar[str] = "food-animal and animal feed MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIMARKSSpecimen

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIMARKSSurvey(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package food-animal
    and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIMARKSSurvey"
    class_name: ClassVar[str] = "food-animal and animal feed MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIMARKSSurvey

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMISAG(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package food-animal
    and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMISAG"
    class_name: ClassVar[str] = "food-animal and animal feed MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMISAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIMAG(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIMAG"
    class_name: ClassVar[str] = "food-animal and animal feed MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIMAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-animalAndAnimalFeedMIUVIG(Food-animalAndAnimalFeed):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    food-animal and animal feed
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-animalAndAnimalFeedMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-animalAndAnimalFeedMIUVIG"
    class_name: ClassVar[str] = "food-animal and animal feed MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-animalAndAnimalFeedMIUVIG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    food_origin: str = None
    food_prod: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    intended_consumer: Union[str, List[str]] = None
    samp_purpose: str = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacility(YAMLRoot):
    """
    food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacility"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacility"
    class_name: ClassVar[str] = "food-food production facility"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacility

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_collect_device: Optional[str] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    samp_stor_temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_stor_dur: Optional[str] = None
    room_dim: Optional[str] = None
    freq_clean: Optional[Union[str, "FreqCleanEnum"]] = None
    samp_room_id: Optional[int] = None
    pool_dna_extracts: Optional[str] = None
    samp_stor_loc: Optional[str] = None
    surf_material: Optional[Union[str, "SurfMaterialEnum"]] = None
    indoor_surf: Optional[Union[str, "IndoorSurfEnum"]] = None
    avg_occup: Optional[float] = None
    samp_floor: Optional[Union[str, "SampFloorEnum"]] = None
    genetic_mod: Optional[str] = None
    facility_type: Optional[Union[Union[str, "FacilityTypeEnum"], List[Union[str, "FacilityTypeEnum"]]]] = empty_list()
    food_trav_mode: Optional[Union[str, List[str]]] = empty_list()
    food_trav_vehic: Optional[Union[str, List[str]]] = empty_list()
    samp_transport_dur: Optional[Union[dict, "QuantityValue"]] = None
    samp_transport_temp: Optional[str] = None
    samp_collect_method: Optional[str] = None
    num_samp_collect: Optional[Union[dict, "QuantityValue"]] = None
    lot_number: Optional[Union[str, List[str]]] = empty_list()
    hygienic_area: Optional[str] = None
    env_monitoring_zone: Optional[str] = None
    area_samp_size: Optional[str] = None
    samp_surf_moisture: Optional[Union[Union[str, "SampSurfMoistureEnum"], List[Union[str, "SampSurfMoistureEnum"]]]] = empty_list()
    samp_loc_condition: Optional[Union[str, "SampLocConditionEnum"]] = None
    biocide_used: Optional[Union[str, List[str]]] = empty_list()
    ster_meth_samp_room: Optional[Union[str, List[str]]] = empty_list()
    enrichment_protocol: Optional[str] = None
    cult_target: Optional[Union[str, List[str]]] = empty_list()
    microb_cult_med: Optional[str] = None
    timepoint: Optional[float] = None
    bacterial_density: Optional[Union[dict, "QuantityValue"]] = None
    cult_isol_date: Optional[Union[str, XSDDate]] = None
    cult_result: Optional[Union[str, "CultResultEnum"]] = None
    cult_result_org: Optional[Union[str, List[str]]] = empty_list()
    samp_pooling: Optional[Union[str, List[str]]] = empty_list()
    samp_purpose: Optional[str] = None
    samp_rep_tech: Optional[Union[dict, "QuantityValue"]] = None
    samp_rep_biol: Optional[Union[dict, "QuantityValue"]] = None
    samp_transport_cont: Optional[Union[str, "SampTransportContEnum"]] = None
    study_design: Optional[Union[str, List[str]]] = empty_list()
    nucl_acid_ext_kit: Optional[Union[str, List[str]]] = empty_list()
    library_prep_kit: Optional[str] = None
    sequencing_kit: Optional[str] = None
    sequencing_location: Optional[str] = None
    study_inc_temp: Optional[Union[dict, "QuantityValue"]] = None
    study_inc_dur: Optional[Union[dict, "QuantityValue"]] = None
    study_timecourse: Optional[Union[dict, "QuantityValue"]] = None
    study_tmnt: Optional[Union[str, List[str]]] = empty_list()
    food_source: Optional[str] = None
    food_dis_point: Optional[Union[str, List[str]]] = empty_list()
    food_dis_point_city: Optional[str] = None
    food_origin: Optional[str] = None
    food_prod_synonym: Optional[Union[str, List[str]]] = empty_list()
    food_additive: Optional[Union[str, List[str]]] = empty_list()
    food_trace_list: Optional[Union[str, "FoodTraceListEnum"]] = None
    part_plant_animal: Optional[Union[str, List[str]]] = empty_list()
    food_ingredient: Optional[Union[str, List[str]]] = empty_list()
    spec_intended_cons: Optional[Union[str, List[str]]] = empty_list()
    HACCP_term: Optional[Union[str, List[str]]] = empty_list()
    dietary_claim_use: Optional[Union[str, List[str]]] = empty_list()
    food_allergen_label: Optional[Union[str, List[str]]] = empty_list()
    food_prod_char: Optional[Union[str, List[str]]] = empty_list()
    prod_label_claims: Optional[Union[str, List[str]]] = empty_list()
    food_name_status: Optional[str] = None
    food_preserv_proc: Optional[Union[str, List[str]]] = empty_list()
    food_cooking_proc: Optional[Union[str, List[str]]] = empty_list()
    food_treat_proc: Optional[Union[str, List[str]]] = empty_list()
    food_contain_wrap: Optional[str] = None
    food_pack_capacity: Optional[Union[dict, "QuantityValue"]] = None
    food_pack_medium: Optional[Union[str, List[str]]] = empty_list()
    food_prior_contact: Optional[Union[str, List[str]]] = empty_list()
    food_prod: Optional[Union[str, List[str]]] = empty_list()
    food_quality_date: Optional[str] = None
    repository_name: Optional[Union[str, List[str]]] = empty_list()
    intended_consumer: Optional[Union[str, List[str]]] = empty_list()
    food_pack_integrity: Optional[Union[str, List[str]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    experimental_factor: Optional[str] = None
    nucl_acid_ext: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    subspecf_gen_lin: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.coll_site_geo_feat):
            self.MissingRequiredField("coll_site_geo_feat")
        if not isinstance(self.coll_site_geo_feat, str):
            self.coll_site_geo_feat = str(self.coll_site_geo_feat)

        if self._is_empty(self.samp_source_mat_cat):
            self.MissingRequiredField("samp_source_mat_cat")
        if not isinstance(self.samp_source_mat_cat, str):
            self.samp_source_mat_cat = str(self.samp_source_mat_cat)

        if self._is_empty(self.samp_type):
            self.MissingRequiredField("samp_type")
        if not isinstance(self.samp_type, str):
            self.samp_type = str(self.samp_type)

        if self._is_empty(self.samp_stor_media):
            self.MissingRequiredField("samp_stor_media")
        if not isinstance(self.samp_stor_media, str):
            self.samp_stor_media = str(self.samp_stor_media)

        if self._is_empty(self.samp_stor_device):
            self.MissingRequiredField("samp_stor_device")
        if not isinstance(self.samp_stor_device, str):
            self.samp_stor_device = str(self.samp_stor_device)

        if self._is_empty(self.food_product_type):
            self.MissingRequiredField("food_product_type")
        if not isinstance(self.food_product_type, list):
            self.food_product_type = [self.food_product_type] if self.food_product_type is not None else []
        self.food_product_type = [v if isinstance(v, str) else str(v) for v in self.food_product_type]

        if self._is_empty(self.IFSAC_category):
            self.MissingRequiredField("IFSAC_category")
        if not isinstance(self.IFSAC_category, list):
            self.IFSAC_category = [self.IFSAC_category] if self.IFSAC_category is not None else []
        self.IFSAC_category = [v if isinstance(v, str) else str(v) for v in self.IFSAC_category]

        if self._is_empty(self.food_product_qual):
            self.MissingRequiredField("food_product_qual")
        if not isinstance(self.food_product_qual, str):
            self.food_product_qual = str(self.food_product_qual)

        if self._is_empty(self.food_contact_surf):
            self.MissingRequiredField("food_contact_surf")
        if not isinstance(self.food_contact_surf, list):
            self.food_contact_surf = [self.food_contact_surf] if self.food_contact_surf is not None else []
        self.food_contact_surf = [v if isinstance(v, str) else str(v) for v in self.food_contact_surf]

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.samp_collect_device is not None and not isinstance(self.samp_collect_device, str):
            self.samp_collect_device = str(self.samp_collect_device)

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.samp_stor_temp is not None and not isinstance(self.samp_stor_temp, QuantityValue):
            self.samp_stor_temp = QuantityValue(**as_dict(self.samp_stor_temp))

        if self.samp_stor_dur is not None and not isinstance(self.samp_stor_dur, str):
            self.samp_stor_dur = str(self.samp_stor_dur)

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.room_dim is not None and not isinstance(self.room_dim, str):
            self.room_dim = str(self.room_dim)

        if self.freq_clean is not None and not isinstance(self.freq_clean, FreqCleanEnum):
            self.freq_clean = FreqCleanEnum(self.freq_clean)

        if self.samp_room_id is not None and not isinstance(self.samp_room_id, int):
            self.samp_room_id = int(self.samp_room_id)

        if self.pool_dna_extracts is not None and not isinstance(self.pool_dna_extracts, str):
            self.pool_dna_extracts = str(self.pool_dna_extracts)

        if self.samp_stor_loc is not None and not isinstance(self.samp_stor_loc, str):
            self.samp_stor_loc = str(self.samp_stor_loc)

        if self.surf_material is not None and not isinstance(self.surf_material, SurfMaterialEnum):
            self.surf_material = SurfMaterialEnum(self.surf_material)

        if self.indoor_surf is not None and not isinstance(self.indoor_surf, IndoorSurfEnum):
            self.indoor_surf = IndoorSurfEnum(self.indoor_surf)

        if self.avg_occup is not None and not isinstance(self.avg_occup, float):
            self.avg_occup = float(self.avg_occup)

        if self.samp_floor is not None and not isinstance(self.samp_floor, SampFloorEnum):
            self.samp_floor = SampFloorEnum(self.samp_floor)

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if not isinstance(self.facility_type, list):
            self.facility_type = [self.facility_type] if self.facility_type is not None else []
        self.facility_type = [v if isinstance(v, FacilityTypeEnum) else FacilityTypeEnum(v) for v in self.facility_type]

        if not isinstance(self.food_trav_mode, list):
            self.food_trav_mode = [self.food_trav_mode] if self.food_trav_mode is not None else []
        self.food_trav_mode = [v if isinstance(v, str) else str(v) for v in self.food_trav_mode]

        if not isinstance(self.food_trav_vehic, list):
            self.food_trav_vehic = [self.food_trav_vehic] if self.food_trav_vehic is not None else []
        self.food_trav_vehic = [v if isinstance(v, str) else str(v) for v in self.food_trav_vehic]

        if self.samp_transport_dur is not None and not isinstance(self.samp_transport_dur, QuantityValue):
            self.samp_transport_dur = QuantityValue(**as_dict(self.samp_transport_dur))

        if self.samp_transport_temp is not None and not isinstance(self.samp_transport_temp, str):
            self.samp_transport_temp = str(self.samp_transport_temp)

        if self.samp_collect_method is not None and not isinstance(self.samp_collect_method, str):
            self.samp_collect_method = str(self.samp_collect_method)

        if self.num_samp_collect is not None and not isinstance(self.num_samp_collect, QuantityValue):
            self.num_samp_collect = QuantityValue(**as_dict(self.num_samp_collect))

        if not isinstance(self.lot_number, list):
            self.lot_number = [self.lot_number] if self.lot_number is not None else []
        self.lot_number = [v if isinstance(v, str) else str(v) for v in self.lot_number]

        if self.hygienic_area is not None and not isinstance(self.hygienic_area, str):
            self.hygienic_area = str(self.hygienic_area)

        if self.env_monitoring_zone is not None and not isinstance(self.env_monitoring_zone, str):
            self.env_monitoring_zone = str(self.env_monitoring_zone)

        if self.area_samp_size is not None and not isinstance(self.area_samp_size, str):
            self.area_samp_size = str(self.area_samp_size)

        if not isinstance(self.samp_surf_moisture, list):
            self.samp_surf_moisture = [self.samp_surf_moisture] if self.samp_surf_moisture is not None else []
        self.samp_surf_moisture = [v if isinstance(v, SampSurfMoistureEnum) else SampSurfMoistureEnum(v) for v in self.samp_surf_moisture]

        if self.samp_loc_condition is not None and not isinstance(self.samp_loc_condition, SampLocConditionEnum):
            self.samp_loc_condition = SampLocConditionEnum(self.samp_loc_condition)

        if not isinstance(self.biocide_used, list):
            self.biocide_used = [self.biocide_used] if self.biocide_used is not None else []
        self.biocide_used = [v if isinstance(v, str) else str(v) for v in self.biocide_used]

        if not isinstance(self.ster_meth_samp_room, list):
            self.ster_meth_samp_room = [self.ster_meth_samp_room] if self.ster_meth_samp_room is not None else []
        self.ster_meth_samp_room = [v if isinstance(v, str) else str(v) for v in self.ster_meth_samp_room]

        if self.enrichment_protocol is not None and not isinstance(self.enrichment_protocol, str):
            self.enrichment_protocol = str(self.enrichment_protocol)

        if not isinstance(self.cult_target, list):
            self.cult_target = [self.cult_target] if self.cult_target is not None else []
        self.cult_target = [v if isinstance(v, str) else str(v) for v in self.cult_target]

        if self.microb_cult_med is not None and not isinstance(self.microb_cult_med, str):
            self.microb_cult_med = str(self.microb_cult_med)

        if self.timepoint is not None and not isinstance(self.timepoint, float):
            self.timepoint = float(self.timepoint)

        if self.bacterial_density is not None and not isinstance(self.bacterial_density, QuantityValue):
            self.bacterial_density = QuantityValue(**as_dict(self.bacterial_density))

        if self.cult_isol_date is not None and not isinstance(self.cult_isol_date, XSDDate):
            self.cult_isol_date = XSDDate(self.cult_isol_date)

        if self.cult_result is not None and not isinstance(self.cult_result, CultResultEnum):
            self.cult_result = CultResultEnum(self.cult_result)

        if not isinstance(self.cult_result_org, list):
            self.cult_result_org = [self.cult_result_org] if self.cult_result_org is not None else []
        self.cult_result_org = [v if isinstance(v, str) else str(v) for v in self.cult_result_org]

        if not isinstance(self.samp_pooling, list):
            self.samp_pooling = [self.samp_pooling] if self.samp_pooling is not None else []
        self.samp_pooling = [v if isinstance(v, str) else str(v) for v in self.samp_pooling]

        if self.samp_purpose is not None and not isinstance(self.samp_purpose, str):
            self.samp_purpose = str(self.samp_purpose)

        if self.samp_rep_tech is not None and not isinstance(self.samp_rep_tech, QuantityValue):
            self.samp_rep_tech = QuantityValue(**as_dict(self.samp_rep_tech))

        if self.samp_rep_biol is not None and not isinstance(self.samp_rep_biol, QuantityValue):
            self.samp_rep_biol = QuantityValue(**as_dict(self.samp_rep_biol))

        if self.samp_transport_cont is not None and not isinstance(self.samp_transport_cont, SampTransportContEnum):
            self.samp_transport_cont = SampTransportContEnum(self.samp_transport_cont)

        if not isinstance(self.study_design, list):
            self.study_design = [self.study_design] if self.study_design is not None else []
        self.study_design = [v if isinstance(v, str) else str(v) for v in self.study_design]

        if not isinstance(self.nucl_acid_ext_kit, list):
            self.nucl_acid_ext_kit = [self.nucl_acid_ext_kit] if self.nucl_acid_ext_kit is not None else []
        self.nucl_acid_ext_kit = [v if isinstance(v, str) else str(v) for v in self.nucl_acid_ext_kit]

        if self.library_prep_kit is not None and not isinstance(self.library_prep_kit, str):
            self.library_prep_kit = str(self.library_prep_kit)

        if self.sequencing_kit is not None and not isinstance(self.sequencing_kit, str):
            self.sequencing_kit = str(self.sequencing_kit)

        if self.sequencing_location is not None and not isinstance(self.sequencing_location, str):
            self.sequencing_location = str(self.sequencing_location)

        if self.study_inc_temp is not None and not isinstance(self.study_inc_temp, QuantityValue):
            self.study_inc_temp = QuantityValue(**as_dict(self.study_inc_temp))

        if self.study_inc_dur is not None and not isinstance(self.study_inc_dur, QuantityValue):
            self.study_inc_dur = QuantityValue(**as_dict(self.study_inc_dur))

        if self.study_timecourse is not None and not isinstance(self.study_timecourse, QuantityValue):
            self.study_timecourse = QuantityValue(**as_dict(self.study_timecourse))

        if not isinstance(self.study_tmnt, list):
            self.study_tmnt = [self.study_tmnt] if self.study_tmnt is not None else []
        self.study_tmnt = [v if isinstance(v, str) else str(v) for v in self.study_tmnt]

        if self.food_source is not None and not isinstance(self.food_source, str):
            self.food_source = str(self.food_source)

        if not isinstance(self.food_dis_point, list):
            self.food_dis_point = [self.food_dis_point] if self.food_dis_point is not None else []
        self.food_dis_point = [v if isinstance(v, str) else str(v) for v in self.food_dis_point]

        if self.food_dis_point_city is not None and not isinstance(self.food_dis_point_city, str):
            self.food_dis_point_city = str(self.food_dis_point_city)

        if self.food_origin is not None and not isinstance(self.food_origin, str):
            self.food_origin = str(self.food_origin)

        if not isinstance(self.food_prod_synonym, list):
            self.food_prod_synonym = [self.food_prod_synonym] if self.food_prod_synonym is not None else []
        self.food_prod_synonym = [v if isinstance(v, str) else str(v) for v in self.food_prod_synonym]

        if not isinstance(self.food_additive, list):
            self.food_additive = [self.food_additive] if self.food_additive is not None else []
        self.food_additive = [v if isinstance(v, str) else str(v) for v in self.food_additive]

        if self.food_trace_list is not None and not isinstance(self.food_trace_list, FoodTraceListEnum):
            self.food_trace_list = FoodTraceListEnum(self.food_trace_list)

        if not isinstance(self.part_plant_animal, list):
            self.part_plant_animal = [self.part_plant_animal] if self.part_plant_animal is not None else []
        self.part_plant_animal = [v if isinstance(v, str) else str(v) for v in self.part_plant_animal]

        if not isinstance(self.food_ingredient, list):
            self.food_ingredient = [self.food_ingredient] if self.food_ingredient is not None else []
        self.food_ingredient = [v if isinstance(v, str) else str(v) for v in self.food_ingredient]

        if not isinstance(self.spec_intended_cons, list):
            self.spec_intended_cons = [self.spec_intended_cons] if self.spec_intended_cons is not None else []
        self.spec_intended_cons = [v if isinstance(v, str) else str(v) for v in self.spec_intended_cons]

        if not isinstance(self.HACCP_term, list):
            self.HACCP_term = [self.HACCP_term] if self.HACCP_term is not None else []
        self.HACCP_term = [v if isinstance(v, str) else str(v) for v in self.HACCP_term]

        if not isinstance(self.dietary_claim_use, list):
            self.dietary_claim_use = [self.dietary_claim_use] if self.dietary_claim_use is not None else []
        self.dietary_claim_use = [v if isinstance(v, str) else str(v) for v in self.dietary_claim_use]

        if not isinstance(self.food_allergen_label, list):
            self.food_allergen_label = [self.food_allergen_label] if self.food_allergen_label is not None else []
        self.food_allergen_label = [v if isinstance(v, str) else str(v) for v in self.food_allergen_label]

        if not isinstance(self.food_prod_char, list):
            self.food_prod_char = [self.food_prod_char] if self.food_prod_char is not None else []
        self.food_prod_char = [v if isinstance(v, str) else str(v) for v in self.food_prod_char]

        if not isinstance(self.prod_label_claims, list):
            self.prod_label_claims = [self.prod_label_claims] if self.prod_label_claims is not None else []
        self.prod_label_claims = [v if isinstance(v, str) else str(v) for v in self.prod_label_claims]

        if self.food_name_status is not None and not isinstance(self.food_name_status, str):
            self.food_name_status = str(self.food_name_status)

        if not isinstance(self.food_preserv_proc, list):
            self.food_preserv_proc = [self.food_preserv_proc] if self.food_preserv_proc is not None else []
        self.food_preserv_proc = [v if isinstance(v, str) else str(v) for v in self.food_preserv_proc]

        if not isinstance(self.food_cooking_proc, list):
            self.food_cooking_proc = [self.food_cooking_proc] if self.food_cooking_proc is not None else []
        self.food_cooking_proc = [v if isinstance(v, str) else str(v) for v in self.food_cooking_proc]

        if not isinstance(self.food_treat_proc, list):
            self.food_treat_proc = [self.food_treat_proc] if self.food_treat_proc is not None else []
        self.food_treat_proc = [v if isinstance(v, str) else str(v) for v in self.food_treat_proc]

        if self.food_contain_wrap is not None and not isinstance(self.food_contain_wrap, str):
            self.food_contain_wrap = str(self.food_contain_wrap)

        if self.food_pack_capacity is not None and not isinstance(self.food_pack_capacity, QuantityValue):
            self.food_pack_capacity = QuantityValue(**as_dict(self.food_pack_capacity))

        if not isinstance(self.food_pack_medium, list):
            self.food_pack_medium = [self.food_pack_medium] if self.food_pack_medium is not None else []
        self.food_pack_medium = [v if isinstance(v, str) else str(v) for v in self.food_pack_medium]

        if not isinstance(self.food_prior_contact, list):
            self.food_prior_contact = [self.food_prior_contact] if self.food_prior_contact is not None else []
        self.food_prior_contact = [v if isinstance(v, str) else str(v) for v in self.food_prior_contact]

        if not isinstance(self.food_prod, list):
            self.food_prod = [self.food_prod] if self.food_prod is not None else []
        self.food_prod = [v if isinstance(v, str) else str(v) for v in self.food_prod]

        if self.food_quality_date is not None and not isinstance(self.food_quality_date, str):
            self.food_quality_date = str(self.food_quality_date)

        if not isinstance(self.repository_name, list):
            self.repository_name = [self.repository_name] if self.repository_name is not None else []
        self.repository_name = [v if isinstance(v, str) else str(v) for v in self.repository_name]

        if not isinstance(self.intended_consumer, list):
            self.intended_consumer = [self.intended_consumer] if self.intended_consumer is not None else []
        self.intended_consumer = [v if isinstance(v, str) else str(v) for v in self.intended_consumer]

        if not isinstance(self.food_pack_integrity, list):
            self.food_pack_integrity = [self.food_pack_integrity] if self.food_pack_integrity is not None else []
        self.food_pack_integrity = [v if isinstance(v, str) else str(v) for v in self.food_pack_integrity]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIGSEukaryote(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIGSEukaryote"
    class_name: ClassVar[str] = "food-food production facility MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIGSEukaryote

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIGSBacteria(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIGSBacteria"
    class_name: ClassVar[str] = "food-food production facility MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIGSBacteria

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIGSPlant(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package food-food
    production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIGSPlant"
    class_name: ClassVar[str] = "food-food production facility MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIGSPlant

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIGSVirus(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIGSVirus"
    class_name: ClassVar[str] = "food-food production facility MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIGSVirus

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIGSOrg(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package food-food
    production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIGSOrg"
    class_name: ClassVar[str] = "food-food production facility MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIGSOrg

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIMS(Food-foodProductionFacility):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIMS"
    class_name: ClassVar[str] = "food-food production facility MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIMS

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIMARKSSpecimen(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package food-food
    production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIMARKSSpecimen"
    class_name: ClassVar[str] = "food-food production facility MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIMARKSSpecimen

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIMARKSSurvey(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package food-food
    production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIMARKSSurvey"
    class_name: ClassVar[str] = "food-food production facility MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIMARKSSurvey

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMISAG(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package food-food
    production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMISAG"
    class_name: ClassVar[str] = "food-food production facility MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMISAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIMAG(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIMAG"
    class_name: ClassVar[str] = "food-food production facility MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIMAG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-foodProductionFacilityMIUVIG(Food-foodProductionFacility):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    food-food production facility
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-foodProductionFacilityMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-foodProductionFacilityMIUVIG"
    class_name: ClassVar[str] = "food-food production facility MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-foodProductionFacilityMIUVIG

    lat_lon: str = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    coll_site_geo_feat: str = None
    samp_source_mat_cat: str = None
    samp_type: str = None
    samp_stor_media: str = None
    samp_stor_device: str = None
    food_product_type: Union[str, List[str]] = None
    IFSAC_category: Union[str, List[str]] = None
    food_product_qual: str = None
    food_contact_surf: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    host_disease_stat: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironment(YAMLRoot):
    """
    food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironment"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironment"
    class_name: ClassVar[str] = "food-farm environment"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironment

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    temp: Optional[Union[dict, "QuantityValue"]] = None
    samp_collect_device: Optional[str] = None
    humidity: Optional[Union[dict, "QuantityValue"]] = None
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    spikein_count: Optional[Union[str, "SpikeinCountEnum"]] = None
    samp_stor_temp: Optional[Union[dict, "QuantityValue"]] = None
    solar_irradiance: Optional[Union[dict, "QuantityValue"]] = None
    ventilation_rate: Optional[Union[dict, "QuantityValue"]] = None
    samp_stor_dur: Optional[str] = None
    wind_speed: Optional[Union[dict, "QuantityValue"]] = None
    salinity: Optional[Union[dict, "QuantityValue"]] = None
    previous_land_use: Optional[str] = None
    crop_rotation: Optional[str] = None
    soil_type_meth: Optional[str] = None
    tot_org_c_meth: Optional[str] = None
    tot_nitro_cont_meth: Optional[str] = None
    salinity_meth: Optional[str] = None
    host_age: Optional[Union[dict, "QuantityValue"]] = None
    host_dry_mass: Optional[Union[dict, "QuantityValue"]] = None
    host_height: Optional[Union[dict, "QuantityValue"]] = None
    host_length: Optional[Union[dict, "QuantityValue"]] = None
    host_tot_mass: Optional[Union[dict, "QuantityValue"]] = None
    root_med_carbon: Optional[str] = None
    root_med_macronutr: Optional[str] = None
    root_med_micronutr: Optional[str] = None
    season_temp: Optional[Union[dict, "QuantityValue"]] = None
    season_precpt: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_nitro_content: Optional[Union[dict, "QuantityValue"]] = None
    conduc: Optional[Union[dict, "QuantityValue"]] = None
    turbidity: Optional[Union[dict, "QuantityValue"]] = None
    size_frac_low: Optional[Union[dict, "QuantityValue"]] = None
    size_frac_up: Optional[Union[dict, "QuantityValue"]] = None
    ventilation_type: Optional[str] = None
    wind_direction: Optional[str] = None
    genetic_mod: Optional[str] = None
    host_phenotype: Optional[str] = None
    ph: Optional[float] = None
    ances_data: Optional[str] = None
    growth_habit: Optional[Union[str, "GrowthHabitEnum"]] = None
    host_genotype: Optional[str] = None
    host_taxid: Optional[str] = None
    mechanical_damage: Optional[Union[str, List[str]]] = empty_list()
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    root_cond: Optional[str] = None
    root_med_ph: Optional[float] = None
    tillage: Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]] = empty_list()
    ph_meth: Optional[str] = None
    growth_medium: Optional[str] = None
    season: Optional[str] = None
    farm_water_source: Optional[Union[Union[str, "FarmWaterSourceEnum"], List[Union[str, "FarmWaterSourceEnum"]]]] = empty_list()
    plant_water_method: Optional[str] = None
    air_PM_concen: Optional[Union[str, List[str]]] = empty_list()
    animal_feed_equip: Optional[Union[str, List[str]]] = empty_list()
    animal_intrusion: Optional[Union[str, List[str]]] = empty_list()
    anim_water_method: Optional[Union[str, List[str]]] = empty_list()
    crop_yield: Optional[str] = None
    cult_result: Optional[Union[str, "CultResultEnum"]] = None
    cult_result_org: Optional[Union[str, List[str]]] = empty_list()
    cult_target: Optional[Union[str, List[str]]] = empty_list()
    plant_part_maturity: Optional[str] = None
    adjacent_environment: Optional[Union[str, List[str]]] = empty_list()
    water_source_adjac: Optional[Union[str, List[str]]] = empty_list()
    farm_equip_shared: Optional[Union[str, List[str]]] = empty_list()
    farm_equip_san: Optional[Union[str, List[str]]] = empty_list()
    farm_equip_san_freq: Optional[str] = None
    farm_equip: Optional[Union[str, List[str]]] = empty_list()
    fertilizer_admin: Optional[str] = None
    fertilizer_date: Optional[Union[str, XSDDate]] = None
    animal_group_size: Optional[int] = None
    animal_diet: Optional[Union[str, List[str]]] = empty_list()
    food_contact_surf: Optional[Union[str, List[str]]] = empty_list()
    food_contain_wrap: Optional[str] = None
    food_harvest_proc: Optional[Union[str, List[str]]] = empty_list()
    food_pack_medium: Optional[Union[str, List[str]]] = empty_list()
    food_preserv_proc: Optional[Union[str, List[str]]] = empty_list()
    food_prod_char: Optional[Union[str, List[str]]] = empty_list()
    prod_label_claims: Optional[Union[str, List[str]]] = empty_list()
    food_trav_mode: Optional[Union[str, List[str]]] = empty_list()
    food_trav_vehic: Optional[Union[str, List[str]]] = empty_list()
    food_source: Optional[str] = None
    food_treat_proc: Optional[Union[str, List[str]]] = empty_list()
    extr_weather_event: Optional[Union[Union[str, "ExtrWeatherEventEnum"], List[Union[str, "ExtrWeatherEventEnum"]]]] = empty_list()
    date_extr_weath: Optional[Union[Union[str, XSDDate], List[Union[str, XSDDate]]]] = empty_list()
    host_subspecf_genlin: Optional[Union[str, List[str]]] = empty_list()
    intended_consumer: Optional[Union[str, List[str]]] = empty_list()
    library_prep_kit: Optional[str] = None
    air_flow_impede: Optional[Union[str, List[str]]] = empty_list()
    lot_number: Optional[Union[str, List[str]]] = empty_list()
    season_humidity: Optional[Union[dict, "QuantityValue"]] = None
    part_plant_animal: Optional[Union[str, List[str]]] = empty_list()
    plant_growth_med: Optional[Union[str, "PlantGrowthMedEnum"]] = None
    plant_reprod_crop: Optional[Union[Union[str, "PlantReprodCropEnum"], List[Union[str, "PlantReprodCropEnum"]]]] = empty_list()
    samp_purpose: Optional[str] = None
    repository_name: Optional[Union[str, List[str]]] = empty_list()
    samp_pooling: Optional[Union[str, List[str]]] = empty_list()
    samp_source_mat_cat: Optional[str] = None
    sequencing_kit: Optional[str] = None
    sequencing_location: Optional[str] = None
    serovar_or_serotype: Optional[Union[str, List[str]]] = empty_list()
    soil_conductivity: Optional[Union[dict, "QuantityValue"]] = None
    soil_cover: Optional[str] = None
    soil_pH: Optional[float] = None
    rel_location: Optional[str] = None
    soil_porosity: Optional[str] = None
    soil_texture_class: Optional[Union[str, "SoilTextureClassEnum"]] = None
    soil_texture_meth: Optional[str] = None
    soil_type: Optional[str] = None
    spikein_org: Optional[Union[str, List[str]]] = empty_list()
    spikein_serovar: Optional[Union[str, List[str]]] = empty_list()
    spikein_growth_med: Optional[Union[str, List[str]]] = empty_list()
    spikein_strain: Optional[Union[str, List[str]]] = empty_list()
    spikein_antibiotic: Optional[Union[str, List[str]]] = empty_list()
    spikein_metal: Optional[Union[str, List[str]]] = empty_list()
    timepoint: Optional[float] = None
    water_frequency: Optional[str] = None
    water_pH: Optional[float] = None
    water_source_shared: Optional[Union[Union[str, "WaterSourceSharedEnum"], List[Union[str, "WaterSourceSharedEnum"]]]] = empty_list()
    enrichment_protocol: Optional[str] = None
    food_quality_date: Optional[str] = None
    animal_housing: Optional[Union[str, List[str]]] = empty_list()
    cult_isol_date: Optional[Union[str, XSDDate]] = None
    food_clean_proc: Optional[Union[Union[str, "FoodCleanProcEnum"], List[Union[str, "FoodCleanProcEnum"]]]] = empty_list()
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    samp_size: Optional[Union[dict, "QuantityValue"]] = None
    nucl_acid_ext: Optional[str] = None
    samp_vol_we_dna_ext: Optional[Union[dict, "QuantityValue"]] = None
    host_disease_stat: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.lat_lon):
            self.MissingRequiredField("lat_lon")
        if not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self._is_empty(self.depth):
            self.MissingRequiredField("depth")
        if not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self._is_empty(self.geo_loc_name):
            self.MissingRequiredField("geo_loc_name")
        if not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self._is_empty(self.collection_date):
            self.MissingRequiredField("collection_date")
        if not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self._is_empty(self.env_broad_scale):
            self.MissingRequiredField("env_broad_scale")
        if not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self._is_empty(self.env_local_scale):
            self.MissingRequiredField("env_local_scale")
        if not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self._is_empty(self.env_medium):
            self.MissingRequiredField("env_medium")
        if not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self._is_empty(self.biotic_regm):
            self.MissingRequiredField("biotic_regm")
        if not isinstance(self.biotic_regm, str):
            self.biotic_regm = str(self.biotic_regm)

        if self._is_empty(self.chem_administration):
            self.MissingRequiredField("chem_administration")
        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self._is_empty(self.food_product_type):
            self.MissingRequiredField("food_product_type")
        if not isinstance(self.food_product_type, list):
            self.food_product_type = [self.food_product_type] if self.food_product_type is not None else []
        self.food_product_type = [v if isinstance(v, str) else str(v) for v in self.food_product_type]

        if self._is_empty(self.samp_type):
            self.MissingRequiredField("samp_type")
        if not isinstance(self.samp_type, str):
            self.samp_type = str(self.samp_type)

        if self._is_empty(self.IFSAC_category):
            self.MissingRequiredField("IFSAC_category")
        if not isinstance(self.IFSAC_category, list):
            self.IFSAC_category = [self.IFSAC_category] if self.IFSAC_category is not None else []
        self.IFSAC_category = [v if isinstance(v, str) else str(v) for v in self.IFSAC_category]

        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.samp_collect_device is not None and not isinstance(self.samp_collect_device, str):
            self.samp_collect_device = str(self.samp_collect_device)

        if self.humidity is not None and not isinstance(self.humidity, QuantityValue):
            self.humidity = QuantityValue(**as_dict(self.humidity))

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.spikein_count is not None and not isinstance(self.spikein_count, SpikeinCountEnum):
            self.spikein_count = SpikeinCountEnum(self.spikein_count)

        if self.samp_stor_temp is not None and not isinstance(self.samp_stor_temp, QuantityValue):
            self.samp_stor_temp = QuantityValue(**as_dict(self.samp_stor_temp))

        if self.solar_irradiance is not None and not isinstance(self.solar_irradiance, QuantityValue):
            self.solar_irradiance = QuantityValue(**as_dict(self.solar_irradiance))

        if self.ventilation_rate is not None and not isinstance(self.ventilation_rate, QuantityValue):
            self.ventilation_rate = QuantityValue(**as_dict(self.ventilation_rate))

        if self.samp_stor_dur is not None and not isinstance(self.samp_stor_dur, str):
            self.samp_stor_dur = str(self.samp_stor_dur)

        if self.wind_speed is not None and not isinstance(self.wind_speed, QuantityValue):
            self.wind_speed = QuantityValue(**as_dict(self.wind_speed))

        if self.salinity is not None and not isinstance(self.salinity, QuantityValue):
            self.salinity = QuantityValue(**as_dict(self.salinity))

        if self.previous_land_use is not None and not isinstance(self.previous_land_use, str):
            self.previous_land_use = str(self.previous_land_use)

        if self.crop_rotation is not None and not isinstance(self.crop_rotation, str):
            self.crop_rotation = str(self.crop_rotation)

        if self.soil_type_meth is not None and not isinstance(self.soil_type_meth, str):
            self.soil_type_meth = str(self.soil_type_meth)

        if self.tot_org_c_meth is not None and not isinstance(self.tot_org_c_meth, str):
            self.tot_org_c_meth = str(self.tot_org_c_meth)

        if self.tot_nitro_cont_meth is not None and not isinstance(self.tot_nitro_cont_meth, str):
            self.tot_nitro_cont_meth = str(self.tot_nitro_cont_meth)

        if self.salinity_meth is not None and not isinstance(self.salinity_meth, str):
            self.salinity_meth = str(self.salinity_meth)

        if self.host_age is not None and not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self.host_dry_mass is not None and not isinstance(self.host_dry_mass, QuantityValue):
            self.host_dry_mass = QuantityValue(**as_dict(self.host_dry_mass))

        if self.host_height is not None and not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if self.host_length is not None and not isinstance(self.host_length, QuantityValue):
            self.host_length = QuantityValue(**as_dict(self.host_length))

        if self.host_tot_mass is not None and not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self.root_med_carbon is not None and not isinstance(self.root_med_carbon, str):
            self.root_med_carbon = str(self.root_med_carbon)

        if self.root_med_macronutr is not None and not isinstance(self.root_med_macronutr, str):
            self.root_med_macronutr = str(self.root_med_macronutr)

        if self.root_med_micronutr is not None and not isinstance(self.root_med_micronutr, str):
            self.root_med_micronutr = str(self.root_med_micronutr)

        if self.season_temp is not None and not isinstance(self.season_temp, QuantityValue):
            self.season_temp = QuantityValue(**as_dict(self.season_temp))

        if self.season_precpt is not None and not isinstance(self.season_precpt, QuantityValue):
            self.season_precpt = QuantityValue(**as_dict(self.season_precpt))

        if self.tot_org_carb is not None and not isinstance(self.tot_org_carb, QuantityValue):
            self.tot_org_carb = QuantityValue(**as_dict(self.tot_org_carb))

        if self.tot_nitro_content is not None and not isinstance(self.tot_nitro_content, QuantityValue):
            self.tot_nitro_content = QuantityValue(**as_dict(self.tot_nitro_content))

        if self.conduc is not None and not isinstance(self.conduc, QuantityValue):
            self.conduc = QuantityValue(**as_dict(self.conduc))

        if self.turbidity is not None and not isinstance(self.turbidity, QuantityValue):
            self.turbidity = QuantityValue(**as_dict(self.turbidity))

        if self.size_frac_low is not None and not isinstance(self.size_frac_low, QuantityValue):
            self.size_frac_low = QuantityValue(**as_dict(self.size_frac_low))

        if self.size_frac_up is not None and not isinstance(self.size_frac_up, QuantityValue):
            self.size_frac_up = QuantityValue(**as_dict(self.size_frac_up))

        if self.ventilation_type is not None and not isinstance(self.ventilation_type, str):
            self.ventilation_type = str(self.ventilation_type)

        if self.wind_direction is not None and not isinstance(self.wind_direction, str):
            self.wind_direction = str(self.wind_direction)

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if self.host_phenotype is not None and not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self.ph is not None and not isinstance(self.ph, float):
            self.ph = float(self.ph)

        if self.ances_data is not None and not isinstance(self.ances_data, str):
            self.ances_data = str(self.ances_data)

        if self.growth_habit is not None and not isinstance(self.growth_habit, GrowthHabitEnum):
            self.growth_habit = GrowthHabitEnum(self.growth_habit)

        if self.host_genotype is not None and not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self.host_taxid is not None and not isinstance(self.host_taxid, str):
            self.host_taxid = str(self.host_taxid)

        if not isinstance(self.mechanical_damage, list):
            self.mechanical_damage = [self.mechanical_damage] if self.mechanical_damage is not None else []
        self.mechanical_damage = [v if isinstance(v, str) else str(v) for v in self.mechanical_damage]

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if self.root_cond is not None and not isinstance(self.root_cond, str):
            self.root_cond = str(self.root_cond)

        if self.root_med_ph is not None and not isinstance(self.root_med_ph, float):
            self.root_med_ph = float(self.root_med_ph)

        if not isinstance(self.tillage, list):
            self.tillage = [self.tillage] if self.tillage is not None else []
        self.tillage = [v if isinstance(v, TillageEnum) else TillageEnum(v) for v in self.tillage]

        if self.ph_meth is not None and not isinstance(self.ph_meth, str):
            self.ph_meth = str(self.ph_meth)

        if self.growth_medium is not None and not isinstance(self.growth_medium, str):
            self.growth_medium = str(self.growth_medium)

        if self.season is not None and not isinstance(self.season, str):
            self.season = str(self.season)

        if not isinstance(self.farm_water_source, list):
            self.farm_water_source = [self.farm_water_source] if self.farm_water_source is not None else []
        self.farm_water_source = [v if isinstance(v, FarmWaterSourceEnum) else FarmWaterSourceEnum(v) for v in self.farm_water_source]

        if self.plant_water_method is not None and not isinstance(self.plant_water_method, str):
            self.plant_water_method = str(self.plant_water_method)

        if not isinstance(self.air_PM_concen, list):
            self.air_PM_concen = [self.air_PM_concen] if self.air_PM_concen is not None else []
        self.air_PM_concen = [v if isinstance(v, str) else str(v) for v in self.air_PM_concen]

        if not isinstance(self.animal_feed_equip, list):
            self.animal_feed_equip = [self.animal_feed_equip] if self.animal_feed_equip is not None else []
        self.animal_feed_equip = [v if isinstance(v, str) else str(v) for v in self.animal_feed_equip]

        if not isinstance(self.animal_intrusion, list):
            self.animal_intrusion = [self.animal_intrusion] if self.animal_intrusion is not None else []
        self.animal_intrusion = [v if isinstance(v, str) else str(v) for v in self.animal_intrusion]

        if not isinstance(self.anim_water_method, list):
            self.anim_water_method = [self.anim_water_method] if self.anim_water_method is not None else []
        self.anim_water_method = [v if isinstance(v, str) else str(v) for v in self.anim_water_method]

        if self.crop_yield is not None and not isinstance(self.crop_yield, str):
            self.crop_yield = str(self.crop_yield)

        if self.cult_result is not None and not isinstance(self.cult_result, CultResultEnum):
            self.cult_result = CultResultEnum(self.cult_result)

        if not isinstance(self.cult_result_org, list):
            self.cult_result_org = [self.cult_result_org] if self.cult_result_org is not None else []
        self.cult_result_org = [v if isinstance(v, str) else str(v) for v in self.cult_result_org]

        if not isinstance(self.cult_target, list):
            self.cult_target = [self.cult_target] if self.cult_target is not None else []
        self.cult_target = [v if isinstance(v, str) else str(v) for v in self.cult_target]

        if self.plant_part_maturity is not None and not isinstance(self.plant_part_maturity, str):
            self.plant_part_maturity = str(self.plant_part_maturity)

        if not isinstance(self.adjacent_environment, list):
            self.adjacent_environment = [self.adjacent_environment] if self.adjacent_environment is not None else []
        self.adjacent_environment = [v if isinstance(v, str) else str(v) for v in self.adjacent_environment]

        if not isinstance(self.water_source_adjac, list):
            self.water_source_adjac = [self.water_source_adjac] if self.water_source_adjac is not None else []
        self.water_source_adjac = [v if isinstance(v, str) else str(v) for v in self.water_source_adjac]

        if not isinstance(self.farm_equip_shared, list):
            self.farm_equip_shared = [self.farm_equip_shared] if self.farm_equip_shared is not None else []
        self.farm_equip_shared = [v if isinstance(v, str) else str(v) for v in self.farm_equip_shared]

        if not isinstance(self.farm_equip_san, list):
            self.farm_equip_san = [self.farm_equip_san] if self.farm_equip_san is not None else []
        self.farm_equip_san = [v if isinstance(v, str) else str(v) for v in self.farm_equip_san]

        if self.farm_equip_san_freq is not None and not isinstance(self.farm_equip_san_freq, str):
            self.farm_equip_san_freq = str(self.farm_equip_san_freq)

        if not isinstance(self.farm_equip, list):
            self.farm_equip = [self.farm_equip] if self.farm_equip is not None else []
        self.farm_equip = [v if isinstance(v, str) else str(v) for v in self.farm_equip]

        if self.fertilizer_admin is not None and not isinstance(self.fertilizer_admin, str):
            self.fertilizer_admin = str(self.fertilizer_admin)

        if self.fertilizer_date is not None and not isinstance(self.fertilizer_date, XSDDate):
            self.fertilizer_date = XSDDate(self.fertilizer_date)

        if self.animal_group_size is not None and not isinstance(self.animal_group_size, int):
            self.animal_group_size = int(self.animal_group_size)

        if not isinstance(self.animal_diet, list):
            self.animal_diet = [self.animal_diet] if self.animal_diet is not None else []
        self.animal_diet = [v if isinstance(v, str) else str(v) for v in self.animal_diet]

        if not isinstance(self.food_contact_surf, list):
            self.food_contact_surf = [self.food_contact_surf] if self.food_contact_surf is not None else []
        self.food_contact_surf = [v if isinstance(v, str) else str(v) for v in self.food_contact_surf]

        if self.food_contain_wrap is not None and not isinstance(self.food_contain_wrap, str):
            self.food_contain_wrap = str(self.food_contain_wrap)

        if not isinstance(self.food_harvest_proc, list):
            self.food_harvest_proc = [self.food_harvest_proc] if self.food_harvest_proc is not None else []
        self.food_harvest_proc = [v if isinstance(v, str) else str(v) for v in self.food_harvest_proc]

        if not isinstance(self.food_pack_medium, list):
            self.food_pack_medium = [self.food_pack_medium] if self.food_pack_medium is not None else []
        self.food_pack_medium = [v if isinstance(v, str) else str(v) for v in self.food_pack_medium]

        if not isinstance(self.food_preserv_proc, list):
            self.food_preserv_proc = [self.food_preserv_proc] if self.food_preserv_proc is not None else []
        self.food_preserv_proc = [v if isinstance(v, str) else str(v) for v in self.food_preserv_proc]

        if not isinstance(self.food_prod_char, list):
            self.food_prod_char = [self.food_prod_char] if self.food_prod_char is not None else []
        self.food_prod_char = [v if isinstance(v, str) else str(v) for v in self.food_prod_char]

        if not isinstance(self.prod_label_claims, list):
            self.prod_label_claims = [self.prod_label_claims] if self.prod_label_claims is not None else []
        self.prod_label_claims = [v if isinstance(v, str) else str(v) for v in self.prod_label_claims]

        if not isinstance(self.food_trav_mode, list):
            self.food_trav_mode = [self.food_trav_mode] if self.food_trav_mode is not None else []
        self.food_trav_mode = [v if isinstance(v, str) else str(v) for v in self.food_trav_mode]

        if not isinstance(self.food_trav_vehic, list):
            self.food_trav_vehic = [self.food_trav_vehic] if self.food_trav_vehic is not None else []
        self.food_trav_vehic = [v if isinstance(v, str) else str(v) for v in self.food_trav_vehic]

        if self.food_source is not None and not isinstance(self.food_source, str):
            self.food_source = str(self.food_source)

        if not isinstance(self.food_treat_proc, list):
            self.food_treat_proc = [self.food_treat_proc] if self.food_treat_proc is not None else []
        self.food_treat_proc = [v if isinstance(v, str) else str(v) for v in self.food_treat_proc]

        if not isinstance(self.extr_weather_event, list):
            self.extr_weather_event = [self.extr_weather_event] if self.extr_weather_event is not None else []
        self.extr_weather_event = [v if isinstance(v, ExtrWeatherEventEnum) else ExtrWeatherEventEnum(v) for v in self.extr_weather_event]

        if not isinstance(self.date_extr_weath, list):
            self.date_extr_weath = [self.date_extr_weath] if self.date_extr_weath is not None else []
        self.date_extr_weath = [v if isinstance(v, XSDDate) else XSDDate(v) for v in self.date_extr_weath]

        if not isinstance(self.host_subspecf_genlin, list):
            self.host_subspecf_genlin = [self.host_subspecf_genlin] if self.host_subspecf_genlin is not None else []
        self.host_subspecf_genlin = [v if isinstance(v, str) else str(v) for v in self.host_subspecf_genlin]

        if not isinstance(self.intended_consumer, list):
            self.intended_consumer = [self.intended_consumer] if self.intended_consumer is not None else []
        self.intended_consumer = [v if isinstance(v, str) else str(v) for v in self.intended_consumer]

        if self.library_prep_kit is not None and not isinstance(self.library_prep_kit, str):
            self.library_prep_kit = str(self.library_prep_kit)

        if not isinstance(self.air_flow_impede, list):
            self.air_flow_impede = [self.air_flow_impede] if self.air_flow_impede is not None else []
        self.air_flow_impede = [v if isinstance(v, str) else str(v) for v in self.air_flow_impede]

        if not isinstance(self.lot_number, list):
            self.lot_number = [self.lot_number] if self.lot_number is not None else []
        self.lot_number = [v if isinstance(v, str) else str(v) for v in self.lot_number]

        if self.season_humidity is not None and not isinstance(self.season_humidity, QuantityValue):
            self.season_humidity = QuantityValue(**as_dict(self.season_humidity))

        if not isinstance(self.part_plant_animal, list):
            self.part_plant_animal = [self.part_plant_animal] if self.part_plant_animal is not None else []
        self.part_plant_animal = [v if isinstance(v, str) else str(v) for v in self.part_plant_animal]

        if self.plant_growth_med is not None and not isinstance(self.plant_growth_med, PlantGrowthMedEnum):
            self.plant_growth_med = PlantGrowthMedEnum(self.plant_growth_med)

        if not isinstance(self.plant_reprod_crop, list):
            self.plant_reprod_crop = [self.plant_reprod_crop] if self.plant_reprod_crop is not None else []
        self.plant_reprod_crop = [v if isinstance(v, PlantReprodCropEnum) else PlantReprodCropEnum(v) for v in self.plant_reprod_crop]

        if self.samp_purpose is not None and not isinstance(self.samp_purpose, str):
            self.samp_purpose = str(self.samp_purpose)

        if not isinstance(self.repository_name, list):
            self.repository_name = [self.repository_name] if self.repository_name is not None else []
        self.repository_name = [v if isinstance(v, str) else str(v) for v in self.repository_name]

        if not isinstance(self.samp_pooling, list):
            self.samp_pooling = [self.samp_pooling] if self.samp_pooling is not None else []
        self.samp_pooling = [v if isinstance(v, str) else str(v) for v in self.samp_pooling]

        if self.samp_source_mat_cat is not None and not isinstance(self.samp_source_mat_cat, str):
            self.samp_source_mat_cat = str(self.samp_source_mat_cat)

        if self.sequencing_kit is not None and not isinstance(self.sequencing_kit, str):
            self.sequencing_kit = str(self.sequencing_kit)

        if self.sequencing_location is not None and not isinstance(self.sequencing_location, str):
            self.sequencing_location = str(self.sequencing_location)

        if not isinstance(self.serovar_or_serotype, list):
            self.serovar_or_serotype = [self.serovar_or_serotype] if self.serovar_or_serotype is not None else []
        self.serovar_or_serotype = [v if isinstance(v, str) else str(v) for v in self.serovar_or_serotype]

        if self.soil_conductivity is not None and not isinstance(self.soil_conductivity, QuantityValue):
            self.soil_conductivity = QuantityValue(**as_dict(self.soil_conductivity))

        if self.soil_cover is not None and not isinstance(self.soil_cover, str):
            self.soil_cover = str(self.soil_cover)

        if self.soil_pH is not None and not isinstance(self.soil_pH, float):
            self.soil_pH = float(self.soil_pH)

        if self.rel_location is not None and not isinstance(self.rel_location, str):
            self.rel_location = str(self.rel_location)

        if self.soil_porosity is not None and not isinstance(self.soil_porosity, str):
            self.soil_porosity = str(self.soil_porosity)

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.soil_texture_class is not None and not isinstance(self.soil_texture_class, SoilTextureClassEnum):
            self.soil_texture_class = SoilTextureClassEnum(self.soil_texture_class)

        if self.soil_texture_meth is not None and not isinstance(self.soil_texture_meth, str):
            self.soil_texture_meth = str(self.soil_texture_meth)

        if self.soil_type is not None and not isinstance(self.soil_type, str):
            self.soil_type = str(self.soil_type)

        if not isinstance(self.spikein_org, list):
            self.spikein_org = [self.spikein_org] if self.spikein_org is not None else []
        self.spikein_org = [v if isinstance(v, str) else str(v) for v in self.spikein_org]

        if not isinstance(self.spikein_serovar, list):
            self.spikein_serovar = [self.spikein_serovar] if self.spikein_serovar is not None else []
        self.spikein_serovar = [v if isinstance(v, str) else str(v) for v in self.spikein_serovar]

        if not isinstance(self.spikein_growth_med, list):
            self.spikein_growth_med = [self.spikein_growth_med] if self.spikein_growth_med is not None else []
        self.spikein_growth_med = [v if isinstance(v, str) else str(v) for v in self.spikein_growth_med]

        if not isinstance(self.spikein_strain, list):
            self.spikein_strain = [self.spikein_strain] if self.spikein_strain is not None else []
        self.spikein_strain = [v if isinstance(v, str) else str(v) for v in self.spikein_strain]

        if not isinstance(self.spikein_antibiotic, list):
            self.spikein_antibiotic = [self.spikein_antibiotic] if self.spikein_antibiotic is not None else []
        self.spikein_antibiotic = [v if isinstance(v, str) else str(v) for v in self.spikein_antibiotic]

        if not isinstance(self.spikein_metal, list):
            self.spikein_metal = [self.spikein_metal] if self.spikein_metal is not None else []
        self.spikein_metal = [v if isinstance(v, str) else str(v) for v in self.spikein_metal]

        if self.timepoint is not None and not isinstance(self.timepoint, float):
            self.timepoint = float(self.timepoint)

        if self.water_frequency is not None and not isinstance(self.water_frequency, str):
            self.water_frequency = str(self.water_frequency)

        if self.water_pH is not None and not isinstance(self.water_pH, float):
            self.water_pH = float(self.water_pH)

        if not isinstance(self.water_source_shared, list):
            self.water_source_shared = [self.water_source_shared] if self.water_source_shared is not None else []
        self.water_source_shared = [v if isinstance(v, WaterSourceSharedEnum) else WaterSourceSharedEnum(v) for v in self.water_source_shared]

        if self.enrichment_protocol is not None and not isinstance(self.enrichment_protocol, str):
            self.enrichment_protocol = str(self.enrichment_protocol)

        if self.food_quality_date is not None and not isinstance(self.food_quality_date, str):
            self.food_quality_date = str(self.food_quality_date)

        if not isinstance(self.animal_housing, list):
            self.animal_housing = [self.animal_housing] if self.animal_housing is not None else []
        self.animal_housing = [v if isinstance(v, str) else str(v) for v in self.animal_housing]

        if self.cult_isol_date is not None and not isinstance(self.cult_isol_date, XSDDate):
            self.cult_isol_date = XSDDate(self.cult_isol_date)

        if not isinstance(self.food_clean_proc, list):
            self.food_clean_proc = [self.food_clean_proc] if self.food_clean_proc is not None else []
        self.food_clean_proc = [v if isinstance(v, FoodCleanProcEnum) else FoodCleanProcEnum(v) for v in self.food_clean_proc]

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.samp_size is not None and not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self.nucl_acid_ext is not None and not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self.samp_vol_we_dna_ext is not None and not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIGSEukaryote(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIGSEukaryote"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIGSEukaryote"
    class_name: ClassVar[str] = "food-farm environment MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIGSEukaryote

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIGSBacteria(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIGSBacteria"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIGSBacteria"
    class_name: ClassVar[str] = "food-farm environment MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIGSBacteria

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    isol_growth_condt: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIGSPlant(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package food-farm
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIGSPlant"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIGSPlant"
    class_name: ClassVar[str] = "food-farm environment MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIGSPlant

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIGSVirus(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIGSVirus"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIGSVirus"
    class_name: ClassVar[str] = "food-farm environment MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIGSVirus

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    propagation: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIGSOrg(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package food-farm
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIGSOrg"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIGSOrg"
    class_name: ClassVar[str] = "food-farm environment MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIGSOrg

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    assembly_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIMS(Food-farmEnvironment):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIMS"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIMS"
    class_name: ClassVar[str] = "food-farm environment MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIMS

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    assembly_name: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIMARKSSpecimen(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package food-farm
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIMARKSSpecimen"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIMARKSSpecimen"
    class_name: ClassVar[str] = "food-farm environment MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIMARKSSpecimen

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    target_gene: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    assembly_software: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIMARKSSurvey(Food-farmEnvironment):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package food-farm
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIMARKSSurvey"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIMARKSSurvey"
    class_name: ClassVar[str] = "food-farm environment MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIMARKSSurvey

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    isol_growth_condt: str = None
    target_gene: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    source_mat_id: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    target_subfragment: Optional[str] = None
    pcr_primers: Optional[str] = None
    pcr_cond: Optional[str] = None
    seq_quality_check: Optional[str] = None
    chimera_check: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.isol_growth_condt):
            self.MissingRequiredField("isol_growth_condt")
        if not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.target_subfragment is not None and not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self.pcr_primers is not None and not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self.pcr_cond is not None and not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.chimera_check is not None and not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMISAG(Food-farmEnvironment):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package food-farm
    environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMISAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMISAG"
    class_name: ClassVar[str] = "food-farm environment MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMISAG

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIMAG(Food-farmEnvironment):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIMAG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIMAG"
    class_name: ClassVar[str] = "food-farm environment MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIMAG

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Food-farmEnvironmentMIUVIG(Food-farmEnvironment):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    food-farm environment
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB["Food-farmEnvironmentMIUVIG"]
    class_class_curie: ClassVar[str] = "mixs.vocab:Food-farmEnvironmentMIUVIG"
    class_name: ClassVar[str] = "food-farm environment MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Food-farmEnvironmentMIUVIG

    lat_lon: str = None
    depth: Union[dict, "QuantityValue"] = None
    geo_loc_name: str = None
    collection_date: Union[str, XSDDate] = None
    env_broad_scale: str = None
    env_local_scale: str = None
    env_medium: str = None
    biotic_regm: str = None
    chem_administration: Union[str, List[str]] = None
    food_product_type: Union[str, List[str]] = None
    samp_type: str = None
    IFSAC_category: Union[str, List[str]] = None
    samp_name: str = None
    project_name: str = None
    seq_meth: str = None
    samp_taxon_id: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    assembly_software: str = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    source_mat_id: Optional[str] = None
    pathogenicity: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    specific_host: Optional[str] = None
    host_spec_range: Optional[int] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    samp_mat_process: Optional[str] = None
    size_frac: Optional[str] = None
    nucl_acid_amp: Optional[str] = None
    lib_size: Optional[int] = None
    lib_reads_seqd: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    lib_vector: Optional[str] = None
    lib_screen: Optional[str] = None
    mid: Optional[str] = None
    adapters: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_name: Optional[str] = None
    annot: Optional[str] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None
    sop: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.assembly_software):
            self.MissingRequiredField("assembly_software")
        if not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        if self.pathogenicity is not None and not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.specific_host is not None and not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self.host_spec_range is not None and not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.samp_mat_process is not None and not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.nucl_acid_amp is not None and not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_reads_seqd is not None and not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.lib_vector is not None and not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self.lib_screen is not None and not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self.mid is not None and not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self.adapters is not None and not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_name is not None and not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        super().__post_init__(**kwargs)


@dataclass
class Agriculture(YAMLRoot):
    """
    agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.Agriculture
    class_class_curie: ClassVar[str] = "mixs.vocab:Agriculture"
    class_name: ClassVar[str] = "agriculture"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.Agriculture

    temp: Union[dict, "QuantityValue"] = None
    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    lat_lon: Optional[str] = None
    depth: Optional[Union[dict, "QuantityValue"]] = None
    alt: Optional[Union[dict, "QuantityValue"]] = None
    elev: Optional[Union[dict, "QuantityValue"]] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    plant_growth_med: Optional[Union[str, "PlantGrowthMedEnum"]] = None
    soil_horizon: Optional[Union[str, "SoilHorizonEnum"]] = None
    photosynt_activ: Optional[Union[Union[dict, "QuantityValue"], List[Union[dict, "QuantityValue"]]]] = empty_list()
    photosynt_activ_meth: Optional[Union[str, List[str]]] = empty_list()
    samp_collect_method: Optional[str] = None
    enrichment_protocol: Optional[str] = None
    library_prep_kit: Optional[str] = None
    sequencing_location: Optional[str] = None
    soil_pH: Optional[float] = None
    soil_conductivity: Optional[Union[dict, "QuantityValue"]] = None
    rel_location: Optional[str] = None
    soil_cover: Optional[str] = None
    porosity: Optional[str] = None
    texture: Optional[Union[dict, "QuantityValue"]] = None
    texture_meth: Optional[str] = None
    host_symbiont: Optional[Union[str, List[str]]] = empty_list()
    pres_animal_insect: Optional[str] = None
    plant_water_method: Optional[str] = None
    anim_water_method: Optional[Union[str, List[str]]] = empty_list()
    farm_water_source: Optional[Union[Union[str, "FarmWaterSourceEnum"], List[Union[str, "FarmWaterSourceEnum"]]]] = empty_list()
    water_source_shared: Optional[Union[Union[str, "WaterSourceSharedEnum"], List[Union[str, "WaterSourceSharedEnum"]]]] = empty_list()
    water_pH: Optional[float] = None
    season: Optional[str] = None
    solar_irradiance: Optional[Union[dict, "QuantityValue"]] = None
    crop_yield: Optional[str] = None
    season_humidity: Optional[Union[dict, "QuantityValue"]] = None
    humidity: Optional[Union[dict, "QuantityValue"]] = None
    adjacent_environment: Optional[Union[str, List[str]]] = empty_list()
    food_prod: Optional[Union[str, List[str]]] = empty_list()
    lot_number: Optional[Union[str, List[str]]] = empty_list()
    fertilizer_admin: Optional[str] = None
    samp_stor_temp: Optional[Union[dict, "QuantityValue"]] = None
    food_trav_mode: Optional[Union[str, List[str]]] = empty_list()
    food_trav_vehic: Optional[Union[str, List[str]]] = empty_list()
    farm_equip_san: Optional[Union[str, List[str]]] = empty_list()
    farm_equip: Optional[Union[str, List[str]]] = empty_list()
    farm_equip_shared: Optional[Union[str, List[str]]] = empty_list()
    food_harvest_proc: Optional[Union[str, List[str]]] = empty_list()
    plant_struc: Optional[str] = None
    host_dry_mass: Optional[Union[dict, "QuantityValue"]] = None
    ances_data: Optional[str] = None
    genetic_mod: Optional[str] = None
    Food_Product_type: Optional[str] = None
    spikein_strain: Optional[Union[str, List[str]]] = empty_list()
    organism_count: Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]] = empty_list()
    size_frac_low: Optional[Union[dict, "QuantityValue"]] = None
    size_frac_up: Optional[Union[dict, "QuantityValue"]] = None
    cult_isol_date: Optional[Union[str, XSDDate]] = None
    samp_pooling: Optional[Union[str, List[str]]] = empty_list()
    root_med_macronutr: Optional[str] = None
    root_med_carbon: Optional[str] = None
    root_med_ph: Optional[float] = None
    water_temp_regm: Optional[Union[str, List[str]]] = empty_list()
    watering_regm: Optional[Union[str, List[str]]] = empty_list()
    standing_water_regm: Optional[Union[str, List[str]]] = empty_list()
    gaseous_environment: Optional[Union[str, List[str]]] = empty_list()
    fungicide_regm: Optional[Union[str, List[str]]] = empty_list()
    climate_environment: Optional[Union[str, List[str]]] = empty_list()
    herbicide_regm: Optional[Union[str, List[str]]] = empty_list()
    non_mineral_nutr_regm: Optional[Union[str, List[str]]] = empty_list()
    pesticide_regm: Optional[Union[str, List[str]]] = empty_list()
    ph_regm: Optional[Union[str, List[str]]] = empty_list()
    salt_regm: Optional[Union[str, List[str]]] = empty_list()
    season_environment: Optional[Union[str, List[str]]] = empty_list()
    perturbation: Optional[Union[str, List[str]]] = empty_list()
    host_subspecf_genlin: Optional[Union[str, List[str]]] = empty_list()
    plant_product: Optional[str] = None
    oxy_stat_samp: Optional[Union[str, "OxyStatSampEnum"]] = None
    assembly_quality: Optional[str] = None
    url: Optional[Union[str, List[str]]] = empty_list()
    fao_class: Optional[Union[str, "FaoClassEnum"]] = None
    local_class: Optional[str] = None
    local_class_meth: Optional[str] = None
    horizon: Optional[Union[str, "HorizonEnum"]] = None
    horizon_meth: Optional[str] = None
    link_class_info: Optional[str] = None
    previous_land_use: Optional[str] = None
    previous_land_use_meth: Optional[str] = None
    crop_rotation: Optional[str] = None
    agrochem_addition: Optional[Union[str, List[str]]] = empty_list()
    tillage: Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]] = empty_list()
    fire: Optional[Union[str, XSDDate]] = None
    flooding: Optional[Union[str, XSDDate]] = None
    extreme_event: Optional[Union[str, XSDDate]] = None
    link_climate_info: Optional[str] = None
    annual_temp: Optional[Union[dict, "QuantityValue"]] = None
    season_temp: Optional[Union[dict, "QuantityValue"]] = None
    annual_precpt: Optional[Union[dict, "QuantityValue"]] = None
    season_precpt: Optional[Union[dict, "QuantityValue"]] = None
    cur_land_use: Optional[Union[str, "CurLandUseEnum"]] = None
    slope_gradient: Optional[Union[dict, "QuantityValue"]] = None
    slope_aspect: Optional[Union[dict, "QuantityValue"]] = None
    profile_position: Optional[Union[str, "ProfilePositionEnum"]] = None
    drainage_class: Optional[Union[str, "DrainageClassEnum"]] = None
    ph_meth: Optional[str] = None
    cur_vegetation: Optional[str] = None
    cur_vegetation_meth: Optional[str] = None
    tot_org_carb: Optional[Union[dict, "QuantityValue"]] = None
    tot_org_c_meth: Optional[str] = None
    tot_nitro: Optional[Union[dict, "QuantityValue"]] = None
    tot_n_meth: Optional[str] = None
    heavy_metals_meth: Optional[str] = None
    tot_car: Optional[Union[dict, "QuantityValue"]] = None
    tot_phos: Optional[Union[dict, "QuantityValue"]] = None
    misc_param: Optional[Union[str, List[str]]] = empty_list()
    host_disease_stat: Optional[str] = None
    biotic_relationship: Optional[Union[str, "BioticRelationshipEnum"]] = None
    isol_growth_condt: Optional[str] = None
    trophic_level: Optional[Union[str, "TrophicLevelEnum"]] = None
    lib_size: Optional[int] = None
    lib_layout: Optional[Union[str, "LibLayoutEnum"]] = None
    seq_quality_check: Optional[str] = None
    assembly_software: Optional[str] = None
    annot: Optional[str] = None
    sop: Optional[str] = None
    source_mat_id: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.temp):
            self.MissingRequiredField("temp")
        if not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self._is_empty(self.chem_administration):
            self.MissingRequiredField("chem_administration")
        if not isinstance(self.chem_administration, list):
            self.chem_administration = [self.chem_administration] if self.chem_administration is not None else []
        self.chem_administration = [v if isinstance(v, str) else str(v) for v in self.chem_administration]

        if self._is_empty(self.Food_source):
            self.MissingRequiredField("Food_source")
        if not isinstance(self.Food_source, str):
            self.Food_source = str(self.Food_source)

        if self._is_empty(self.depth):
            self.MissingRequiredField("depth")
        if not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self._is_empty(self.samp_store_dur):
            self.MissingRequiredField("samp_store_dur")
        if not isinstance(self.samp_store_dur, str):
            self.samp_store_dur = str(self.samp_store_dur)

        if self._is_empty(self.samp_store_loc):
            self.MissingRequiredField("samp_store_loc")
        if not isinstance(self.samp_store_loc, str):
            self.samp_store_loc = str(self.samp_store_loc)

        if self._is_empty(self.samp_collect_device):
            self.MissingRequiredField("samp_collect_device")
        if not isinstance(self.samp_collect_device, str):
            self.samp_collect_device = str(self.samp_collect_device)

        if self._is_empty(self.host_age):
            self.MissingRequiredField("host_age")
        if not isinstance(self.host_age, QuantityValue):
            self.host_age = QuantityValue(**as_dict(self.host_age))

        if self._is_empty(self.host_common_name):
            self.MissingRequiredField("host_common_name")
        if not isinstance(self.host_common_name, str):
            self.host_common_name = str(self.host_common_name)

        if self._is_empty(self.host_genotype):
            self.MissingRequiredField("host_genotype")
        if not isinstance(self.host_genotype, str):
            self.host_genotype = str(self.host_genotype)

        if self._is_empty(self.host_height):
            self.MissingRequiredField("host_height")
        if not isinstance(self.host_height, QuantityValue):
            self.host_height = QuantityValue(**as_dict(self.host_height))

        if self._is_empty(self.host_length):
            self.MissingRequiredField("host_length")
        if not isinstance(self.host_length, QuantityValue):
            self.host_length = QuantityValue(**as_dict(self.host_length))

        if self._is_empty(self.host_life_stage):
            self.MissingRequiredField("host_life_stage")
        if not isinstance(self.host_life_stage, str):
            self.host_life_stage = str(self.host_life_stage)

        if self._is_empty(self.host_phenotype):
            self.MissingRequiredField("host_phenotype")
        if not isinstance(self.host_phenotype, str):
            self.host_phenotype = str(self.host_phenotype)

        if self._is_empty(self.host_taxid):
            self.MissingRequiredField("host_taxid")
        if not isinstance(self.host_taxid, str):
            self.host_taxid = str(self.host_taxid)

        if self._is_empty(self.host_tot_mass):
            self.MissingRequiredField("host_tot_mass")
        if not isinstance(self.host_tot_mass, QuantityValue):
            self.host_tot_mass = QuantityValue(**as_dict(self.host_tot_mass))

        if self._is_empty(self.soil_type):
            self.MissingRequiredField("soil_type")
        if not isinstance(self.soil_type, str):
            self.soil_type = str(self.soil_type)

        if self._is_empty(self.soil_type_meth):
            self.MissingRequiredField("soil_type_meth")
        if not isinstance(self.soil_type_meth, str):
            self.soil_type_meth = str(self.soil_type_meth)

        if self._is_empty(self.store_cond):
            self.MissingRequiredField("store_cond")
        if not isinstance(self.store_cond, str):
            self.store_cond = str(self.store_cond)

        if self._is_empty(self.microbial_biomass):
            self.MissingRequiredField("microbial_biomass")
        if not isinstance(self.microbial_biomass, QuantityValue):
            self.microbial_biomass = QuantityValue(**as_dict(self.microbial_biomass))

        if self._is_empty(self.microbial_biomass_meth):
            self.MissingRequiredField("microbial_biomass_meth")
        if not isinstance(self.microbial_biomass_meth, str):
            self.microbial_biomass_meth = str(self.microbial_biomass_meth)

        if self._is_empty(self.sieving):
            self.MissingRequiredField("sieving")
        if not isinstance(self.sieving, str):
            self.sieving = str(self.sieving)

        if self._is_empty(self.pool_dna_extracts):
            self.MissingRequiredField("pool_dna_extracts")
        if not isinstance(self.pool_dna_extracts, str):
            self.pool_dna_extracts = str(self.pool_dna_extracts)

        if self._is_empty(self.specific_host):
            self.MissingRequiredField("specific_host")
        if not isinstance(self.specific_host, str):
            self.specific_host = str(self.specific_host)

        if self._is_empty(self.pathogenicity):
            self.MissingRequiredField("pathogenicity")
        if not isinstance(self.pathogenicity, str):
            self.pathogenicity = str(self.pathogenicity)

        if self._is_empty(self.samp_mat_process):
            self.MissingRequiredField("samp_mat_process")
        if not isinstance(self.samp_mat_process, str):
            self.samp_mat_process = str(self.samp_mat_process)

        if self._is_empty(self.host_spec_range):
            self.MissingRequiredField("host_spec_range")
        if not isinstance(self.host_spec_range, int):
            self.host_spec_range = int(self.host_spec_range)

        if self._is_empty(self.samp_size):
            self.MissingRequiredField("samp_size")
        if not isinstance(self.samp_size, QuantityValue):
            self.samp_size = QuantityValue(**as_dict(self.samp_size))

        if self._is_empty(self.seq_meth):
            self.MissingRequiredField("seq_meth")
        if not isinstance(self.seq_meth, str):
            self.seq_meth = str(self.seq_meth)

        if self._is_empty(self.samp_vol_we_dna_ext):
            self.MissingRequiredField("samp_vol_we_dna_ext")
        if not isinstance(self.samp_vol_we_dna_ext, QuantityValue):
            self.samp_vol_we_dna_ext = QuantityValue(**as_dict(self.samp_vol_we_dna_ext))

        if self._is_empty(self.pcr_primers):
            self.MissingRequiredField("pcr_primers")
        if not isinstance(self.pcr_primers, str):
            self.pcr_primers = str(self.pcr_primers)

        if self._is_empty(self.nucl_acid_ext):
            self.MissingRequiredField("nucl_acid_ext")
        if not isinstance(self.nucl_acid_ext, str):
            self.nucl_acid_ext = str(self.nucl_acid_ext)

        if self._is_empty(self.nucl_acid_amp):
            self.MissingRequiredField("nucl_acid_amp")
        if not isinstance(self.nucl_acid_amp, str):
            self.nucl_acid_amp = str(self.nucl_acid_amp)

        if self._is_empty(self.lib_reads_seqd):
            self.MissingRequiredField("lib_reads_seqd")
        if not isinstance(self.lib_reads_seqd, int):
            self.lib_reads_seqd = int(self.lib_reads_seqd)

        if self._is_empty(self.lib_vector):
            self.MissingRequiredField("lib_vector")
        if not isinstance(self.lib_vector, str):
            self.lib_vector = str(self.lib_vector)

        if self._is_empty(self.lib_screen):
            self.MissingRequiredField("lib_screen")
        if not isinstance(self.lib_screen, str):
            self.lib_screen = str(self.lib_screen)

        if self._is_empty(self.target_gene):
            self.MissingRequiredField("target_gene")
        if not isinstance(self.target_gene, str):
            self.target_gene = str(self.target_gene)

        if self._is_empty(self.target_subfragment):
            self.MissingRequiredField("target_subfragment")
        if not isinstance(self.target_subfragment, str):
            self.target_subfragment = str(self.target_subfragment)

        if self._is_empty(self.mid):
            self.MissingRequiredField("mid")
        if not isinstance(self.mid, str):
            self.mid = str(self.mid)

        if self._is_empty(self.adapters):
            self.MissingRequiredField("adapters")
        if not isinstance(self.adapters, str):
            self.adapters = str(self.adapters)

        if self._is_empty(self.pcr_cond):
            self.MissingRequiredField("pcr_cond")
        if not isinstance(self.pcr_cond, str):
            self.pcr_cond = str(self.pcr_cond)

        if self._is_empty(self.chimera_check):
            self.MissingRequiredField("chimera_check")
        if not isinstance(self.chimera_check, str):
            self.chimera_check = str(self.chimera_check)

        if self._is_empty(self.assembly_name):
            self.MissingRequiredField("assembly_name")
        if not isinstance(self.assembly_name, str):
            self.assembly_name = str(self.assembly_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.depth is not None and not isinstance(self.depth, QuantityValue):
            self.depth = QuantityValue(**as_dict(self.depth))

        if self.alt is not None and not isinstance(self.alt, QuantityValue):
            self.alt = QuantityValue(**as_dict(self.alt))

        if self.elev is not None and not isinstance(self.elev, QuantityValue):
            self.elev = QuantityValue(**as_dict(self.elev))

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.plant_growth_med is not None and not isinstance(self.plant_growth_med, PlantGrowthMedEnum):
            self.plant_growth_med = PlantGrowthMedEnum(self.plant_growth_med)

        if self.soil_horizon is not None and not isinstance(self.soil_horizon, SoilHorizonEnum):
            self.soil_horizon = SoilHorizonEnum(self.soil_horizon)

        if not isinstance(self.photosynt_activ, list):
            self.photosynt_activ = [self.photosynt_activ] if self.photosynt_activ is not None else []
        self.photosynt_activ = [v if isinstance(v, QuantityValue) else QuantityValue(**as_dict(v)) for v in self.photosynt_activ]

        if not isinstance(self.photosynt_activ_meth, list):
            self.photosynt_activ_meth = [self.photosynt_activ_meth] if self.photosynt_activ_meth is not None else []
        self.photosynt_activ_meth = [v if isinstance(v, str) else str(v) for v in self.photosynt_activ_meth]

        if self.samp_collect_method is not None and not isinstance(self.samp_collect_method, str):
            self.samp_collect_method = str(self.samp_collect_method)

        if self.enrichment_protocol is not None and not isinstance(self.enrichment_protocol, str):
            self.enrichment_protocol = str(self.enrichment_protocol)

        if self.library_prep_kit is not None and not isinstance(self.library_prep_kit, str):
            self.library_prep_kit = str(self.library_prep_kit)

        if self.sequencing_location is not None and not isinstance(self.sequencing_location, str):
            self.sequencing_location = str(self.sequencing_location)

        if self.temp is not None and not isinstance(self.temp, QuantityValue):
            self.temp = QuantityValue(**as_dict(self.temp))

        if self.soil_pH is not None and not isinstance(self.soil_pH, float):
            self.soil_pH = float(self.soil_pH)

        if self.soil_conductivity is not None and not isinstance(self.soil_conductivity, QuantityValue):
            self.soil_conductivity = QuantityValue(**as_dict(self.soil_conductivity))

        if self.rel_location is not None and not isinstance(self.rel_location, str):
            self.rel_location = str(self.rel_location)

        if self.soil_cover is not None and not isinstance(self.soil_cover, str):
            self.soil_cover = str(self.soil_cover)

        if self.porosity is not None and not isinstance(self.porosity, str):
            self.porosity = str(self.porosity)

        if self.texture is not None and not isinstance(self.texture, QuantityValue):
            self.texture = QuantityValue(**as_dict(self.texture))

        if self.texture_meth is not None and not isinstance(self.texture_meth, str):
            self.texture_meth = str(self.texture_meth)

        if not isinstance(self.host_symbiont, list):
            self.host_symbiont = [self.host_symbiont] if self.host_symbiont is not None else []
        self.host_symbiont = [v if isinstance(v, str) else str(v) for v in self.host_symbiont]

        if self.pres_animal_insect is not None and not isinstance(self.pres_animal_insect, str):
            self.pres_animal_insect = str(self.pres_animal_insect)

        if self.plant_water_method is not None and not isinstance(self.plant_water_method, str):
            self.plant_water_method = str(self.plant_water_method)

        if not isinstance(self.anim_water_method, list):
            self.anim_water_method = [self.anim_water_method] if self.anim_water_method is not None else []
        self.anim_water_method = [v if isinstance(v, str) else str(v) for v in self.anim_water_method]

        if not isinstance(self.farm_water_source, list):
            self.farm_water_source = [self.farm_water_source] if self.farm_water_source is not None else []
        self.farm_water_source = [v if isinstance(v, FarmWaterSourceEnum) else FarmWaterSourceEnum(v) for v in self.farm_water_source]

        if not isinstance(self.water_source_shared, list):
            self.water_source_shared = [self.water_source_shared] if self.water_source_shared is not None else []
        self.water_source_shared = [v if isinstance(v, WaterSourceSharedEnum) else WaterSourceSharedEnum(v) for v in self.water_source_shared]

        if self.water_pH is not None and not isinstance(self.water_pH, float):
            self.water_pH = float(self.water_pH)

        if self.season is not None and not isinstance(self.season, str):
            self.season = str(self.season)

        if self.solar_irradiance is not None and not isinstance(self.solar_irradiance, QuantityValue):
            self.solar_irradiance = QuantityValue(**as_dict(self.solar_irradiance))

        if self.crop_yield is not None and not isinstance(self.crop_yield, str):
            self.crop_yield = str(self.crop_yield)

        if self.season_humidity is not None and not isinstance(self.season_humidity, QuantityValue):
            self.season_humidity = QuantityValue(**as_dict(self.season_humidity))

        if self.humidity is not None and not isinstance(self.humidity, QuantityValue):
            self.humidity = QuantityValue(**as_dict(self.humidity))

        if not isinstance(self.adjacent_environment, list):
            self.adjacent_environment = [self.adjacent_environment] if self.adjacent_environment is not None else []
        self.adjacent_environment = [v if isinstance(v, str) else str(v) for v in self.adjacent_environment]

        if not isinstance(self.food_prod, list):
            self.food_prod = [self.food_prod] if self.food_prod is not None else []
        self.food_prod = [v if isinstance(v, str) else str(v) for v in self.food_prod]

        if not isinstance(self.lot_number, list):
            self.lot_number = [self.lot_number] if self.lot_number is not None else []
        self.lot_number = [v if isinstance(v, str) else str(v) for v in self.lot_number]

        if self.fertilizer_admin is not None and not isinstance(self.fertilizer_admin, str):
            self.fertilizer_admin = str(self.fertilizer_admin)

        if self.samp_stor_temp is not None and not isinstance(self.samp_stor_temp, QuantityValue):
            self.samp_stor_temp = QuantityValue(**as_dict(self.samp_stor_temp))

        if not isinstance(self.food_trav_mode, list):
            self.food_trav_mode = [self.food_trav_mode] if self.food_trav_mode is not None else []
        self.food_trav_mode = [v if isinstance(v, str) else str(v) for v in self.food_trav_mode]

        if not isinstance(self.food_trav_vehic, list):
            self.food_trav_vehic = [self.food_trav_vehic] if self.food_trav_vehic is not None else []
        self.food_trav_vehic = [v if isinstance(v, str) else str(v) for v in self.food_trav_vehic]

        if not isinstance(self.farm_equip_san, list):
            self.farm_equip_san = [self.farm_equip_san] if self.farm_equip_san is not None else []
        self.farm_equip_san = [v if isinstance(v, str) else str(v) for v in self.farm_equip_san]

        if not isinstance(self.farm_equip, list):
            self.farm_equip = [self.farm_equip] if self.farm_equip is not None else []
        self.farm_equip = [v if isinstance(v, str) else str(v) for v in self.farm_equip]

        if not isinstance(self.farm_equip_shared, list):
            self.farm_equip_shared = [self.farm_equip_shared] if self.farm_equip_shared is not None else []
        self.farm_equip_shared = [v if isinstance(v, str) else str(v) for v in self.farm_equip_shared]

        if not isinstance(self.food_harvest_proc, list):
            self.food_harvest_proc = [self.food_harvest_proc] if self.food_harvest_proc is not None else []
        self.food_harvest_proc = [v if isinstance(v, str) else str(v) for v in self.food_harvest_proc]

        if self.plant_struc is not None and not isinstance(self.plant_struc, str):
            self.plant_struc = str(self.plant_struc)

        if self.host_dry_mass is not None and not isinstance(self.host_dry_mass, QuantityValue):
            self.host_dry_mass = QuantityValue(**as_dict(self.host_dry_mass))

        if self.ances_data is not None and not isinstance(self.ances_data, str):
            self.ances_data = str(self.ances_data)

        if self.genetic_mod is not None and not isinstance(self.genetic_mod, str):
            self.genetic_mod = str(self.genetic_mod)

        if self.Food_Product_type is not None and not isinstance(self.Food_Product_type, str):
            self.Food_Product_type = str(self.Food_Product_type)

        if not isinstance(self.spikein_strain, list):
            self.spikein_strain = [self.spikein_strain] if self.spikein_strain is not None else []
        self.spikein_strain = [v if isinstance(v, str) else str(v) for v in self.spikein_strain]

        if not isinstance(self.organism_count, list):
            self.organism_count = [self.organism_count] if self.organism_count is not None else []
        self.organism_count = [v if isinstance(v, OrganismCountEnum) else OrganismCountEnum(v) for v in self.organism_count]

        if self.size_frac_low is not None and not isinstance(self.size_frac_low, QuantityValue):
            self.size_frac_low = QuantityValue(**as_dict(self.size_frac_low))

        if self.size_frac_up is not None and not isinstance(self.size_frac_up, QuantityValue):
            self.size_frac_up = QuantityValue(**as_dict(self.size_frac_up))

        if self.cult_isol_date is not None and not isinstance(self.cult_isol_date, XSDDate):
            self.cult_isol_date = XSDDate(self.cult_isol_date)

        if not isinstance(self.samp_pooling, list):
            self.samp_pooling = [self.samp_pooling] if self.samp_pooling is not None else []
        self.samp_pooling = [v if isinstance(v, str) else str(v) for v in self.samp_pooling]

        if self.root_med_macronutr is not None and not isinstance(self.root_med_macronutr, str):
            self.root_med_macronutr = str(self.root_med_macronutr)

        if self.root_med_carbon is not None and not isinstance(self.root_med_carbon, str):
            self.root_med_carbon = str(self.root_med_carbon)

        if self.root_med_ph is not None and not isinstance(self.root_med_ph, float):
            self.root_med_ph = float(self.root_med_ph)

        if not isinstance(self.water_temp_regm, list):
            self.water_temp_regm = [self.water_temp_regm] if self.water_temp_regm is not None else []
        self.water_temp_regm = [v if isinstance(v, str) else str(v) for v in self.water_temp_regm]

        if not isinstance(self.watering_regm, list):
            self.watering_regm = [self.watering_regm] if self.watering_regm is not None else []
        self.watering_regm = [v if isinstance(v, str) else str(v) for v in self.watering_regm]

        if not isinstance(self.standing_water_regm, list):
            self.standing_water_regm = [self.standing_water_regm] if self.standing_water_regm is not None else []
        self.standing_water_regm = [v if isinstance(v, str) else str(v) for v in self.standing_water_regm]

        if not isinstance(self.gaseous_environment, list):
            self.gaseous_environment = [self.gaseous_environment] if self.gaseous_environment is not None else []
        self.gaseous_environment = [v if isinstance(v, str) else str(v) for v in self.gaseous_environment]

        if not isinstance(self.fungicide_regm, list):
            self.fungicide_regm = [self.fungicide_regm] if self.fungicide_regm is not None else []
        self.fungicide_regm = [v if isinstance(v, str) else str(v) for v in self.fungicide_regm]

        if not isinstance(self.climate_environment, list):
            self.climate_environment = [self.climate_environment] if self.climate_environment is not None else []
        self.climate_environment = [v if isinstance(v, str) else str(v) for v in self.climate_environment]

        if not isinstance(self.herbicide_regm, list):
            self.herbicide_regm = [self.herbicide_regm] if self.herbicide_regm is not None else []
        self.herbicide_regm = [v if isinstance(v, str) else str(v) for v in self.herbicide_regm]

        if not isinstance(self.non_mineral_nutr_regm, list):
            self.non_mineral_nutr_regm = [self.non_mineral_nutr_regm] if self.non_mineral_nutr_regm is not None else []
        self.non_mineral_nutr_regm = [v if isinstance(v, str) else str(v) for v in self.non_mineral_nutr_regm]

        if not isinstance(self.pesticide_regm, list):
            self.pesticide_regm = [self.pesticide_regm] if self.pesticide_regm is not None else []
        self.pesticide_regm = [v if isinstance(v, str) else str(v) for v in self.pesticide_regm]

        if not isinstance(self.ph_regm, list):
            self.ph_regm = [self.ph_regm] if self.ph_regm is not None else []
        self.ph_regm = [v if isinstance(v, str) else str(v) for v in self.ph_regm]

        if not isinstance(self.salt_regm, list):
            self.salt_regm = [self.salt_regm] if self.salt_regm is not None else []
        self.salt_regm = [v if isinstance(v, str) else str(v) for v in self.salt_regm]

        if not isinstance(self.season_environment, list):
            self.season_environment = [self.season_environment] if self.season_environment is not None else []
        self.season_environment = [v if isinstance(v, str) else str(v) for v in self.season_environment]

        if not isinstance(self.perturbation, list):
            self.perturbation = [self.perturbation] if self.perturbation is not None else []
        self.perturbation = [v if isinstance(v, str) else str(v) for v in self.perturbation]

        if not isinstance(self.host_subspecf_genlin, list):
            self.host_subspecf_genlin = [self.host_subspecf_genlin] if self.host_subspecf_genlin is not None else []
        self.host_subspecf_genlin = [v if isinstance(v, str) else str(v) for v in self.host_subspecf_genlin]

        if self.plant_product is not None and not isinstance(self.plant_product, str):
            self.plant_product = str(self.plant_product)

        if self.oxy_stat_samp is not None and not isinstance(self.oxy_stat_samp, OxyStatSampEnum):
            self.oxy_stat_samp = OxyStatSampEnum(self.oxy_stat_samp)

        if self.assembly_quality is not None and not isinstance(self.assembly_quality, str):
            self.assembly_quality = str(self.assembly_quality)

        if not isinstance(self.url, list):
            self.url = [self.url] if self.url is not None else []
        self.url = [v if isinstance(v, str) else str(v) for v in self.url]

        if self.fao_class is not None and not isinstance(self.fao_class, FaoClassEnum):
            self.fao_class = FaoClassEnum(self.fao_class)

        if self.local_class is not None and not isinstance(self.local_class, str):
            self.local_class = str(self.local_class)

        if self.local_class_meth is not None and not isinstance(self.local_class_meth, str):
            self.local_class_meth = str(self.local_class_meth)

        if self.horizon is not None and not isinstance(self.horizon, HorizonEnum):
            self.horizon = HorizonEnum(self.horizon)

        if self.horizon_meth is not None and not isinstance(self.horizon_meth, str):
            self.horizon_meth = str(self.horizon_meth)

        if self.link_class_info is not None and not isinstance(self.link_class_info, str):
            self.link_class_info = str(self.link_class_info)

        if self.previous_land_use is not None and not isinstance(self.previous_land_use, str):
            self.previous_land_use = str(self.previous_land_use)

        if self.previous_land_use_meth is not None and not isinstance(self.previous_land_use_meth, str):
            self.previous_land_use_meth = str(self.previous_land_use_meth)

        if self.crop_rotation is not None and not isinstance(self.crop_rotation, str):
            self.crop_rotation = str(self.crop_rotation)

        if not isinstance(self.agrochem_addition, list):
            self.agrochem_addition = [self.agrochem_addition] if self.agrochem_addition is not None else []
        self.agrochem_addition = [v if isinstance(v, str) else str(v) for v in self.agrochem_addition]

        if not isinstance(self.tillage, list):
            self.tillage = [self.tillage] if self.tillage is not None else []
        self.tillage = [v if isinstance(v, TillageEnum) else TillageEnum(v) for v in self.tillage]

        if self.fire is not None and not isinstance(self.fire, XSDDate):
            self.fire = XSDDate(self.fire)

        if self.flooding is not None and not isinstance(self.flooding, XSDDate):
            self.flooding = XSDDate(self.flooding)

        if self.extreme_event is not None and not isinstance(self.extreme_event, XSDDate):
            self.extreme_event = XSDDate(self.extreme_event)

        if self.link_climate_info is not None and not isinstance(self.link_climate_info, str):
            self.link_climate_info = str(self.link_climate_info)

        if self.annual_temp is not None and not isinstance(self.annual_temp, QuantityValue):
            self.annual_temp = QuantityValue(**as_dict(self.annual_temp))

        if self.season_temp is not None and not isinstance(self.season_temp, QuantityValue):
            self.season_temp = QuantityValue(**as_dict(self.season_temp))

        if self.annual_precpt is not None and not isinstance(self.annual_precpt, QuantityValue):
            self.annual_precpt = QuantityValue(**as_dict(self.annual_precpt))

        if self.season_precpt is not None and not isinstance(self.season_precpt, QuantityValue):
            self.season_precpt = QuantityValue(**as_dict(self.season_precpt))

        if self.cur_land_use is not None and not isinstance(self.cur_land_use, CurLandUseEnum):
            self.cur_land_use = CurLandUseEnum(self.cur_land_use)

        if self.slope_gradient is not None and not isinstance(self.slope_gradient, QuantityValue):
            self.slope_gradient = QuantityValue(**as_dict(self.slope_gradient))

        if self.slope_aspect is not None and not isinstance(self.slope_aspect, QuantityValue):
            self.slope_aspect = QuantityValue(**as_dict(self.slope_aspect))

        if self.profile_position is not None and not isinstance(self.profile_position, ProfilePositionEnum):
            self.profile_position = ProfilePositionEnum(self.profile_position)

        if self.drainage_class is not None and not isinstance(self.drainage_class, DrainageClassEnum):
            self.drainage_class = DrainageClassEnum(self.drainage_class)

        if self.ph_meth is not None and not isinstance(self.ph_meth, str):
            self.ph_meth = str(self.ph_meth)

        if self.cur_vegetation is not None and not isinstance(self.cur_vegetation, str):
            self.cur_vegetation = str(self.cur_vegetation)

        if self.cur_vegetation_meth is not None and not isinstance(self.cur_vegetation_meth, str):
            self.cur_vegetation_meth = str(self.cur_vegetation_meth)

        if self.tot_org_carb is not None and not isinstance(self.tot_org_carb, QuantityValue):
            self.tot_org_carb = QuantityValue(**as_dict(self.tot_org_carb))

        if self.tot_org_c_meth is not None and not isinstance(self.tot_org_c_meth, str):
            self.tot_org_c_meth = str(self.tot_org_c_meth)

        if self.tot_nitro is not None and not isinstance(self.tot_nitro, QuantityValue):
            self.tot_nitro = QuantityValue(**as_dict(self.tot_nitro))

        if self.tot_n_meth is not None and not isinstance(self.tot_n_meth, str):
            self.tot_n_meth = str(self.tot_n_meth)

        if self.heavy_metals_meth is not None and not isinstance(self.heavy_metals_meth, str):
            self.heavy_metals_meth = str(self.heavy_metals_meth)

        if self.tot_car is not None and not isinstance(self.tot_car, QuantityValue):
            self.tot_car = QuantityValue(**as_dict(self.tot_car))

        if self.tot_phos is not None and not isinstance(self.tot_phos, QuantityValue):
            self.tot_phos = QuantityValue(**as_dict(self.tot_phos))

        if not isinstance(self.misc_param, list):
            self.misc_param = [self.misc_param] if self.misc_param is not None else []
        self.misc_param = [v if isinstance(v, str) else str(v) for v in self.misc_param]

        if self.host_disease_stat is not None and not isinstance(self.host_disease_stat, str):
            self.host_disease_stat = str(self.host_disease_stat)

        if self.biotic_relationship is not None and not isinstance(self.biotic_relationship, BioticRelationshipEnum):
            self.biotic_relationship = BioticRelationshipEnum(self.biotic_relationship)

        if self.isol_growth_condt is not None and not isinstance(self.isol_growth_condt, str):
            self.isol_growth_condt = str(self.isol_growth_condt)

        if self.trophic_level is not None and not isinstance(self.trophic_level, TrophicLevelEnum):
            self.trophic_level = TrophicLevelEnum(self.trophic_level)

        if self.lib_size is not None and not isinstance(self.lib_size, int):
            self.lib_size = int(self.lib_size)

        if self.lib_layout is not None and not isinstance(self.lib_layout, LibLayoutEnum):
            self.lib_layout = LibLayoutEnum(self.lib_layout)

        if self.seq_quality_check is not None and not isinstance(self.seq_quality_check, str):
            self.seq_quality_check = str(self.seq_quality_check)

        if self.assembly_software is not None and not isinstance(self.assembly_software, str):
            self.assembly_software = str(self.assembly_software)

        if self.annot is not None and not isinstance(self.annot, str):
            self.annot = str(self.annot)

        if self.sop is not None and not isinstance(self.sop, str):
            self.sop = str(self.sop)

        if self.source_mat_id is not None and not isinstance(self.source_mat_id, str):
            self.source_mat_id = str(self.source_mat_id)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIGSEukaryote(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: eukaryote with environmental package
    agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSEukaryote
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIGSEukaryote"
    class_name: ClassVar[str] = "agriculture MIGS eukaryote"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSEukaryote

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    ploidy: Optional[str] = None
    num_replicons: Optional[int] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    propagation: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.ploidy is not None and not isinstance(self.ploidy, str):
            self.ploidy = str(self.ploidy)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.propagation is not None and not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIGSBacteria(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSBacteria
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIGSBacteria"
    class_name: ClassVar[str] = "agriculture MIGS bacteria"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSBacteria

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    num_replicons: int = None
    ref_biomaterial: str = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    number_contig: int = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    encoded_traits: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.num_replicons):
            self.MissingRequiredField("num_replicons")
        if not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self._is_empty(self.ref_biomaterial):
            self.MissingRequiredField("ref_biomaterial")
        if not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIGSPlant(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: plant with environmental package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSPlant
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIGSPlant"
    class_name: ClassVar[str] = "agriculture MIGS plant"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSPlant

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    propagation: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIGSVirus(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: cultured bacteria/archaea with environmental
    package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSVirus
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIGSVirus"
    class_name: ClassVar[str] = "agriculture MIGS virus"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSVirus

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    propagation: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    num_replicons: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    encoded_traits: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    virus_enrich_appr: Optional[Union[str, "VirusEnrichApprEnum"]] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.propagation):
            self.MissingRequiredField("propagation")
        if not isinstance(self.propagation, str):
            self.propagation = str(self.propagation)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.num_replicons is not None and not isinstance(self.num_replicons, int):
            self.num_replicons = int(self.num_replicons)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.encoded_traits is not None and not isinstance(self.encoded_traits, str):
            self.encoded_traits = str(self.encoded_traits)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.virus_enrich_appr is not None and not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIGSOrg(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Genome Sequence: org with environmental package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSOrg
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIGSOrg"
    class_name: ClassVar[str] = "agriculture MIGS org"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIGSOrg

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIMS(Agriculture):
    """
    Combinatorial checklist Metagenome or Environmental with environmental package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMS
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIMS"
    class_name: ClassVar[str] = "agriculture MIMS"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMS

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    size_frac: Optional[str] = None
    assembly_qual: Optional[Union[str, "AssemblyQualEnum"]] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.assembly_qual is not None and not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIMARKSSpecimen(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: specimen with environmental package
    agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMARKSSpecimen
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIMARKSSpecimen"
    class_name: ClassVar[str] = "agriculture MIMARKS specimen"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMARKSSpecimen

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    size_frac: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIMARKSSurvey(Agriculture):
    """
    Combinatorial checklist Minimal Information about a Marker Specimen: survey with environmental package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMARKSSurvey
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIMARKSSurvey"
    class_name: ClassVar[str] = "agriculture MIMARKS survey"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMARKSSurvey

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    subspecf_gen_lin: Optional[str] = None
    extrachrom_elements: Optional[int] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.subspecf_gen_lin is not None and not isinstance(self.subspecf_gen_lin, str):
            self.subspecf_gen_lin = str(self.subspecf_gen_lin)

        if self.extrachrom_elements is not None and not isinstance(self.extrachrom_elements, int):
            self.extrachrom_elements = int(self.extrachrom_elements)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMISAG(Agriculture):
    """
    Combinatorial checklist Minimum Information About a Single Amplified Genome with environmental package agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMISAG
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMISAG"
    class_name: ClassVar[str] = "agriculture MISAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMISAG

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    sort_tech: Union[str, "SortTechEnum"] = None
    single_cell_lysis_appr: Union[str, "SingleCellLysisApprEnum"] = None
    wga_amp_appr: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    size_frac: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.sort_tech):
            self.MissingRequiredField("sort_tech")
        if not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self._is_empty(self.single_cell_lysis_appr):
            self.MissingRequiredField("single_cell_lysis_appr")
        if not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self._is_empty(self.wga_amp_appr):
            self.MissingRequiredField("wga_amp_appr")
        if not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIMAG(Agriculture):
    """
    Combinatorial checklist Minimum Information About a Metagenome-Assembled Genome with environmental package
    agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMAG
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIMAG"
    class_name: ClassVar[str] = "agriculture MIMAG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIMAG

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    tax_ident: Union[str, "TaxIdentEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    compl_score: str = None
    compl_software: str = None
    contam_score: str = None
    bin_param: Union[str, "BinParamEnum"] = None
    bin_software: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    rel_to_oxygen: Optional[Union[str, "RelToOxygenEnum"]] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    size_frac: Optional[str] = None
    number_contig: Optional[int] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    x_16s_recover: Optional[str] = None
    x_16s_recover_software: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    contam_screen_input: Optional[str] = None
    contam_screen_param: Optional[str] = None
    decontam_software: Optional[Union[str, "DecontamSoftwareEnum"]] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.tax_ident):
            self.MissingRequiredField("tax_ident")
        if not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.compl_score):
            self.MissingRequiredField("compl_score")
        if not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self._is_empty(self.compl_software):
            self.MissingRequiredField("compl_software")
        if not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self._is_empty(self.contam_score):
            self.MissingRequiredField("contam_score")
        if not isinstance(self.contam_score, str):
            self.contam_score = str(self.contam_score)

        if self._is_empty(self.bin_param):
            self.MissingRequiredField("bin_param")
        if not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self._is_empty(self.bin_software):
            self.MissingRequiredField("bin_software")
        if not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.rel_to_oxygen is not None and not isinstance(self.rel_to_oxygen, RelToOxygenEnum):
            self.rel_to_oxygen = RelToOxygenEnum(self.rel_to_oxygen)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.number_contig is not None and not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.x_16s_recover is not None and not isinstance(self.x_16s_recover, str):
            self.x_16s_recover = str(self.x_16s_recover)

        if self.x_16s_recover_software is not None and not isinstance(self.x_16s_recover_software, str):
            self.x_16s_recover_software = str(self.x_16s_recover_software)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.contam_screen_input is not None and not isinstance(self.contam_screen_input, str):
            self.contam_screen_input = str(self.contam_screen_input)

        if self.contam_screen_param is not None and not isinstance(self.contam_screen_param, str):
            self.contam_screen_param = str(self.contam_screen_param)

        if self.decontam_software is not None and not isinstance(self.decontam_software, DecontamSoftwareEnum):
            self.decontam_software = DecontamSoftwareEnum(self.decontam_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class AgricultureMIUVIG(Agriculture):
    """
    Combinatorial checklist Minimum Information About an Uncultivated Virus Genome with environmental package
    agriculture
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIUVIG
    class_class_curie: ClassVar[str] = "mixs.vocab:AgricultureMIUVIG"
    class_name: ClassVar[str] = "agriculture MIUVIG"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.AgricultureMIUVIG

    chem_administration: Union[str, List[str]] = None
    Food_source: str = None
    depth: Union[dict, "QuantityValue"] = None
    samp_store_dur: str = None
    samp_store_loc: str = None
    samp_collect_device: str = None
    host_age: Union[dict, "QuantityValue"] = None
    host_common_name: str = None
    host_genotype: str = None
    host_height: Union[dict, "QuantityValue"] = None
    host_length: Union[dict, "QuantityValue"] = None
    host_life_stage: str = None
    host_phenotype: str = None
    host_taxid: str = None
    host_tot_mass: Union[dict, "QuantityValue"] = None
    soil_type: str = None
    soil_type_meth: str = None
    store_cond: str = None
    microbial_biomass: Union[dict, "QuantityValue"] = None
    microbial_biomass_meth: str = None
    sieving: str = None
    pool_dna_extracts: str = None
    specific_host: str = None
    pathogenicity: str = None
    samp_mat_process: str = None
    host_spec_range: int = None
    samp_size: Union[dict, "QuantityValue"] = None
    seq_meth: str = None
    samp_vol_we_dna_ext: Union[dict, "QuantityValue"] = None
    pcr_primers: str = None
    nucl_acid_ext: str = None
    nucl_acid_amp: str = None
    lib_reads_seqd: int = None
    lib_vector: str = None
    lib_screen: str = None
    target_gene: str = None
    target_subfragment: str = None
    mid: str = None
    adapters: str = None
    pcr_cond: str = None
    chimera_check: str = None
    assembly_name: str = None
    samp_name: str = None
    samp_taxon_id: str = None
    project_name: str = None
    source_uvig: Union[str, "SourceUvigEnum"] = None
    virus_enrich_appr: Union[str, "VirusEnrichApprEnum"] = None
    assembly_qual: Union[str, "AssemblyQualEnum"] = None
    number_contig: int = None
    vir_ident_software: str = None
    pred_genome_type: Union[str, "PredGenomeTypeEnum"] = None
    pred_genome_struc: Union[str, "PredGenomeStrucEnum"] = None
    detec_type: str = None
    lat_lon: Optional[str] = None
    geo_loc_name: Optional[str] = None
    collection_date: Optional[Union[str, XSDDate]] = None
    env_broad_scale: Optional[str] = None
    env_local_scale: Optional[str] = None
    env_medium: Optional[str] = None
    experimental_factor: Optional[str] = None
    neg_cont_type: Optional[Union[str, "NegContTypeEnum"]] = None
    pos_cont_type: Optional[str] = None
    estimated_size: Optional[str] = None
    ref_biomaterial: Optional[str] = None
    samp_collec_device: Optional[str] = None
    samp_collec_method: Optional[str] = None
    size_frac: Optional[str] = None
    tax_ident: Optional[Union[str, "TaxIdentEnum"]] = None
    feat_pred: Optional[str] = None
    ref_db: Optional[str] = None
    sim_search_meth: Optional[str] = None
    tax_class: Optional[str] = None
    trnas: Optional[int] = None
    trna_ext_software: Optional[str] = None
    compl_score: Optional[str] = None
    compl_software: Optional[str] = None
    compl_appr: Optional[Union[str, "ComplApprEnum"]] = None
    sort_tech: Optional[Union[str, "SortTechEnum"]] = None
    single_cell_lysis_appr: Optional[Union[str, "SingleCellLysisApprEnum"]] = None
    single_cell_lysis_prot: Optional[str] = None
    wga_amp_appr: Optional[str] = None
    wga_amp_kit: Optional[str] = None
    bin_param: Optional[Union[str, "BinParamEnum"]] = None
    bin_software: Optional[str] = None
    reassembly_bin: Optional[str] = None
    mag_cov_software: Optional[Union[str, "MagCovSoftwareEnum"]] = None
    otu_class_appr: Optional[str] = None
    otu_seq_comp_appr: Optional[str] = None
    otu_db: Optional[str] = None
    host_pred_appr: Optional[Union[str, "HostPredApprEnum"]] = None
    host_pred_est_acc: Optional[str] = None
    associated_resource: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self._is_empty(self.samp_name):
            self.MissingRequiredField("samp_name")
        if not isinstance(self.samp_name, str):
            self.samp_name = str(self.samp_name)

        if self._is_empty(self.samp_taxon_id):
            self.MissingRequiredField("samp_taxon_id")
        if not isinstance(self.samp_taxon_id, str):
            self.samp_taxon_id = str(self.samp_taxon_id)

        if self._is_empty(self.project_name):
            self.MissingRequiredField("project_name")
        if not isinstance(self.project_name, str):
            self.project_name = str(self.project_name)

        if self._is_empty(self.source_uvig):
            self.MissingRequiredField("source_uvig")
        if not isinstance(self.source_uvig, SourceUvigEnum):
            self.source_uvig = SourceUvigEnum(self.source_uvig)

        if self._is_empty(self.virus_enrich_appr):
            self.MissingRequiredField("virus_enrich_appr")
        if not isinstance(self.virus_enrich_appr, VirusEnrichApprEnum):
            self.virus_enrich_appr = VirusEnrichApprEnum(self.virus_enrich_appr)

        if self._is_empty(self.assembly_qual):
            self.MissingRequiredField("assembly_qual")
        if not isinstance(self.assembly_qual, AssemblyQualEnum):
            self.assembly_qual = AssemblyQualEnum(self.assembly_qual)

        if self._is_empty(self.number_contig):
            self.MissingRequiredField("number_contig")
        if not isinstance(self.number_contig, int):
            self.number_contig = int(self.number_contig)

        if self._is_empty(self.vir_ident_software):
            self.MissingRequiredField("vir_ident_software")
        if not isinstance(self.vir_ident_software, str):
            self.vir_ident_software = str(self.vir_ident_software)

        if self._is_empty(self.pred_genome_type):
            self.MissingRequiredField("pred_genome_type")
        if not isinstance(self.pred_genome_type, PredGenomeTypeEnum):
            self.pred_genome_type = PredGenomeTypeEnum(self.pred_genome_type)

        if self._is_empty(self.pred_genome_struc):
            self.MissingRequiredField("pred_genome_struc")
        if not isinstance(self.pred_genome_struc, PredGenomeStrucEnum):
            self.pred_genome_struc = PredGenomeStrucEnum(self.pred_genome_struc)

        if self._is_empty(self.detec_type):
            self.MissingRequiredField("detec_type")
        if not isinstance(self.detec_type, str):
            self.detec_type = str(self.detec_type)

        if self.lat_lon is not None and not isinstance(self.lat_lon, str):
            self.lat_lon = str(self.lat_lon)

        if self.geo_loc_name is not None and not isinstance(self.geo_loc_name, str):
            self.geo_loc_name = str(self.geo_loc_name)

        if self.collection_date is not None and not isinstance(self.collection_date, XSDDate):
            self.collection_date = XSDDate(self.collection_date)

        if self.env_broad_scale is not None and not isinstance(self.env_broad_scale, str):
            self.env_broad_scale = str(self.env_broad_scale)

        if self.env_local_scale is not None and not isinstance(self.env_local_scale, str):
            self.env_local_scale = str(self.env_local_scale)

        if self.env_medium is not None and not isinstance(self.env_medium, str):
            self.env_medium = str(self.env_medium)

        if self.experimental_factor is not None and not isinstance(self.experimental_factor, str):
            self.experimental_factor = str(self.experimental_factor)

        if self.neg_cont_type is not None and not isinstance(self.neg_cont_type, NegContTypeEnum):
            self.neg_cont_type = NegContTypeEnum(self.neg_cont_type)

        if self.pos_cont_type is not None and not isinstance(self.pos_cont_type, str):
            self.pos_cont_type = str(self.pos_cont_type)

        if self.estimated_size is not None and not isinstance(self.estimated_size, str):
            self.estimated_size = str(self.estimated_size)

        if self.ref_biomaterial is not None and not isinstance(self.ref_biomaterial, str):
            self.ref_biomaterial = str(self.ref_biomaterial)

        if self.samp_collec_device is not None and not isinstance(self.samp_collec_device, str):
            self.samp_collec_device = str(self.samp_collec_device)

        if self.samp_collec_method is not None and not isinstance(self.samp_collec_method, str):
            self.samp_collec_method = str(self.samp_collec_method)

        if self.size_frac is not None and not isinstance(self.size_frac, str):
            self.size_frac = str(self.size_frac)

        if self.tax_ident is not None and not isinstance(self.tax_ident, TaxIdentEnum):
            self.tax_ident = TaxIdentEnum(self.tax_ident)

        if self.feat_pred is not None and not isinstance(self.feat_pred, str):
            self.feat_pred = str(self.feat_pred)

        if self.ref_db is not None and not isinstance(self.ref_db, str):
            self.ref_db = str(self.ref_db)

        if self.sim_search_meth is not None and not isinstance(self.sim_search_meth, str):
            self.sim_search_meth = str(self.sim_search_meth)

        if self.tax_class is not None and not isinstance(self.tax_class, str):
            self.tax_class = str(self.tax_class)

        if self.trnas is not None and not isinstance(self.trnas, int):
            self.trnas = int(self.trnas)

        if self.trna_ext_software is not None and not isinstance(self.trna_ext_software, str):
            self.trna_ext_software = str(self.trna_ext_software)

        if self.compl_score is not None and not isinstance(self.compl_score, str):
            self.compl_score = str(self.compl_score)

        if self.compl_software is not None and not isinstance(self.compl_software, str):
            self.compl_software = str(self.compl_software)

        if self.compl_appr is not None and not isinstance(self.compl_appr, ComplApprEnum):
            self.compl_appr = ComplApprEnum(self.compl_appr)

        if self.sort_tech is not None and not isinstance(self.sort_tech, SortTechEnum):
            self.sort_tech = SortTechEnum(self.sort_tech)

        if self.single_cell_lysis_appr is not None and not isinstance(self.single_cell_lysis_appr, SingleCellLysisApprEnum):
            self.single_cell_lysis_appr = SingleCellLysisApprEnum(self.single_cell_lysis_appr)

        if self.single_cell_lysis_prot is not None and not isinstance(self.single_cell_lysis_prot, str):
            self.single_cell_lysis_prot = str(self.single_cell_lysis_prot)

        if self.wga_amp_appr is not None and not isinstance(self.wga_amp_appr, str):
            self.wga_amp_appr = str(self.wga_amp_appr)

        if self.wga_amp_kit is not None and not isinstance(self.wga_amp_kit, str):
            self.wga_amp_kit = str(self.wga_amp_kit)

        if self.bin_param is not None and not isinstance(self.bin_param, BinParamEnum):
            self.bin_param = BinParamEnum(self.bin_param)

        if self.bin_software is not None and not isinstance(self.bin_software, str):
            self.bin_software = str(self.bin_software)

        if self.reassembly_bin is not None and not isinstance(self.reassembly_bin, str):
            self.reassembly_bin = str(self.reassembly_bin)

        if self.mag_cov_software is not None and not isinstance(self.mag_cov_software, MagCovSoftwareEnum):
            self.mag_cov_software = MagCovSoftwareEnum(self.mag_cov_software)

        if self.otu_class_appr is not None and not isinstance(self.otu_class_appr, str):
            self.otu_class_appr = str(self.otu_class_appr)

        if self.otu_seq_comp_appr is not None and not isinstance(self.otu_seq_comp_appr, str):
            self.otu_seq_comp_appr = str(self.otu_seq_comp_appr)

        if self.otu_db is not None and not isinstance(self.otu_db, str):
            self.otu_db = str(self.otu_db)

        if self.host_pred_appr is not None and not isinstance(self.host_pred_appr, HostPredApprEnum):
            self.host_pred_appr = HostPredApprEnum(self.host_pred_appr)

        if self.host_pred_est_acc is not None and not isinstance(self.host_pred_est_acc, str):
            self.host_pred_est_acc = str(self.host_pred_est_acc)

        if self.associated_resource is not None and not isinstance(self.associated_resource, str):
            self.associated_resource = str(self.associated_resource)

        super().__post_init__(**kwargs)


@dataclass
class QuantityValue(YAMLRoot):
    """
    used to record a measurement
    """
    _inherited_slots: ClassVar[List[str]] = []

    class_class_uri: ClassVar[URIRef] = MIXS.VOCAB.QuantityValue
    class_class_curie: ClassVar[str] = "mixs.vocab:QuantityValue"
    class_name: ClassVar[str] = "quantity value"
    class_model_uri: ClassVar[URIRef] = MIXS.VOCAB.QuantityValue

    has_unit: Optional[str] = None
    has_numeric_value: Optional[float] = None
    has_raw_value: Optional[str] = None

    def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):
        if self.has_unit is not None and not isinstance(self.has_unit, str):
            self.has_unit = str(self.has_unit)

        if self.has_numeric_value is not None and not isinstance(self.has_numeric_value, float):
            self.has_numeric_value = float(self.has_numeric_value)

        if self.has_raw_value is not None and not isinstance(self.has_raw_value, str):
            self.has_raw_value = str(self.has_raw_value)

        super().__post_init__(**kwargs)


# Enumerations
class NegContTypeEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="NegContTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "distilled water",
                PermissibleValue(text="distilled water") )
        setattr(cls, "phosphate buffer",
                PermissibleValue(text="phosphate buffer") )
        setattr(cls, "empty collection device",
                PermissibleValue(text="empty collection device") )
        setattr(cls, "empty collection tube",
                PermissibleValue(text="empty collection tube") )
        setattr(cls, "DNA-free PCR mix",
                PermissibleValue(text="DNA-free PCR mix") )
        setattr(cls, "sterile swab",
                PermissibleValue(text="sterile swab") )
        setattr(cls, "sterile syringe",
                PermissibleValue(text="sterile syringe") )

class BioticRelationshipEnum(EnumDefinitionImpl):

    parasite = PermissibleValue(text="parasite")
    commensal = PermissibleValue(text="commensal")
    symbiont = PermissibleValue(text="symbiont")

    _defn = EnumDefinition(
        name="BioticRelationshipEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "free living",
                PermissibleValue(text="free living") )

class TrophicLevelEnum(EnumDefinitionImpl):

    autotroph = PermissibleValue(text="autotroph")
    carboxydotroph = PermissibleValue(text="carboxydotroph")
    chemoautotroph = PermissibleValue(text="chemoautotroph")
    chemoheterotroph = PermissibleValue(text="chemoheterotroph")
    chemolithoautotroph = PermissibleValue(text="chemolithoautotroph")
    chemolithotroph = PermissibleValue(text="chemolithotroph")
    chemoorganoheterotroph = PermissibleValue(text="chemoorganoheterotroph")
    chemoorganotroph = PermissibleValue(text="chemoorganotroph")
    chemosynthetic = PermissibleValue(text="chemosynthetic")
    chemotroph = PermissibleValue(text="chemotroph")
    copiotroph = PermissibleValue(text="copiotroph")
    diazotroph = PermissibleValue(text="diazotroph")
    facultative = PermissibleValue(text="facultative")
    heterotroph = PermissibleValue(text="heterotroph")
    lithoautotroph = PermissibleValue(text="lithoautotroph")
    lithoheterotroph = PermissibleValue(text="lithoheterotroph")
    lithotroph = PermissibleValue(text="lithotroph")
    methanotroph = PermissibleValue(text="methanotroph")
    methylotroph = PermissibleValue(text="methylotroph")
    mixotroph = PermissibleValue(text="mixotroph")
    obligate = PermissibleValue(text="obligate")
    chemoautolithotroph = PermissibleValue(text="chemoautolithotroph")
    oligotroph = PermissibleValue(text="oligotroph")
    organoheterotroph = PermissibleValue(text="organoheterotroph")
    organotroph = PermissibleValue(text="organotroph")
    photoautotroph = PermissibleValue(text="photoautotroph")
    photoheterotroph = PermissibleValue(text="photoheterotroph")
    photolithoautotroph = PermissibleValue(text="photolithoautotroph")
    photolithotroph = PermissibleValue(text="photolithotroph")
    photosynthetic = PermissibleValue(text="photosynthetic")
    phototroph = PermissibleValue(text="phototroph")

    _defn = EnumDefinition(
        name="TrophicLevelEnum",
    )

class RelToOxygenEnum(EnumDefinitionImpl):

    aerobe = PermissibleValue(text="aerobe")
    anaerobe = PermissibleValue(text="anaerobe")
    facultative = PermissibleValue(text="facultative")
    microaerophilic = PermissibleValue(text="microaerophilic")
    microanaerobe = PermissibleValue(text="microanaerobe")

    _defn = EnumDefinition(
        name="RelToOxygenEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "obligate aerobe",
                PermissibleValue(text="obligate aerobe") )
        setattr(cls, "obligate anaerobe",
                PermissibleValue(text="obligate anaerobe") )

class SourceUvigEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SourceUvigEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "metagenome (not viral targeted)",
                PermissibleValue(text="metagenome (not viral targeted)") )
        setattr(cls, "viral fraction metagenome (virome)",
                PermissibleValue(text="viral fraction metagenome (virome)") )
        setattr(cls, "sequence-targeted metagenome",
                PermissibleValue(text="sequence-targeted metagenome") )
        setattr(cls, "metatranscriptome (not viral targeted)",
                PermissibleValue(text="metatranscriptome (not viral targeted)") )
        setattr(cls, "viral fraction RNA metagenome (RNA virome)",
                PermissibleValue(text="viral fraction RNA metagenome (RNA virome)") )
        setattr(cls, "sequence-targeted RNA metagenome",
                PermissibleValue(text="sequence-targeted RNA metagenome") )
        setattr(cls, "microbial single amplified genome (SAG)",
                PermissibleValue(text="microbial single amplified genome (SAG)") )
        setattr(cls, "viral single amplified genome (vSAG)",
                PermissibleValue(text="viral single amplified genome (vSAG)") )
        setattr(cls, "isolate microbial genome",
                PermissibleValue(text="isolate microbial genome") )

class VirusEnrichApprEnum(EnumDefinitionImpl):

    filtration = PermissibleValue(text="filtration")
    ultrafiltration = PermissibleValue(text="ultrafiltration")
    centrifugation = PermissibleValue(text="centrifugation")
    ultracentrifugation = PermissibleValue(text="ultracentrifugation")
    DNAse = PermissibleValue(text="DNAse")
    RNAse = PermissibleValue(text="RNAse")
    other = PermissibleValue(text="other")
    none = PermissibleValue(text="none")

    _defn = EnumDefinition(
        name="VirusEnrichApprEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "PEG Precipitation",
                PermissibleValue(text="PEG Precipitation") )
        setattr(cls, "FeCl Precipitation",
                PermissibleValue(text="FeCl Precipitation") )
        setattr(cls, "CsCl density gradient",
                PermissibleValue(text="CsCl density gradient") )
        setattr(cls, "targeted sequence capture",
                PermissibleValue(text="targeted sequence capture") )

class LibLayoutEnum(EnumDefinitionImpl):

    paired = PermissibleValue(text="paired")
    single = PermissibleValue(text="single")
    vector = PermissibleValue(text="vector")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="LibLayoutEnum",
    )

class TaxIdentEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="TaxIdentEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "16S rRNA gene",
                PermissibleValue(text="16S rRNA gene") )
        setattr(cls, "multi-marker approach",
                PermissibleValue(text="multi-marker approach") )

class AssemblyQualEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="AssemblyQualEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Finished genome",
                PermissibleValue(text="Finished genome") )
        setattr(cls, "High-quality draft genome",
                PermissibleValue(text="High-quality draft genome") )
        setattr(cls, "Medium-quality draft genome",
                PermissibleValue(text="Medium-quality draft genome") )
        setattr(cls, "Low-quality draft genome",
                PermissibleValue(text="Low-quality draft genome") )
        setattr(cls, "Genome fragment(s)",
                PermissibleValue(text="Genome fragment(s)") )

class ComplScoreEnum(EnumDefinitionImpl):

    high = PermissibleValue(text="high")
    med = PermissibleValue(text="med")
    low = PermissibleValue(text="low")

    _defn = EnumDefinition(
        name="ComplScoreEnum",
    )

class ComplApprEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="ComplApprEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "marker gene",
                PermissibleValue(text="marker gene") )
        setattr(cls, "reference based",
                PermissibleValue(text="reference based") )

class ContamScreenParamEnum(EnumDefinitionImpl):

    kmer = PermissibleValue(text="kmer")
    coverage = PermissibleValue(text="coverage")
    combination = PermissibleValue(text="combination")

    _defn = EnumDefinition(
        name="ContamScreenParamEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "ref db",
                PermissibleValue(text="ref db") )

class DecontamSoftwareEnum(EnumDefinitionImpl):

    prodege = PermissibleValue(text="prodege")
    acdc = PermissibleValue(text="acdc")
    combination = PermissibleValue(text="combination")

    _defn = EnumDefinition(
        name="DecontamSoftwareEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "checkm/refinem",
                PermissibleValue(text="checkm/refinem") )
        setattr(cls, "anvi'o",
                PermissibleValue(text="anvi'o") )
        setattr(cls, "bbtools:decontaminate.sh",
                PermissibleValue(text="bbtools:decontaminate.sh") )

class SortTechEnum(EnumDefinitionImpl):

    microfluidics = PermissibleValue(text="microfluidics")
    micromanipulation = PermissibleValue(text="micromanipulation")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SortTechEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "flow cytometric cell sorting",
                PermissibleValue(text="flow cytometric cell sorting") )
        setattr(cls, "lazer-tweezing",
                PermissibleValue(text="lazer-tweezing") )
        setattr(cls, "optical manipulation",
                PermissibleValue(text="optical manipulation") )

class SingleCellLysisApprEnum(EnumDefinitionImpl):

    chemical = PermissibleValue(text="chemical")
    enzymatic = PermissibleValue(text="enzymatic")
    physical = PermissibleValue(text="physical")
    combination = PermissibleValue(text="combination")

    _defn = EnumDefinition(
        name="SingleCellLysisApprEnum",
    )

class BinParamEnum(EnumDefinitionImpl):

    kmer = PermissibleValue(text="kmer")
    coverage = PermissibleValue(text="coverage")
    combination = PermissibleValue(text="combination")

    _defn = EnumDefinition(
        name="BinParamEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "homology search",
                PermissibleValue(text="homology search") )
        setattr(cls, "codon usage",
                PermissibleValue(text="codon usage") )

class MagCovSoftwareEnum(EnumDefinitionImpl):

    bwa = PermissibleValue(text="bwa")
    bbmap = PermissibleValue(text="bbmap")
    bowtie = PermissibleValue(text="bowtie")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="MagCovSoftwareEnum",
    )

class PredGenomeTypeEnum(EnumDefinitionImpl):

    DNA = PermissibleValue(text="DNA")
    dsDNA = PermissibleValue(text="dsDNA")
    ssDNA = PermissibleValue(text="ssDNA")
    RNA = PermissibleValue(text="RNA")
    dsRNA = PermissibleValue(text="dsRNA")
    ssRNA = PermissibleValue(text="ssRNA")
    mixed = PermissibleValue(text="mixed")
    uncharacterized = PermissibleValue(text="uncharacterized")

    _defn = EnumDefinition(
        name="PredGenomeTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "ssRNA (+)",
                PermissibleValue(text="ssRNA (+)") )
        setattr(cls, "ssRNA (-)",
                PermissibleValue(text="ssRNA (-)") )

class PredGenomeStrucEnum(EnumDefinitionImpl):

    segmented = PermissibleValue(text="segmented")
    undetermined = PermissibleValue(text="undetermined")

    _defn = EnumDefinition(
        name="PredGenomeStrucEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "non-segmented",
                PermissibleValue(text="non-segmented") )

class HostPredApprEnum(EnumDefinitionImpl):

    provirus = PermissibleValue(text="provirus")
    combination = PermissibleValue(text="combination")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="HostPredApprEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "host sequence similarity",
                PermissibleValue(text="host sequence similarity") )
        setattr(cls, "CRISPR spacer match",
                PermissibleValue(text="CRISPR spacer match") )
        setattr(cls, "kmer similarity",
                PermissibleValue(text="kmer similarity") )
        setattr(cls, "co-occurrence",
                PermissibleValue(text="co-occurrence") )

class OrganismCountEnum(EnumDefinitionImpl):

    ATP = PermissibleValue(text="ATP")
    MPN = PermissibleValue(text="MPN")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="OrganismCountEnum",
    )

class OxyStatSampEnum(EnumDefinitionImpl):

    aerobic = PermissibleValue(text="aerobic")
    anaerobic = PermissibleValue(text="anaerobic")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="OxyStatSampEnum",
    )

class SurfMaterialEnum(EnumDefinitionImpl):

    adobe = PermissibleValue(text="adobe")
    carpet = PermissibleValue(text="carpet")
    concrete = PermissibleValue(text="concrete")
    glass = PermissibleValue(text="glass")
    metal = PermissibleValue(text="metal")
    paint = PermissibleValue(text="paint")
    plastic = PermissibleValue(text="plastic")
    stone = PermissibleValue(text="stone")
    stucco = PermissibleValue(text="stucco")
    tile = PermissibleValue(text="tile")
    vinyl = PermissibleValue(text="vinyl")
    wood = PermissibleValue(text="wood")

    _defn = EnumDefinition(
        name="SurfMaterialEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "cinder blocks",
                PermissibleValue(text="cinder blocks") )
        setattr(cls, "hay bales",
                PermissibleValue(text="hay bales") )
        setattr(cls, "stainless steel",
                PermissibleValue(text="stainless steel") )

class SurfAirContEnum(EnumDefinitionImpl):

    dust = PermissibleValue(text="dust")
    radon = PermissibleValue(text="radon")
    nutrients = PermissibleValue(text="nutrients")
    biocides = PermissibleValue(text="biocides")

    _defn = EnumDefinition(
        name="SurfAirContEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "organic matter",
                PermissibleValue(text="organic matter") )
        setattr(cls, "particulate matter",
                PermissibleValue(text="particulate matter") )
        setattr(cls, "volatile organic compounds",
                PermissibleValue(text="volatile organic compounds") )
        setattr(cls, "biological contaminants",
                PermissibleValue(text="biological contaminants") )

class BuildOccupTypeEnum(EnumDefinitionImpl):

    office = PermissibleValue(text="office")
    market = PermissibleValue(text="market")
    restaurant = PermissibleValue(text="restaurant")
    residence = PermissibleValue(text="residence")
    school = PermissibleValue(text="school")
    residential = PermissibleValue(text="residential")
    commercial = PermissibleValue(text="commercial")
    airport = PermissibleValue(text="airport")

    _defn = EnumDefinition(
        name="BuildOccupTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "low rise",
                PermissibleValue(text="low rise") )
        setattr(cls, "high rise",
                PermissibleValue(text="high rise") )
        setattr(cls, "wood framed",
                PermissibleValue(text="wood framed") )
        setattr(cls, "health care",
                PermissibleValue(text="health care") )
        setattr(cls, "sports complex",
                PermissibleValue(text="sports complex") )

class IndoorSpaceEnum(EnumDefinitionImpl):

    bedroom = PermissibleValue(text="bedroom")
    office = PermissibleValue(text="office")
    bathroom = PermissibleValue(text="bathroom")
    foyer = PermissibleValue(text="foyer")
    kitchen = PermissibleValue(text="kitchen")
    hallway = PermissibleValue(text="hallway")
    elevator = PermissibleValue(text="elevator")

    _defn = EnumDefinition(
        name="IndoorSpaceEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "locker room",
                PermissibleValue(text="locker room") )

class IndoorSurfEnum(EnumDefinitionImpl):

    cabinet = PermissibleValue(text="cabinet")
    ceiling = PermissibleValue(text="ceiling")
    door = PermissibleValue(text="door")
    shelving = PermissibleValue(text="shelving")
    window = PermissibleValue(text="window")
    wall = PermissibleValue(text="wall")

    _defn = EnumDefinition(
        name="IndoorSurfEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "counter top",
                PermissibleValue(text="counter top") )
        setattr(cls, "vent cover",
                PermissibleValue(text="vent cover") )

class FilterTypeEnum(EnumDefinitionImpl):

    HEPA = PermissibleValue(text="HEPA")
    electrostatic = PermissibleValue(text="electrostatic")

    _defn = EnumDefinition(
        name="FilterTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "particulate air filter",
                PermissibleValue(text="particulate air filter") )
        setattr(cls, "chemical air filter",
                PermissibleValue(text="chemical air filter") )
        setattr(cls, "low-MERV pleated media",
                PermissibleValue(text="low-MERV pleated media") )
        setattr(cls, "gas-phase or ultraviolet air treatments",
                PermissibleValue(text="gas-phase or ultraviolet air treatments") )

class HeatCoolTypeEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="HeatCoolTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "radiant system",
                PermissibleValue(text="radiant system") )
        setattr(cls, "heat pump",
                PermissibleValue(text="heat pump") )
        setattr(cls, "forced air system",
                PermissibleValue(text="forced air system") )
        setattr(cls, "steam forced heat",
                PermissibleValue(text="steam forced heat") )
        setattr(cls, "wood stove",
                PermissibleValue(text="wood stove") )

class SubstructureTypeEnum(EnumDefinitionImpl):

    crawlspace = PermissibleValue(text="crawlspace")
    basement = PermissibleValue(text="basement")

    _defn = EnumDefinition(
        name="SubstructureTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "slab on grade",
                PermissibleValue(text="slab on grade") )

class BuildingSettingEnum(EnumDefinitionImpl):

    urban = PermissibleValue(text="urban")
    suburban = PermissibleValue(text="suburban")
    exurban = PermissibleValue(text="exurban")
    rural = PermissibleValue(text="rural")

    _defn = EnumDefinition(
        name="BuildingSettingEnum",
    )

class LightTypeEnum(EnumDefinitionImpl):

    none = PermissibleValue(text="none")

    _defn = EnumDefinition(
        name="LightTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "natural light",
                PermissibleValue(text="natural light") )
        setattr(cls, "electric light",
                PermissibleValue(text="electric light") )
        setattr(cls, "desk lamp",
                PermissibleValue(text="desk lamp") )
        setattr(cls, "flourescent lights",
                PermissibleValue(text="flourescent lights") )

class ArchStrucEnum(EnumDefinitionImpl):

    building = PermissibleValue(text="building")
    shed = PermissibleValue(text="shed")
    home = PermissibleValue(text="home")

    _defn = EnumDefinition(
        name="ArchStrucEnum",
    )

class CeilCondEnum(EnumDefinitionImpl):

    new = PermissibleValue(text="new")
    damaged = PermissibleValue(text="damaged")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="CeilCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )

class CeilFinishMatEnum(EnumDefinitionImpl):

    drywall = PermissibleValue(text="drywall")
    tiles = PermissibleValue(text="tiles")
    PVC = PermissibleValue(text="PVC")
    plasterboard = PermissibleValue(text="plasterboard")
    metal = PermissibleValue(text="metal")
    fiberglass = PermissibleValue(text="fiberglass")
    stucco = PermissibleValue(text="stucco")
    wood = PermissibleValue(text="wood")

    _defn = EnumDefinition(
        name="CeilFinishMatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "mineral fibre",
                PermissibleValue(text="mineral fibre") )
        setattr(cls, "mineral wool/calcium silicate",
                PermissibleValue(text="mineral wool/calcium silicate") )

class CeilTextureEnum(EnumDefinitionImpl):

    knockdown = PermissibleValue(text="knockdown")
    popcorn = PermissibleValue(text="popcorn")
    smooth = PermissibleValue(text="smooth")
    swirl = PermissibleValue(text="swirl")

    _defn = EnumDefinition(
        name="CeilTextureEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "crows feet",
                PermissibleValue(text="crows feet") )
        setattr(cls, "crows-foot stomp",
                PermissibleValue(text="crows-foot stomp") )
        setattr(cls, "double skip",
                PermissibleValue(text="double skip") )
        setattr(cls, "hawk and trowel",
                PermissibleValue(text="hawk and trowel") )
        setattr(cls, "orange peel",
                PermissibleValue(text="orange peel") )
        setattr(cls, "rosebud stomp",
                PermissibleValue(text="rosebud stomp") )
        setattr(cls, "Santa-Fe texture",
                PermissibleValue(text="Santa-Fe texture") )
        setattr(cls, "skip trowel",
                PermissibleValue(text="skip trowel") )
        setattr(cls, "stomp knockdown",
                PermissibleValue(text="stomp knockdown") )

class CeilTypeEnum(EnumDefinitionImpl):

    cathedral = PermissibleValue(text="cathedral")
    dropped = PermissibleValue(text="dropped")
    concave = PermissibleValue(text="concave")
    coffered = PermissibleValue(text="coffered")
    cove = PermissibleValue(text="cove")
    stretched = PermissibleValue(text="stretched")

    _defn = EnumDefinition(
        name="CeilTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "barrel-shaped",
                PermissibleValue(text="barrel-shaped") )

class BuildDocsEnum(EnumDefinitionImpl):

    schedule = PermissibleValue(text="schedule")
    sections = PermissibleValue(text="sections")
    submittals = PermissibleValue(text="submittals")
    windows = PermissibleValue(text="windows")

    _defn = EnumDefinition(
        name="BuildDocsEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "building information model",
                PermissibleValue(text="building information model") )
        setattr(cls, "commissioning report",
                PermissibleValue(text="commissioning report") )
        setattr(cls, "complaint logs",
                PermissibleValue(text="complaint logs") )
        setattr(cls, "contract administration",
                PermissibleValue(text="contract administration") )
        setattr(cls, "cost estimate",
                PermissibleValue(text="cost estimate") )
        setattr(cls, "janitorial schedules or logs",
                PermissibleValue(text="janitorial schedules or logs") )
        setattr(cls, "maintenance plans",
                PermissibleValue(text="maintenance plans") )
        setattr(cls, "shop drawings",
                PermissibleValue(text="shop drawings") )
        setattr(cls, "ventilation system",
                PermissibleValue(text="ventilation system") )

class DoorCondEnum(EnumDefinitionImpl):

    damaged = PermissibleValue(text="damaged")
    new = PermissibleValue(text="new")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="DoorCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )

class DoorDirectEnum(EnumDefinitionImpl):

    inward = PermissibleValue(text="inward")
    outward = PermissibleValue(text="outward")
    sideways = PermissibleValue(text="sideways")

    _defn = EnumDefinition(
        name="DoorDirectEnum",
    )

class DoorLocEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")

    _defn = EnumDefinition(
        name="DoorLocEnum",
    )

class DoorMatEnum(EnumDefinitionImpl):

    aluminum = PermissibleValue(text="aluminum")
    fiberboard = PermissibleValue(text="fiberboard")
    fiberglass = PermissibleValue(text="fiberglass")
    metal = PermissibleValue(text="metal")
    vinyl = PermissibleValue(text="vinyl")
    wood = PermissibleValue(text="wood")

    _defn = EnumDefinition(
        name="DoorMatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "cellular PVC",
                PermissibleValue(text="cellular PVC") )
        setattr(cls, "engineered plastic",
                PermissibleValue(text="engineered plastic") )
        setattr(cls, "thermoplastic alloy",
                PermissibleValue(text="thermoplastic alloy") )
        setattr(cls, "wood/plastic composite",
                PermissibleValue(text="wood/plastic composite") )

class DoorMoveEnum(EnumDefinitionImpl):

    collapsible = PermissibleValue(text="collapsible")
    folding = PermissibleValue(text="folding")
    revolving = PermissibleValue(text="revolving")
    sliding = PermissibleValue(text="sliding")
    swinging = PermissibleValue(text="swinging")

    _defn = EnumDefinition(
        name="DoorMoveEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "rolling shutter",
                PermissibleValue(text="rolling shutter") )

class DoorTypeEnum(EnumDefinitionImpl):

    composite = PermissibleValue(text="composite")
    metal = PermissibleValue(text="metal")
    wooden = PermissibleValue(text="wooden")

    _defn = EnumDefinition(
        name="DoorTypeEnum",
    )

class DoorCompTypeEnum(EnumDefinitionImpl):

    revolving = PermissibleValue(text="revolving")
    sliding = PermissibleValue(text="sliding")
    telescopic = PermissibleValue(text="telescopic")

    _defn = EnumDefinition(
        name="DoorCompTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "metal covered",
                PermissibleValue(text="metal covered") )

class DoorTypeMetalEnum(EnumDefinitionImpl):

    collapsible = PermissibleValue(text="collapsible")
    hollow = PermissibleValue(text="hollow")

    _defn = EnumDefinition(
        name="DoorTypeMetalEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "corrugated steel",
                PermissibleValue(text="corrugated steel") )
        setattr(cls, "rolling shutters",
                PermissibleValue(text="rolling shutters") )
        setattr(cls, "steel plate",
                PermissibleValue(text="steel plate") )

class DoorTypeWoodEnum(EnumDefinitionImpl):

    battened = PermissibleValue(text="battened")
    flush = PermissibleValue(text="flush")
    louvered = PermissibleValue(text="louvered")

    _defn = EnumDefinition(
        name="DoorTypeWoodEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "bettened and ledged",
                PermissibleValue(text="bettened and ledged") )
        setattr(cls, "ledged and braced",
                PermissibleValue(text="ledged and braced") )
        setattr(cls, "ledged and framed",
                PermissibleValue(text="ledged and framed") )
        setattr(cls, "ledged, braced and frame",
                PermissibleValue(text="ledged, braced and frame") )
        setattr(cls, "framed and paneled",
                PermissibleValue(text="framed and paneled") )
        setattr(cls, "glashed or sash",
                PermissibleValue(text="glashed or sash") )
        setattr(cls, "wire gauged",
                PermissibleValue(text="wire gauged") )

class DrawingsEnum(EnumDefinitionImpl):

    operation = PermissibleValue(text="operation")
    construction = PermissibleValue(text="construction")
    bid = PermissibleValue(text="bid")
    design = PermissibleValue(text="design")
    diagram = PermissibleValue(text="diagram")
    sketch = PermissibleValue(text="sketch")

    _defn = EnumDefinition(
        name="DrawingsEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "as built",
                PermissibleValue(text="as built") )
        setattr(cls, "building navigation map",
                PermissibleValue(text="building navigation map") )

class FloorCondEnum(EnumDefinitionImpl):

    new = PermissibleValue(text="new")
    damaged = PermissibleValue(text="damaged")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="FloorCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )

class FloorFinishMatEnum(EnumDefinitionImpl):

    tile = PermissibleValue(text="tile")
    carpet = PermissibleValue(text="carpet")
    rug = PermissibleValue(text="rug")
    lineoleum = PermissibleValue(text="lineoleum")
    stone = PermissibleValue(text="stone")
    bamboo = PermissibleValue(text="bamboo")
    cork = PermissibleValue(text="cork")
    terrazo = PermissibleValue(text="terrazo")
    concrete = PermissibleValue(text="concrete")
    none = PermissibleValue(text="none")
    sealed = PermissibleValue(text="sealed")
    paint = PermissibleValue(text="paint")

    _defn = EnumDefinition(
        name="FloorFinishMatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "wood strip or parquet",
                PermissibleValue(text="wood strip or parquet") )
        setattr(cls, "laminate wood",
                PermissibleValue(text="laminate wood") )
        setattr(cls, "vinyl composition tile",
                PermissibleValue(text="vinyl composition tile") )
        setattr(cls, "sheet vinyl",
                PermissibleValue(text="sheet vinyl") )
        setattr(cls, "clear finish",
                PermissibleValue(text="clear finish") )
        setattr(cls, "none or unfinished",
                PermissibleValue(text="none or unfinished") )

class FloorWaterMoldEnum(EnumDefinitionImpl):

    condensation = PermissibleValue(text="condensation")

    _defn = EnumDefinition(
        name="FloorWaterMoldEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "mold odor",
                PermissibleValue(text="mold odor") )
        setattr(cls, "wet floor",
                PermissibleValue(text="wet floor") )
        setattr(cls, "water stains",
                PermissibleValue(text="water stains") )
        setattr(cls, "wall discoloration",
                PermissibleValue(text="wall discoloration") )
        setattr(cls, "floor discoloration",
                PermissibleValue(text="floor discoloration") )
        setattr(cls, "ceiling discoloration",
                PermissibleValue(text="ceiling discoloration") )
        setattr(cls, "peeling paint or wallpaper",
                PermissibleValue(text="peeling paint or wallpaper") )
        setattr(cls, "bulging walls",
                PermissibleValue(text="bulging walls") )

class FloorStrucEnum(EnumDefinitionImpl):

    balcony = PermissibleValue(text="balcony")
    concrete = PermissibleValue(text="concrete")

    _defn = EnumDefinition(
        name="FloorStrucEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "floating floor",
                PermissibleValue(text="floating floor") )
        setattr(cls, "glass floor",
                PermissibleValue(text="glass floor") )
        setattr(cls, "raised floor",
                PermissibleValue(text="raised floor") )
        setattr(cls, "sprung floor",
                PermissibleValue(text="sprung floor") )
        setattr(cls, "wood-framed",
                PermissibleValue(text="wood-framed") )

class FreqCleanEnum(EnumDefinitionImpl):

    Daily = PermissibleValue(text="Daily")
    Weekly = PermissibleValue(text="Weekly")
    Monthly = PermissibleValue(text="Monthly")
    Quarterly = PermissibleValue(text="Quarterly")
    Annually = PermissibleValue(text="Annually")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="FreqCleanEnum",
    )

class FurnitureEnum(EnumDefinitionImpl):

    cabinet = PermissibleValue(text="cabinet")
    chair = PermissibleValue(text="chair")
    desks = PermissibleValue(text="desks")

    _defn = EnumDefinition(
        name="FurnitureEnum",
    )

class GenderRestroomEnum(EnumDefinitionImpl):

    female = PermissibleValue(text="female")
    male = PermissibleValue(text="male")
    unisex = PermissibleValue(text="unisex")

    _defn = EnumDefinition(
        name="GenderRestroomEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "all gender",
                PermissibleValue(text="all gender") )
        setattr(cls, "gender neurtral",
                PermissibleValue(text="gender neurtral") )
        setattr(cls, "male and female",
                PermissibleValue(text="male and female") )

class HandidnessEnum(EnumDefinitionImpl):

    ambidexterity = PermissibleValue(text="ambidexterity")

    _defn = EnumDefinition(
        name="HandidnessEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "left handedness",
                PermissibleValue(text="left handedness") )
        setattr(cls, "mixed-handedness",
                PermissibleValue(text="mixed-handedness") )
        setattr(cls, "right handedness",
                PermissibleValue(text="right handedness") )

class HeatDelivLocEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")

    _defn = EnumDefinition(
        name="HeatDelivLocEnum",
    )

class IntWallCondEnum(EnumDefinitionImpl):

    new = PermissibleValue(text="new")
    damaged = PermissibleValue(text="damaged")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="IntWallCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )

class MechStrucEnum(EnumDefinitionImpl):

    subway = PermissibleValue(text="subway")
    coach = PermissibleValue(text="coach")
    carriage = PermissibleValue(text="carriage")
    elevator = PermissibleValue(text="elevator")
    escalator = PermissibleValue(text="escalator")
    boat = PermissibleValue(text="boat")
    train = PermissibleValue(text="train")
    car = PermissibleValue(text="car")
    bus = PermissibleValue(text="bus")

    _defn = EnumDefinition(
        name="MechStrucEnum",
    )

class OccupDocumentEnum(EnumDefinitionImpl):

    estimate = PermissibleValue(text="estimate")
    videos = PermissibleValue(text="videos")

    _defn = EnumDefinition(
        name="OccupDocumentEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "automated count",
                PermissibleValue(text="automated count") )
        setattr(cls, "manual count",
                PermissibleValue(text="manual count") )

class ExtWallOrientEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")
    northeast = PermissibleValue(text="northeast")
    southeast = PermissibleValue(text="southeast")
    southwest = PermissibleValue(text="southwest")
    northwest = PermissibleValue(text="northwest")

    _defn = EnumDefinition(
        name="ExtWallOrientEnum",
    )

class ExtWindowOrientEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")
    northeast = PermissibleValue(text="northeast")
    southeast = PermissibleValue(text="southeast")
    southwest = PermissibleValue(text="southwest")
    northwest = PermissibleValue(text="northwest")

    _defn = EnumDefinition(
        name="ExtWindowOrientEnum",
    )

class PresAnimalInsectEnum(EnumDefinitionImpl):

    cat = PermissibleValue(text="cat")
    dog = PermissibleValue(text="dog")
    rodent = PermissibleValue(text="rodent")
    snake = PermissibleValue(text="snake")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="PresAnimalInsectEnum",
    )

class QuadPosEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="QuadPosEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "North side",
                PermissibleValue(text="North side") )
        setattr(cls, "West side",
                PermissibleValue(text="West side") )
        setattr(cls, "South side",
                PermissibleValue(text="South side") )
        setattr(cls, "East side",
                PermissibleValue(text="East side") )

class RelSampLocEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="RelSampLocEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "edge of car",
                PermissibleValue(text="edge of car") )
        setattr(cls, "center of car",
                PermissibleValue(text="center of car") )
        setattr(cls, "under a seat",
                PermissibleValue(text="under a seat") )

class RoomCondtEnum(EnumDefinitionImpl):

    new = PermissibleValue(text="new")
    damaged = PermissibleValue(text="damaged")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="RoomCondtEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )
        setattr(cls, "visible signs of mold/mildew",
                PermissibleValue(text="visible signs of mold/mildew") )

class RoomLocEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="RoomLocEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "corner room",
                PermissibleValue(text="corner room") )
        setattr(cls, "interior room",
                PermissibleValue(text="interior room") )
        setattr(cls, "exterior wall",
                PermissibleValue(text="exterior wall") )

class RoomSampPosEnum(EnumDefinitionImpl):

    center = PermissibleValue(text="center")

    _defn = EnumDefinition(
        name="RoomSampPosEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "north corner",
                PermissibleValue(text="north corner") )
        setattr(cls, "south corner",
                PermissibleValue(text="south corner") )
        setattr(cls, "west corner",
                PermissibleValue(text="west corner") )
        setattr(cls, "east corner",
                PermissibleValue(text="east corner") )
        setattr(cls, "northeast corner",
                PermissibleValue(text="northeast corner") )
        setattr(cls, "northwest corner",
                PermissibleValue(text="northwest corner") )
        setattr(cls, "southeast corner",
                PermissibleValue(text="southeast corner") )
        setattr(cls, "southwest corner",
                PermissibleValue(text="southwest corner") )

class RoomTypeEnum(EnumDefinitionImpl):

    attic = PermissibleValue(text="attic")
    bathroom = PermissibleValue(text="bathroom")
    closet = PermissibleValue(text="closet")
    elevator = PermissibleValue(text="elevator")
    hallway = PermissibleValue(text="hallway")
    kitchen = PermissibleValue(text="kitchen")
    stairwell = PermissibleValue(text="stairwell")
    lobby = PermissibleValue(text="lobby")
    vestibule = PermissibleValue(text="vestibule")
    laboratory_wet = PermissibleValue(text="laboratory_wet")
    laboratory_dry = PermissibleValue(text="laboratory_dry")
    gymnasium = PermissibleValue(text="gymnasium")
    natatorium = PermissibleValue(text="natatorium")
    auditorium = PermissibleValue(text="auditorium")
    lockers = PermissibleValue(text="lockers")
    cafe = PermissibleValue(text="cafe")
    warehouse = PermissibleValue(text="warehouse")

    _defn = EnumDefinition(
        name="RoomTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "conference room",
                PermissibleValue(text="conference room") )
        setattr(cls, "examining room",
                PermissibleValue(text="examining room") )
        setattr(cls, "mail room",
                PermissibleValue(text="mail room") )
        setattr(cls, "private office",
                PermissibleValue(text="private office") )
        setattr(cls, "open office",
                PermissibleValue(text="open office") )
        setattr(cls, ",restroom",
                PermissibleValue(text=",restroom") )
        setattr(cls, "mechanical or electrical room",
                PermissibleValue(text="mechanical or electrical room") )
        setattr(cls, "data center",
                PermissibleValue(text="data center") )

class RoomConnectedEnum(EnumDefinitionImpl):

    attic = PermissibleValue(text="attic")
    bathroom = PermissibleValue(text="bathroom")
    closet = PermissibleValue(text="closet")
    elevator = PermissibleValue(text="elevator")
    hallway = PermissibleValue(text="hallway")
    kitchen = PermissibleValue(text="kitchen")
    office = PermissibleValue(text="office")
    stairwell = PermissibleValue(text="stairwell")

    _defn = EnumDefinition(
        name="RoomConnectedEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "conference room",
                PermissibleValue(text="conference room") )
        setattr(cls, "examining room",
                PermissibleValue(text="examining room") )
        setattr(cls, "mail room",
                PermissibleValue(text="mail room") )

class SampWeatherEnum(EnumDefinitionImpl):

    cloudy = PermissibleValue(text="cloudy")
    foggy = PermissibleValue(text="foggy")
    hail = PermissibleValue(text="hail")
    rain = PermissibleValue(text="rain")
    snow = PermissibleValue(text="snow")
    sleet = PermissibleValue(text="sleet")
    sunny = PermissibleValue(text="sunny")
    windy = PermissibleValue(text="windy")

    _defn = EnumDefinition(
        name="SampWeatherEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "clear sky",
                PermissibleValue(text="clear sky") )

class SampFloorEnum(EnumDefinitionImpl):

    basement = PermissibleValue(text="basement")
    lobby = PermissibleValue(text="lobby")

    _defn = EnumDefinition(
        name="SampFloorEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "1st floor",
                PermissibleValue(text="1st floor") )
        setattr(cls, "2nd floor",
                PermissibleValue(text="2nd floor") )

class SeasonUseEnum(EnumDefinitionImpl):

    Spring = PermissibleValue(text="Spring")
    Summer = PermissibleValue(text="Summer")
    Fall = PermissibleValue(text="Fall")
    Winter = PermissibleValue(text="Winter")

    _defn = EnumDefinition(
        name="SeasonUseEnum",
    )

class ShadingDeviceCondEnum(EnumDefinitionImpl):

    damaged = PermissibleValue(text="damaged")
    new = PermissibleValue(text="new")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="ShadingDeviceCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )

class ShadingDeviceTypeEnum(EnumDefinitionImpl):

    tree = PermissibleValue(text="tree")
    trellis = PermissibleValue(text="trellis")

    _defn = EnumDefinition(
        name="ShadingDeviceTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "bahama shutters",
                PermissibleValue(text="bahama shutters") )
        setattr(cls, "exterior roll blind",
                PermissibleValue(text="exterior roll blind") )
        setattr(cls, "gambrel awning",
                PermissibleValue(text="gambrel awning") )
        setattr(cls, "hood awning",
                PermissibleValue(text="hood awning") )
        setattr(cls, "porchroller awning",
                PermissibleValue(text="porchroller awning") )
        setattr(cls, "sarasota shutters",
                PermissibleValue(text="sarasota shutters") )
        setattr(cls, "slatted aluminum",
                PermissibleValue(text="slatted aluminum") )
        setattr(cls, "solid aluminum awning",
                PermissibleValue(text="solid aluminum awning") )
        setattr(cls, "sun screen",
                PermissibleValue(text="sun screen") )
        setattr(cls, "venetian awning",
                PermissibleValue(text="venetian awning") )

class SpecificEnum(EnumDefinitionImpl):

    operation = PermissibleValue(text="operation")
    construction = PermissibleValue(text="construction")
    bid = PermissibleValue(text="bid")
    design = PermissibleValue(text="design")
    photos = PermissibleValue(text="photos")

    _defn = EnumDefinition(
        name="SpecificEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "as built",
                PermissibleValue(text="as built") )

class TrainLineEnum(EnumDefinitionImpl):

    red = PermissibleValue(text="red")
    green = PermissibleValue(text="green")
    orange = PermissibleValue(text="orange")

    _defn = EnumDefinition(
        name="TrainLineEnum",
    )

class TrainStatLocEnum(EnumDefinitionImpl):

    riverside = PermissibleValue(text="riverside")

    _defn = EnumDefinition(
        name="TrainStatLocEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "south station above ground",
                PermissibleValue(text="south station above ground") )
        setattr(cls, "south station underground",
                PermissibleValue(text="south station underground") )
        setattr(cls, "south station amtrak",
                PermissibleValue(text="south station amtrak") )
        setattr(cls, "forest hills",
                PermissibleValue(text="forest hills") )

class TrainStopLocEnum(EnumDefinitionImpl):

    end = PermissibleValue(text="end")
    mid = PermissibleValue(text="mid")
    downtown = PermissibleValue(text="downtown")

    _defn = EnumDefinition(
        name="TrainStopLocEnum",
    )

class VisMediaEnum(EnumDefinitionImpl):

    photos = PermissibleValue(text="photos")
    videos = PermissibleValue(text="videos")
    interiors = PermissibleValue(text="interiors")
    equipment = PermissibleValue(text="equipment")

    _defn = EnumDefinition(
        name="VisMediaEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "commonly of the building",
                PermissibleValue(text="commonly of the building") )
        setattr(cls, "site context (adjacent buildings, vegetation, terrain, streets)",
                PermissibleValue(text="site context (adjacent buildings, vegetation, terrain, streets)") )
        setattr(cls, "3D scans",
                PermissibleValue(text="3D scans") )

class WallConstTypeEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="WallConstTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "frame construction",
                PermissibleValue(text="frame construction") )
        setattr(cls, "joisted masonry",
                PermissibleValue(text="joisted masonry") )
        setattr(cls, "light noncombustible",
                PermissibleValue(text="light noncombustible") )
        setattr(cls, "masonry noncombustible",
                PermissibleValue(text="masonry noncombustible") )
        setattr(cls, "modified fire resistive",
                PermissibleValue(text="modified fire resistive") )
        setattr(cls, "fire resistive",
                PermissibleValue(text="fire resistive") )

class WallFinishMatEnum(EnumDefinitionImpl):

    plaster = PermissibleValue(text="plaster")
    tile = PermissibleValue(text="tile")
    terrazzo = PermissibleValue(text="terrazzo")
    wood = PermissibleValue(text="wood")
    metal = PermissibleValue(text="metal")
    masonry = PermissibleValue(text="masonry")

    _defn = EnumDefinition(
        name="WallFinishMatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "gypsum plaster",
                PermissibleValue(text="gypsum plaster") )
        setattr(cls, "veneer plaster",
                PermissibleValue(text="veneer plaster") )
        setattr(cls, "gypsum board",
                PermissibleValue(text="gypsum board") )
        setattr(cls, "stone facing",
                PermissibleValue(text="stone facing") )
        setattr(cls, "acoustical treatment",
                PermissibleValue(text="acoustical treatment") )

class WallLocEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")

    _defn = EnumDefinition(
        name="WallLocEnum",
    )

class WallSurfTreatmentEnum(EnumDefinitionImpl):

    painted = PermissibleValue(text="painted")
    paneling = PermissibleValue(text="paneling")
    stucco = PermissibleValue(text="stucco")
    fabric = PermissibleValue(text="fabric")

    _defn = EnumDefinition(
        name="WallSurfTreatmentEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "wall paper",
                PermissibleValue(text="wall paper") )
        setattr(cls, "no treatment",
                PermissibleValue(text="no treatment") )

class WallTextureEnum(EnumDefinitionImpl):

    knockdown = PermissibleValue(text="knockdown")
    popcorn = PermissibleValue(text="popcorn")
    smooth = PermissibleValue(text="smooth")
    swirl = PermissibleValue(text="swirl")

    _defn = EnumDefinition(
        name="WallTextureEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "crows feet",
                PermissibleValue(text="crows feet") )
        setattr(cls, "crows-foot stomp",
                PermissibleValue(text="crows-foot stomp") )
        setattr(cls, "",
                PermissibleValue(text="") )
        setattr(cls, "double skip",
                PermissibleValue(text="double skip") )
        setattr(cls, "hawk and trowel",
                PermissibleValue(text="hawk and trowel") )
        setattr(cls, "orange peel",
                PermissibleValue(text="orange peel") )
        setattr(cls, "rosebud stomp",
                PermissibleValue(text="rosebud stomp") )
        setattr(cls, "Santa-Fe texture",
                PermissibleValue(text="Santa-Fe texture") )
        setattr(cls, "skip trowel",
                PermissibleValue(text="skip trowel") )
        setattr(cls, "stomp knockdown",
                PermissibleValue(text="stomp knockdown") )

class WaterFeatTypeEnum(EnumDefinitionImpl):

    fountain = PermissibleValue(text="fountain")
    pool = PermissibleValue(text="pool")
    stream = PermissibleValue(text="stream")
    waterfall = PermissibleValue(text="waterfall")

    _defn = EnumDefinition(
        name="WaterFeatTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "standing feature",
                PermissibleValue(text="standing feature") )

class WeekdayEnum(EnumDefinitionImpl):

    Monday = PermissibleValue(text="Monday")
    Tuesday = PermissibleValue(text="Tuesday")
    Wednesday = PermissibleValue(text="Wednesday")
    Thursday = PermissibleValue(text="Thursday")
    Friday = PermissibleValue(text="Friday")
    Saturday = PermissibleValue(text="Saturday")
    Sunday = PermissibleValue(text="Sunday")

    _defn = EnumDefinition(
        name="WeekdayEnum",
    )

class WindowCondEnum(EnumDefinitionImpl):

    damaged = PermissibleValue(text="damaged")
    new = PermissibleValue(text="new")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="WindowCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "needs repair",
                PermissibleValue(text="needs repair") )
        setattr(cls, "visible wear",
                PermissibleValue(text="visible wear") )

class WindowCoverEnum(EnumDefinitionImpl):

    blinds = PermissibleValue(text="blinds")
    curtains = PermissibleValue(text="curtains")
    none = PermissibleValue(text="none")

    _defn = EnumDefinition(
        name="WindowCoverEnum",
    )

class WindowHorizPosEnum(EnumDefinitionImpl):

    left = PermissibleValue(text="left")
    middle = PermissibleValue(text="middle")
    right = PermissibleValue(text="right")

    _defn = EnumDefinition(
        name="WindowHorizPosEnum",
    )

class WindowLocEnum(EnumDefinitionImpl):

    north = PermissibleValue(text="north")
    south = PermissibleValue(text="south")
    east = PermissibleValue(text="east")
    west = PermissibleValue(text="west")

    _defn = EnumDefinition(
        name="WindowLocEnum",
    )

class WindowMatEnum(EnumDefinitionImpl):

    clad = PermissibleValue(text="clad")
    fiberglass = PermissibleValue(text="fiberglass")
    metal = PermissibleValue(text="metal")
    vinyl = PermissibleValue(text="vinyl")
    wood = PermissibleValue(text="wood")

    _defn = EnumDefinition(
        name="WindowMatEnum",
    )

class WindowTypeEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="WindowTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "single-hung sash window",
                PermissibleValue(text="single-hung sash window") )
        setattr(cls, "horizontal sash window",
                PermissibleValue(text="horizontal sash window") )
        setattr(cls, "fixed window",
                PermissibleValue(text="fixed window") )

class WindowVertPosEnum(EnumDefinitionImpl):

    bottom = PermissibleValue(text="bottom")
    middle = PermissibleValue(text="middle")
    top = PermissibleValue(text="top")
    low = PermissibleValue(text="low")
    high = PermissibleValue(text="high")

    _defn = EnumDefinition(
        name="WindowVertPosEnum",
    )

class BiolStatEnum(EnumDefinitionImpl):

    wild = PermissibleValue(text="wild")
    natural = PermissibleValue(text="natural")
    hybrid = PermissibleValue(text="hybrid")
    mutant = PermissibleValue(text="mutant")

    _defn = EnumDefinition(
        name="BiolStatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "semi-natural",
                PermissibleValue(text="semi-natural") )
        setattr(cls, "inbred line",
                PermissibleValue(text="inbred line") )
        setattr(cls, "breeder's line",
                PermissibleValue(text="breeder's line") )
        setattr(cls, "clonal selection",
                PermissibleValue(text="clonal selection") )

class SampCaptStatusEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SampCaptStatusEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "active surveillance in response to an outbreak",
                PermissibleValue(text="active surveillance in response to an outbreak") )
        setattr(cls, "active surveillance not initiated by an outbreak",
                PermissibleValue(text="active surveillance not initiated by an outbreak") )
        setattr(cls, "farm sample",
                PermissibleValue(text="farm sample") )
        setattr(cls, "market sample",
                PermissibleValue(text="market sample") )

class SampDisStageEnum(EnumDefinitionImpl):

    dissemination = PermissibleValue(text="dissemination")
    infection = PermissibleValue(text="infection")
    inoculation = PermissibleValue(text="inoculation")
    penetration = PermissibleValue(text="penetration")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SampDisStageEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "growth and reproduction",
                PermissibleValue(text="growth and reproduction") )

class HostSexEnum(EnumDefinitionImpl):

    female = PermissibleValue(text="female")
    hermaphrodite = PermissibleValue(text="hermaphrodite")
    male = PermissibleValue(text="male")
    neuter = PermissibleValue(text="neuter")

    _defn = EnumDefinition(
        name="HostSexEnum",
    )

class DrugUsageEnum(EnumDefinitionImpl):

    month = PermissibleValue(text="month")
    week = PermissibleValue(text="week")
    day = PermissibleValue(text="day")
    hour = PermissibleValue(text="hour")

    _defn = EnumDefinition(
        name="DrugUsageEnum",
    )

class StudyCompltStatEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="StudyCompltStatEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "non-compliance",
                PermissibleValue(text="non-compliance") )
        setattr(cls, "lost to follow up",
                PermissibleValue(text="lost to follow up") )
        setattr(cls, "other-specify",
                PermissibleValue(text="other-specify") )

class SpecialDietEnum(EnumDefinitionImpl):

    vegetarian = PermissibleValue(text="vegetarian")

    _defn = EnumDefinition(
        name="SpecialDietEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "low carb",
                PermissibleValue(text="low carb") )
        setattr(cls, "reduced calorie",
                PermissibleValue(text="reduced calorie") )
        setattr(cls, "other(to be specified)",
                PermissibleValue(text="other(to be specified)") )

class DominantHandEnum(EnumDefinitionImpl):

    left = PermissibleValue(text="left")
    right = PermissibleValue(text="right")
    ambidextrous = PermissibleValue(text="ambidextrous")

    _defn = EnumDefinition(
        name="DominantHandEnum",
    )

class HcrEnum(EnumDefinitionImpl):

    Coalbed = PermissibleValue(text="Coalbed")
    Shale = PermissibleValue(text="Shale")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="HcrEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Oil Reservoir",
                PermissibleValue(text="Oil Reservoir") )
        setattr(cls, "Gas Reservoir",
                PermissibleValue(text="Gas Reservoir") )
        setattr(cls, "Oil Sand",
                PermissibleValue(text="Oil Sand") )
        setattr(cls, "Tight Oil Reservoir",
                PermissibleValue(text="Tight Oil Reservoir") )
        setattr(cls, "Tight Gas Reservoir",
                PermissibleValue(text="Tight Gas Reservoir") )

class HcProducedEnum(EnumDefinitionImpl):

    Oil = PermissibleValue(text="Oil")
    Gas = PermissibleValue(text="Gas")
    Bitumen = PermissibleValue(text="Bitumen")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="HcProducedEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Gas-Condensate",
                PermissibleValue(text="Gas-Condensate") )
        setattr(cls, "Coalbed Methane",
                PermissibleValue(text="Coalbed Methane") )

class LithologyEnum(EnumDefinitionImpl):

    Basement = PermissibleValue(text="Basement")
    Chalk = PermissibleValue(text="Chalk")
    Chert = PermissibleValue(text="Chert")
    Coal = PermissibleValue(text="Coal")
    Conglomerate = PermissibleValue(text="Conglomerate")
    Diatomite = PermissibleValue(text="Diatomite")
    Dolomite = PermissibleValue(text="Dolomite")
    Limestone = PermissibleValue(text="Limestone")
    Sandstone = PermissibleValue(text="Sandstone")
    Shale = PermissibleValue(text="Shale")
    Siltstone = PermissibleValue(text="Siltstone")
    Volcanic = PermissibleValue(text="Volcanic")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="LithologyEnum",
    )

class DeposEnvEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="DeposEnvEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Continental - Alluvial",
                PermissibleValue(text="Continental - Alluvial") )
        setattr(cls, "Continental - Aeolian",
                PermissibleValue(text="Continental - Aeolian") )
        setattr(cls, "Continental - Fluvial",
                PermissibleValue(text="Continental - Fluvial") )
        setattr(cls, "Continental - Lacustrine",
                PermissibleValue(text="Continental - Lacustrine") )
        setattr(cls, "Transitional - Deltaic",
                PermissibleValue(text="Transitional - Deltaic") )
        setattr(cls, "Transitional - Tidal",
                PermissibleValue(text="Transitional - Tidal") )
        setattr(cls, "Transitional - Lagoonal",
                PermissibleValue(text="Transitional - Lagoonal") )
        setattr(cls, "Transitional - Beach",
                PermissibleValue(text="Transitional - Beach") )
        setattr(cls, "Transitional - Lake",
                PermissibleValue(text="Transitional - Lake") )
        setattr(cls, "Marine - Shallow",
                PermissibleValue(text="Marine - Shallow") )
        setattr(cls, "Marine - Deep",
                PermissibleValue(text="Marine - Deep") )
        setattr(cls, "Marine - Reef",
                PermissibleValue(text="Marine - Reef") )
        setattr(cls, "Other - Evaporite",
                PermissibleValue(text="Other - Evaporite") )
        setattr(cls, "Other - Glacial",
                PermissibleValue(text="Other - Glacial") )
        setattr(cls, "Other - Volcanic",
                PermissibleValue(text="Other - Volcanic") )

class HcrGeolAgeEnum(EnumDefinitionImpl):

    Archean = PermissibleValue(text="Archean")
    Cambrian = PermissibleValue(text="Cambrian")
    Carboniferous = PermissibleValue(text="Carboniferous")
    Cenozoic = PermissibleValue(text="Cenozoic")
    Cretaceous = PermissibleValue(text="Cretaceous")
    Devonian = PermissibleValue(text="Devonian")
    Jurassic = PermissibleValue(text="Jurassic")
    Mesozoic = PermissibleValue(text="Mesozoic")
    Neogene = PermissibleValue(text="Neogene")
    Ordovician = PermissibleValue(text="Ordovician")
    Paleogene = PermissibleValue(text="Paleogene")
    Paleozoic = PermissibleValue(text="Paleozoic")
    Permian = PermissibleValue(text="Permian")
    Precambrian = PermissibleValue(text="Precambrian")
    Proterozoic = PermissibleValue(text="Proterozoic")
    Silurian = PermissibleValue(text="Silurian")
    Triassic = PermissibleValue(text="Triassic")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="HcrGeolAgeEnum",
    )

class SrKerogTypeEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SrKerogTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Type I",
                PermissibleValue(text="Type I") )
        setattr(cls, "Type II",
                PermissibleValue(text="Type II") )
        setattr(cls, "Type III",
                PermissibleValue(text="Type III") )
        setattr(cls, "Type IV",
                PermissibleValue(text="Type IV") )

class SrLithologyEnum(EnumDefinitionImpl):

    Clastic = PermissibleValue(text="Clastic")
    Carbonate = PermissibleValue(text="Carbonate")
    Coal = PermissibleValue(text="Coal")
    Biosilicieous = PermissibleValue(text="Biosilicieous")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SrLithologyEnum",
    )

class SrDepEnvEnum(EnumDefinitionImpl):

    Lacustine = PermissibleValue(text="Lacustine")
    Fluvioldeltaic = PermissibleValue(text="Fluvioldeltaic")
    Fluviomarine = PermissibleValue(text="Fluviomarine")
    Marine = PermissibleValue(text="Marine")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SrDepEnvEnum",
    )

class SrGeolAgeEnum(EnumDefinitionImpl):

    Archean = PermissibleValue(text="Archean")
    Cambrian = PermissibleValue(text="Cambrian")
    Carboniferous = PermissibleValue(text="Carboniferous")
    Cenozoic = PermissibleValue(text="Cenozoic")
    Cretaceous = PermissibleValue(text="Cretaceous")
    Devonian = PermissibleValue(text="Devonian")
    Jurassic = PermissibleValue(text="Jurassic")
    Mesozoic = PermissibleValue(text="Mesozoic")
    Neogene = PermissibleValue(text="Neogene")
    Ordovician = PermissibleValue(text="Ordovician")
    Paleogene = PermissibleValue(text="Paleogene")
    Paleozoic = PermissibleValue(text="Paleozoic")
    Permian = PermissibleValue(text="Permian")
    Precambrian = PermissibleValue(text="Precambrian")
    Proterozoic = PermissibleValue(text="Proterozoic")
    Silurian = PermissibleValue(text="Silurian")
    Triassic = PermissibleValue(text="Triassic")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SrGeolAgeEnum",
    )

class SampSubtypeEnum(EnumDefinitionImpl):

    biofilm = PermissibleValue(text="biofilm")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SampSubtypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "oil phase",
                PermissibleValue(text="oil phase") )
        setattr(cls, "water phase",
                PermissibleValue(text="water phase") )
        setattr(cls, "not applicable",
                PermissibleValue(text="not applicable") )

class SampMdEnum(EnumDefinitionImpl):

    DF = PermissibleValue(text="DF")
    RT = PermissibleValue(text="RT")
    KB = PermissibleValue(text="KB")
    MSL = PermissibleValue(text="MSL")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SampMdEnum",
    )

class AddRecovMethodEnum(EnumDefinitionImpl):

    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="AddRecovMethodEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Water Injection",
                PermissibleValue(text="Water Injection") )
        setattr(cls, "Dump Flood",
                PermissibleValue(text="Dump Flood") )
        setattr(cls, "Gas Injection",
                PermissibleValue(text="Gas Injection") )
        setattr(cls, "Wag Immiscible Injection",
                PermissibleValue(text="Wag Immiscible Injection") )
        setattr(cls, "Polymer Addition",
                PermissibleValue(text="Polymer Addition") )
        setattr(cls, "Surfactant Addition",
                PermissibleValue(text="Surfactant Addition") )
        setattr(cls, "Not Applicable",
                PermissibleValue(text="Not Applicable") )

class SampCollectPointEnum(EnumDefinitionImpl):

    well = PermissibleValue(text="well")
    wellhead = PermissibleValue(text="wellhead")
    separator = PermissibleValue(text="separator")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SampCollectPointEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "test well",
                PermissibleValue(text="test well") )
        setattr(cls, "drilling rig",
                PermissibleValue(text="drilling rig") )
        setattr(cls, "storage tank",
                PermissibleValue(text="storage tank") )

class GrowthHabitEnum(EnumDefinitionImpl):

    erect = PermissibleValue(text="erect")
    spreading = PermissibleValue(text="spreading")
    prostrate = PermissibleValue(text="prostrate")

    _defn = EnumDefinition(
        name="GrowthHabitEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "semi-erect",
                PermissibleValue(text="semi-erect") )

class PlantGrowthMedEnum(EnumDefinitionImpl):

    perlite = PermissibleValue(text="perlite")
    pumice = PermissibleValue(text="pumice")
    sand = PermissibleValue(text="sand")
    soil = PermissibleValue(text="soil")
    vermiculite = PermissibleValue(text="vermiculite")
    water = PermissibleValue(text="water")

    _defn = EnumDefinition(
        name="PlantGrowthMedEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "other artificial liquid medium",
                PermissibleValue(text="other artificial liquid medium") )
        setattr(cls, "other artificial solid medium",
                PermissibleValue(text="other artificial solid medium") )
        setattr(cls, "peat moss",
                PermissibleValue(text="peat moss") )

class PlantSexEnum(EnumDefinitionImpl):

    Androdioecious = PermissibleValue(text="Androdioecious")
    Androecious = PermissibleValue(text="Androecious")
    Androgynous = PermissibleValue(text="Androgynous")
    Androgynomonoecious = PermissibleValue(text="Androgynomonoecious")
    Andromonoecious = PermissibleValue(text="Andromonoecious")
    Bisexual = PermissibleValue(text="Bisexual")
    Dichogamous = PermissibleValue(text="Dichogamous")
    Diclinous = PermissibleValue(text="Diclinous")
    Dioecious = PermissibleValue(text="Dioecious")
    Gynodioecious = PermissibleValue(text="Gynodioecious")
    Gynoecious = PermissibleValue(text="Gynoecious")
    Gynomonoecious = PermissibleValue(text="Gynomonoecious")
    Hermaphroditic = PermissibleValue(text="Hermaphroditic")
    Imperfect = PermissibleValue(text="Imperfect")
    Monoclinous = PermissibleValue(text="Monoclinous")
    Monoecious = PermissibleValue(text="Monoecious")
    Perfect = PermissibleValue(text="Perfect")
    Polygamodioecious = PermissibleValue(text="Polygamodioecious")
    Polygamomonoecious = PermissibleValue(text="Polygamomonoecious")
    Polygamous = PermissibleValue(text="Polygamous")
    Protandrous = PermissibleValue(text="Protandrous")
    Protogynous = PermissibleValue(text="Protogynous")
    Subandroecious = PermissibleValue(text="Subandroecious")
    Subdioecious = PermissibleValue(text="Subdioecious")
    Subgynoecious = PermissibleValue(text="Subgynoecious")
    Synoecious = PermissibleValue(text="Synoecious")
    Trimonoecious = PermissibleValue(text="Trimonoecious")
    Trioecious = PermissibleValue(text="Trioecious")
    Unisexual = PermissibleValue(text="Unisexual")

    _defn = EnumDefinition(
        name="PlantSexEnum",
    )

class SedimentTypeEnum(EnumDefinitionImpl):

    biogenous = PermissibleValue(text="biogenous")
    cosmogenous = PermissibleValue(text="cosmogenous")
    hydrogenous = PermissibleValue(text="hydrogenous")
    lithogenous = PermissibleValue(text="lithogenous")

    _defn = EnumDefinition(
        name="SedimentTypeEnum",
    )

class TidalStageEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="TidalStageEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "low tide",
                PermissibleValue(text="low tide") )
        setattr(cls, "ebb tide",
                PermissibleValue(text="ebb tide") )
        setattr(cls, "flood tide",
                PermissibleValue(text="flood tide") )
        setattr(cls, "high tide",
                PermissibleValue(text="high tide") )

class CurLandUseEnum(EnumDefinitionImpl):

    cities = PermissibleValue(text="cities")
    farmstead = PermissibleValue(text="farmstead")
    rock = PermissibleValue(text="rock")
    sand = PermissibleValue(text="sand")
    gravel = PermissibleValue(text="gravel")
    mudflats = PermissibleValue(text="mudflats")
    badlands = PermissibleValue(text="badlands")
    rangeland = PermissibleValue(text="rangeland")
    hayland = PermissibleValue(text="hayland")

    _defn = EnumDefinition(
        name="CurLandUseEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "industrial areas",
                PermissibleValue(text="industrial areas") )
        setattr(cls, "roads/railroads",
                PermissibleValue(text="roads/railroads") )
        setattr(cls, "salt flats",
                PermissibleValue(text="salt flats") )
        setattr(cls, "permanent snow or ice",
                PermissibleValue(text="permanent snow or ice") )
        setattr(cls, "saline seeps",
                PermissibleValue(text="saline seeps") )
        setattr(cls, "mines/quarries",
                PermissibleValue(text="mines/quarries") )
        setattr(cls, "oil waste areas",
                PermissibleValue(text="oil waste areas") )
        setattr(cls, "small grains",
                PermissibleValue(text="small grains") )
        setattr(cls, "row crops",
                PermissibleValue(text="row crops") )
        setattr(cls, "vegetable crops",
                PermissibleValue(text="vegetable crops") )
        setattr(cls, "horticultural plants (e.g. tulips)",
                PermissibleValue(text="horticultural plants (e.g. tulips)") )
        setattr(cls, "marshlands (grass,sedges,rushes)",
                PermissibleValue(text="marshlands (grass,sedges,rushes)") )
        setattr(cls, "tundra (mosses,lichens)",
                PermissibleValue(text="tundra (mosses,lichens)") )
        setattr(cls, "pastureland (grasslands used for livestock grazing)",
                PermissibleValue(text="pastureland (grasslands used for livestock grazing)") )
        setattr(cls, "meadows (grasses,alfalfa,fescue,bromegrass,timothy)",
                PermissibleValue(text="meadows (grasses,alfalfa,fescue,bromegrass,timothy)") )
        setattr(cls, "shrub land (e.g. mesquite,sage-brush,creosote bush,shrub oak,eucalyptus)",
                PermissibleValue(text="shrub land (e.g. mesquite,sage-brush,creosote bush,shrub oak,eucalyptus)") )
        setattr(cls, "successional shrub land (tree saplings,hazels,sumacs,chokecherry,shrub dogwoods,blackberries)",
                PermissibleValue(text="successional shrub land (tree saplings,hazels,sumacs,chokecherry,shrub dogwoods,blackberries)") )
        setattr(cls, "shrub crops (blueberries,nursery ornamentals,filberts)",
                PermissibleValue(text="shrub crops (blueberries,nursery ornamentals,filberts)") )
        setattr(cls, "vine crops (grapes)",
                PermissibleValue(text="vine crops (grapes)") )
        setattr(cls, "conifers (e.g. pine,spruce,fir,cypress)",
                PermissibleValue(text="conifers (e.g. pine,spruce,fir,cypress)") )
        setattr(cls, "hardwoods (e.g. oak,hickory,elm,aspen)",
                PermissibleValue(text="hardwoods (e.g. oak,hickory,elm,aspen)") )
        setattr(cls, "intermixed hardwood and conifers",
                PermissibleValue(text="intermixed hardwood and conifers") )
        setattr(cls, "tropical (e.g. mangrove,palms)",
                PermissibleValue(text="tropical (e.g. mangrove,palms)") )
        setattr(cls, "rainforest (evergreen forest receiving greater than 406 cm annual rainfall)",
                PermissibleValue(text="rainforest (evergreen forest receiving greater than 406 cm annual rainfall)") )
        setattr(cls, "swamp (permanent or semi-permanent water body dominated by woody plants)",
                PermissibleValue(text="swamp (permanent or semi-permanent water body dominated by woody plants)") )
        setattr(cls, "crop trees (nuts,fruit,christmas trees,nursery trees)",
                PermissibleValue(text="crop trees (nuts,fruit,christmas trees,nursery trees)") )

class TillageEnum(EnumDefinitionImpl):

    drill = PermissibleValue(text="drill")
    chisel = PermissibleValue(text="chisel")
    tined = PermissibleValue(text="tined")
    mouldboard = PermissibleValue(text="mouldboard")

    _defn = EnumDefinition(
        name="TillageEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "cutting disc",
                PermissibleValue(text="cutting disc") )
        setattr(cls, "ridge till",
                PermissibleValue(text="ridge till") )
        setattr(cls, "strip tillage",
                PermissibleValue(text="strip tillage") )
        setattr(cls, "zonal tillage",
                PermissibleValue(text="zonal tillage") )
        setattr(cls, "disc plough",
                PermissibleValue(text="disc plough") )

class SoilHorizonEnum(EnumDefinitionImpl):

    Permafrost = PermissibleValue(text="Permafrost")

    _defn = EnumDefinition(
        name="SoilHorizonEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "O horizon",
                PermissibleValue(text="O horizon") )
        setattr(cls, "A horizon",
                PermissibleValue(text="A horizon") )
        setattr(cls, "E horizon",
                PermissibleValue(text="E horizon") )
        setattr(cls, "B horizon",
                PermissibleValue(text="B horizon") )
        setattr(cls, "C horizon",
                PermissibleValue(text="C horizon") )
        setattr(cls, "R layer",
                PermissibleValue(text="R layer") )

class FaoClassEnum(EnumDefinitionImpl):

    Acrisols = PermissibleValue(text="Acrisols")
    Andosols = PermissibleValue(text="Andosols")
    Arenosols = PermissibleValue(text="Arenosols")
    Cambisols = PermissibleValue(text="Cambisols")
    Chernozems = PermissibleValue(text="Chernozems")
    Ferralsols = PermissibleValue(text="Ferralsols")
    Fluvisols = PermissibleValue(text="Fluvisols")
    Gleysols = PermissibleValue(text="Gleysols")
    Greyzems = PermissibleValue(text="Greyzems")
    Gypsisols = PermissibleValue(text="Gypsisols")
    Histosols = PermissibleValue(text="Histosols")
    Kastanozems = PermissibleValue(text="Kastanozems")
    Lithosols = PermissibleValue(text="Lithosols")
    Luvisols = PermissibleValue(text="Luvisols")
    Nitosols = PermissibleValue(text="Nitosols")
    Phaeozems = PermissibleValue(text="Phaeozems")
    Planosols = PermissibleValue(text="Planosols")
    Podzols = PermissibleValue(text="Podzols")
    Podzoluvisols = PermissibleValue(text="Podzoluvisols")
    Rankers = PermissibleValue(text="Rankers")
    Regosols = PermissibleValue(text="Regosols")
    Rendzinas = PermissibleValue(text="Rendzinas")
    Solonchaks = PermissibleValue(text="Solonchaks")
    Solonetz = PermissibleValue(text="Solonetz")
    Vertisols = PermissibleValue(text="Vertisols")
    Yermosols = PermissibleValue(text="Yermosols")

    _defn = EnumDefinition(
        name="FaoClassEnum",
    )

class ProfilePositionEnum(EnumDefinitionImpl):

    summit = PermissibleValue(text="summit")
    shoulder = PermissibleValue(text="shoulder")
    backslope = PermissibleValue(text="backslope")
    footslope = PermissibleValue(text="footslope")
    toeslope = PermissibleValue(text="toeslope")

    _defn = EnumDefinition(
        name="ProfilePositionEnum",
    )

class DrainageClassEnum(EnumDefinitionImpl):

    poorly = PermissibleValue(text="poorly")
    well = PermissibleValue(text="well")

    _defn = EnumDefinition(
        name="DrainageClassEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "very poorly",
                PermissibleValue(text="very poorly") )
        setattr(cls, "somewhat poorly",
                PermissibleValue(text="somewhat poorly") )
        setattr(cls, "moderately well",
                PermissibleValue(text="moderately well") )
        setattr(cls, "excessively drained",
                PermissibleValue(text="excessively drained") )

class TypeOfSymbiosisEnum(EnumDefinitionImpl):

    commensalistic = PermissibleValue(text="commensalistic")
    mutualistic = PermissibleValue(text="mutualistic")
    parasitic = PermissibleValue(text="parasitic")

    _defn = EnumDefinition(
        name="TypeOfSymbiosisEnum",
    )

class ModeTransmissionEnum(EnumDefinitionImpl):

    vertical = PermissibleValue(text="vertical")

    _defn = EnumDefinition(
        name="ModeTransmissionEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "horizontal:castrator",
                PermissibleValue(text="horizontal:castrator") )
        setattr(cls, "horizontal:directly transmitted",
                PermissibleValue(text="horizontal:directly transmitted") )
        setattr(cls, "horizontal:micropredator",
                PermissibleValue(text="horizontal:micropredator") )
        setattr(cls, "horizontal:parasitoid",
                PermissibleValue(text="horizontal:parasitoid") )
        setattr(cls, "horizontal:trophically transmitted",
                PermissibleValue(text="horizontal:trophically transmitted") )
        setattr(cls, "horizontal:vector transmitted",
                PermissibleValue(text="horizontal:vector transmitted") )

class RouteTransmissionEnum(EnumDefinitionImpl):

    transplacental = PermissibleValue(text="transplacental")

    _defn = EnumDefinition(
        name="RouteTransmissionEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "environmental:faecal-oral",
                PermissibleValue(text="environmental:faecal-oral") )
        setattr(cls, "vector-borne:vector penetration",
                PermissibleValue(text="vector-borne:vector penetration") )

class HostSpecificityEnum(EnumDefinitionImpl):

    generalist = PermissibleValue(text="generalist")

    _defn = EnumDefinition(
        name="HostSpecificityEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "family-specific",
                PermissibleValue(text="family-specific") )
        setattr(cls, "",
                PermissibleValue(text="") )
        setattr(cls, "genus-specific",
                PermissibleValue(text="genus-specific") )
        setattr(cls, "species-specific",
                PermissibleValue(text="species-specific") )

class SymbiontHostRoleEnum(EnumDefinitionImpl):

    accidental = PermissibleValue(text="accidental")
    definitive = PermissibleValue(text="definitive")
    intermediate = PermissibleValue(text="intermediate")
    paratenic = PermissibleValue(text="paratenic")
    reservoir = PermissibleValue(text="reservoir")

    _defn = EnumDefinition(
        name="SymbiontHostRoleEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "dead-end",
                PermissibleValue(text="dead-end") )
        setattr(cls, "single host",
                PermissibleValue(text="single host") )

class HostCellularLocEnum(EnumDefinitionImpl):

    intracellular = PermissibleValue(text="intracellular")
    extracellular = PermissibleValue(text="extracellular")

    _defn = EnumDefinition(
        name="HostCellularLocEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "not determined",
                PermissibleValue(text="not determined") )

class SpikeinCountEnum(EnumDefinitionImpl):

    MPN = PermissibleValue(text="MPN")
    qPCR = PermissibleValue(text="qPCR")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="SpikeinCountEnum",
    )

class CultResultEnum(EnumDefinitionImpl):

    absent = PermissibleValue(text="absent")
    active = PermissibleValue(text="active")
    inactive = PermissibleValue(text="inactive")
    negative = PermissibleValue(text="negative")
    no = PermissibleValue(text="no")
    present = PermissibleValue(text="present")
    positive = PermissibleValue(text="positive")
    yes = PermissibleValue(text="yes")

    _defn = EnumDefinition(
        name="CultResultEnum",
    )

class FoodQualityDateEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="FoodQualityDateEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "best by",
                PermissibleValue(text="best by") )
        setattr(cls, "best if used by",
                PermissibleValue(text="best if used by") )
        setattr(cls, "freeze by",
                PermissibleValue(text="freeze by") )
        setattr(cls, "use by",
                PermissibleValue(text="use by") )

class FoodTraceListEnum(EnumDefinitionImpl):

    cucumbers = PermissibleValue(text="cucumbers")
    crustaceans = PermissibleValue(text="crustaceans")
    melons = PermissibleValue(text="melons")
    peppers = PermissibleValue(text="peppers")
    sprouts = PermissibleValue(text="sprouts")
    tomatoes = PermissibleValue(text="tomatoes")

    _defn = EnumDefinition(
        name="FoodTraceListEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "cheeses-other than hard cheeses",
                PermissibleValue(text="cheeses-other than hard cheeses") )
        setattr(cls, "finfish-including smoked finfish",
                PermissibleValue(text="finfish-including smoked finfish") )
        setattr(cls, "fruits and vegetables-fresh cut",
                PermissibleValue(text="fruits and vegetables-fresh cut") )
        setattr(cls, "herbs-fresh",
                PermissibleValue(text="herbs-fresh") )
        setattr(cls, "leafy greens-including fresh cut leafy greens",
                PermissibleValue(text="leafy greens-including fresh cut leafy greens") )
        setattr(cls, "mollusks-bivalves",
                PermissibleValue(text="mollusks-bivalves") )
        setattr(cls, "nut butter",
                PermissibleValue(text="nut butter") )
        setattr(cls, "ready to eat deli salads",
                PermissibleValue(text="ready to eat deli salads") )
        setattr(cls, "tropical tree fruits",
                PermissibleValue(text="tropical tree fruits") )
        setattr(cls, "shell eggs",
                PermissibleValue(text="shell eggs") )

class MicrobStartCountEnum(EnumDefinitionImpl):

    MPN = PermissibleValue(text="MPN")
    qPCR = PermissibleValue(text="qPCR")
    other = PermissibleValue(text="other")

    _defn = EnumDefinition(
        name="MicrobStartCountEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "spread plate",
                PermissibleValue(text="spread plate") )

class SampTransportContEnum(EnumDefinitionImpl):

    bottle = PermissibleValue(text="bottle")
    cooler = PermissibleValue(text="cooler")

    _defn = EnumDefinition(
        name="SampTransportContEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "glass vial",
                PermissibleValue(text="glass vial") )
        setattr(cls, "plastic vial",
                PermissibleValue(text="plastic vial") )
        setattr(cls, "",
                PermissibleValue(text="") )
        setattr(cls, "vendor supplied container",
                PermissibleValue(text="vendor supplied container") )

class SampPurposeEnum(EnumDefinitionImpl):

    research = PermissibleValue(text="research")

    _defn = EnumDefinition(
        name="SampPurposeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "active surveillance in response to an outbreak",
                PermissibleValue(text="active surveillance in response to an outbreak") )
        setattr(cls, "active surveillance not initiated by an outbreak",
                PermissibleValue(text="active surveillance not initiated by an outbreak") )
        setattr(cls, "clinical trial",
                PermissibleValue(text="clinical trial") )
        setattr(cls, "cluster investigation",
                PermissibleValue(text="cluster investigation") )
        setattr(cls, "environmental assessment",
                PermissibleValue(text="environmental assessment") )
        setattr(cls, "farm sample",
                PermissibleValue(text="farm sample") )
        setattr(cls, "field trial",
                PermissibleValue(text="field trial") )
        setattr(cls, "for cause",
                PermissibleValue(text="for cause") )
        setattr(cls, "industry internal investigation",
                PermissibleValue(text="industry internal investigation") )
        setattr(cls, "market sample",
                PermissibleValue(text="market sample") )
        setattr(cls, "passive surveillance",
                PermissibleValue(text="passive surveillance") )
        setattr(cls, "population based studies",
                PermissibleValue(text="population based studies") )
        setattr(cls, "research and development",
                PermissibleValue(text="research and development") )

class AnimalBodyCondEnum(EnumDefinitionImpl):

    normal = PermissibleValue(text="normal")

    _defn = EnumDefinition(
        name="AnimalBodyCondEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "over conditioned",
                PermissibleValue(text="over conditioned") )
        setattr(cls, "under conditioned",
                PermissibleValue(text="under conditioned") )

class AnimalSexEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="AnimalSexEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "castrated female",
                PermissibleValue(text="castrated female") )
        setattr(cls, "castrated male",
                PermissibleValue(text="castrated male") )
        setattr(cls, "intact female",
                PermissibleValue(text="intact female") )
        setattr(cls, "intact male",
                PermissibleValue(text="intact male") )

class FacilityTypeEnum(EnumDefinitionImpl):

    distribution = PermissibleValue(text="distribution")
    packaging = PermissibleValue(text="packaging")
    storage = PermissibleValue(text="storage")

    _defn = EnumDefinition(
        name="FacilityTypeEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "ambient storage",
                PermissibleValue(text="ambient storage") )
        setattr(cls, "caterer-catering point",
                PermissibleValue(text="caterer-catering point") )
        setattr(cls, "frozen storage",
                PermissibleValue(text="frozen storage") )
        setattr(cls, "importer-broker",
                PermissibleValue(text="importer-broker") )
        setattr(cls, "interstate conveyance",
                PermissibleValue(text="interstate conveyance") )
        setattr(cls, "labeler-relabeler",
                PermissibleValue(text="labeler-relabeler") )
        setattr(cls, "manufacturing-processing",
                PermissibleValue(text="manufacturing-processing") )
        setattr(cls, "refrigerated storage",
                PermissibleValue(text="refrigerated storage") )

class SampSurfMoistureEnum(EnumDefinitionImpl):

    submerged = PermissibleValue(text="submerged")

    _defn = EnumDefinition(
        name="SampSurfMoistureEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "intermittent moisture",
                PermissibleValue(text="intermittent moisture") )
        setattr(cls, "not present",
                PermissibleValue(text="not present") )

class SampLocConditionEnum(EnumDefinitionImpl):

    damaged = PermissibleValue(text="damaged")
    new = PermissibleValue(text="new")
    rupture = PermissibleValue(text="rupture")

    _defn = EnumDefinition(
        name="SampLocConditionEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "visible signs of mold-mildew",
                PermissibleValue(text="visible signs of mold-mildew") )
        setattr(cls, "visible weariness repair",
                PermissibleValue(text="visible weariness repair") )

class FarmWaterSourceEnum(EnumDefinitionImpl):

    freshwater = PermissibleValue(text="freshwater")
    brackish = PermissibleValue(text="brackish")
    saline = PermissibleValue(text="saline")
    natural = PermissibleValue(text="natural")
    manmade = PermissibleValue(text="manmade")
    estuary = PermissibleValue(text="estuary")
    lake = PermissibleValue(text="lake")
    pond = PermissibleValue(text="pond")
    canal = PermissibleValue(text="canal")
    stream = PermissibleValue(text="stream")
    river = PermissibleValue(text="river")
    well = PermissibleValue(text="well")
    ditch = PermissibleValue(text="ditch")
    reservior = PermissibleValue(text="reservior")
    municipal = PermissibleValue(text="municipal")

    _defn = EnumDefinition(
        name="FarmWaterSourceEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "melt pond",
                PermissibleValue(text="melt pond") )
        setattr(cls, "collected rainwater",
                PermissibleValue(text="collected rainwater") )
        setattr(cls, "storage tank",
                PermissibleValue(text="storage tank") )

class ExtrWeatherEventEnum(EnumDefinitionImpl):

    drought = PermissibleValue(text="drought")
    flood = PermissibleValue(text="flood")
    frost = PermissibleValue(text="frost")
    hail = PermissibleValue(text="hail")

    _defn = EnumDefinition(
        name="ExtrWeatherEventEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "dust storm",
                PermissibleValue(text="dust storm") )
        setattr(cls, "extreme cold",
                PermissibleValue(text="extreme cold") )
        setattr(cls, "extreme heat",
                PermissibleValue(text="extreme heat") )
        setattr(cls, "high precipitationhigh winds",
                PermissibleValue(text="high precipitationhigh winds") )

class PlantReprodCropEnum(EnumDefinitionImpl):

    ratoon = PermissibleValue(text="ratoon")
    seed = PermissibleValue(text="seed")
    seedling = PermissibleValue(text="seedling")

    _defn = EnumDefinition(
        name="PlantReprodCropEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "plant cutting",
                PermissibleValue(text="plant cutting") )
        setattr(cls, "pregerminated seed",
                PermissibleValue(text="pregerminated seed") )
        setattr(cls, "whole mature plant",
                PermissibleValue(text="whole mature plant") )

class SoilTextureClassEnum(EnumDefinitionImpl):

    clay = PermissibleValue(text="clay")
    loam = PermissibleValue(text="loam")
    sand = PermissibleValue(text="sand")
    silt = PermissibleValue(text="silt")

    _defn = EnumDefinition(
        name="SoilTextureClassEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "clay loam",
                PermissibleValue(text="clay loam") )
        setattr(cls, "loamy sand",
                PermissibleValue(text="loamy sand") )
        setattr(cls, "sandy clay",
                PermissibleValue(text="sandy clay") )
        setattr(cls, "sandy clay loam",
                PermissibleValue(text="sandy clay loam") )
        setattr(cls, "sandy loam",
                PermissibleValue(text="sandy loam") )
        setattr(cls, "silty clay",
                PermissibleValue(text="silty clay") )
        setattr(cls, "silty clay loam",
                PermissibleValue(text="silty clay loam") )
        setattr(cls, "silt loam",
                PermissibleValue(text="silt loam") )

class WaterSourceSharedEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="WaterSourceSharedEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "multiple users, agricutural",
                PermissibleValue(text="multiple users, agricutural") )
        setattr(cls, "multiple users, other",
                PermissibleValue(text="multiple users, other") )
        setattr(cls, "no sharing",
                PermissibleValue(text="no sharing") )

class FoodCleanProcEnum(EnumDefinitionImpl):

    soaking = PermissibleValue(text="soaking")

    _defn = EnumDefinition(
        name="FoodCleanProcEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "drum and drain",
                PermissibleValue(text="drum and drain") )
        setattr(cls, "manual spinner",
                PermissibleValue(text="manual spinner") )
        setattr(cls, "rinsed with sanitizer solution",
                PermissibleValue(text="rinsed with sanitizer solution") )
        setattr(cls, "rinsed with water",
                PermissibleValue(text="rinsed with water") )
        setattr(cls, "scrubbed with brush",
                PermissibleValue(text="scrubbed with brush") )
        setattr(cls, "scrubbed with hand",
                PermissibleValue(text="scrubbed with hand") )

class AssemblySoftwareEnum(EnumDefinitionImpl):

    _defn = EnumDefinition(
        name="AssemblySoftwareEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "Finished genome",
                PermissibleValue(text="Finished genome") )
        setattr(cls, "High-quality draft genome",
                PermissibleValue(text="High-quality draft genome") )
        setattr(cls, "Medium-quality draft genome",
                PermissibleValue(text="Medium-quality draft genome") )
        setattr(cls, "Low-quality draft genome",
                PermissibleValue(text="Low-quality draft genome") )
        setattr(cls, "Genome fragment(s)",
                PermissibleValue(text="Genome fragment(s)") )

class HorizonEnum(EnumDefinitionImpl):

    Permafrost = PermissibleValue(text="Permafrost")

    _defn = EnumDefinition(
        name="HorizonEnum",
    )

    @classmethod
    def _addvals(cls):
        setattr(cls, "O horizon",
                PermissibleValue(text="O horizon") )
        setattr(cls, "A horizon",
                PermissibleValue(text="A horizon") )
        setattr(cls, "E horizon",
                PermissibleValue(text="E horizon") )
        setattr(cls, "B horizon",
                PermissibleValue(text="B horizon") )
        setattr(cls, "C horizon",
                PermissibleValue(text="C horizon") )
        setattr(cls, "R layer",
                PermissibleValue(text="R layer") )

# Slots
class slots:
    pass

slots.core_field = Slot(uri=MIXS.VOCAB.core_field, name="core field", curie=MIXS.VOCAB.curie('core_field'),
                   model_uri=MIXS.VOCAB.core_field, domain=None, range=Optional[str])

slots.investigation_field = Slot(uri=MIXS.VOCAB.investigation_field, name="investigation field", curie=MIXS.VOCAB.curie('investigation_field'),
                   model_uri=MIXS.VOCAB.investigation_field, domain=None, range=Optional[str])

slots.nucleic_acid_sequence_source_field = Slot(uri=MIXS.VOCAB.nucleic_acid_sequence_source_field, name="nucleic acid sequence source field", curie=MIXS.VOCAB.curie('nucleic_acid_sequence_source_field'),
                   model_uri=MIXS.VOCAB.nucleic_acid_sequence_source_field, domain=None, range=Optional[str])

slots.sequencing_field = Slot(uri=MIXS.VOCAB.sequencing_field, name="sequencing field", curie=MIXS.VOCAB.curie('sequencing_field'),
                   model_uri=MIXS.VOCAB.sequencing_field, domain=None, range=Optional[str])

slots.mixs_extension_field = Slot(uri=MIXS.VOCAB.mixs_extension_field, name="mixs extension field", curie=MIXS.VOCAB.curie('mixs_extension_field'),
                   model_uri=MIXS.VOCAB.mixs_extension_field, domain=None, range=Optional[str])

slots.environment_field = Slot(uri=MIXS.VOCAB.environment_field, name="environment field", curie=MIXS.VOCAB.curie('environment_field'),
                   model_uri=MIXS.VOCAB.environment_field, domain=None, range=Optional[str])

slots.samp_name = Slot(uri=MIXS['0001107'], name="samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.samp_name, domain=None, range=Optional[str])

slots.samp_taxon_id = Slot(uri=MIXS['0001320'], name="samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.samp_taxon_id, domain=None, range=Optional[str])

slots.project_name = Slot(uri=MIXS['0000092'], name="project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.project_name, domain=None, range=Optional[str])

slots.experimental_factor = Slot(uri=MIXS['0000008'], name="experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.experimental_factor, domain=None, range=Optional[str])

slots.lat_lon = Slot(uri=MIXS['0000009'], name="lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.lat_lon, domain=None, range=Optional[str])

slots.depth = Slot(uri=MIXS['0000018'], name="depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.depth, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.alt = Slot(uri=MIXS['0000094'], name="alt", curie=MIXS.curie('0000094'),
                   model_uri=MIXS.VOCAB.alt, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.elev = Slot(uri=MIXS['0000093'], name="elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.elev, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.temp = Slot(uri=MIXS['0000113'], name="temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.geo_loc_name = Slot(uri=MIXS['0000010'], name="geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.geo_loc_name, domain=None, range=Optional[str])

slots.collection_date = Slot(uri=MIXS['0000011'], name="collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.collection_date, domain=None, range=Optional[Union[str, XSDDate]])

slots.neg_cont_type = Slot(uri=MIXS['0001321'], name="neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.pos_cont_type = Slot(uri=MIXS['0001322'], name="pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.pos_cont_type, domain=None, range=Optional[str])

slots.env_broad_scale = Slot(uri=MIXS['0000012'], name="env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.env_broad_scale, domain=None, range=Optional[str])

slots.env_local_scale = Slot(uri=MIXS['0000013'], name="env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.env_local_scale, domain=None, range=Optional[str])

slots.env_medium = Slot(uri=MIXS['0000014'], name="env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.env_medium, domain=None, range=Optional[str])

slots.subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.subspecf_gen_lin, domain=None, range=Optional[str])

slots.ploidy = Slot(uri=MIXS['0000021'], name="ploidy", curie=MIXS.curie('0000021'),
                   model_uri=MIXS.VOCAB.ploidy, domain=None, range=Optional[str])

slots.num_replicons = Slot(uri=MIXS['0000022'], name="num_replicons", curie=MIXS.curie('0000022'),
                   model_uri=MIXS.VOCAB.num_replicons, domain=None, range=Optional[int])

slots.extrachrom_elements = Slot(uri=MIXS['0000023'], name="extrachrom_elements", curie=MIXS.curie('0000023'),
                   model_uri=MIXS.VOCAB.extrachrom_elements, domain=None, range=Optional[int])

slots.estimated_size = Slot(uri=MIXS['0000024'], name="estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.estimated_size, domain=None, range=Optional[str])

slots.ref_biomaterial = Slot(uri=MIXS['0000025'], name="ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.ref_biomaterial, domain=None, range=Optional[str])

slots.source_mat_id = Slot(uri=MIXS['0000026'], name="source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.source_mat_id, domain=None, range=Optional[str])

slots.pathogenicity = Slot(uri=MIXS['0000027'], name="pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.pathogenicity, domain=None, range=Optional[str])

slots.biotic_relationship = Slot(uri=MIXS['0000028'], name="biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.specific_host = Slot(uri=MIXS['0000029'], name="specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.specific_host, domain=None, range=Optional[str])

slots.host_spec_range = Slot(uri=MIXS['0000030'], name="host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.host_spec_range, domain=None, range=Optional[int])

slots.host_disease_stat = Slot(uri=MIXS['0000031'], name="host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.host_disease_stat, domain=None, range=Optional[str])

slots.trophic_level = Slot(uri=MIXS['0000032'], name="trophic_level", curie=MIXS.curie('0000032'),
                   model_uri=MIXS.VOCAB.trophic_level, domain=None, range=Optional[Union[str, "TrophicLevelEnum"]])

slots.propagation = Slot(uri=MIXS['0000033'], name="propagation", curie=MIXS.curie('0000033'),
                   model_uri=MIXS.VOCAB.propagation, domain=None, range=Optional[str])

slots.encoded_traits = Slot(uri=MIXS['0000034'], name="encoded_traits", curie=MIXS.curie('0000034'),
                   model_uri=MIXS.VOCAB.encoded_traits, domain=None, range=Optional[str])

slots.rel_to_oxygen = Slot(uri=MIXS['0000015'], name="rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.isol_growth_condt = Slot(uri=MIXS['0000003'], name="isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.isol_growth_condt, domain=None, range=Optional[str])

slots.samp_collec_device = Slot(uri=MIXS['0000002'], name="samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.samp_collec_device, domain=None, range=Optional[str])

slots.samp_collec_method = Slot(uri=MIXS['0001225'], name="samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.samp_collec_method, domain=None, range=Optional[str])

slots.samp_mat_process = Slot(uri=MIXS['0000016'], name="samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.samp_mat_process, domain=None, range=Optional[str])

slots.size_frac = Slot(uri=MIXS['0000017'], name="size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.size_frac, domain=None, range=Optional[str])

slots.samp_size = Slot(uri=MIXS['0000001'], name="samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.samp_size, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.source_uvig = Slot(uri=MIXS['0000035'], name="source_uvig", curie=MIXS.curie('0000035'),
                   model_uri=MIXS.VOCAB.source_uvig, domain=None, range=Optional[Union[str, "SourceUvigEnum"]])

slots.virus_enrich_appr = Slot(uri=MIXS['0000036'], name="virus_enrich_appr", curie=MIXS.curie('0000036'),
                   model_uri=MIXS.VOCAB.virus_enrich_appr, domain=None, range=Optional[Union[str, "VirusEnrichApprEnum"]])

slots.nucl_acid_ext = Slot(uri=MIXS['0000037'], name="nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.nucl_acid_ext, domain=None, range=Optional[str])

slots.nucl_acid_amp = Slot(uri=MIXS['0000038'], name="nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.nucl_acid_amp, domain=None, range=Optional[str])

slots.lib_size = Slot(uri=MIXS['0000039'], name="lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.lib_size, domain=None, range=Optional[int])

slots.lib_reads_seqd = Slot(uri=MIXS['0000040'], name="lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.lib_reads_seqd, domain=None, range=Optional[int])

slots.lib_layout = Slot(uri=MIXS['0000041'], name="lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.lib_vector = Slot(uri=MIXS['0000042'], name="lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.lib_vector, domain=None, range=Optional[str])

slots.lib_screen = Slot(uri=MIXS['0000043'], name="lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.lib_screen, domain=None, range=Optional[str])

slots.target_gene = Slot(uri=MIXS['0000044'], name="target_gene", curie=MIXS.curie('0000044'),
                   model_uri=MIXS.VOCAB.target_gene, domain=None, range=Optional[str])

slots.target_subfragment = Slot(uri=MIXS['0000045'], name="target_subfragment", curie=MIXS.curie('0000045'),
                   model_uri=MIXS.VOCAB.target_subfragment, domain=None, range=Optional[str])

slots.pcr_primers = Slot(uri=MIXS['0000046'], name="pcr_primers", curie=MIXS.curie('0000046'),
                   model_uri=MIXS.VOCAB.pcr_primers, domain=None, range=Optional[str])

slots.mid = Slot(uri=MIXS['0000047'], name="mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.mid, domain=None, range=Optional[str])

slots.adapters = Slot(uri=MIXS['0000048'], name="adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.adapters, domain=None, range=Optional[str])

slots.pcr_cond = Slot(uri=MIXS['0000049'], name="pcr_cond", curie=MIXS.curie('0000049'),
                   model_uri=MIXS.VOCAB.pcr_cond, domain=None, range=Optional[str])

slots.seq_meth = Slot(uri=MIXS['0000050'], name="seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.seq_meth, domain=None, range=Optional[str])

slots.seq_quality_check = Slot(uri=MIXS['0000051'], name="seq_quality_check", curie=MIXS.curie('0000051'),
                   model_uri=MIXS.VOCAB.seq_quality_check, domain=None, range=Optional[str])

slots.chimera_check = Slot(uri=MIXS['0000052'], name="chimera_check", curie=MIXS.curie('0000052'),
                   model_uri=MIXS.VOCAB.chimera_check, domain=None, range=Optional[str])

slots.tax_ident = Slot(uri=MIXS['0000053'], name="tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.assembly_qual = Slot(uri=MIXS['0000056'], name="assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.assembly_qual, domain=None, range=Optional[Union[str, "AssemblyQualEnum"]])

slots.assembly_name = Slot(uri=MIXS['0000057'], name="assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.assembly_name, domain=None, range=Optional[str])

slots.assembly_software = Slot(uri=MIXS['0000058'], name="assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.assembly_software, domain=None, range=Optional[str])

slots.annot = Slot(uri=MIXS['0000059'], name="annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.annot, domain=None, range=Optional[str])

slots.number_contig = Slot(uri=MIXS['0000060'], name="number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.number_contig, domain=None, range=Optional[int])

slots.feat_pred = Slot(uri=MIXS['0000061'], name="feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.feat_pred, domain=None, range=Optional[str])

slots.ref_db = Slot(uri=MIXS['0000062'], name="ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.ref_db, domain=None, range=Optional[str])

slots.sim_search_meth = Slot(uri=MIXS['0000063'], name="sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.sim_search_meth, domain=None, range=Optional[str])

slots.tax_class = Slot(uri=MIXS['0000064'], name="tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.tax_class, domain=None, range=Optional[str])

slots.x_16s_recover = Slot(uri=MIXS['0000065'], name="x_16s_recover", curie=MIXS.curie('0000065'),
                   model_uri=MIXS.VOCAB.x_16s_recover, domain=None, range=Optional[str])

slots.x_16s_recover_software = Slot(uri=MIXS['0000066'], name="x_16s_recover_software", curie=MIXS.curie('0000066'),
                   model_uri=MIXS.VOCAB.x_16s_recover_software, domain=None, range=Optional[str])

slots.trnas = Slot(uri=MIXS['0000067'], name="trnas", curie=MIXS.curie('0000067'),
                   model_uri=MIXS.VOCAB.trnas, domain=None, range=Optional[int])

slots.trna_ext_software = Slot(uri=MIXS['0000068'], name="trna_ext_software", curie=MIXS.curie('0000068'),
                   model_uri=MIXS.VOCAB.trna_ext_software, domain=None, range=Optional[str])

slots.compl_score = Slot(uri=MIXS['0000069'], name="compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.compl_software = Slot(uri=MIXS['0000070'], name="compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.compl_software, domain=None, range=Optional[str])

slots.compl_appr = Slot(uri=MIXS['0000071'], name="compl_appr", curie=MIXS.curie('0000071'),
                   model_uri=MIXS.VOCAB.compl_appr, domain=None, range=Optional[Union[str, "ComplApprEnum"]])

slots.contam_score = Slot(uri=MIXS['0000072'], name="contam_score", curie=MIXS.curie('0000072'),
                   model_uri=MIXS.VOCAB.contam_score, domain=None, range=Optional[str])

slots.contam_screen_input = Slot(uri=MIXS['0000005'], name="contam_screen_input", curie=MIXS.curie('0000005'),
                   model_uri=MIXS.VOCAB.contam_screen_input, domain=None, range=Optional[str])

slots.contam_screen_param = Slot(uri=MIXS['0000073'], name="contam_screen_param", curie=MIXS.curie('0000073'),
                   model_uri=MIXS.VOCAB.contam_screen_param, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(ref db|kmer|coverage|combination);.+'))

slots.decontam_software = Slot(uri=MIXS['0000074'], name="decontam_software", curie=MIXS.curie('0000074'),
                   model_uri=MIXS.VOCAB.decontam_software, domain=None, range=Optional[Union[str, "DecontamSoftwareEnum"]])

slots.sort_tech = Slot(uri=MIXS['0000075'], name="sort_tech", curie=MIXS.curie('0000075'),
                   model_uri=MIXS.VOCAB.sort_tech, domain=None, range=Optional[Union[str, "SortTechEnum"]])

slots.single_cell_lysis_appr = Slot(uri=MIXS['0000076'], name="single_cell_lysis_appr", curie=MIXS.curie('0000076'),
                   model_uri=MIXS.VOCAB.single_cell_lysis_appr, domain=None, range=Optional[Union[str, "SingleCellLysisApprEnum"]])

slots.single_cell_lysis_prot = Slot(uri=MIXS['0000054'], name="single_cell_lysis_prot", curie=MIXS.curie('0000054'),
                   model_uri=MIXS.VOCAB.single_cell_lysis_prot, domain=None, range=Optional[str])

slots.wga_amp_appr = Slot(uri=MIXS['0000055'], name="wga_amp_appr", curie=MIXS.curie('0000055'),
                   model_uri=MIXS.VOCAB.wga_amp_appr, domain=None, range=Optional[str])

slots.wga_amp_kit = Slot(uri=MIXS['0000006'], name="wga_amp_kit", curie=MIXS.curie('0000006'),
                   model_uri=MIXS.VOCAB.wga_amp_kit, domain=None, range=Optional[str])

slots.bin_param = Slot(uri=MIXS['0000077'], name="bin_param", curie=MIXS.curie('0000077'),
                   model_uri=MIXS.VOCAB.bin_param, domain=None, range=Optional[Union[str, "BinParamEnum"]])

slots.bin_software = Slot(uri=MIXS['0000078'], name="bin_software", curie=MIXS.curie('0000078'),
                   model_uri=MIXS.VOCAB.bin_software, domain=None, range=Optional[str])

slots.reassembly_bin = Slot(uri=MIXS['0000079'], name="reassembly_bin", curie=MIXS.curie('0000079'),
                   model_uri=MIXS.VOCAB.reassembly_bin, domain=None, range=Optional[str])

slots.mag_cov_software = Slot(uri=MIXS['0000080'], name="mag_cov_software", curie=MIXS.curie('0000080'),
                   model_uri=MIXS.VOCAB.mag_cov_software, domain=None, range=Optional[Union[str, "MagCovSoftwareEnum"]])

slots.vir_ident_software = Slot(uri=MIXS['0000081'], name="vir_ident_software", curie=MIXS.curie('0000081'),
                   model_uri=MIXS.VOCAB.vir_ident_software, domain=None, range=Optional[str])

slots.pred_genome_type = Slot(uri=MIXS['0000082'], name="pred_genome_type", curie=MIXS.curie('0000082'),
                   model_uri=MIXS.VOCAB.pred_genome_type, domain=None, range=Optional[Union[str, "PredGenomeTypeEnum"]])

slots.pred_genome_struc = Slot(uri=MIXS['0000083'], name="pred_genome_struc", curie=MIXS.curie('0000083'),
                   model_uri=MIXS.VOCAB.pred_genome_struc, domain=None, range=Optional[Union[str, "PredGenomeStrucEnum"]])

slots.detec_type = Slot(uri=MIXS['0000084'], name="detec_type", curie=MIXS.curie('0000084'),
                   model_uri=MIXS.VOCAB.detec_type, domain=None, range=Optional[str])

slots.otu_class_appr = Slot(uri=MIXS['0000085'], name="otu_class_appr", curie=MIXS.curie('0000085'),
                   model_uri=MIXS.VOCAB.otu_class_appr, domain=None, range=Optional[str])

slots.otu_seq_comp_appr = Slot(uri=MIXS['0000086'], name="otu_seq_comp_appr", curie=MIXS.curie('0000086'),
                   model_uri=MIXS.VOCAB.otu_seq_comp_appr, domain=None, range=Optional[str])

slots.otu_db = Slot(uri=MIXS['0000087'], name="otu_db", curie=MIXS.curie('0000087'),
                   model_uri=MIXS.VOCAB.otu_db, domain=None, range=Optional[str])

slots.host_pred_appr = Slot(uri=MIXS['0000088'], name="host_pred_appr", curie=MIXS.curie('0000088'),
                   model_uri=MIXS.VOCAB.host_pred_appr, domain=None, range=Optional[Union[str, "HostPredApprEnum"]])

slots.host_pred_est_acc = Slot(uri=MIXS['0000089'], name="host_pred_est_acc", curie=MIXS.curie('0000089'),
                   model_uri=MIXS.VOCAB.host_pred_est_acc, domain=None, range=Optional[str])

slots.associated_resource = Slot(uri=MIXS['0000091'], name="associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.associated_resource, domain=None, range=Optional[str])

slots.sop = Slot(uri=MIXS['0000090'], name="sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.sop, domain=None, range=Optional[str])

slots.barometric_press = Slot(uri=MIXS['0000096'], name="barometric_press", curie=MIXS.curie('0000096'),
                   model_uri=MIXS.VOCAB.barometric_press, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.carb_dioxide = Slot(uri=MIXS['0000097'], name="carb_dioxide", curie=MIXS.curie('0000097'),
                   model_uri=MIXS.VOCAB.carb_dioxide, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.carb_monoxide = Slot(uri=MIXS['0000098'], name="carb_monoxide", curie=MIXS.curie('0000098'),
                   model_uri=MIXS.VOCAB.carb_monoxide, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.chem_administration = Slot(uri=MIXS['0000751'], name="chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.chem_administration, domain=None, range=Optional[Union[str, List[str]]])

slots.humidity = Slot(uri=MIXS['0000100'], name="humidity", curie=MIXS.curie('0000100'),
                   model_uri=MIXS.VOCAB.humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.methane = Slot(uri=MIXS['0000101'], name="methane", curie=MIXS.curie('0000101'),
                   model_uri=MIXS.VOCAB.methane, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.organism_count = Slot(uri=MIXS['0000103'], name="organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.organism_count, domain=None, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.oxygen = Slot(uri=MIXS['0000104'], name="oxygen", curie=MIXS.curie('0000104'),
                   model_uri=MIXS.VOCAB.oxygen, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.oxy_stat_samp = Slot(uri=MIXS['0000753'], name="oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.oxy_stat_samp, domain=None, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.perturbation = Slot(uri=MIXS['0000754'], name="perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.perturbation, domain=None, range=Optional[Union[str, List[str]]])

slots.pollutants = Slot(uri=MIXS['0000107'], name="pollutants", curie=MIXS.curie('0000107'),
                   model_uri=MIXS.VOCAB.pollutants, domain=None, range=Optional[Union[str, List[str]]])

slots.air_particulate_matter_concentration = Slot(uri=MIXS['0000108'], name="air particulate matter concentration", curie=MIXS.curie('0000108'),
                   model_uri=MIXS.VOCAB.air_particulate_matter_concentration, domain=None, range=Optional[Union[str, List[str]]])

slots.salinity = Slot(uri=MIXS['0000183'], name="salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.salinity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_store_dur = Slot(uri=MIXS['0000116'], name="samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.samp_store_dur, domain=None, range=Optional[str])

slots.samp_store_loc = Slot(uri=MIXS['0000755'], name="samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.samp_store_loc, domain=None, range=Optional[str])

slots.samp_store_temp = Slot(uri=MIXS['0000110'], name="samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.samp_store_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.solar_irradiance = Slot(uri=MIXS['0000112'], name="solar_irradiance", curie=MIXS.curie('0000112'),
                   model_uri=MIXS.VOCAB.solar_irradiance, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ventilation_rate = Slot(uri=MIXS['0000114'], name="ventilation_rate", curie=MIXS.curie('0000114'),
                   model_uri=MIXS.VOCAB.ventilation_rate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ventilation_type = Slot(uri=MIXS['0000756'], name="ventilation_type", curie=MIXS.curie('0000756'),
                   model_uri=MIXS.VOCAB.ventilation_type, domain=None, range=Optional[str])

slots.volatile_org_comp = Slot(uri=MIXS['0000115'], name="volatile_org_comp", curie=MIXS.curie('0000115'),
                   model_uri=MIXS.VOCAB.volatile_org_comp, domain=None, range=Optional[Union[str, List[str]]])

slots.wind_direction = Slot(uri=MIXS['0000757'], name="wind_direction", curie=MIXS.curie('0000757'),
                   model_uri=MIXS.VOCAB.wind_direction, domain=None, range=Optional[str])

slots.wind_speed = Slot(uri=MIXS['0000118'], name="wind_speed", curie=MIXS.curie('0000118'),
                   model_uri=MIXS.VOCAB.wind_speed, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.misc_param = Slot(uri=MIXS['0000752'], name="misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.misc_param, domain=None, range=Optional[Union[str, List[str]]])

slots.surf_material = Slot(uri=MIXS['0000758'], name="surf_material", curie=MIXS.curie('0000758'),
                   model_uri=MIXS.VOCAB.surf_material, domain=None, range=Optional[Union[str, "SurfMaterialEnum"]])

slots.surf_air_cont = Slot(uri=MIXS['0000759'], name="surf_air_cont", curie=MIXS.curie('0000759'),
                   model_uri=MIXS.VOCAB.surf_air_cont, domain=None, range=Optional[Union[Union[str, "SurfAirContEnum"], List[Union[str, "SurfAirContEnum"]]]])

slots.rel_air_humidity = Slot(uri=MIXS['0000121'], name="rel_air_humidity", curie=MIXS.curie('0000121'),
                   model_uri=MIXS.VOCAB.rel_air_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.abs_air_humidity = Slot(uri=MIXS['0000122'], name="abs_air_humidity", curie=MIXS.curie('0000122'),
                   model_uri=MIXS.VOCAB.abs_air_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.surf_humidity = Slot(uri=MIXS['0000123'], name="surf_humidity", curie=MIXS.curie('0000123'),
                   model_uri=MIXS.VOCAB.surf_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.air_temp = Slot(uri=MIXS['0000113'], name="air_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.air_temp, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.surf_temp = Slot(uri=MIXS['0000125'], name="surf_temp", curie=MIXS.curie('0000125'),
                   model_uri=MIXS.VOCAB.surf_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.surf_moisture_ph = Slot(uri=MIXS['0000760'], name="surf_moisture_ph", curie=MIXS.curie('0000760'),
                   model_uri=MIXS.VOCAB.surf_moisture_ph, domain=None, range=Optional[float])

slots.build_occup_type = Slot(uri=MIXS['0000761'], name="build_occup_type", curie=MIXS.curie('0000761'),
                   model_uri=MIXS.VOCAB.build_occup_type, domain=None, range=Optional[Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]]])

slots.surf_moisture = Slot(uri=MIXS['0000128'], name="surf_moisture", curie=MIXS.curie('0000128'),
                   model_uri=MIXS.VOCAB.surf_moisture, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.dew_point = Slot(uri=MIXS['0000129'], name="dew_point", curie=MIXS.curie('0000129'),
                   model_uri=MIXS.VOCAB.dew_point, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.indoor_space = Slot(uri=MIXS['0000763'], name="indoor_space", curie=MIXS.curie('0000763'),
                   model_uri=MIXS.VOCAB.indoor_space, domain=None, range=Optional[Union[str, "IndoorSpaceEnum"]])

slots.indoor_surf = Slot(uri=MIXS['0000764'], name="indoor_surf", curie=MIXS.curie('0000764'),
                   model_uri=MIXS.VOCAB.indoor_surf, domain=None, range=Optional[Union[str, "IndoorSurfEnum"]])

slots.filter_type = Slot(uri=MIXS['0000765'], name="filter_type", curie=MIXS.curie('0000765'),
                   model_uri=MIXS.VOCAB.filter_type, domain=None, range=Optional[Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]]])

slots.heat_cool_type = Slot(uri=MIXS['0000766'], name="heat_cool_type", curie=MIXS.curie('0000766'),
                   model_uri=MIXS.VOCAB.heat_cool_type, domain=None, range=Optional[Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]]])

slots.substructure_type = Slot(uri=MIXS['0000767'], name="substructure_type", curie=MIXS.curie('0000767'),
                   model_uri=MIXS.VOCAB.substructure_type, domain=None, range=Optional[Union[Union[str, "SubstructureTypeEnum"], List[Union[str, "SubstructureTypeEnum"]]]])

slots.building_setting = Slot(uri=MIXS['0000768'], name="building_setting", curie=MIXS.curie('0000768'),
                   model_uri=MIXS.VOCAB.building_setting, domain=None, range=Optional[Union[str, "BuildingSettingEnum"]])

slots.light_type = Slot(uri=MIXS['0000769'], name="light_type", curie=MIXS.curie('0000769'),
                   model_uri=MIXS.VOCAB.light_type, domain=None, range=Optional[Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]]])

slots.samp_sort_meth = Slot(uri=MIXS['0000216'], name="samp_sort_meth", curie=MIXS.curie('0000216'),
                   model_uri=MIXS.VOCAB.samp_sort_meth, domain=None, range=Optional[Union[str, List[str]]])

slots.space_typ_state = Slot(uri=MIXS['0000770'], name="space_typ_state", curie=MIXS.curie('0000770'),
                   model_uri=MIXS.VOCAB.space_typ_state, domain=None, range=Optional[str])

slots.typ_occup_density = Slot(uri=MIXS['0000771'], name="typ_occup_density", curie=MIXS.curie('0000771'),
                   model_uri=MIXS.VOCAB.typ_occup_density, domain=None, range=Optional[float])

slots.occup_samp = Slot(uri=MIXS['0000772'], name="occup_samp", curie=MIXS.curie('0000772'),
                   model_uri=MIXS.VOCAB.occup_samp, domain=None, range=Optional[int])

slots.occup_density_samp = Slot(uri=MIXS['0000217'], name="occup_density_samp", curie=MIXS.curie('0000217'),
                   model_uri=MIXS.VOCAB.occup_density_samp, domain=None, range=Optional[float])

slots.address = Slot(uri=MIXS['0000218'], name="address", curie=MIXS.curie('0000218'),
                   model_uri=MIXS.VOCAB.address, domain=None, range=Optional[str])

slots.adj_room = Slot(uri=MIXS['0000219'], name="adj_room", curie=MIXS.curie('0000219'),
                   model_uri=MIXS.VOCAB.adj_room, domain=None, range=Optional[str])

slots.aero_struc = Slot(uri=MIXS['0000773'], name="aero_struc", curie=MIXS.curie('0000773'),
                   model_uri=MIXS.VOCAB.aero_struc, domain=None, range=Optional[str])

slots.amount_light = Slot(uri=MIXS['0000140'], name="amount_light", curie=MIXS.curie('0000140'),
                   model_uri=MIXS.VOCAB.amount_light, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.arch_struc = Slot(uri=MIXS['0000774'], name="arch_struc", curie=MIXS.curie('0000774'),
                   model_uri=MIXS.VOCAB.arch_struc, domain=None, range=Optional[Union[str, "ArchStrucEnum"]])

slots.avg_occup = Slot(uri=MIXS['0000775'], name="avg_occup", curie=MIXS.curie('0000775'),
                   model_uri=MIXS.VOCAB.avg_occup, domain=None, range=Optional[float])

slots.avg_dew_point = Slot(uri=MIXS['0000141'], name="avg_dew_point", curie=MIXS.curie('0000141'),
                   model_uri=MIXS.VOCAB.avg_dew_point, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.avg_temp = Slot(uri=MIXS['0000142'], name="avg_temp", curie=MIXS.curie('0000142'),
                   model_uri=MIXS.VOCAB.avg_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.bathroom_count = Slot(uri=MIXS['0000776'], name="bathroom_count", curie=MIXS.curie('0000776'),
                   model_uri=MIXS.VOCAB.bathroom_count, domain=None, range=Optional[int])

slots.bedroom_count = Slot(uri=MIXS['0000777'], name="bedroom_count", curie=MIXS.curie('0000777'),
                   model_uri=MIXS.VOCAB.bedroom_count, domain=None, range=Optional[int])

slots.built_struc_age = Slot(uri=MIXS['0000145'], name="built_struc_age", curie=MIXS.curie('0000145'),
                   model_uri=MIXS.VOCAB.built_struc_age, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.built_struc_set = Slot(uri=MIXS['0000778'], name="built_struc_set", curie=MIXS.curie('0000778'),
                   model_uri=MIXS.VOCAB.built_struc_set, domain=None, range=Optional[str])

slots.built_struc_type = Slot(uri=MIXS['0000721'], name="built_struc_type", curie=MIXS.curie('0000721'),
                   model_uri=MIXS.VOCAB.built_struc_type, domain=None, range=Optional[str])

slots.ceil_area = Slot(uri=MIXS['0000148'], name="ceil_area", curie=MIXS.curie('0000148'),
                   model_uri=MIXS.VOCAB.ceil_area, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ceil_cond = Slot(uri=MIXS['0000779'], name="ceil_cond", curie=MIXS.curie('0000779'),
                   model_uri=MIXS.VOCAB.ceil_cond, domain=None, range=Optional[Union[str, "CeilCondEnum"]])

slots.ceil_finish_mat = Slot(uri=MIXS['0000780'], name="ceil_finish_mat", curie=MIXS.curie('0000780'),
                   model_uri=MIXS.VOCAB.ceil_finish_mat, domain=None, range=Optional[Union[str, "CeilFinishMatEnum"]])

slots.ceil_water_mold = Slot(uri=MIXS['0000781'], name="ceil_water_mold", curie=MIXS.curie('0000781'),
                   model_uri=MIXS.VOCAB.ceil_water_mold, domain=None, range=Optional[str])

slots.ceil_struc = Slot(uri=MIXS['0000782'], name="ceil_struc", curie=MIXS.curie('0000782'),
                   model_uri=MIXS.VOCAB.ceil_struc, domain=None, range=Optional[str])

slots.ceil_texture = Slot(uri=MIXS['0000783'], name="ceil_texture", curie=MIXS.curie('0000783'),
                   model_uri=MIXS.VOCAB.ceil_texture, domain=None, range=Optional[Union[str, "CeilTextureEnum"]])

slots.ceil_thermal_mass = Slot(uri=MIXS['0000143'], name="ceil_thermal_mass", curie=MIXS.curie('0000143'),
                   model_uri=MIXS.VOCAB.ceil_thermal_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ceil_type = Slot(uri=MIXS['0000784'], name="ceil_type", curie=MIXS.curie('0000784'),
                   model_uri=MIXS.VOCAB.ceil_type, domain=None, range=Optional[Union[str, "CeilTypeEnum"]])

slots.cool_syst_id = Slot(uri=MIXS['0000785'], name="cool_syst_id", curie=MIXS.curie('0000785'),
                   model_uri=MIXS.VOCAB.cool_syst_id, domain=None, range=Optional[int])

slots.date_last_rain = Slot(uri=MIXS['0000786'], name="date_last_rain", curie=MIXS.curie('0000786'),
                   model_uri=MIXS.VOCAB.date_last_rain, domain=None, range=Optional[Union[str, XSDDate]])

slots.build_docs = Slot(uri=MIXS['0000787'], name="build_docs", curie=MIXS.curie('0000787'),
                   model_uri=MIXS.VOCAB.build_docs, domain=None, range=Optional[Union[str, "BuildDocsEnum"]])

slots.door_size = Slot(uri=MIXS['0000158'], name="door_size", curie=MIXS.curie('0000158'),
                   model_uri=MIXS.VOCAB.door_size, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.door_cond = Slot(uri=MIXS['0000788'], name="door_cond", curie=MIXS.curie('0000788'),
                   model_uri=MIXS.VOCAB.door_cond, domain=None, range=Optional[Union[str, "DoorCondEnum"]])

slots.door_direct = Slot(uri=MIXS['0000789'], name="door_direct", curie=MIXS.curie('0000789'),
                   model_uri=MIXS.VOCAB.door_direct, domain=None, range=Optional[Union[str, "DoorDirectEnum"]])

slots.door_loc = Slot(uri=MIXS['0000790'], name="door_loc", curie=MIXS.curie('0000790'),
                   model_uri=MIXS.VOCAB.door_loc, domain=None, range=Optional[Union[str, "DoorLocEnum"]])

slots.door_mat = Slot(uri=MIXS['0000791'], name="door_mat", curie=MIXS.curie('0000791'),
                   model_uri=MIXS.VOCAB.door_mat, domain=None, range=Optional[Union[str, "DoorMatEnum"]])

slots.door_move = Slot(uri=MIXS['0000792'], name="door_move", curie=MIXS.curie('0000792'),
                   model_uri=MIXS.VOCAB.door_move, domain=None, range=Optional[Union[str, "DoorMoveEnum"]])

slots.door_water_mold = Slot(uri=MIXS['0000793'], name="door_water_mold", curie=MIXS.curie('0000793'),
                   model_uri=MIXS.VOCAB.door_water_mold, domain=None, range=Optional[str])

slots.door_type = Slot(uri=MIXS['0000794'], name="door_type", curie=MIXS.curie('0000794'),
                   model_uri=MIXS.VOCAB.door_type, domain=None, range=Optional[Union[str, "DoorTypeEnum"]])

slots.door_comp_type = Slot(uri=MIXS['0000795'], name="door_comp_type", curie=MIXS.curie('0000795'),
                   model_uri=MIXS.VOCAB.door_comp_type, domain=None, range=Optional[Union[str, "DoorCompTypeEnum"]])

slots.door_type_metal = Slot(uri=MIXS['0000796'], name="door_type_metal", curie=MIXS.curie('0000796'),
                   model_uri=MIXS.VOCAB.door_type_metal, domain=None, range=Optional[Union[str, "DoorTypeMetalEnum"]])

slots.door_type_wood = Slot(uri=MIXS['0000797'], name="door_type_wood", curie=MIXS.curie('0000797'),
                   model_uri=MIXS.VOCAB.door_type_wood, domain=None, range=Optional[Union[str, "DoorTypeWoodEnum"]])

slots.drawings = Slot(uri=MIXS['0000798'], name="drawings", curie=MIXS.curie('0000798'),
                   model_uri=MIXS.VOCAB.drawings, domain=None, range=Optional[Union[str, "DrawingsEnum"]])

slots.elevator = Slot(uri=MIXS['0000799'], name="elevator", curie=MIXS.curie('0000799'),
                   model_uri=MIXS.VOCAB.elevator, domain=None, range=Optional[int])

slots.escalator = Slot(uri=MIXS['0000800'], name="escalator", curie=MIXS.curie('0000800'),
                   model_uri=MIXS.VOCAB.escalator, domain=None, range=Optional[int])

slots.exp_duct = Slot(uri=MIXS['0000144'], name="exp_duct", curie=MIXS.curie('0000144'),
                   model_uri=MIXS.VOCAB.exp_duct, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.exp_pipe = Slot(uri=MIXS['0000220'], name="exp_pipe", curie=MIXS.curie('0000220'),
                   model_uri=MIXS.VOCAB.exp_pipe, domain=None, range=Optional[int])

slots.ext_door = Slot(uri=MIXS['0000170'], name="ext_door", curie=MIXS.curie('0000170'),
                   model_uri=MIXS.VOCAB.ext_door, domain=None, range=Optional[int])

slots.fireplace_type = Slot(uri=MIXS['0000802'], name="fireplace_type", curie=MIXS.curie('0000802'),
                   model_uri=MIXS.VOCAB.fireplace_type, domain=None, range=Optional[str])

slots.floor_age = Slot(uri=MIXS['0000164'], name="floor_age", curie=MIXS.curie('0000164'),
                   model_uri=MIXS.VOCAB.floor_age, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.floor_area = Slot(uri=MIXS['0000165'], name="floor_area", curie=MIXS.curie('0000165'),
                   model_uri=MIXS.VOCAB.floor_area, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.floor_cond = Slot(uri=MIXS['0000803'], name="floor_cond", curie=MIXS.curie('0000803'),
                   model_uri=MIXS.VOCAB.floor_cond, domain=None, range=Optional[Union[str, "FloorCondEnum"]])

slots.floor_count = Slot(uri=MIXS['0000225'], name="floor_count", curie=MIXS.curie('0000225'),
                   model_uri=MIXS.VOCAB.floor_count, domain=None, range=Optional[int])

slots.floor_finish_mat = Slot(uri=MIXS['0000804'], name="floor_finish_mat", curie=MIXS.curie('0000804'),
                   model_uri=MIXS.VOCAB.floor_finish_mat, domain=None, range=Optional[Union[str, "FloorFinishMatEnum"]])

slots.floor_water_mold = Slot(uri=MIXS['0000805'], name="floor_water_mold", curie=MIXS.curie('0000805'),
                   model_uri=MIXS.VOCAB.floor_water_mold, domain=None, range=Optional[Union[str, "FloorWaterMoldEnum"]])

slots.floor_struc = Slot(uri=MIXS['0000806'], name="floor_struc", curie=MIXS.curie('0000806'),
                   model_uri=MIXS.VOCAB.floor_struc, domain=None, range=Optional[Union[str, "FloorStrucEnum"]])

slots.floor_thermal_mass = Slot(uri=MIXS['0000166'], name="floor_thermal_mass", curie=MIXS.curie('0000166'),
                   model_uri=MIXS.VOCAB.floor_thermal_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.freq_clean = Slot(uri=MIXS['0000226'], name="freq_clean", curie=MIXS.curie('0000226'),
                   model_uri=MIXS.VOCAB.freq_clean, domain=None, range=Optional[Union[str, "FreqCleanEnum"]])

slots.freq_cook = Slot(uri=MIXS['0000227'], name="freq_cook", curie=MIXS.curie('0000227'),
                   model_uri=MIXS.VOCAB.freq_cook, domain=None, range=Optional[int])

slots.furniture = Slot(uri=MIXS['0000807'], name="furniture", curie=MIXS.curie('0000807'),
                   model_uri=MIXS.VOCAB.furniture, domain=None, range=Optional[Union[str, "FurnitureEnum"]])

slots.gender_restroom = Slot(uri=MIXS['0000808'], name="gender_restroom", curie=MIXS.curie('0000808'),
                   model_uri=MIXS.VOCAB.gender_restroom, domain=None, range=Optional[Union[str, "GenderRestroomEnum"]])

slots.hall_count = Slot(uri=MIXS['0000228'], name="hall_count", curie=MIXS.curie('0000228'),
                   model_uri=MIXS.VOCAB.hall_count, domain=None, range=Optional[int])

slots.handidness = Slot(uri=MIXS['0000809'], name="handidness", curie=MIXS.curie('0000809'),
                   model_uri=MIXS.VOCAB.handidness, domain=None, range=Optional[Union[str, "HandidnessEnum"]])

slots.heat_deliv_loc = Slot(uri=MIXS['0000810'], name="heat_deliv_loc", curie=MIXS.curie('0000810'),
                   model_uri=MIXS.VOCAB.heat_deliv_loc, domain=None, range=Optional[Union[str, "HeatDelivLocEnum"]])

slots.heat_sys_deliv_meth = Slot(uri=MIXS['0000812'], name="heat_sys_deliv_meth", curie=MIXS.curie('0000812'),
                   model_uri=MIXS.VOCAB.heat_sys_deliv_meth, domain=None, range=Optional[str])

slots.heat_system_id = Slot(uri=MIXS['0000833'], name="heat_system_id", curie=MIXS.curie('0000833'),
                   model_uri=MIXS.VOCAB.heat_system_id, domain=None, range=Optional[int])

slots.height_carper_fiber = Slot(uri=MIXS['0000167'], name="height_carper_fiber", curie=MIXS.curie('0000167'),
                   model_uri=MIXS.VOCAB.height_carper_fiber, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.inside_lux = Slot(uri=MIXS['0000168'], name="inside_lux", curie=MIXS.curie('0000168'),
                   model_uri=MIXS.VOCAB.inside_lux, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.int_wall_cond = Slot(uri=MIXS['0000813'], name="int_wall_cond", curie=MIXS.curie('0000813'),
                   model_uri=MIXS.VOCAB.int_wall_cond, domain=None, range=Optional[Union[str, "IntWallCondEnum"]])

slots.last_clean = Slot(uri=MIXS['0000814'], name="last_clean", curie=MIXS.curie('0000814'),
                   model_uri=MIXS.VOCAB.last_clean, domain=None, range=Optional[Union[str, XSDDate]])

slots.max_occup = Slot(uri=MIXS['0000229'], name="max_occup", curie=MIXS.curie('0000229'),
                   model_uri=MIXS.VOCAB.max_occup, domain=None, range=Optional[int])

slots.mech_struc = Slot(uri=MIXS['0000815'], name="mech_struc", curie=MIXS.curie('0000815'),
                   model_uri=MIXS.VOCAB.mech_struc, domain=None, range=Optional[Union[str, "MechStrucEnum"]])

slots.number_plants = Slot(uri=MIXS['0000230'], name="number_plants", curie=MIXS.curie('0000230'),
                   model_uri=MIXS.VOCAB.number_plants, domain=None, range=Optional[int])

slots.number_pets = Slot(uri=MIXS['0000231'], name="number_pets", curie=MIXS.curie('0000231'),
                   model_uri=MIXS.VOCAB.number_pets, domain=None, range=Optional[int])

slots.number_resident = Slot(uri=MIXS['0000232'], name="number_resident", curie=MIXS.curie('0000232'),
                   model_uri=MIXS.VOCAB.number_resident, domain=None, range=Optional[int])

slots.occup_document = Slot(uri=MIXS['0000816'], name="occup_document", curie=MIXS.curie('0000816'),
                   model_uri=MIXS.VOCAB.occup_document, domain=None, range=Optional[Union[str, "OccupDocumentEnum"]])

slots.ext_wall_orient = Slot(uri=MIXS['0000817'], name="ext_wall_orient", curie=MIXS.curie('0000817'),
                   model_uri=MIXS.VOCAB.ext_wall_orient, domain=None, range=Optional[Union[str, "ExtWallOrientEnum"]])

slots.ext_window_orient = Slot(uri=MIXS['0000818'], name="ext_window_orient", curie=MIXS.curie('0000818'),
                   model_uri=MIXS.VOCAB.ext_window_orient, domain=None, range=Optional[Union[str, "ExtWindowOrientEnum"]])

slots.rel_humidity_out = Slot(uri=MIXS['0000188'], name="rel_humidity_out", curie=MIXS.curie('0000188'),
                   model_uri=MIXS.VOCAB.rel_humidity_out, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.pres_animal_insect = Slot(uri=MIXS['0000819'], name="pres_animal_insect", curie=MIXS.curie('0000819'),
                   model_uri=MIXS.VOCAB.pres_animal_insect, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(cat|dog|rodent|snake|other);\d+$'))

slots.quad_pos = Slot(uri=MIXS['0000820'], name="quad_pos", curie=MIXS.curie('0000820'),
                   model_uri=MIXS.VOCAB.quad_pos, domain=None, range=Optional[Union[str, "QuadPosEnum"]])

slots.rel_samp_loc = Slot(uri=MIXS['0000821'], name="rel_samp_loc", curie=MIXS.curie('0000821'),
                   model_uri=MIXS.VOCAB.rel_samp_loc, domain=None, range=Optional[Union[str, "RelSampLocEnum"]])

slots.room_air_exch_rate = Slot(uri=MIXS['0000169'], name="room_air_exch_rate", curie=MIXS.curie('0000169'),
                   model_uri=MIXS.VOCAB.room_air_exch_rate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.room_architec_elem = Slot(uri=MIXS['0000233'], name="room_architec_elem", curie=MIXS.curie('0000233'),
                   model_uri=MIXS.VOCAB.room_architec_elem, domain=None, range=Optional[str])

slots.room_condt = Slot(uri=MIXS['0000822'], name="room_condt", curie=MIXS.curie('0000822'),
                   model_uri=MIXS.VOCAB.room_condt, domain=None, range=Optional[Union[str, "RoomCondtEnum"]])

slots.room_count = Slot(uri=MIXS['0000234'], name="room_count", curie=MIXS.curie('0000234'),
                   model_uri=MIXS.VOCAB.room_count, domain=None, range=Optional[int])

slots.room_dim = Slot(uri=MIXS['0000192'], name="room_dim", curie=MIXS.curie('0000192'),
                   model_uri=MIXS.VOCAB.room_dim, domain=None, range=Optional[str])

slots.room_door_dist = Slot(uri=MIXS['0000193'], name="room_door_dist", curie=MIXS.curie('0000193'),
                   model_uri=MIXS.VOCAB.room_door_dist, domain=None, range=Optional[str])

slots.room_loc = Slot(uri=MIXS['0000823'], name="room_loc", curie=MIXS.curie('0000823'),
                   model_uri=MIXS.VOCAB.room_loc, domain=None, range=Optional[Union[str, "RoomLocEnum"]])

slots.room_moist_dam_hist = Slot(uri=MIXS['0000235'], name="room_moist_dam_hist", curie=MIXS.curie('0000235'),
                   model_uri=MIXS.VOCAB.room_moist_dam_hist, domain=None, range=Optional[int])

slots.room_net_area = Slot(uri=MIXS['0000194'], name="room_net_area", curie=MIXS.curie('0000194'),
                   model_uri=MIXS.VOCAB.room_net_area, domain=None, range=Optional[str])

slots.room_occup = Slot(uri=MIXS['0000236'], name="room_occup", curie=MIXS.curie('0000236'),
                   model_uri=MIXS.VOCAB.room_occup, domain=None, range=Optional[int])

slots.room_samp_pos = Slot(uri=MIXS['0000824'], name="room_samp_pos", curie=MIXS.curie('0000824'),
                   model_uri=MIXS.VOCAB.room_samp_pos, domain=None, range=Optional[Union[str, "RoomSampPosEnum"]])

slots.room_type = Slot(uri=MIXS['0000825'], name="room_type", curie=MIXS.curie('0000825'),
                   model_uri=MIXS.VOCAB.room_type, domain=None, range=Optional[Union[str, "RoomTypeEnum"]])

slots.room_vol = Slot(uri=MIXS['0000195'], name="room_vol", curie=MIXS.curie('0000195'),
                   model_uri=MIXS.VOCAB.room_vol, domain=None, range=Optional[str])

slots.room_window_count = Slot(uri=MIXS['0000237'], name="room_window_count", curie=MIXS.curie('0000237'),
                   model_uri=MIXS.VOCAB.room_window_count, domain=None, range=Optional[int])

slots.room_connected = Slot(uri=MIXS['0000826'], name="room_connected", curie=MIXS.curie('0000826'),
                   model_uri=MIXS.VOCAB.room_connected, domain=None, range=Optional[Union[str, "RoomConnectedEnum"]])

slots.room_hallway = Slot(uri=MIXS['0000238'], name="room_hallway", curie=MIXS.curie('0000238'),
                   model_uri=MIXS.VOCAB.room_hallway, domain=None, range=Optional[str])

slots.room_door_share = Slot(uri=MIXS['0000242'], name="room_door_share", curie=MIXS.curie('0000242'),
                   model_uri=MIXS.VOCAB.room_door_share, domain=None, range=Optional[str])

slots.room_wall_share = Slot(uri=MIXS['0000243'], name="room_wall_share", curie=MIXS.curie('0000243'),
                   model_uri=MIXS.VOCAB.room_wall_share, domain=None, range=Optional[str])

slots.samp_weather = Slot(uri=MIXS['0000827'], name="samp_weather", curie=MIXS.curie('0000827'),
                   model_uri=MIXS.VOCAB.samp_weather, domain=None, range=Optional[Union[str, "SampWeatherEnum"]])

slots.samp_floor = Slot(uri=MIXS['0000828'], name="samp_floor", curie=MIXS.curie('0000828'),
                   model_uri=MIXS.VOCAB.samp_floor, domain=None, range=Optional[Union[str, "SampFloorEnum"]])

slots.samp_room_id = Slot(uri=MIXS['0000244'], name="samp_room_id", curie=MIXS.curie('0000244'),
                   model_uri=MIXS.VOCAB.samp_room_id, domain=None, range=Optional[int])

slots.samp_time_out = Slot(uri=MIXS['0000196'], name="samp_time_out", curie=MIXS.curie('0000196'),
                   model_uri=MIXS.VOCAB.samp_time_out, domain=None, range=Optional[float])

slots.season = Slot(uri=MIXS['0000829'], name="season", curie=MIXS.curie('0000829'),
                   model_uri=MIXS.VOCAB.season, domain=None, range=Optional[str])

slots.season_use = Slot(uri=MIXS['0000830'], name="season_use", curie=MIXS.curie('0000830'),
                   model_uri=MIXS.VOCAB.season_use, domain=None, range=Optional[Union[str, "SeasonUseEnum"]])

slots.shading_device_cond = Slot(uri=MIXS['0000831'], name="shading_device_cond", curie=MIXS.curie('0000831'),
                   model_uri=MIXS.VOCAB.shading_device_cond, domain=None, range=Optional[Union[str, "ShadingDeviceCondEnum"]])

slots.shading_device_loc = Slot(uri=MIXS['0000832'], name="shading_device_loc", curie=MIXS.curie('0000832'),
                   model_uri=MIXS.VOCAB.shading_device_loc, domain=None, range=Optional[str])

slots.shading_device_mat = Slot(uri=MIXS['0000245'], name="shading_device_mat", curie=MIXS.curie('0000245'),
                   model_uri=MIXS.VOCAB.shading_device_mat, domain=None, range=Optional[str])

slots.shad_dev_water_mold = Slot(uri=MIXS['0000834'], name="shad_dev_water_mold", curie=MIXS.curie('0000834'),
                   model_uri=MIXS.VOCAB.shad_dev_water_mold, domain=None, range=Optional[str])

slots.shading_device_type = Slot(uri=MIXS['0000835'], name="shading_device_type", curie=MIXS.curie('0000835'),
                   model_uri=MIXS.VOCAB.shading_device_type, domain=None, range=Optional[Union[str, "ShadingDeviceTypeEnum"]])

slots.specific_humidity = Slot(uri=MIXS['0000214'], name="specific_humidity", curie=MIXS.curie('0000214'),
                   model_uri=MIXS.VOCAB.specific_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.specific = Slot(uri=MIXS['0000836'], name="specific", curie=MIXS.curie('0000836'),
                   model_uri=MIXS.VOCAB.specific, domain=None, range=Optional[Union[str, "SpecificEnum"]])

slots.temp_out = Slot(uri=MIXS['0000197'], name="temp_out", curie=MIXS.curie('0000197'),
                   model_uri=MIXS.VOCAB.temp_out, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.train_line = Slot(uri=MIXS['0000837'], name="train_line", curie=MIXS.curie('0000837'),
                   model_uri=MIXS.VOCAB.train_line, domain=None, range=Optional[Union[str, "TrainLineEnum"]])

slots.train_stat_loc = Slot(uri=MIXS['0000838'], name="train_stat_loc", curie=MIXS.curie('0000838'),
                   model_uri=MIXS.VOCAB.train_stat_loc, domain=None, range=Optional[Union[str, "TrainStatLocEnum"]])

slots.train_stop_loc = Slot(uri=MIXS['0000839'], name="train_stop_loc", curie=MIXS.curie('0000839'),
                   model_uri=MIXS.VOCAB.train_stop_loc, domain=None, range=Optional[Union[str, "TrainStopLocEnum"]])

slots.vis_media = Slot(uri=MIXS['0000840'], name="vis_media", curie=MIXS.curie('0000840'),
                   model_uri=MIXS.VOCAB.vis_media, domain=None, range=Optional[Union[str, "VisMediaEnum"]])

slots.wall_area = Slot(uri=MIXS['0000198'], name="wall_area", curie=MIXS.curie('0000198'),
                   model_uri=MIXS.VOCAB.wall_area, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.wall_const_type = Slot(uri=MIXS['0000841'], name="wall_const_type", curie=MIXS.curie('0000841'),
                   model_uri=MIXS.VOCAB.wall_const_type, domain=None, range=Optional[Union[str, "WallConstTypeEnum"]])

slots.wall_finish_mat = Slot(uri=MIXS['0000842'], name="wall_finish_mat", curie=MIXS.curie('0000842'),
                   model_uri=MIXS.VOCAB.wall_finish_mat, domain=None, range=Optional[Union[str, "WallFinishMatEnum"]])

slots.wall_height = Slot(uri=MIXS['0000221'], name="wall_height", curie=MIXS.curie('0000221'),
                   model_uri=MIXS.VOCAB.wall_height, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.wall_loc = Slot(uri=MIXS['0000843'], name="wall_loc", curie=MIXS.curie('0000843'),
                   model_uri=MIXS.VOCAB.wall_loc, domain=None, range=Optional[Union[str, "WallLocEnum"]])

slots.wall_water_mold = Slot(uri=MIXS['0000844'], name="wall_water_mold", curie=MIXS.curie('0000844'),
                   model_uri=MIXS.VOCAB.wall_water_mold, domain=None, range=Optional[str])

slots.wall_surf_treatment = Slot(uri=MIXS['0000845'], name="wall_surf_treatment", curie=MIXS.curie('0000845'),
                   model_uri=MIXS.VOCAB.wall_surf_treatment, domain=None, range=Optional[Union[str, "WallSurfTreatmentEnum"]])

slots.wall_texture = Slot(uri=MIXS['0000846'], name="wall_texture", curie=MIXS.curie('0000846'),
                   model_uri=MIXS.VOCAB.wall_texture, domain=None, range=Optional[Union[str, "WallTextureEnum"]])

slots.wall_thermal_mass = Slot(uri=MIXS['0000222'], name="wall_thermal_mass", curie=MIXS.curie('0000222'),
                   model_uri=MIXS.VOCAB.wall_thermal_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_feat_size = Slot(uri=MIXS['0000223'], name="water_feat_size", curie=MIXS.curie('0000223'),
                   model_uri=MIXS.VOCAB.water_feat_size, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_feat_type = Slot(uri=MIXS['0000847'], name="water_feat_type", curie=MIXS.curie('0000847'),
                   model_uri=MIXS.VOCAB.water_feat_type, domain=None, range=Optional[Union[str, "WaterFeatTypeEnum"]])

slots.weekday = Slot(uri=MIXS['0000848'], name="weekday", curie=MIXS.curie('0000848'),
                   model_uri=MIXS.VOCAB.weekday, domain=None, range=Optional[Union[str, "WeekdayEnum"]])

slots.window_size = Slot(uri=MIXS['0000224'], name="window_size", curie=MIXS.curie('0000224'),
                   model_uri=MIXS.VOCAB.window_size, domain=None, range=Optional[str])

slots.window_cond = Slot(uri=MIXS['0000849'], name="window_cond", curie=MIXS.curie('0000849'),
                   model_uri=MIXS.VOCAB.window_cond, domain=None, range=Optional[Union[str, "WindowCondEnum"]])

slots.window_cover = Slot(uri=MIXS['0000850'], name="window_cover", curie=MIXS.curie('0000850'),
                   model_uri=MIXS.VOCAB.window_cover, domain=None, range=Optional[Union[str, "WindowCoverEnum"]])

slots.window_horiz_pos = Slot(uri=MIXS['0000851'], name="window_horiz_pos", curie=MIXS.curie('0000851'),
                   model_uri=MIXS.VOCAB.window_horiz_pos, domain=None, range=Optional[Union[str, "WindowHorizPosEnum"]])

slots.window_loc = Slot(uri=MIXS['0000852'], name="window_loc", curie=MIXS.curie('0000852'),
                   model_uri=MIXS.VOCAB.window_loc, domain=None, range=Optional[Union[str, "WindowLocEnum"]])

slots.window_mat = Slot(uri=MIXS['0000853'], name="window_mat", curie=MIXS.curie('0000853'),
                   model_uri=MIXS.VOCAB.window_mat, domain=None, range=Optional[Union[str, "WindowMatEnum"]])

slots.window_open_freq = Slot(uri=MIXS['0000246'], name="window_open_freq", curie=MIXS.curie('0000246'),
                   model_uri=MIXS.VOCAB.window_open_freq, domain=None, range=Optional[int])

slots.window_water_mold = Slot(uri=MIXS['0000854'], name="window_water_mold", curie=MIXS.curie('0000854'),
                   model_uri=MIXS.VOCAB.window_water_mold, domain=None, range=Optional[str])

slots.window_status = Slot(uri=MIXS['0000855'], name="window_status", curie=MIXS.curie('0000855'),
                   model_uri=MIXS.VOCAB.window_status, domain=None, range=Optional[str])

slots.window_type = Slot(uri=MIXS['0000856'], name="window_type", curie=MIXS.curie('0000856'),
                   model_uri=MIXS.VOCAB.window_type, domain=None, range=Optional[Union[str, "WindowTypeEnum"]])

slots.window_vert_pos = Slot(uri=MIXS['0000857'], name="window_vert_pos", curie=MIXS.curie('0000857'),
                   model_uri=MIXS.VOCAB.window_vert_pos, domain=None, range=Optional[Union[str, "WindowVertPosEnum"]])

slots.ances_data = Slot(uri=MIXS['0000247'], name="ances_data", curie=MIXS.curie('0000247'),
                   model_uri=MIXS.VOCAB.ances_data, domain=None, range=Optional[str])

slots.biol_stat = Slot(uri=MIXS['0000858'], name="biol_stat", curie=MIXS.curie('0000858'),
                   model_uri=MIXS.VOCAB.biol_stat, domain=None, range=Optional[Union[str, "BiolStatEnum"]])

slots.genetic_mod = Slot(uri=MIXS['0000859'], name="genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.genetic_mod, domain=None, range=Optional[str])

slots.host_common_name = Slot(uri=MIXS['0000248'], name="host_common_name", curie=MIXS.curie('0000248'),
                   model_uri=MIXS.VOCAB.host_common_name, domain=None, range=Optional[str])

slots.samp_capt_status = Slot(uri=MIXS['0000860'], name="samp_capt_status", curie=MIXS.curie('0000860'),
                   model_uri=MIXS.VOCAB.samp_capt_status, domain=None, range=Optional[Union[str, "SampCaptStatusEnum"]])

slots.samp_dis_stage = Slot(uri=MIXS['0000249'], name="samp_dis_stage", curie=MIXS.curie('0000249'),
                   model_uri=MIXS.VOCAB.samp_dis_stage, domain=None, range=Optional[Union[str, "SampDisStageEnum"]])

slots.host_taxid = Slot(uri=MIXS['0000250'], name="host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.host_taxid, domain=None, range=Optional[str])

slots.host_subject_id = Slot(uri=MIXS['0000861'], name="host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.host_subject_id, domain=None, range=Optional[str])

slots.host_age = Slot(uri=MIXS['0000255'], name="host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.host_age, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_life_stage = Slot(uri=MIXS['0000251'], name="host_life_stage", curie=MIXS.curie('0000251'),
                   model_uri=MIXS.VOCAB.host_life_stage, domain=None, range=Optional[str])

slots.host_sex = Slot(uri=MIXS['0000811'], name="host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.host_sex, domain=None, range=Optional[Union[str, "HostSexEnum"]])

slots.host_body_habitat = Slot(uri=MIXS['0000866'], name="host_body_habitat", curie=MIXS.curie('0000866'),
                   model_uri=MIXS.VOCAB.host_body_habitat, domain=None, range=Optional[str])

slots.host_body_site = Slot(uri=MIXS['0000867'], name="host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.host_body_site, domain=None, range=Optional[str])

slots.host_body_product = Slot(uri=MIXS['0000888'], name="host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.host_body_product, domain=None, range=Optional[str])

slots.host_tot_mass = Slot(uri=MIXS['0000263'], name="host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.host_tot_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_height = Slot(uri=MIXS['0000264'], name="host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.host_height, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_length = Slot(uri=MIXS['0000256'], name="host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.host_length, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_diet = Slot(uri=MIXS['0000869'], name="host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.host_diet, domain=None, range=Optional[Union[str, List[str]]])

slots.host_last_meal = Slot(uri=MIXS['0000870'], name="host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.host_last_meal, domain=None, range=Optional[Union[str, List[str]]])

slots.host_growth_cond = Slot(uri=MIXS['0000871'], name="host_growth_cond", curie=MIXS.curie('0000871'),
                   model_uri=MIXS.VOCAB.host_growth_cond, domain=None, range=Optional[str])

slots.host_substrate = Slot(uri=MIXS['0000252'], name="host_substrate", curie=MIXS.curie('0000252'),
                   model_uri=MIXS.VOCAB.host_substrate, domain=None, range=Optional[str])

slots.host_family_relation = Slot(uri=MIXS['0000872'], name="host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.host_family_relation, domain=None, range=Optional[Union[str, List[str]]])

slots.host_subspecf_genlin = Slot(uri=MIXS['0001318'], name="host_subspecf_genlin", curie=MIXS.curie('0001318'),
                   model_uri=MIXS.VOCAB.host_subspecf_genlin, domain=None, range=Optional[Union[str, List[str]]])

slots.host_genotype = Slot(uri=MIXS['0000365'], name="host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.host_genotype, domain=None, range=Optional[str])

slots.host_phenotype = Slot(uri=MIXS['0000874'], name="host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.host_phenotype, domain=None, range=Optional[str])

slots.host_body_temp = Slot(uri=MIXS['0000274'], name="host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.host_body_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_dry_mass = Slot(uri=MIXS['0000257'], name="host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.host_dry_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.blood_press_diast = Slot(uri=MIXS['0000258'], name="blood_press_diast", curie=MIXS.curie('0000258'),
                   model_uri=MIXS.VOCAB.blood_press_diast, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.blood_press_syst = Slot(uri=MIXS['0000259'], name="blood_press_syst", curie=MIXS.curie('0000259'),
                   model_uri=MIXS.VOCAB.blood_press_syst, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_color = Slot(uri=MIXS['0000260'], name="host_color", curie=MIXS.curie('0000260'),
                   model_uri=MIXS.VOCAB.host_color, domain=None, range=Optional[str])

slots.host_shape = Slot(uri=MIXS['0000261'], name="host_shape", curie=MIXS.curie('0000261'),
                   model_uri=MIXS.VOCAB.host_shape, domain=None, range=Optional[str])

slots.gravidity = Slot(uri=MIXS['0000875'], name="gravidity", curie=MIXS.curie('0000875'),
                   model_uri=MIXS.VOCAB.gravidity, domain=None, range=Optional[str])

slots.host_symbiont = Slot(uri=MIXS['0001298'], name="host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.host_symbiont, domain=None, range=Optional[Union[str, List[str]]])

slots.ihmc_medication_code = Slot(uri=MIXS['0000884'], name="ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.ihmc_medication_code, domain=None, range=Optional[Union[int, List[int]]])

slots.smoker = Slot(uri=MIXS['0000262'], name="smoker", curie=MIXS.curie('0000262'),
                   model_uri=MIXS.VOCAB.smoker, domain=None, range=Optional[str])

slots.host_hiv_stat = Slot(uri=MIXS['0000265'], name="host_hiv_stat", curie=MIXS.curie('0000265'),
                   model_uri=MIXS.VOCAB.host_hiv_stat, domain=None, range=Optional[str])

slots.drug_usage = Slot(uri=MIXS['0000894'], name="drug_usage", curie=MIXS.curie('0000894'),
                   model_uri=MIXS.VOCAB.drug_usage, domain=None, range=Optional[Union[Union[str, "DrugUsageEnum"], List[Union[str, "DrugUsageEnum"]]]])

slots.host_body_mass_index = Slot(uri=MIXS['0000317'], name="host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.host_body_mass_index, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diet_last_six_month = Slot(uri=MIXS['0000266'], name="diet_last_six_month", curie=MIXS.curie('0000266'),
                   model_uri=MIXS.VOCAB.diet_last_six_month, domain=None, range=Optional[str])

slots.weight_loss_3_month = Slot(uri=MIXS['0000295'], name="weight_loss_3_month", curie=MIXS.curie('0000295'),
                   model_uri=MIXS.VOCAB.weight_loss_3_month, domain=None, range=Optional[str])

slots.ethnicity = Slot(uri=MIXS['0000895'], name="ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.ethnicity, domain=None, range=Optional[Union[str, List[str]]])

slots.host_occupation = Slot(uri=MIXS['0000896'], name="host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.host_occupation, domain=None, range=Optional[int])

slots.pet_farm_animal = Slot(uri=MIXS['0000267'], name="pet_farm_animal", curie=MIXS.curie('0000267'),
                   model_uri=MIXS.VOCAB.pet_farm_animal, domain=None, range=Optional[Union[str, List[str]]])

slots.travel_out_six_month = Slot(uri=MIXS['0000268'], name="travel_out_six_month", curie=MIXS.curie('0000268'),
                   model_uri=MIXS.VOCAB.travel_out_six_month, domain=None, range=Optional[Union[str, List[str]]])

slots.twin_sibling = Slot(uri=MIXS['0000326'], name="twin_sibling", curie=MIXS.curie('0000326'),
                   model_uri=MIXS.VOCAB.twin_sibling, domain=None, range=Optional[str])

slots.medic_hist_perform = Slot(uri=MIXS['0000897'], name="medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.medic_hist_perform, domain=None, range=Optional[str])

slots.study_complt_stat = Slot(uri=MIXS['0000898'], name="study_complt_stat", curie=MIXS.curie('0000898'),
                   model_uri=MIXS.VOCAB.study_complt_stat, domain=None, range=Optional[Union[str, "StudyCompltStatEnum"]])

slots.pulmonary_disord = Slot(uri=MIXS['0000269'], name="pulmonary_disord", curie=MIXS.curie('0000269'),
                   model_uri=MIXS.VOCAB.pulmonary_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.nose_throat_disord = Slot(uri=MIXS['0000270'], name="nose_throat_disord", curie=MIXS.curie('0000270'),
                   model_uri=MIXS.VOCAB.nose_throat_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.blood_blood_disord = Slot(uri=MIXS['0000271'], name="blood_blood_disord", curie=MIXS.curie('0000271'),
                   model_uri=MIXS.VOCAB.blood_blood_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.host_pulse = Slot(uri=MIXS['0000333'], name="host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.host_pulse, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.gestation_state = Slot(uri=MIXS['0000272'], name="gestation_state", curie=MIXS.curie('0000272'),
                   model_uri=MIXS.VOCAB.gestation_state, domain=None, range=Optional[str])

slots.maternal_health_stat = Slot(uri=MIXS['0000273'], name="maternal_health_stat", curie=MIXS.curie('0000273'),
                   model_uri=MIXS.VOCAB.maternal_health_stat, domain=None, range=Optional[str])

slots.foetal_health_stat = Slot(uri=MIXS['0000275'], name="foetal_health_stat", curie=MIXS.curie('0000275'),
                   model_uri=MIXS.VOCAB.foetal_health_stat, domain=None, range=Optional[str])

slots.amniotic_fluid_color = Slot(uri=MIXS['0000276'], name="amniotic_fluid_color", curie=MIXS.curie('0000276'),
                   model_uri=MIXS.VOCAB.amniotic_fluid_color, domain=None, range=Optional[str])

slots.kidney_disord = Slot(uri=MIXS['0000277'], name="kidney_disord", curie=MIXS.curie('0000277'),
                   model_uri=MIXS.VOCAB.kidney_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.urogenit_tract_disor = Slot(uri=MIXS['0000278'], name="urogenit_tract_disor", curie=MIXS.curie('0000278'),
                   model_uri=MIXS.VOCAB.urogenit_tract_disor, domain=None, range=Optional[Union[str, List[str]]])

slots.urine_collect_meth = Slot(uri=MIXS['0000899'], name="urine_collect_meth", curie=MIXS.curie('0000899'),
                   model_uri=MIXS.VOCAB.urine_collect_meth, domain=None, range=Optional[str])

slots.gastrointest_disord = Slot(uri=MIXS['0000280'], name="gastrointest_disord", curie=MIXS.curie('0000280'),
                   model_uri=MIXS.VOCAB.gastrointest_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.liver_disord = Slot(uri=MIXS['0000282'], name="liver_disord", curie=MIXS.curie('0000282'),
                   model_uri=MIXS.VOCAB.liver_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.special_diet = Slot(uri=MIXS['0000905'], name="special_diet", curie=MIXS.curie('0000905'),
                   model_uri=MIXS.VOCAB.special_diet, domain=None, range=Optional[Union[Union[str, "SpecialDietEnum"], List[Union[str, "SpecialDietEnum"]]]])

slots.time_last_toothbrush = Slot(uri=MIXS['0000924'], name="time_last_toothbrush", curie=MIXS.curie('0000924'),
                   model_uri=MIXS.VOCAB.time_last_toothbrush, domain=None, range=Optional[str])

slots.dermatology_disord = Slot(uri=MIXS['0000284'], name="dermatology_disord", curie=MIXS.curie('0000284'),
                   model_uri=MIXS.VOCAB.dermatology_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.time_since_last_wash = Slot(uri=MIXS['0000943'], name="time_since_last_wash", curie=MIXS.curie('0000943'),
                   model_uri=MIXS.VOCAB.time_since_last_wash, domain=None, range=Optional[str])

slots.dominant_hand = Slot(uri=MIXS['0000944'], name="dominant_hand", curie=MIXS.curie('0000944'),
                   model_uri=MIXS.VOCAB.dominant_hand, domain=None, range=Optional[Union[str, "DominantHandEnum"]])

slots.menarche = Slot(uri=MIXS['0000965'], name="menarche", curie=MIXS.curie('0000965'),
                   model_uri=MIXS.VOCAB.menarche, domain=None, range=Optional[Union[str, XSDDate]])

slots.sexual_act = Slot(uri=MIXS['0000285'], name="sexual_act", curie=MIXS.curie('0000285'),
                   model_uri=MIXS.VOCAB.sexual_act, domain=None, range=Optional[str])

slots.pregnancy = Slot(uri=MIXS['0000966'], name="pregnancy", curie=MIXS.curie('0000966'),
                   model_uri=MIXS.VOCAB.pregnancy, domain=None, range=Optional[Union[str, XSDDate]])

slots.douche = Slot(uri=MIXS['0000967'], name="douche", curie=MIXS.curie('0000967'),
                   model_uri=MIXS.VOCAB.douche, domain=None, range=Optional[Union[str, XSDDate]])

slots.birth_control = Slot(uri=MIXS['0000286'], name="birth_control", curie=MIXS.curie('0000286'),
                   model_uri=MIXS.VOCAB.birth_control, domain=None, range=Optional[str])

slots.menopause = Slot(uri=MIXS['0000968'], name="menopause", curie=MIXS.curie('0000968'),
                   model_uri=MIXS.VOCAB.menopause, domain=None, range=Optional[Union[str, XSDDate]])

slots.hrt = Slot(uri=MIXS['0000969'], name="hrt", curie=MIXS.curie('0000969'),
                   model_uri=MIXS.VOCAB.hrt, domain=None, range=Optional[Union[str, XSDDate]])

slots.hysterectomy = Slot(uri=MIXS['0000287'], name="hysterectomy", curie=MIXS.curie('0000287'),
                   model_uri=MIXS.VOCAB.hysterectomy, domain=None, range=Optional[str])

slots.gynecologic_disord = Slot(uri=MIXS['0000288'], name="gynecologic_disord", curie=MIXS.curie('0000288'),
                   model_uri=MIXS.VOCAB.gynecologic_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.urogenit_disord = Slot(uri=MIXS['0000289'], name="urogenit_disord", curie=MIXS.curie('0000289'),
                   model_uri=MIXS.VOCAB.urogenit_disord, domain=None, range=Optional[Union[str, List[str]]])

slots.samp_salinity = Slot(uri=MIXS['0000109'], name="samp_salinity", curie=MIXS.curie('0000109'),
                   model_uri=MIXS.VOCAB.samp_salinity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.hcr = Slot(uri=MIXS['0000988'], name="hcr", curie=MIXS.curie('0000988'),
                   model_uri=MIXS.VOCAB.hcr, domain=None, range=Optional[Union[str, "HcrEnum"]])

slots.hc_produced = Slot(uri=MIXS['0000989'], name="hc_produced", curie=MIXS.curie('0000989'),
                   model_uri=MIXS.VOCAB.hc_produced, domain=None, range=Optional[Union[str, "HcProducedEnum"]])

slots.basin = Slot(uri=MIXS['0000290'], name="basin", curie=MIXS.curie('0000290'),
                   model_uri=MIXS.VOCAB.basin, domain=None, range=Optional[str])

slots.field = Slot(uri=MIXS['0000291'], name="field", curie=MIXS.curie('0000291'),
                   model_uri=MIXS.VOCAB.field, domain=None, range=Optional[str])

slots.reservoir = Slot(uri=MIXS['0000303'], name="reservoir", curie=MIXS.curie('0000303'),
                   model_uri=MIXS.VOCAB.reservoir, domain=None, range=Optional[str])

slots.hcr_temp = Slot(uri=MIXS['0000393'], name="hcr_temp", curie=MIXS.curie('0000393'),
                   model_uri=MIXS.VOCAB.hcr_temp, domain=None, range=Optional[str])

slots.tvdss_of_hcr_temp = Slot(uri=MIXS['0000394'], name="tvdss_of_hcr_temp", curie=MIXS.curie('0000394'),
                   model_uri=MIXS.VOCAB.tvdss_of_hcr_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.hcr_pressure = Slot(uri=MIXS['0000395'], name="hcr_pressure", curie=MIXS.curie('0000395'),
                   model_uri=MIXS.VOCAB.hcr_pressure, domain=None, range=Optional[str])

slots.tvdss_of_hcr_press = Slot(uri=MIXS['0000397'], name="tvdss_of_hcr_press", curie=MIXS.curie('0000397'),
                   model_uri=MIXS.VOCAB.tvdss_of_hcr_press, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.permeability = Slot(uri=MIXS['0000404'], name="permeability", curie=MIXS.curie('0000404'),
                   model_uri=MIXS.VOCAB.permeability, domain=None, range=Optional[str])

slots.porosity = Slot(uri=MIXS['0000211'], name="porosity", curie=MIXS.curie('0000211'),
                   model_uri=MIXS.VOCAB.porosity, domain=None, range=Optional[str])

slots.lithology = Slot(uri=MIXS['0000990'], name="lithology", curie=MIXS.curie('0000990'),
                   model_uri=MIXS.VOCAB.lithology, domain=None, range=Optional[Union[str, "LithologyEnum"]])

slots.depos_env = Slot(uri=MIXS['0000992'], name="depos_env", curie=MIXS.curie('0000992'),
                   model_uri=MIXS.VOCAB.depos_env, domain=None, range=Optional[Union[str, "DeposEnvEnum"]])

slots.hcr_geol_age = Slot(uri=MIXS['0000993'], name="hcr_geol_age", curie=MIXS.curie('0000993'),
                   model_uri=MIXS.VOCAB.hcr_geol_age, domain=None, range=Optional[Union[str, "HcrGeolAgeEnum"]])

slots.owc_tvdss = Slot(uri=MIXS['0000405'], name="owc_tvdss", curie=MIXS.curie('0000405'),
                   model_uri=MIXS.VOCAB.owc_tvdss, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.hcr_fw_salinity = Slot(uri=MIXS['0000406'], name="hcr_fw_salinity", curie=MIXS.curie('0000406'),
                   model_uri=MIXS.VOCAB.hcr_fw_salinity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.sulfate_fw = Slot(uri=MIXS['0000407'], name="sulfate_fw", curie=MIXS.curie('0000407'),
                   model_uri=MIXS.VOCAB.sulfate_fw, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.vfa_fw = Slot(uri=MIXS['0000408'], name="vfa_fw", curie=MIXS.curie('0000408'),
                   model_uri=MIXS.VOCAB.vfa_fw, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.sr_kerog_type = Slot(uri=MIXS['0000994'], name="sr_kerog_type", curie=MIXS.curie('0000994'),
                   model_uri=MIXS.VOCAB.sr_kerog_type, domain=None, range=Optional[Union[str, "SrKerogTypeEnum"]])

slots.sr_lithology = Slot(uri=MIXS['0000995'], name="sr_lithology", curie=MIXS.curie('0000995'),
                   model_uri=MIXS.VOCAB.sr_lithology, domain=None, range=Optional[Union[str, "SrLithologyEnum"]])

slots.sr_dep_env = Slot(uri=MIXS['0000996'], name="sr_dep_env", curie=MIXS.curie('0000996'),
                   model_uri=MIXS.VOCAB.sr_dep_env, domain=None, range=Optional[Union[str, "SrDepEnvEnum"]])

slots.sr_geol_age = Slot(uri=MIXS['0000997'], name="sr_geol_age", curie=MIXS.curie('0000997'),
                   model_uri=MIXS.VOCAB.sr_geol_age, domain=None, range=Optional[Union[str, "SrGeolAgeEnum"]])

slots.samp_well_name = Slot(uri=MIXS['0000296'], name="samp_well_name", curie=MIXS.curie('0000296'),
                   model_uri=MIXS.VOCAB.samp_well_name, domain=None, range=Optional[str])

slots.win = Slot(uri=MIXS['0000297'], name="win", curie=MIXS.curie('0000297'),
                   model_uri=MIXS.VOCAB.win, domain=None, range=Optional[str])

slots.samp_type = Slot(uri=MIXS['0000998'], name="samp_type", curie=MIXS.curie('0000998'),
                   model_uri=MIXS.VOCAB.samp_type, domain=None, range=Optional[str])

slots.samp_subtype = Slot(uri=MIXS['0000999'], name="samp_subtype", curie=MIXS.curie('0000999'),
                   model_uri=MIXS.VOCAB.samp_subtype, domain=None, range=Optional[Union[str, "SampSubtypeEnum"]])

slots.pressure = Slot(uri=MIXS['0000412'], name="pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.pressure, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_tvdss = Slot(uri=MIXS['0000409'], name="samp_tvdss", curie=MIXS.curie('0000409'),
                   model_uri=MIXS.VOCAB.samp_tvdss, domain=None, range=Optional[str])

slots.samp_md = Slot(uri=MIXS['0000413'], name="samp_md", curie=MIXS.curie('0000413'),
                   model_uri=MIXS.VOCAB.samp_md, domain=None, range=Optional[Union[str, "SampMdEnum"]])

slots.samp_transport_cond = Slot(uri=MIXS['0000410'], name="samp_transport_cond", curie=MIXS.curie('0000410'),
                   model_uri=MIXS.VOCAB.samp_transport_cond, domain=None, range=Optional[str])

slots.org_count_qpcr_info = Slot(uri=MIXS['0000099'], name="org_count_qpcr_info", curie=MIXS.curie('0000099'),
                   model_uri=MIXS.VOCAB.org_count_qpcr_info, domain=None, range=Optional[str])

slots.ph = Slot(uri=MIXS['0001001'], name="ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.ph, domain=None, range=Optional[float])

slots.alkalinity = Slot(uri=MIXS['0000421'], name="alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.alkalinity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.alkalinity_method = Slot(uri=MIXS['0000298'], name="alkalinity_method", curie=MIXS.curie('0000298'),
                   model_uri=MIXS.VOCAB.alkalinity_method, domain=None, range=Optional[str])

slots.sulfate = Slot(uri=MIXS['0000423'], name="sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.sulfate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.sulfide = Slot(uri=MIXS['0000424'], name="sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.sulfide, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_sulfur = Slot(uri=MIXS['0000419'], name="tot_sulfur", curie=MIXS.curie('0000419'),
                   model_uri=MIXS.VOCAB.tot_sulfur, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.nitrate = Slot(uri=MIXS['0000425'], name="nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.nitrate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.nitrite = Slot(uri=MIXS['0000426'], name="nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.nitrite, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ammonium = Slot(uri=MIXS['0000427'], name="ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.ammonium, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_nitro = Slot(uri=MIXS['0000102'], name="tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.tot_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_iron = Slot(uri=MIXS['0000139'], name="diss_iron", curie=MIXS.curie('0000139'),
                   model_uri=MIXS.VOCAB.diss_iron, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.sodium = Slot(uri=MIXS['0000428'], name="sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.sodium, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.chloride = Slot(uri=MIXS['0000429'], name="chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.chloride, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.potassium = Slot(uri=MIXS['0000430'], name="potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.potassium, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.magnesium = Slot(uri=MIXS['0000431'], name="magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.magnesium, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.calcium = Slot(uri=MIXS['0000432'], name="calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.calcium, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_iron = Slot(uri=MIXS['0000105'], name="tot_iron", curie=MIXS.curie('0000105'),
                   model_uri=MIXS.VOCAB.tot_iron, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_org_carb = Slot(uri=MIXS['0000433'], name="diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.diss_org_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_inorg_carb = Slot(uri=MIXS['0000434'], name="diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.diss_inorg_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_inorg_phosp = Slot(uri=MIXS['0000106'], name="diss_inorg_phosp", curie=MIXS.curie('0000106'),
                   model_uri=MIXS.VOCAB.diss_inorg_phosp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_phosp = Slot(uri=MIXS['0000117'], name="tot_phosp", curie=MIXS.curie('0000117'),
                   model_uri=MIXS.VOCAB.tot_phosp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.suspend_solids = Slot(uri=MIXS['0000150'], name="suspend_solids", curie=MIXS.curie('0000150'),
                   model_uri=MIXS.VOCAB.suspend_solids, domain=None, range=Optional[Union[str, List[str]]])

slots.density = Slot(uri=MIXS['0000435'], name="density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.density, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.diss_carb_dioxide, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_oxygen_fluid = Slot(uri=MIXS['0000438'], name="diss_oxygen_fluid", curie=MIXS.curie('0000438'),
                   model_uri=MIXS.VOCAB.diss_oxygen_fluid, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.vfa = Slot(uri=MIXS['0000152'], name="vfa", curie=MIXS.curie('0000152'),
                   model_uri=MIXS.VOCAB.vfa, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.benzene = Slot(uri=MIXS['0000153'], name="benzene", curie=MIXS.curie('0000153'),
                   model_uri=MIXS.VOCAB.benzene, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.toluene = Slot(uri=MIXS['0000154'], name="toluene", curie=MIXS.curie('0000154'),
                   model_uri=MIXS.VOCAB.toluene, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ethylbenzene = Slot(uri=MIXS['0000155'], name="ethylbenzene", curie=MIXS.curie('0000155'),
                   model_uri=MIXS.VOCAB.ethylbenzene, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.xylene = Slot(uri=MIXS['0000156'], name="xylene", curie=MIXS.curie('0000156'),
                   model_uri=MIXS.VOCAB.xylene, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.api = Slot(uri=MIXS['0000157'], name="api", curie=MIXS.curie('0000157'),
                   model_uri=MIXS.VOCAB.api, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tan = Slot(uri=MIXS['0000120'], name="tan", curie=MIXS.curie('0000120'),
                   model_uri=MIXS.VOCAB.tan, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.viscosity = Slot(uri=MIXS['0000126'], name="viscosity", curie=MIXS.curie('0000126'),
                   model_uri=MIXS.VOCAB.viscosity, domain=None, range=Optional[str])

slots.pour_point = Slot(uri=MIXS['0000127'], name="pour_point", curie=MIXS.curie('0000127'),
                   model_uri=MIXS.VOCAB.pour_point, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.saturates_pc = Slot(uri=MIXS['0000131'], name="saturates_pc", curie=MIXS.curie('0000131'),
                   model_uri=MIXS.VOCAB.saturates_pc, domain=None, range=Optional[str])

slots.aromatics_pc = Slot(uri=MIXS['0000133'], name="aromatics_pc", curie=MIXS.curie('0000133'),
                   model_uri=MIXS.VOCAB.aromatics_pc, domain=None, range=Optional[str])

slots.resins_pc = Slot(uri=MIXS['0000134'], name="resins_pc", curie=MIXS.curie('0000134'),
                   model_uri=MIXS.VOCAB.resins_pc, domain=None, range=Optional[str])

slots.asphaltenes_pc = Slot(uri=MIXS['0000135'], name="asphaltenes_pc", curie=MIXS.curie('0000135'),
                   model_uri=MIXS.VOCAB.asphaltenes_pc, domain=None, range=Optional[str])

slots.additional_info = Slot(uri=MIXS['0000300'], name="additional_info", curie=MIXS.curie('0000300'),
                   model_uri=MIXS.VOCAB.additional_info, domain=None, range=Optional[str])

slots.prod_start_date = Slot(uri=MIXS['0001008'], name="prod_start_date", curie=MIXS.curie('0001008'),
                   model_uri=MIXS.VOCAB.prod_start_date, domain=None, range=Optional[Union[str, XSDDate]])

slots.prod_rate = Slot(uri=MIXS['0000452'], name="prod_rate", curie=MIXS.curie('0000452'),
                   model_uri=MIXS.VOCAB.prod_rate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_prod_rate = Slot(uri=MIXS['0000453'], name="water_prod_rate", curie=MIXS.curie('0000453'),
                   model_uri=MIXS.VOCAB.water_prod_rate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_cut = Slot(uri=MIXS['0000454'], name="water_cut", curie=MIXS.curie('0000454'),
                   model_uri=MIXS.VOCAB.water_cut, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.iwf = Slot(uri=MIXS['0000455'], name="iwf", curie=MIXS.curie('0000455'),
                   model_uri=MIXS.VOCAB.iwf, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.add_recov_method = Slot(uri=MIXS['0001009'], name="add_recov_method", curie=MIXS.curie('0001009'),
                   model_uri=MIXS.VOCAB.add_recov_method, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(Water Injection|Dump Flood|Gas Injection|Wag Immiscible Injection|Polymer Addition|Surfactant Addition|Not Applicable|other);([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$'))

slots.iw_bt_date_well = Slot(uri=MIXS['0001010'], name="iw_bt_date_well", curie=MIXS.curie('0001010'),
                   model_uri=MIXS.VOCAB.iw_bt_date_well, domain=None, range=Optional[Union[str, XSDDate]])

slots.biocide = Slot(uri=MIXS['0001011'], name="biocide", curie=MIXS.curie('0001011'),
                   model_uri=MIXS.VOCAB.biocide, domain=None, range=Optional[str])

slots.biocide_admin_method = Slot(uri=MIXS['0000456'], name="biocide_admin_method", curie=MIXS.curie('0000456'),
                   model_uri=MIXS.VOCAB.biocide_admin_method, domain=None, range=Optional[str])

slots.chem_treatment = Slot(uri=MIXS['0001012'], name="chem_treatment", curie=MIXS.curie('0001012'),
                   model_uri=MIXS.VOCAB.chem_treatment, domain=None, range=Optional[str])

slots.chem_treat_method = Slot(uri=MIXS['0000457'], name="chem_treat_method", curie=MIXS.curie('0000457'),
                   model_uri=MIXS.VOCAB.chem_treat_method, domain=None, range=Optional[str])

slots.samp_loc_corr_rate = Slot(uri=MIXS['0000136'], name="samp_loc_corr_rate", curie=MIXS.curie('0000136'),
                   model_uri=MIXS.VOCAB.samp_loc_corr_rate, domain=None, range=Optional[str])

slots.samp_collect_point = Slot(uri=MIXS['0001015'], name="samp_collect_point", curie=MIXS.curie('0001015'),
                   model_uri=MIXS.VOCAB.samp_collect_point, domain=None, range=Optional[Union[str, "SampCollectPointEnum"]])

slots.samp_preserv = Slot(uri=MIXS['0000463'], name="samp_preserv", curie=MIXS.curie('0000463'),
                   model_uri=MIXS.VOCAB.samp_preserv, domain=None, range=Optional[str])

slots.alkyl_diethers = Slot(uri=MIXS['0000490'], name="alkyl_diethers", curie=MIXS.curie('0000490'),
                   model_uri=MIXS.VOCAB.alkyl_diethers, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.aminopept_act = Slot(uri=MIXS['0000172'], name="aminopept_act", curie=MIXS.curie('0000172'),
                   model_uri=MIXS.VOCAB.aminopept_act, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.bacteria_carb_prod = Slot(uri=MIXS['0000173'], name="bacteria_carb_prod", curie=MIXS.curie('0000173'),
                   model_uri=MIXS.VOCAB.bacteria_carb_prod, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.biomass = Slot(uri=MIXS['0000174'], name="biomass", curie=MIXS.curie('0000174'),
                   model_uri=MIXS.VOCAB.biomass, domain=None, range=Optional[Union[str, List[str]]])

slots.bishomohopanol = Slot(uri=MIXS['0000175'], name="bishomohopanol", curie=MIXS.curie('0000175'),
                   model_uri=MIXS.VOCAB.bishomohopanol, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.bromide = Slot(uri=MIXS['0000176'], name="bromide", curie=MIXS.curie('0000176'),
                   model_uri=MIXS.VOCAB.bromide, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.carb_nitro_ratio = Slot(uri=MIXS['0000310'], name="carb_nitro_ratio", curie=MIXS.curie('0000310'),
                   model_uri=MIXS.VOCAB.carb_nitro_ratio, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.chlorophyll = Slot(uri=MIXS['0000177'], name="chlorophyll", curie=MIXS.curie('0000177'),
                   model_uri=MIXS.VOCAB.chlorophyll, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diether_lipids = Slot(uri=MIXS['0000178'], name="diether_lipids", curie=MIXS.curie('0000178'),
                   model_uri=MIXS.VOCAB.diether_lipids, domain=None, range=Optional[Union[str, List[str]]])

slots.diss_hydrogen = Slot(uri=MIXS['0000179'], name="diss_hydrogen", curie=MIXS.curie('0000179'),
                   model_uri=MIXS.VOCAB.diss_hydrogen, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_org_nitro = Slot(uri=MIXS['0000162'], name="diss_org_nitro", curie=MIXS.curie('0000162'),
                   model_uri=MIXS.VOCAB.diss_org_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_oxygen = Slot(uri=MIXS['0000119'], name="diss_oxygen", curie=MIXS.curie('0000119'),
                   model_uri=MIXS.VOCAB.diss_oxygen, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.glucosidase_act = Slot(uri=MIXS['0000137'], name="glucosidase_act", curie=MIXS.curie('0000137'),
                   model_uri=MIXS.VOCAB.glucosidase_act, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.mean_frict_vel = Slot(uri=MIXS['0000498'], name="mean_frict_vel", curie=MIXS.curie('0000498'),
                   model_uri=MIXS.VOCAB.mean_frict_vel, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.mean_peak_frict_vel = Slot(uri=MIXS['0000502'], name="mean_peak_frict_vel", curie=MIXS.curie('0000502'),
                   model_uri=MIXS.VOCAB.mean_peak_frict_vel, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.n_alkanes = Slot(uri=MIXS['0000503'], name="n_alkanes", curie=MIXS.curie('0000503'),
                   model_uri=MIXS.VOCAB.n_alkanes, domain=None, range=Optional[Union[str, List[str]]])

slots.nitro = Slot(uri=MIXS['0000504'], name="nitro", curie=MIXS.curie('0000504'),
                   model_uri=MIXS.VOCAB.nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.org_carb = Slot(uri=MIXS['0000508'], name="org_carb", curie=MIXS.curie('0000508'),
                   model_uri=MIXS.VOCAB.org_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.org_matter = Slot(uri=MIXS['0000204'], name="org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.org_matter, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.org_nitro = Slot(uri=MIXS['0000205'], name="org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.org_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.part_org_carb = Slot(uri=MIXS['0000515'], name="part_org_carb", curie=MIXS.curie('0000515'),
                   model_uri=MIXS.VOCAB.part_org_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.petroleum_hydrocarb = Slot(uri=MIXS['0000516'], name="petroleum_hydrocarb", curie=MIXS.curie('0000516'),
                   model_uri=MIXS.VOCAB.petroleum_hydrocarb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.phaeopigments = Slot(uri=MIXS['0000180'], name="phaeopigments", curie=MIXS.curie('0000180'),
                   model_uri=MIXS.VOCAB.phaeopigments, domain=None, range=Optional[Union[str, List[str]]])

slots.phosphate = Slot(uri=MIXS['0000505'], name="phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.phosphate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.phosplipid_fatt_acid = Slot(uri=MIXS['0000181'], name="phosplipid_fatt_acid", curie=MIXS.curie('0000181'),
                   model_uri=MIXS.VOCAB.phosplipid_fatt_acid, domain=None, range=Optional[Union[str, List[str]]])

slots.redox_potential = Slot(uri=MIXS['0000182'], name="redox_potential", curie=MIXS.curie('0000182'),
                   model_uri=MIXS.VOCAB.redox_potential, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.silicate = Slot(uri=MIXS['0000184'], name="silicate", curie=MIXS.curie('0000184'),
                   model_uri=MIXS.VOCAB.silicate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_carb = Slot(uri=MIXS['0000525'], name="tot_carb", curie=MIXS.curie('0000525'),
                   model_uri=MIXS.VOCAB.tot_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_nitro_content = Slot(uri=MIXS['0000530'], name="tot_nitro_content", curie=MIXS.curie('0000530'),
                   model_uri=MIXS.VOCAB.tot_nitro_content, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_org_carb = Slot(uri=MIXS['0000533'], name="tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.tot_org_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.turbidity = Slot(uri=MIXS['0000191'], name="turbidity", curie=MIXS.curie('0000191'),
                   model_uri=MIXS.VOCAB.turbidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_content = Slot(uri=MIXS['0000185'], name="water_content", curie=MIXS.curie('0000185'),
                   model_uri=MIXS.VOCAB.water_content, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.water_current = Slot(uri=MIXS['0000203'], name="water_current", curie=MIXS.curie('0000203'),
                   model_uri=MIXS.VOCAB.water_current, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.air_temp_regm = Slot(uri=MIXS['0000551'], name="air_temp_regm", curie=MIXS.curie('0000551'),
                   model_uri=MIXS.VOCAB.air_temp_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.antibiotic_regm = Slot(uri=MIXS['0000553'], name="antibiotic_regm", curie=MIXS.curie('0000553'),
                   model_uri=MIXS.VOCAB.antibiotic_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.biotic_regm = Slot(uri=MIXS['0001038'], name="biotic_regm", curie=MIXS.curie('0001038'),
                   model_uri=MIXS.VOCAB.biotic_regm, domain=None, range=Optional[str])

slots.chem_mutagen = Slot(uri=MIXS['0000555'], name="chem_mutagen", curie=MIXS.curie('0000555'),
                   model_uri=MIXS.VOCAB.chem_mutagen, domain=None, range=Optional[Union[str, List[str]]])

slots.climate_environment = Slot(uri=MIXS['0001040'], name="climate_environment", curie=MIXS.curie('0001040'),
                   model_uri=MIXS.VOCAB.climate_environment, domain=None, range=Optional[Union[str, List[str]]])

slots.cult_root_med = Slot(uri=MIXS['0001041'], name="cult_root_med", curie=MIXS.curie('0001041'),
                   model_uri=MIXS.VOCAB.cult_root_med, domain=None, range=Optional[str])

slots.fertilizer_regm = Slot(uri=MIXS['0000556'], name="fertilizer_regm", curie=MIXS.curie('0000556'),
                   model_uri=MIXS.VOCAB.fertilizer_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.fungicide_regm = Slot(uri=MIXS['0000557'], name="fungicide_regm", curie=MIXS.curie('0000557'),
                   model_uri=MIXS.VOCAB.fungicide_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.gaseous_environment = Slot(uri=MIXS['0000558'], name="gaseous_environment", curie=MIXS.curie('0000558'),
                   model_uri=MIXS.VOCAB.gaseous_environment, domain=None, range=Optional[Union[str, List[str]]])

slots.gravity = Slot(uri=MIXS['0000559'], name="gravity", curie=MIXS.curie('0000559'),
                   model_uri=MIXS.VOCAB.gravity, domain=None, range=Optional[Union[str, List[str]]])

slots.growth_facil = Slot(uri=MIXS['0001043'], name="growth_facil", curie=MIXS.curie('0001043'),
                   model_uri=MIXS.VOCAB.growth_facil, domain=None, range=Optional[str])

slots.growth_habit = Slot(uri=MIXS['0001044'], name="growth_habit", curie=MIXS.curie('0001044'),
                   model_uri=MIXS.VOCAB.growth_habit, domain=None, range=Optional[Union[str, "GrowthHabitEnum"]])

slots.growth_hormone_regm = Slot(uri=MIXS['0000560'], name="growth_hormone_regm", curie=MIXS.curie('0000560'),
                   model_uri=MIXS.VOCAB.growth_hormone_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.herbicide_regm = Slot(uri=MIXS['0000561'], name="herbicide_regm", curie=MIXS.curie('0000561'),
                   model_uri=MIXS.VOCAB.herbicide_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.host_wet_mass = Slot(uri=MIXS['0000567'], name="host_wet_mass", curie=MIXS.curie('0000567'),
                   model_uri=MIXS.VOCAB.host_wet_mass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.humidity_regm = Slot(uri=MIXS['0000568'], name="humidity_regm", curie=MIXS.curie('0000568'),
                   model_uri=MIXS.VOCAB.humidity_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.light_regm = Slot(uri=MIXS['0000569'], name="light_regm", curie=MIXS.curie('0000569'),
                   model_uri=MIXS.VOCAB.light_regm, domain=None, range=Optional[str])

slots.mechanical_damage = Slot(uri=MIXS['0001052'], name="mechanical_damage", curie=MIXS.curie('0001052'),
                   model_uri=MIXS.VOCAB.mechanical_damage, domain=None, range=Optional[Union[str, List[str]]])

slots.mineral_nutr_regm = Slot(uri=MIXS['0000570'], name="mineral_nutr_regm", curie=MIXS.curie('0000570'),
                   model_uri=MIXS.VOCAB.mineral_nutr_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.non_min_nutr_regm = Slot(uri=MIXS['0000571'], name="non_min_nutr_regm", curie=MIXS.curie('0000571'),
                   model_uri=MIXS.VOCAB.non_min_nutr_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.ph_regm = Slot(uri=MIXS['0001056'], name="ph_regm", curie=MIXS.curie('0001056'),
                   model_uri=MIXS.VOCAB.ph_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.pesticide_regm = Slot(uri=MIXS['0000573'], name="pesticide_regm", curie=MIXS.curie('0000573'),
                   model_uri=MIXS.VOCAB.pesticide_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.plant_growth_med = Slot(uri=MIXS['0001057'], name="plant_growth_med", curie=MIXS.curie('0001057'),
                   model_uri=MIXS.VOCAB.plant_growth_med, domain=None, range=Optional[Union[str, "PlantGrowthMedEnum"]])

slots.plant_product = Slot(uri=MIXS['0001058'], name="plant_product", curie=MIXS.curie('0001058'),
                   model_uri=MIXS.VOCAB.plant_product, domain=None, range=Optional[str])

slots.plant_sex = Slot(uri=MIXS['0001059'], name="plant_sex", curie=MIXS.curie('0001059'),
                   model_uri=MIXS.VOCAB.plant_sex, domain=None, range=Optional[Union[str, "PlantSexEnum"]])

slots.plant_struc = Slot(uri=MIXS['0001060'], name="plant_struc", curie=MIXS.curie('0001060'),
                   model_uri=MIXS.VOCAB.plant_struc, domain=None, range=Optional[str])

slots.radiation_regm = Slot(uri=MIXS['0000575'], name="radiation_regm", curie=MIXS.curie('0000575'),
                   model_uri=MIXS.VOCAB.radiation_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.rainfall_regm = Slot(uri=MIXS['0000576'], name="rainfall_regm", curie=MIXS.curie('0000576'),
                   model_uri=MIXS.VOCAB.rainfall_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.root_cond = Slot(uri=MIXS['0001061'], name="root_cond", curie=MIXS.curie('0001061'),
                   model_uri=MIXS.VOCAB.root_cond, domain=None, range=Optional[str])

slots.root_med_carbon = Slot(uri=MIXS['0000577'], name="root_med_carbon", curie=MIXS.curie('0000577'),
                   model_uri=MIXS.VOCAB.root_med_carbon, domain=None, range=Optional[str])

slots.root_med_macronutr = Slot(uri=MIXS['0000578'], name="root_med_macronutr", curie=MIXS.curie('0000578'),
                   model_uri=MIXS.VOCAB.root_med_macronutr, domain=None, range=Optional[str])

slots.root_med_micronutr = Slot(uri=MIXS['0000579'], name="root_med_micronutr", curie=MIXS.curie('0000579'),
                   model_uri=MIXS.VOCAB.root_med_micronutr, domain=None, range=Optional[str])

slots.root_med_suppl = Slot(uri=MIXS['0000580'], name="root_med_suppl", curie=MIXS.curie('0000580'),
                   model_uri=MIXS.VOCAB.root_med_suppl, domain=None, range=Optional[str])

slots.root_med_ph = Slot(uri=MIXS['0001062'], name="root_med_ph", curie=MIXS.curie('0001062'),
                   model_uri=MIXS.VOCAB.root_med_ph, domain=None, range=Optional[float])

slots.root_med_regl = Slot(uri=MIXS['0000581'], name="root_med_regl", curie=MIXS.curie('0000581'),
                   model_uri=MIXS.VOCAB.root_med_regl, domain=None, range=Optional[str])

slots.root_med_solid = Slot(uri=MIXS['0001063'], name="root_med_solid", curie=MIXS.curie('0001063'),
                   model_uri=MIXS.VOCAB.root_med_solid, domain=None, range=Optional[str])

slots.salt_regm = Slot(uri=MIXS['0000582'], name="salt_regm", curie=MIXS.curie('0000582'),
                   model_uri=MIXS.VOCAB.salt_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.season_environment = Slot(uri=MIXS['0001068'], name="season_environment", curie=MIXS.curie('0001068'),
                   model_uri=MIXS.VOCAB.season_environment, domain=None, range=Optional[Union[str, List[str]]])

slots.standing_water_regm = Slot(uri=MIXS['0001069'], name="standing_water_regm", curie=MIXS.curie('0001069'),
                   model_uri=MIXS.VOCAB.standing_water_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.tiss_cult_growth_med = Slot(uri=MIXS['0001070'], name="tiss_cult_growth_med", curie=MIXS.curie('0001070'),
                   model_uri=MIXS.VOCAB.tiss_cult_growth_med, domain=None, range=Optional[str])

slots.water_temp_regm = Slot(uri=MIXS['0000590'], name="water_temp_regm", curie=MIXS.curie('0000590'),
                   model_uri=MIXS.VOCAB.water_temp_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.watering_regm = Slot(uri=MIXS['0000591'], name="watering_regm", curie=MIXS.curie('0000591'),
                   model_uri=MIXS.VOCAB.watering_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.particle_class = Slot(uri=MIXS['0000206'], name="particle_class", curie=MIXS.curie('0000206'),
                   model_uri=MIXS.VOCAB.particle_class, domain=None, range=Optional[Union[str, List[str]]])

slots.sediment_type = Slot(uri=MIXS['0001078'], name="sediment_type", curie=MIXS.curie('0001078'),
                   model_uri=MIXS.VOCAB.sediment_type, domain=None, range=Optional[Union[str, "SedimentTypeEnum"]])

slots.tidal_stage = Slot(uri=MIXS['0000750'], name="tidal_stage", curie=MIXS.curie('0000750'),
                   model_uri=MIXS.VOCAB.tidal_stage, domain=None, range=Optional[Union[str, "TidalStageEnum"]])

slots.tot_depth_water_col = Slot(uri=MIXS['0000634'], name="tot_depth_water_col", curie=MIXS.curie('0000634'),
                   model_uri=MIXS.VOCAB.tot_depth_water_col, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.cur_land_use = Slot(uri=MIXS['0001080'], name="cur_land_use", curie=MIXS.curie('0001080'),
                   model_uri=MIXS.VOCAB.cur_land_use, domain=None, range=Optional[Union[str, "CurLandUseEnum"]])

slots.cur_vegetation = Slot(uri=MIXS['0000312'], name="cur_vegetation", curie=MIXS.curie('0000312'),
                   model_uri=MIXS.VOCAB.cur_vegetation, domain=None, range=Optional[str])

slots.cur_vegetation_meth = Slot(uri=MIXS['0000314'], name="cur_vegetation_meth", curie=MIXS.curie('0000314'),
                   model_uri=MIXS.VOCAB.cur_vegetation_meth, domain=None, range=Optional[str])

slots.previous_land_use = Slot(uri=MIXS['0000315'], name="previous_land_use", curie=MIXS.curie('0000315'),
                   model_uri=MIXS.VOCAB.previous_land_use, domain=None, range=Optional[str])

slots.prev_land_use_meth = Slot(uri=MIXS['0000316'], name="prev_land_use_meth", curie=MIXS.curie('0000316'),
                   model_uri=MIXS.VOCAB.prev_land_use_meth, domain=None, range=Optional[str])

slots.crop_rotation = Slot(uri=MIXS['0000318'], name="crop_rotation", curie=MIXS.curie('0000318'),
                   model_uri=MIXS.VOCAB.crop_rotation, domain=None, range=Optional[str])

slots.agrochem_addition = Slot(uri=MIXS['0000639'], name="agrochem_addition", curie=MIXS.curie('0000639'),
                   model_uri=MIXS.VOCAB.agrochem_addition, domain=None, range=Optional[Union[str, List[str]]])

slots.tillage = Slot(uri=MIXS['0001081'], name="tillage", curie=MIXS.curie('0001081'),
                   model_uri=MIXS.VOCAB.tillage, domain=None, range=Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]])

slots.fire = Slot(uri=MIXS['0001086'], name="fire", curie=MIXS.curie('0001086'),
                   model_uri=MIXS.VOCAB.fire, domain=None, range=Optional[Union[str, XSDDate]])

slots.flooding = Slot(uri=MIXS['0000319'], name="flooding", curie=MIXS.curie('0000319'),
                   model_uri=MIXS.VOCAB.flooding, domain=None, range=Optional[Union[str, XSDDate]])

slots.extreme_event = Slot(uri=MIXS['0000320'], name="extreme_event", curie=MIXS.curie('0000320'),
                   model_uri=MIXS.VOCAB.extreme_event, domain=None, range=Optional[Union[str, XSDDate]])

slots.soil_horizon = Slot(uri=MIXS['0001082'], name="soil_horizon", curie=MIXS.curie('0001082'),
                   model_uri=MIXS.VOCAB.soil_horizon, domain=None, range=Optional[Union[str, "SoilHorizonEnum"]])

slots.horizon_meth = Slot(uri=MIXS['0000321'], name="horizon_meth", curie=MIXS.curie('0000321'),
                   model_uri=MIXS.VOCAB.horizon_meth, domain=None, range=Optional[str])

slots.sieving = Slot(uri=MIXS['0000322'], name="sieving", curie=MIXS.curie('0000322'),
                   model_uri=MIXS.VOCAB.sieving, domain=None, range=Optional[str])

slots.water_cont_soil_meth = Slot(uri=MIXS['0000323'], name="water_cont_soil_meth", curie=MIXS.curie('0000323'),
                   model_uri=MIXS.VOCAB.water_cont_soil_meth, domain=None, range=Optional[str])

slots.pool_dna_extracts = Slot(uri=MIXS['0000325'], name="pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.pool_dna_extracts, domain=None, range=Optional[str])

slots.store_cond = Slot(uri=MIXS['0000327'], name="store_cond", curie=MIXS.curie('0000327'),
                   model_uri=MIXS.VOCAB.store_cond, domain=None, range=Optional[str])

slots.link_climate_info = Slot(uri=MIXS['0000328'], name="link_climate_info", curie=MIXS.curie('0000328'),
                   model_uri=MIXS.VOCAB.link_climate_info, domain=None, range=Optional[str])

slots.annual_temp = Slot(uri=MIXS['0000642'], name="annual_temp", curie=MIXS.curie('0000642'),
                   model_uri=MIXS.VOCAB.annual_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.season_temp = Slot(uri=MIXS['0000643'], name="season_temp", curie=MIXS.curie('0000643'),
                   model_uri=MIXS.VOCAB.season_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.annual_precpt = Slot(uri=MIXS['0000644'], name="annual_precpt", curie=MIXS.curie('0000644'),
                   model_uri=MIXS.VOCAB.annual_precpt, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.season_precpt = Slot(uri=MIXS['0000645'], name="season_precpt", curie=MIXS.curie('0000645'),
                   model_uri=MIXS.VOCAB.season_precpt, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.link_class_info = Slot(uri=MIXS['0000329'], name="link_class_info", curie=MIXS.curie('0000329'),
                   model_uri=MIXS.VOCAB.link_class_info, domain=None, range=Optional[str])

slots.fao_class = Slot(uri=MIXS['0001083'], name="fao_class", curie=MIXS.curie('0001083'),
                   model_uri=MIXS.VOCAB.fao_class, domain=None, range=Optional[Union[str, "FaoClassEnum"]])

slots.local_class = Slot(uri=MIXS['0000330'], name="local_class", curie=MIXS.curie('0000330'),
                   model_uri=MIXS.VOCAB.local_class, domain=None, range=Optional[str])

slots.local_class_meth = Slot(uri=MIXS['0000331'], name="local_class_meth", curie=MIXS.curie('0000331'),
                   model_uri=MIXS.VOCAB.local_class_meth, domain=None, range=Optional[str])

slots.soil_type = Slot(uri=MIXS['0000332'], name="soil_type", curie=MIXS.curie('0000332'),
                   model_uri=MIXS.VOCAB.soil_type, domain=None, range=Optional[str])

slots.soil_type_meth = Slot(uri=MIXS['0000334'], name="soil_type_meth", curie=MIXS.curie('0000334'),
                   model_uri=MIXS.VOCAB.soil_type_meth, domain=None, range=Optional[str])

slots.slope_gradient = Slot(uri=MIXS['0000646'], name="slope_gradient", curie=MIXS.curie('0000646'),
                   model_uri=MIXS.VOCAB.slope_gradient, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.slope_aspect = Slot(uri=MIXS['0000647'], name="slope_aspect", curie=MIXS.curie('0000647'),
                   model_uri=MIXS.VOCAB.slope_aspect, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.profile_position = Slot(uri=MIXS['0001084'], name="profile_position", curie=MIXS.curie('0001084'),
                   model_uri=MIXS.VOCAB.profile_position, domain=None, range=Optional[Union[str, "ProfilePositionEnum"]])

slots.drainage_class = Slot(uri=MIXS['0001085'], name="drainage_class", curie=MIXS.curie('0001085'),
                   model_uri=MIXS.VOCAB.drainage_class, domain=None, range=Optional[Union[str, "DrainageClassEnum"]])

slots.soil_text_measure = Slot(uri=MIXS['0000335'], name="soil_text_measure", curie=MIXS.curie('0000335'),
                   model_uri=MIXS.VOCAB.soil_text_measure, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.soil_texture_meth = Slot(uri=MIXS['0000336'], name="soil_texture_meth", curie=MIXS.curie('0000336'),
                   model_uri=MIXS.VOCAB.soil_texture_meth, domain=None, range=Optional[str])

slots.ph_meth = Slot(uri=MIXS['0001106'], name="ph_meth", curie=MIXS.curie('0001106'),
                   model_uri=MIXS.VOCAB.ph_meth, domain=None, range=Optional[str])

slots.tot_org_c_meth = Slot(uri=MIXS['0000337'], name="tot_org_c_meth", curie=MIXS.curie('0000337'),
                   model_uri=MIXS.VOCAB.tot_org_c_meth, domain=None, range=Optional[str])

slots.tot_nitro_cont_meth = Slot(uri=MIXS['0000338'], name="tot_nitro_cont_meth", curie=MIXS.curie('0000338'),
                   model_uri=MIXS.VOCAB.tot_nitro_cont_meth, domain=None, range=Optional[str])

slots.microbial_biomass = Slot(uri=MIXS['0000650'], name="microbial_biomass", curie=MIXS.curie('0000650'),
                   model_uri=MIXS.VOCAB.microbial_biomass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.micro_biomass_meth = Slot(uri=MIXS['0000339'], name="micro_biomass_meth", curie=MIXS.curie('0000339'),
                   model_uri=MIXS.VOCAB.micro_biomass_meth, domain=None, range=Optional[str])

slots.link_addit_analys = Slot(uri=MIXS['0000340'], name="link_addit_analys", curie=MIXS.curie('0000340'),
                   model_uri=MIXS.VOCAB.link_addit_analys, domain=None, range=Optional[str])

slots.salinity_meth = Slot(uri=MIXS['0000341'], name="salinity_meth", curie=MIXS.curie('0000341'),
                   model_uri=MIXS.VOCAB.salinity_meth, domain=None, range=Optional[str])

slots.heavy_metals = Slot(uri=MIXS['0000652'], name="heavy_metals", curie=MIXS.curie('0000652'),
                   model_uri=MIXS.VOCAB.heavy_metals, domain=None, range=Optional[Union[str, List[str]]])

slots.heavy_metals_meth = Slot(uri=MIXS['0000343'], name="heavy_metals_meth", curie=MIXS.curie('0000343'),
                   model_uri=MIXS.VOCAB.heavy_metals_meth, domain=None, range=Optional[str])

slots.al_sat = Slot(uri=MIXS['0000607'], name="al_sat", curie=MIXS.curie('0000607'),
                   model_uri=MIXS.VOCAB.al_sat, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.al_sat_meth = Slot(uri=MIXS['0000324'], name="al_sat_meth", curie=MIXS.curie('0000324'),
                   model_uri=MIXS.VOCAB.al_sat_meth, domain=None, range=Optional[str])

slots.biochem_oxygen_dem = Slot(uri=MIXS['0000653'], name="biochem_oxygen_dem", curie=MIXS.curie('0000653'),
                   model_uri=MIXS.VOCAB.biochem_oxygen_dem, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.chem_oxygen_dem = Slot(uri=MIXS['0000656'], name="chem_oxygen_dem", curie=MIXS.curie('0000656'),
                   model_uri=MIXS.VOCAB.chem_oxygen_dem, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.efficiency_percent = Slot(uri=MIXS['0000657'], name="efficiency_percent", curie=MIXS.curie('0000657'),
                   model_uri=MIXS.VOCAB.efficiency_percent, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.emulsions = Slot(uri=MIXS['0000660'], name="emulsions", curie=MIXS.curie('0000660'),
                   model_uri=MIXS.VOCAB.emulsions, domain=None, range=Optional[Union[str, List[str]]])

slots.gaseous_substances = Slot(uri=MIXS['0000661'], name="gaseous_substances", curie=MIXS.curie('0000661'),
                   model_uri=MIXS.VOCAB.gaseous_substances, domain=None, range=Optional[Union[str, List[str]]])

slots.indust_eff_percent = Slot(uri=MIXS['0000662'], name="indust_eff_percent", curie=MIXS.curie('0000662'),
                   model_uri=MIXS.VOCAB.indust_eff_percent, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.inorg_particles = Slot(uri=MIXS['0000664'], name="inorg_particles", curie=MIXS.curie('0000664'),
                   model_uri=MIXS.VOCAB.inorg_particles, domain=None, range=Optional[Union[str, List[str]]])

slots.org_particles = Slot(uri=MIXS['0000665'], name="org_particles", curie=MIXS.curie('0000665'),
                   model_uri=MIXS.VOCAB.org_particles, domain=None, range=Optional[Union[str, List[str]]])

slots.pre_treatment = Slot(uri=MIXS['0000348'], name="pre_treatment", curie=MIXS.curie('0000348'),
                   model_uri=MIXS.VOCAB.pre_treatment, domain=None, range=Optional[str])

slots.primary_treatment = Slot(uri=MIXS['0000349'], name="primary_treatment", curie=MIXS.curie('0000349'),
                   model_uri=MIXS.VOCAB.primary_treatment, domain=None, range=Optional[str])

slots.reactor_type = Slot(uri=MIXS['0000350'], name="reactor_type", curie=MIXS.curie('0000350'),
                   model_uri=MIXS.VOCAB.reactor_type, domain=None, range=Optional[str])

slots.secondary_treatment = Slot(uri=MIXS['0000351'], name="secondary_treatment", curie=MIXS.curie('0000351'),
                   model_uri=MIXS.VOCAB.secondary_treatment, domain=None, range=Optional[str])

slots.sewage_type = Slot(uri=MIXS['0000215'], name="sewage_type", curie=MIXS.curie('0000215'),
                   model_uri=MIXS.VOCAB.sewage_type, domain=None, range=Optional[str])

slots.sludge_retent_time = Slot(uri=MIXS['0000669'], name="sludge_retent_time", curie=MIXS.curie('0000669'),
                   model_uri=MIXS.VOCAB.sludge_retent_time, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.soluble_inorg_mat = Slot(uri=MIXS['0000672'], name="soluble_inorg_mat", curie=MIXS.curie('0000672'),
                   model_uri=MIXS.VOCAB.soluble_inorg_mat, domain=None, range=Optional[Union[str, List[str]]])

slots.soluble_org_mat = Slot(uri=MIXS['0000673'], name="soluble_org_mat", curie=MIXS.curie('0000673'),
                   model_uri=MIXS.VOCAB.soluble_org_mat, domain=None, range=Optional[Union[str, List[str]]])

slots.tertiary_treatment = Slot(uri=MIXS['0000352'], name="tertiary_treatment", curie=MIXS.curie('0000352'),
                   model_uri=MIXS.VOCAB.tertiary_treatment, domain=None, range=Optional[str])

slots.tot_phosphate = Slot(uri=MIXS['0000689'], name="tot_phosphate", curie=MIXS.curie('0000689'),
                   model_uri=MIXS.VOCAB.tot_phosphate, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.wastewater_type = Slot(uri=MIXS['0000353'], name="wastewater_type", curie=MIXS.curie('0000353'),
                   model_uri=MIXS.VOCAB.wastewater_type, domain=None, range=Optional[str])

slots.atmospheric_data = Slot(uri=MIXS['0001097'], name="atmospheric_data", curie=MIXS.curie('0001097'),
                   model_uri=MIXS.VOCAB.atmospheric_data, domain=None, range=Optional[Union[str, List[str]]])

slots.bac_prod = Slot(uri=MIXS['0000683'], name="bac_prod", curie=MIXS.curie('0000683'),
                   model_uri=MIXS.VOCAB.bac_prod, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.bac_resp = Slot(uri=MIXS['0000684'], name="bac_resp", curie=MIXS.curie('0000684'),
                   model_uri=MIXS.VOCAB.bac_resp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.conduc = Slot(uri=MIXS['0000692'], name="conduc", curie=MIXS.curie('0000692'),
                   model_uri=MIXS.VOCAB.conduc, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.diss_inorg_nitro = Slot(uri=MIXS['0000698'], name="diss_inorg_nitro", curie=MIXS.curie('0000698'),
                   model_uri=MIXS.VOCAB.diss_inorg_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.down_par = Slot(uri=MIXS['0000703'], name="down_par", curie=MIXS.curie('0000703'),
                   model_uri=MIXS.VOCAB.down_par, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.fluor = Slot(uri=MIXS['0000704'], name="fluor", curie=MIXS.curie('0000704'),
                   model_uri=MIXS.VOCAB.fluor, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.light_intensity = Slot(uri=MIXS['0000706'], name="light_intensity", curie=MIXS.curie('0000706'),
                   model_uri=MIXS.VOCAB.light_intensity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.part_org_nitro = Slot(uri=MIXS['0000719'], name="part_org_nitro", curie=MIXS.curie('0000719'),
                   model_uri=MIXS.VOCAB.part_org_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.photon_flux = Slot(uri=MIXS['0000725'], name="photon_flux", curie=MIXS.curie('0000725'),
                   model_uri=MIXS.VOCAB.photon_flux, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.primary_prod = Slot(uri=MIXS['0000728'], name="primary_prod", curie=MIXS.curie('0000728'),
                   model_uri=MIXS.VOCAB.primary_prod, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.size_frac_low = Slot(uri=MIXS['0000735'], name="size_frac_low", curie=MIXS.curie('0000735'),
                   model_uri=MIXS.VOCAB.size_frac_low, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.size_frac_up = Slot(uri=MIXS['0000736'], name="size_frac_up", curie=MIXS.curie('0000736'),
                   model_uri=MIXS.VOCAB.size_frac_up, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.soluble_react_phosp = Slot(uri=MIXS['0000738'], name="soluble_react_phosp", curie=MIXS.curie('0000738'),
                   model_uri=MIXS.VOCAB.soluble_react_phosp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.suspend_part_matter = Slot(uri=MIXS['0000741'], name="suspend_part_matter", curie=MIXS.curie('0000741'),
                   model_uri=MIXS.VOCAB.suspend_part_matter, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_diss_nitro = Slot(uri=MIXS['0000744'], name="tot_diss_nitro", curie=MIXS.curie('0000744'),
                   model_uri=MIXS.VOCAB.tot_diss_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_inorg_nitro = Slot(uri=MIXS['0000745'], name="tot_inorg_nitro", curie=MIXS.curie('0000745'),
                   model_uri=MIXS.VOCAB.tot_inorg_nitro, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_part_carb = Slot(uri=MIXS['0000747'], name="tot_part_carb", curie=MIXS.curie('0000747'),
                   model_uri=MIXS.VOCAB.tot_part_carb, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.sample_name = Slot(uri=MIXS['0001107'], name="sample_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.sample_name, domain=None, range=Optional[str])

slots.host_dependence = Slot(uri=MIXS['0001315'], name="host_dependence", curie=MIXS.curie('0001315'),
                   model_uri=MIXS.VOCAB.host_dependence, domain=None, range=Optional[str])

slots.type_of_symbiosis = Slot(uri=MIXS['0001307'], name="type_of_symbiosis", curie=MIXS.curie('0001307'),
                   model_uri=MIXS.VOCAB.type_of_symbiosis, domain=None, range=Optional[Union[str, "TypeOfSymbiosisEnum"]])

slots.sym_life_cycle_type = Slot(uri=MIXS['0001300'], name="sym_life_cycle_type", curie=MIXS.curie('0001300'),
                   model_uri=MIXS.VOCAB.sym_life_cycle_type, domain=None, range=Optional[str])

slots.mode_transmission = Slot(uri=MIXS['0001312'], name="mode_transmission", curie=MIXS.curie('0001312'),
                   model_uri=MIXS.VOCAB.mode_transmission, domain=None, range=Optional[Union[str, "ModeTransmissionEnum"]])

slots.route_transmission = Slot(uri=MIXS['0001316'], name="route_transmission", curie=MIXS.curie('0001316'),
                   model_uri=MIXS.VOCAB.route_transmission, domain=None, range=Optional[Union[str, "RouteTransmissionEnum"]])

slots.host_family_relationship = Slot(uri=MIXS['0000872'], name="host_family_relationship", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.host_family_relationship, domain=None, range=Optional[str])

slots.host_infra_specific_name = Slot(uri=MIXS['0000253'], name="host_infra_specific_name", curie=MIXS.curie('0000253'),
                   model_uri=MIXS.VOCAB.host_infra_specific_name, domain=None, range=Optional[str])

slots.host_infra_specific_rank = Slot(uri=MIXS['0000254'], name="host_infra_specific_rank", curie=MIXS.curie('0000254'),
                   model_uri=MIXS.VOCAB.host_infra_specific_rank, domain=None, range=Optional[str])

slots.host_number = Slot(uri=MIXS['0001305'], name="host_number", curie=MIXS.curie('0001305'),
                   model_uri=MIXS.VOCAB.host_number, domain=None, range=Optional[str])

slots.host_specificity = Slot(uri=MIXS['0001308'], name="host_specificity", curie=MIXS.curie('0001308'),
                   model_uri=MIXS.VOCAB.host_specificity, domain=None, range=Optional[Union[str, "HostSpecificityEnum"]])

slots.symbiont_host_role = Slot(uri=MIXS['0001303'], name="symbiont_host_role", curie=MIXS.curie('0001303'),
                   model_uri=MIXS.VOCAB.symbiont_host_role, domain=None, range=Optional[Union[str, "SymbiontHostRoleEnum"]])

slots.host_cellular_loc = Slot(uri=MIXS['0001313'], name="host_cellular_loc", curie=MIXS.curie('0001313'),
                   model_uri=MIXS.VOCAB.host_cellular_loc, domain=None, range=Optional[Union[str, "HostCellularLocEnum"]])

slots.association_duration = Slot(uri=MIXS['0001299'], name="association_duration", curie=MIXS.curie('0001299'),
                   model_uri=MIXS.VOCAB.association_duration, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.host_of_host_coinf = Slot(uri=MIXS['0001310'], name="host_of_host_coinf", curie=MIXS.curie('0001310'),
                   model_uri=MIXS.VOCAB.host_of_host_coinf, domain=None, range=Optional[str])

slots.host_of_host_name = Slot(uri=MIXS['0001324'], name="host_of_host_name", curie=MIXS.curie('0001324'),
                   model_uri=MIXS.VOCAB.host_of_host_name, domain=None, range=Optional[str])

slots.host_of_host_env_loc = Slot(uri=MIXS['0001325'], name="host_of_host_env_loc", curie=MIXS.curie('0001325'),
                   model_uri=MIXS.VOCAB.host_of_host_env_loc, domain=None, range=Optional[Union[str, List[str]]])

slots.host_of_host_env_med = Slot(uri=MIXS['0001326'], name="host_of_host_env_med", curie=MIXS.curie('0001326'),
                   model_uri=MIXS.VOCAB.host_of_host_env_med, domain=None, range=Optional[str])

slots.host_of_host_taxid = Slot(uri=MIXS['0001306'], name="host_of_host_taxid", curie=MIXS.curie('0001306'),
                   model_uri=MIXS.VOCAB.host_of_host_taxid, domain=None, range=Optional[int])

slots.host_of_host_sub_id = Slot(uri=MIXS['0001327'], name="host_of_host_sub_id", curie=MIXS.curie('0001327'),
                   model_uri=MIXS.VOCAB.host_of_host_sub_id, domain=None, range=Optional[str])

slots.host_of_host_disease = Slot(uri=MIXS['0001319'], name="host_of_host_disease", curie=MIXS.curie('0001319'),
                   model_uri=MIXS.VOCAB.host_of_host_disease, domain=None, range=Optional[Union[str, List[str]]])

slots.host_of_host_fam_rel = Slot(uri=MIXS['0001328'], name="host_of_host_fam_rel", curie=MIXS.curie('0001328'),
                   model_uri=MIXS.VOCAB.host_of_host_fam_rel, domain=None, range=Optional[Union[str, List[str]]])

slots.host_of_host_infname = Slot(uri=MIXS['0001329'], name="host_of_host_infname", curie=MIXS.curie('0001329'),
                   model_uri=MIXS.VOCAB.host_of_host_infname, domain=None, range=Optional[str])

slots.host_of_host_infrank = Slot(uri=MIXS['0001330'], name="host_of_host_infrank", curie=MIXS.curie('0001330'),
                   model_uri=MIXS.VOCAB.host_of_host_infrank, domain=None, range=Optional[str])

slots.host_of_host_geno = Slot(uri=MIXS['0001331'], name="host_of_host_geno", curie=MIXS.curie('0001331'),
                   model_uri=MIXS.VOCAB.host_of_host_geno, domain=None, range=Optional[str])

slots.host_of_host_pheno = Slot(uri=MIXS['0001332'], name="host_of_host_pheno", curie=MIXS.curie('0001332'),
                   model_uri=MIXS.VOCAB.host_of_host_pheno, domain=None, range=Optional[str])

slots.host_of_host_gravid = Slot(uri=MIXS['0001333'], name="host_of_host_gravid", curie=MIXS.curie('0001333'),
                   model_uri=MIXS.VOCAB.host_of_host_gravid, domain=None, range=Optional[str])

slots.host_of_host_totmass = Slot(uri=MIXS['0001334'], name="host_of_host_totmass", curie=MIXS.curie('0001334'),
                   model_uri=MIXS.VOCAB.host_of_host_totmass, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_store_sol = Slot(uri=MIXS['0001317'], name="samp_store_sol", curie=MIXS.curie('0001317'),
                   model_uri=MIXS.VOCAB.samp_store_sol, domain=None, range=Optional[str])

slots.samp_collect_device = Slot(uri=MIXS['0000002'], name="samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.samp_collect_device, domain=None, range=Optional[str])

slots.spikein_count = Slot(uri=MIXS['0001335'], name="spikein_count", curie=MIXS.curie('0001335'),
                   model_uri=MIXS.VOCAB.spikein_count, domain=None, range=Optional[Union[str, "SpikeinCountEnum"]])

slots.samp_stor_temp = Slot(uri=MIXS['0000110'], name="samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.samp_stor_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_stor_dur = Slot(uri=MIXS['0000116'], name="samp_stor_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.samp_stor_dur, domain=None, range=Optional[str])

slots.samp_stor_loc = Slot(uri=MIXS['0000755'], name="samp_stor_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.samp_stor_loc, domain=None, range=Optional[str])

slots.coll_site_geo_feat = Slot(uri=MIXS['0001183'], name="coll_site_geo_feat", curie=MIXS.curie('0001183'),
                   model_uri=MIXS.VOCAB.coll_site_geo_feat, domain=None, range=Optional[str])

slots.food_product_type = Slot(uri=MIXS['0001184'], name="food_product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.food_product_type, domain=None, range=Optional[Union[str, List[str]]])

slots.IFSAC_category = Slot(uri=MIXS['0001179'], name="IFSAC_category", curie=MIXS.curie('0001179'),
                   model_uri=MIXS.VOCAB.IFSAC_category, domain=None, range=Optional[Union[str, List[str]]])

slots.ferm_chem_add = Slot(uri=MIXS['0001185'], name="ferm_chem_add", curie=MIXS.curie('0001185'),
                   model_uri=MIXS.VOCAB.ferm_chem_add, domain=None, range=Optional[Union[Union[dict, QuantityValue], List[Union[dict, QuantityValue]]]])

slots.ferm_chem_add_perc = Slot(uri=MIXS['0001186'], name="ferm_chem_add_perc", curie=MIXS.curie('0001186'),
                   model_uri=MIXS.VOCAB.ferm_chem_add_perc, domain=None, range=Optional[Union[str, List[str]]])

slots.ferm_headspace_oxy = Slot(uri=MIXS['0001187'], name="ferm_headspace_oxy", curie=MIXS.curie('0001187'),
                   model_uri=MIXS.VOCAB.ferm_headspace_oxy, domain=None, range=Optional[str])

slots.ferm_medium = Slot(uri=MIXS['0001188'], name="ferm_medium", curie=MIXS.curie('0001188'),
                   model_uri=MIXS.VOCAB.ferm_medium, domain=None, range=Optional[str])

slots.ferm_pH = Slot(uri=MIXS['0001189'], name="ferm_pH", curie=MIXS.curie('0001189'),
                   model_uri=MIXS.VOCAB.ferm_pH, domain=None, range=Optional[float])

slots.ferm_rel_humidity = Slot(uri=MIXS['0001190'], name="ferm_rel_humidity", curie=MIXS.curie('0001190'),
                   model_uri=MIXS.VOCAB.ferm_rel_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ferm_temp = Slot(uri=MIXS['0001191'], name="ferm_temp", curie=MIXS.curie('0001191'),
                   model_uri=MIXS.VOCAB.ferm_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.ferm_time = Slot(uri=MIXS['0001192'], name="ferm_time", curie=MIXS.curie('0001192'),
                   model_uri=MIXS.VOCAB.ferm_time, domain=None, range=Optional[str])

slots.ferm_vessel = Slot(uri=MIXS['0001193'], name="ferm_vessel", curie=MIXS.curie('0001193'),
                   model_uri=MIXS.VOCAB.ferm_vessel, domain=None, range=Optional[str])

slots.bacterial_density = Slot(uri=MIXS['0001194'], name="bacterial_density", curie=MIXS.curie('0001194'),
                   model_uri=MIXS.VOCAB.bacterial_density, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.cons_food_stor_dur = Slot(uri=MIXS['0001195'], name="cons_food_stor_dur", curie=MIXS.curie('0001195'),
                   model_uri=MIXS.VOCAB.cons_food_stor_dur, domain=None, range=Optional[str])

slots.cons_food_stor_temp = Slot(uri=MIXS['0001196'], name="cons_food_stor_temp", curie=MIXS.curie('0001196'),
                   model_uri=MIXS.VOCAB.cons_food_stor_temp, domain=None, range=Optional[str])

slots.cons_purch_date = Slot(uri=MIXS['0001197'], name="cons_purch_date", curie=MIXS.curie('0001197'),
                   model_uri=MIXS.VOCAB.cons_purch_date, domain=None, range=Optional[Union[str, XSDDate]])

slots.cons_qty_purchased = Slot(uri=MIXS['0001198'], name="cons_qty_purchased", curie=MIXS.curie('0001198'),
                   model_uri=MIXS.VOCAB.cons_qty_purchased, domain=None, range=Optional[str])

slots.cult_isol_date = Slot(uri=MIXS['0001181'], name="cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.cult_isol_date, domain=None, range=Optional[Union[str, XSDDate]])

slots.cult_result = Slot(uri=MIXS['0001117'], name="cult_result", curie=MIXS.curie('0001117'),
                   model_uri=MIXS.VOCAB.cult_result, domain=None, range=Optional[Union[str, "CultResultEnum"]])

slots.cult_result_org = Slot(uri=MIXS['0001118'], name="cult_result_org", curie=MIXS.curie('0001118'),
                   model_uri=MIXS.VOCAB.cult_result_org, domain=None, range=Optional[Union[str, List[str]]])

slots.cult_target = Slot(uri=MIXS['0001119'], name="cult_target", curie=MIXS.curie('0001119'),
                   model_uri=MIXS.VOCAB.cult_target, domain=None, range=Optional[Union[str, List[str]]])

slots.dietary_claim_use = Slot(uri=MIXS['0001199'], name="dietary_claim_use", curie=MIXS.curie('0001199'),
                   model_uri=MIXS.VOCAB.dietary_claim_use, domain=None, range=Optional[Union[str, List[str]]])

slots.enrichment_protocol = Slot(uri=MIXS['0001177'], name="enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.enrichment_protocol, domain=None, range=Optional[str])

slots.food_additive = Slot(uri=MIXS['0001200'], name="food_additive", curie=MIXS.curie('0001200'),
                   model_uri=MIXS.VOCAB.food_additive, domain=None, range=Optional[Union[str, List[str]]])

slots.food_allergen_label = Slot(uri=MIXS['0001201'], name="food_allergen_label", curie=MIXS.curie('0001201'),
                   model_uri=MIXS.VOCAB.food_allergen_label, domain=None, range=Optional[Union[str, List[str]]])

slots.food_contact_surf = Slot(uri=MIXS['0001131'], name="food_contact_surf", curie=MIXS.curie('0001131'),
                   model_uri=MIXS.VOCAB.food_contact_surf, domain=None, range=Optional[Union[str, List[str]]])

slots.food_contain_wrap = Slot(uri=MIXS['0001132'], name="food_contain_wrap", curie=MIXS.curie('0001132'),
                   model_uri=MIXS.VOCAB.food_contain_wrap, domain=None, range=Optional[str])

slots.food_cooking_proc = Slot(uri=MIXS['0001202'], name="food_cooking_proc", curie=MIXS.curie('0001202'),
                   model_uri=MIXS.VOCAB.food_cooking_proc, domain=None, range=Optional[Union[str, List[str]]])

slots.food_dis_point = Slot(uri=MIXS['0001203'], name="food_dis_point", curie=MIXS.curie('0001203'),
                   model_uri=MIXS.VOCAB.food_dis_point, domain=None, range=Optional[Union[str, List[str]]])

slots.food_ingredient = Slot(uri=MIXS['0001205'], name="food_ingredient", curie=MIXS.curie('0001205'),
                   model_uri=MIXS.VOCAB.food_ingredient, domain=None, range=Optional[Union[str, List[str]]])

slots.food_name_status = Slot(uri=MIXS['0001206'], name="food_name_status", curie=MIXS.curie('0001206'),
                   model_uri=MIXS.VOCAB.food_name_status, domain=None, range=Optional[str])

slots.food_origin = Slot(uri=MIXS['0001207'], name="food_origin", curie=MIXS.curie('0001207'),
                   model_uri=MIXS.VOCAB.food_origin, domain=None, range=Optional[str])

slots.food_pack_capacity = Slot(uri=MIXS['0001208'], name="food_pack_capacity", curie=MIXS.curie('0001208'),
                   model_uri=MIXS.VOCAB.food_pack_capacity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.food_pack_integrity = Slot(uri=MIXS['0001209'], name="food_pack_integrity", curie=MIXS.curie('0001209'),
                   model_uri=MIXS.VOCAB.food_pack_integrity, domain=None, range=Optional[Union[str, List[str]]])

slots.food_pack_medium = Slot(uri=MIXS['0001134'], name="food_pack_medium", curie=MIXS.curie('0001134'),
                   model_uri=MIXS.VOCAB.food_pack_medium, domain=None, range=Optional[Union[str, List[str]]])

slots.food_preserv_proc = Slot(uri=MIXS['0001135'], name="food_preserv_proc", curie=MIXS.curie('0001135'),
                   model_uri=MIXS.VOCAB.food_preserv_proc, domain=None, range=Optional[Union[str, List[str]]])

slots.food_prior_contact = Slot(uri=MIXS['0001210'], name="food_prior_contact", curie=MIXS.curie('0001210'),
                   model_uri=MIXS.VOCAB.food_prior_contact, domain=None, range=Optional[Union[str, List[str]]])

slots.food_prod = Slot(uri=MIXS['0001211'], name="food_prod", curie=MIXS.curie('0001211'),
                   model_uri=MIXS.VOCAB.food_prod, domain=None, range=Optional[Union[str, List[str]]])

slots.food_prod_synonym = Slot(uri=MIXS['0001212'], name="food_prod_synonym", curie=MIXS.curie('0001212'),
                   model_uri=MIXS.VOCAB.food_prod_synonym, domain=None, range=Optional[Union[str, List[str]]])

slots.food_product_qual = Slot(uri=MIXS['0001213'], name="food_product_qual", curie=MIXS.curie('0001213'),
                   model_uri=MIXS.VOCAB.food_product_qual, domain=None, range=Optional[str])

slots.food_quality_date = Slot(uri=MIXS['0001178'], name="food_quality_date", curie=MIXS.curie('0001178'),
                   model_uri=MIXS.VOCAB.food_quality_date, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(best by|best if used by|freeze by||use by);(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'))

slots.food_source = Slot(uri=MIXS['0001139'], name="food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.food_source, domain=None, range=Optional[str])

slots.food_trace_list = Slot(uri=MIXS['0001214'], name="food_trace_list", curie=MIXS.curie('0001214'),
                   model_uri=MIXS.VOCAB.food_trace_list, domain=None, range=Optional[Union[str, "FoodTraceListEnum"]])

slots.food_trav_mode = Slot(uri=MIXS['0001137'], name="food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.food_trav_mode, domain=None, range=Optional[Union[str, List[str]]])

slots.food_trav_vehic = Slot(uri=MIXS['0001138'], name="food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.food_trav_vehic, domain=None, range=Optional[Union[str, List[str]]])

slots.food_treat_proc = Slot(uri=MIXS['0001140'], name="food_treat_proc", curie=MIXS.curie('0001140'),
                   model_uri=MIXS.VOCAB.food_treat_proc, domain=None, range=Optional[Union[str, List[str]]])

slots.HACCP_term = Slot(uri=MIXS['0001215'], name="HACCP_term", curie=MIXS.curie('0001215'),
                   model_uri=MIXS.VOCAB.HACCP_term, domain=None, range=Optional[Union[str, List[str]]])

slots.intended_consumer = Slot(uri=MIXS['0001144'], name="intended_consumer", curie=MIXS.curie('0001144'),
                   model_uri=MIXS.VOCAB.intended_consumer, domain=None, range=Optional[Union[str, List[str]]])

slots.library_prep_kit = Slot(uri=MIXS['0001145'], name="library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.library_prep_kit, domain=None, range=Optional[str])

slots.lot_number = Slot(uri=MIXS['0001147'], name="lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.lot_number, domain=None, range=Optional[Union[str, List[str]]])

slots.microb_cult_med = Slot(uri=MIXS['0001216'], name="microb_cult_med", curie=MIXS.curie('0001216'),
                   model_uri=MIXS.VOCAB.microb_cult_med, domain=None, range=Optional[str])

slots.microb_start = Slot(uri=MIXS['0001217'], name="microb_start", curie=MIXS.curie('0001217'),
                   model_uri=MIXS.VOCAB.microb_start, domain=None, range=Optional[str])

slots.microb_start_count = Slot(uri=MIXS['0001218'], name="microb_start_count", curie=MIXS.curie('0001218'),
                   model_uri=MIXS.VOCAB.microb_start_count, domain=None, range=Optional[Union[str, "MicrobStartCountEnum"]])

slots.microb_start_inoc = Slot(uri=MIXS['0001219'], name="microb_start_inoc", curie=MIXS.curie('0001219'),
                   model_uri=MIXS.VOCAB.microb_start_inoc, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.microb_start_prep = Slot(uri=MIXS['0001220'], name="microb_start_prep", curie=MIXS.curie('0001220'),
                   model_uri=MIXS.VOCAB.microb_start_prep, domain=None, range=Optional[str])

slots.microb_start_source = Slot(uri=MIXS['0001221'], name="microb_start_source", curie=MIXS.curie('0001221'),
                   model_uri=MIXS.VOCAB.microb_start_source, domain=None, range=Optional[str])

slots.microb_start_taxID = Slot(uri=MIXS['0001222'], name="microb_start_taxID", curie=MIXS.curie('0001222'),
                   model_uri=MIXS.VOCAB.microb_start_taxID, domain=None, range=Optional[str])

slots.nucl_acid_ext_kit = Slot(uri=MIXS['0001223'], name="nucl_acid_ext_kit", curie=MIXS.curie('0001223'),
                   model_uri=MIXS.VOCAB.nucl_acid_ext_kit, domain=None, range=Optional[Union[str, List[str]]])

slots.num_samp_collect = Slot(uri=MIXS['0001224'], name="num_samp_collect", curie=MIXS.curie('0001224'),
                   model_uri=MIXS.VOCAB.num_samp_collect, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.part_plant_animal = Slot(uri=MIXS['0001149'], name="part_plant_animal", curie=MIXS.curie('0001149'),
                   model_uri=MIXS.VOCAB.part_plant_animal, domain=None, range=Optional[Union[str, List[str]]])

slots.repository_name = Slot(uri=MIXS['0001152'], name="repository_name", curie=MIXS.curie('0001152'),
                   model_uri=MIXS.VOCAB.repository_name, domain=None, range=Optional[Union[str, List[str]]])

slots.sample_collec_method = Slot(uri=MIXS['0001225'], name="sample_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.sample_collec_method, domain=None, range=Optional[str])

slots.samp_pooling = Slot(uri=MIXS['0001153'], name="samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.samp_pooling, domain=None, range=Optional[Union[str, List[str]]])

slots.samp_rep_biol = Slot(uri=MIXS['0001226'], name="samp_rep_biol", curie=MIXS.curie('0001226'),
                   model_uri=MIXS.VOCAB.samp_rep_biol, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_rep_tech = Slot(uri=MIXS['0001227'], name="samp_rep_tech", curie=MIXS.curie('0001227'),
                   model_uri=MIXS.VOCAB.samp_rep_tech, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_source_mat_cat = Slot(uri=MIXS['0001154'], name="samp_source_mat_cat", curie=MIXS.curie('0001154'),
                   model_uri=MIXS.VOCAB.samp_source_mat_cat, domain=None, range=Optional[str])

slots.samp_stor_device = Slot(uri=MIXS['0001228'], name="samp_stor_device", curie=MIXS.curie('0001228'),
                   model_uri=MIXS.VOCAB.samp_stor_device, domain=None, range=Optional[str])

slots.samp_stor_media = Slot(uri=MIXS['0001229'], name="samp_stor_media", curie=MIXS.curie('0001229'),
                   model_uri=MIXS.VOCAB.samp_stor_media, domain=None, range=Optional[str])

slots.samp_transport_cont = Slot(uri=MIXS['0001230'], name="samp_transport_cont", curie=MIXS.curie('0001230'),
                   model_uri=MIXS.VOCAB.samp_transport_cont, domain=None, range=Optional[Union[str, "SampTransportContEnum"]])

slots.samp_transport_dur = Slot(uri=MIXS['0001231'], name="samp_transport_dur", curie=MIXS.curie('0001231'),
                   model_uri=MIXS.VOCAB.samp_transport_dur, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_transport_temp = Slot(uri=MIXS['0001232'], name="samp_transport_temp", curie=MIXS.curie('0001232'),
                   model_uri=MIXS.VOCAB.samp_transport_temp, domain=None, range=Optional[str])

slots.samp_purpose = Slot(uri=MIXS['0001151'], name="samp_purpose", curie=MIXS.curie('0001151'),
                   model_uri=MIXS.VOCAB.samp_purpose, domain=None, range=Optional[str])

slots.sequencing_kit = Slot(uri=MIXS['0001155'], name="sequencing_kit", curie=MIXS.curie('0001155'),
                   model_uri=MIXS.VOCAB.sequencing_kit, domain=None, range=Optional[str])

slots.sequencing_location = Slot(uri=MIXS['0001156'], name="sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.sequencing_location, domain=None, range=Optional[str])

slots.serovar_or_serotype = Slot(uri=MIXS['0001157'], name="serovar_or_serotype", curie=MIXS.curie('0001157'),
                   model_uri=MIXS.VOCAB.serovar_or_serotype, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_AMR = Slot(uri=MIXS['0001235'], name="spikein_AMR", curie=MIXS.curie('0001235'),
                   model_uri=MIXS.VOCAB.spikein_AMR, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_antibiotic = Slot(uri=MIXS['0001171'], name="spikein_antibiotic", curie=MIXS.curie('0001171'),
                   model_uri=MIXS.VOCAB.spikein_antibiotic, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_growth_med = Slot(uri=MIXS['0001169'], name="spikein_growth_med", curie=MIXS.curie('0001169'),
                   model_uri=MIXS.VOCAB.spikein_growth_med, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_metal = Slot(uri=MIXS['0001172'], name="spikein_metal", curie=MIXS.curie('0001172'),
                   model_uri=MIXS.VOCAB.spikein_metal, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_org = Slot(uri=MIXS['0001167'], name="spikein_org", curie=MIXS.curie('0001167'),
                   model_uri=MIXS.VOCAB.spikein_org, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_serovar = Slot(uri=MIXS['0001168'], name="spikein_serovar", curie=MIXS.curie('0001168'),
                   model_uri=MIXS.VOCAB.spikein_serovar, domain=None, range=Optional[Union[str, List[str]]])

slots.spikein_strain = Slot(uri=MIXS['0001170'], name="spikein_strain", curie=MIXS.curie('0001170'),
                   model_uri=MIXS.VOCAB.spikein_strain, domain=None, range=Optional[Union[str, List[str]]])

slots.study_design = Slot(uri=MIXS['0001236'], name="study_design", curie=MIXS.curie('0001236'),
                   model_uri=MIXS.VOCAB.study_design, domain=None, range=Optional[Union[str, List[str]]])

slots.study_inc_dur = Slot(uri=MIXS['0001237'], name="study_inc_dur", curie=MIXS.curie('0001237'),
                   model_uri=MIXS.VOCAB.study_inc_dur, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.study_inc_temp = Slot(uri=MIXS['0001238'], name="study_inc_temp", curie=MIXS.curie('0001238'),
                   model_uri=MIXS.VOCAB.study_inc_temp, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.study_timecourse = Slot(uri=MIXS['0001239'], name="study_timecourse", curie=MIXS.curie('0001239'),
                   model_uri=MIXS.VOCAB.study_timecourse, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.study_tmnt = Slot(uri=MIXS['0001240'], name="study_tmnt", curie=MIXS.curie('0001240'),
                   model_uri=MIXS.VOCAB.study_tmnt, domain=None, range=Optional[Union[str, List[str]]])

slots.timepoint = Slot(uri=MIXS['0001173'], name="timepoint", curie=MIXS.curie('0001173'),
                   model_uri=MIXS.VOCAB.timepoint, domain=None, range=Optional[float])

slots.animal_am = Slot(uri=MIXS['0001243'], name="animal_am", curie=MIXS.curie('0001243'),
                   model_uri=MIXS.VOCAB.animal_am, domain=None, range=Optional[str])

slots.animal_am_dur = Slot(uri=MIXS['0001244'], name="animal_am_dur", curie=MIXS.curie('0001244'),
                   model_uri=MIXS.VOCAB.animal_am_dur, domain=None, range=Optional[str])

slots.animal_am_freq = Slot(uri=MIXS['0001245'], name="animal_am_freq", curie=MIXS.curie('0001245'),
                   model_uri=MIXS.VOCAB.animal_am_freq, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.animal_am_route = Slot(uri=MIXS['0001246'], name="animal_am_route", curie=MIXS.curie('0001246'),
                   model_uri=MIXS.VOCAB.animal_am_route, domain=None, range=Optional[str])

slots.animal_am_use = Slot(uri=MIXS['0001247'], name="animal_am_use", curie=MIXS.curie('0001247'),
                   model_uri=MIXS.VOCAB.animal_am_use, domain=None, range=Optional[str])

slots.animal_body_cond = Slot(uri=MIXS['0001248'], name="animal_body_cond", curie=MIXS.curie('0001248'),
                   model_uri=MIXS.VOCAB.animal_body_cond, domain=None, range=Optional[Union[str, "AnimalBodyCondEnum"]])

slots.animal_diet = Slot(uri=MIXS['0001130'], name="animal_diet", curie=MIXS.curie('0001130'),
                   model_uri=MIXS.VOCAB.animal_diet, domain=None, range=Optional[Union[str, List[str]]])

slots.animal_feed_equip = Slot(uri=MIXS['0001113'], name="animal_feed_equip", curie=MIXS.curie('0001113'),
                   model_uri=MIXS.VOCAB.animal_feed_equip, domain=None, range=Optional[Union[str, List[str]]])

slots.animal_group_size = Slot(uri=MIXS['0001129'], name="animal_group_size", curie=MIXS.curie('0001129'),
                   model_uri=MIXS.VOCAB.animal_group_size, domain=None, range=Optional[int])

slots.animal_housing = Slot(uri=MIXS['0001180'], name="animal_housing", curie=MIXS.curie('0001180'),
                   model_uri=MIXS.VOCAB.animal_housing, domain=None, range=Optional[Union[str, List[str]]])

slots.animal_sex = Slot(uri=MIXS['0001249'], name="animal_sex", curie=MIXS.curie('0001249'),
                   model_uri=MIXS.VOCAB.animal_sex, domain=None, range=Optional[Union[str, "AnimalSexEnum"]])

slots.food_dis_point_city = Slot(uri=MIXS['0001204'], name="food_dis_point_city", curie=MIXS.curie('0001204'),
                   model_uri=MIXS.VOCAB.food_dis_point_city, domain=None, range=Optional[str])

slots.food_source_age = Slot(uri=MIXS['0001251'], name="food_source_age", curie=MIXS.curie('0001251'),
                   model_uri=MIXS.VOCAB.food_source_age, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.samp_collect_method = Slot(uri=MIXS['0001225'], name="samp_collect_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.samp_collect_method, domain=None, range=Optional[str])

slots.facility_type = Slot(uri=MIXS['0001252'], name="facility_type", curie=MIXS.curie('0001252'),
                   model_uri=MIXS.VOCAB.facility_type, domain=None, range=Optional[Union[Union[str, "FacilityTypeEnum"], List[Union[str, "FacilityTypeEnum"]]]])

slots.hygienic_area = Slot(uri=MIXS['0001253'], name="hygienic_area", curie=MIXS.curie('0001253'),
                   model_uri=MIXS.VOCAB.hygienic_area, domain=None, range=Optional[str])

slots.env_monitoring_zone = Slot(uri=MIXS['0001254'], name="env_monitoring_zone", curie=MIXS.curie('0001254'),
                   model_uri=MIXS.VOCAB.env_monitoring_zone, domain=None, range=Optional[str])

slots.area_samp_size = Slot(uri=MIXS['0001255'], name="area_samp_size", curie=MIXS.curie('0001255'),
                   model_uri=MIXS.VOCAB.area_samp_size, domain=None, range=Optional[str])

slots.samp_surf_moisture = Slot(uri=MIXS['0001256'], name="samp_surf_moisture", curie=MIXS.curie('0001256'),
                   model_uri=MIXS.VOCAB.samp_surf_moisture, domain=None, range=Optional[Union[Union[str, "SampSurfMoistureEnum"], List[Union[str, "SampSurfMoistureEnum"]]]])

slots.samp_loc_condition = Slot(uri=MIXS['0001257'], name="samp_loc_condition", curie=MIXS.curie('0001257'),
                   model_uri=MIXS.VOCAB.samp_loc_condition, domain=None, range=Optional[Union[str, "SampLocConditionEnum"]])

slots.biocide_used = Slot(uri=MIXS['0001258'], name="biocide_used", curie=MIXS.curie('0001258'),
                   model_uri=MIXS.VOCAB.biocide_used, domain=None, range=Optional[Union[str, List[str]]])

slots.ster_meth_samp_room = Slot(uri=MIXS['0001259'], name="ster_meth_samp_room", curie=MIXS.curie('0001259'),
                   model_uri=MIXS.VOCAB.ster_meth_samp_room, domain=None, range=Optional[Union[str, List[str]]])

slots.spec_intended_cons = Slot(uri=MIXS['0001234'], name="spec_intended_cons", curie=MIXS.curie('0001234'),
                   model_uri=MIXS.VOCAB.spec_intended_cons, domain=None, range=Optional[Union[str, List[str]]])

slots.food_prod_char = Slot(uri=MIXS['0001136'], name="food_prod_char", curie=MIXS.curie('0001136'),
                   model_uri=MIXS.VOCAB.food_prod_char, domain=None, range=Optional[Union[str, List[str]]])

slots.prod_label_claims = Slot(uri=MIXS.VOCAB.prod_label_claims, name="prod_label_claims", curie=MIXS.VOCAB.curie('prod_label_claims'),
                   model_uri=MIXS.VOCAB.prod_label_claims, domain=None, range=Optional[Union[str, List[str]]])

slots.growth_medium = Slot(uri=MIXS['0001108'], name="growth_medium", curie=MIXS.curie('0001108'),
                   model_uri=MIXS.VOCAB.growth_medium, domain=None, range=Optional[str])

slots.farm_water_source = Slot(uri=MIXS['0001110'], name="farm_water_source", curie=MIXS.curie('0001110'),
                   model_uri=MIXS.VOCAB.farm_water_source, domain=None, range=Optional[Union[Union[str, "FarmWaterSourceEnum"], List[Union[str, "FarmWaterSourceEnum"]]]])

slots.plant_water_method = Slot(uri=MIXS['0001111'], name="plant_water_method", curie=MIXS.curie('0001111'),
                   model_uri=MIXS.VOCAB.plant_water_method, domain=None, range=Optional[str])

slots.air_PM_concen = Slot(uri=MIXS['0000108'], name="air_PM_concen", curie=MIXS.curie('0000108'),
                   model_uri=MIXS.VOCAB.air_PM_concen, domain=None, range=Optional[Union[str, List[str]]])

slots.animal_intrusion = Slot(uri=MIXS['0001114'], name="animal_intrusion", curie=MIXS.curie('0001114'),
                   model_uri=MIXS.VOCAB.animal_intrusion, domain=None, range=Optional[Union[str, List[str]]])

slots.anim_water_method = Slot(uri=MIXS['0001115'], name="anim_water_method", curie=MIXS.curie('0001115'),
                   model_uri=MIXS.VOCAB.anim_water_method, domain=None, range=Optional[Union[str, List[str]]])

slots.crop_yield = Slot(uri=MIXS['0001116'], name="crop_yield", curie=MIXS.curie('0001116'),
                   model_uri=MIXS.VOCAB.crop_yield, domain=None, range=Optional[str])

slots.plant_part_maturity = Slot(uri=MIXS['0001120'], name="plant_part_maturity", curie=MIXS.curie('0001120'),
                   model_uri=MIXS.VOCAB.plant_part_maturity, domain=None, range=Optional[str])

slots.adjacent_environment = Slot(uri=MIXS['0001121'], name="adjacent_environment", curie=MIXS.curie('0001121'),
                   model_uri=MIXS.VOCAB.adjacent_environment, domain=None, range=Optional[Union[str, List[str]]])

slots.water_source_adjac = Slot(uri=MIXS['0001122'], name="water_source_adjac", curie=MIXS.curie('0001122'),
                   model_uri=MIXS.VOCAB.water_source_adjac, domain=None, range=Optional[Union[str, List[str]]])

slots.farm_equip_shared = Slot(uri=MIXS['0001123'], name="farm_equip_shared", curie=MIXS.curie('0001123'),
                   model_uri=MIXS.VOCAB.farm_equip_shared, domain=None, range=Optional[Union[str, List[str]]])

slots.farm_equip_san = Slot(uri=MIXS['0001124'], name="farm_equip_san", curie=MIXS.curie('0001124'),
                   model_uri=MIXS.VOCAB.farm_equip_san, domain=None, range=Optional[Union[str, List[str]]])

slots.farm_equip_san_freq = Slot(uri=MIXS['0001125'], name="farm_equip_san_freq", curie=MIXS.curie('0001125'),
                   model_uri=MIXS.VOCAB.farm_equip_san_freq, domain=None, range=Optional[str])

slots.farm_equip = Slot(uri=MIXS['0001126'], name="farm_equip", curie=MIXS.curie('0001126'),
                   model_uri=MIXS.VOCAB.farm_equip, domain=None, range=Optional[Union[str, List[str]]])

slots.fertilizer_admin = Slot(uri=MIXS['0001127'], name="fertilizer_admin", curie=MIXS.curie('0001127'),
                   model_uri=MIXS.VOCAB.fertilizer_admin, domain=None, range=Optional[str])

slots.fertilizer_date = Slot(uri=MIXS['0001128'], name="fertilizer_date", curie=MIXS.curie('0001128'),
                   model_uri=MIXS.VOCAB.fertilizer_date, domain=None, range=Optional[Union[str, XSDDate]])

slots.food_harvest_proc = Slot(uri=MIXS['0001133'], name="food_harvest_proc", curie=MIXS.curie('0001133'),
                   model_uri=MIXS.VOCAB.food_harvest_proc, domain=None, range=Optional[Union[str, List[str]]])

slots.extr_weather_event = Slot(uri=MIXS['0001141'], name="extr_weather_event", curie=MIXS.curie('0001141'),
                   model_uri=MIXS.VOCAB.extr_weather_event, domain=None, range=Optional[Union[Union[str, "ExtrWeatherEventEnum"], List[Union[str, "ExtrWeatherEventEnum"]]]])

slots.date_extr_weath = Slot(uri=MIXS['0001142'], name="date_extr_weath", curie=MIXS.curie('0001142'),
                   model_uri=MIXS.VOCAB.date_extr_weath, domain=None, range=Optional[Union[Union[str, XSDDate], List[Union[str, XSDDate]]]])

slots.air_flow_impede = Slot(uri=MIXS['0001146'], name="air_flow_impede", curie=MIXS.curie('0001146'),
                   model_uri=MIXS.VOCAB.air_flow_impede, domain=None, range=Optional[Union[str, List[str]]])

slots.season_humidity = Slot(uri=MIXS['0001148'], name="season_humidity", curie=MIXS.curie('0001148'),
                   model_uri=MIXS.VOCAB.season_humidity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.plant_reprod_crop = Slot(uri=MIXS['0001150'], name="plant_reprod_crop", curie=MIXS.curie('0001150'),
                   model_uri=MIXS.VOCAB.plant_reprod_crop, domain=None, range=Optional[Union[Union[str, "PlantReprodCropEnum"], List[Union[str, "PlantReprodCropEnum"]]]])

slots.soil_conductivity = Slot(uri=MIXS['0001158'], name="soil_conductivity", curie=MIXS.curie('0001158'),
                   model_uri=MIXS.VOCAB.soil_conductivity, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.soil_cover = Slot(uri=MIXS['0001159'], name="soil_cover", curie=MIXS.curie('0001159'),
                   model_uri=MIXS.VOCAB.soil_cover, domain=None, range=Optional[str])

slots.soil_pH = Slot(uri=MIXS['0001160'], name="soil_pH", curie=MIXS.curie('0001160'),
                   model_uri=MIXS.VOCAB.soil_pH, domain=None, range=Optional[float])

slots.rel_location = Slot(uri=MIXS['0001161'], name="rel_location", curie=MIXS.curie('0001161'),
                   model_uri=MIXS.VOCAB.rel_location, domain=None, range=Optional[str])

slots.soil_porosity = Slot(uri=MIXS['0001162'], name="soil_porosity", curie=MIXS.curie('0001162'),
                   model_uri=MIXS.VOCAB.soil_porosity, domain=None, range=Optional[str])

slots.soil_temp = Slot(uri=MIXS['0000113'], name="soil_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.soil_temp, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_texture_class = Slot(uri=MIXS['0001164'], name="soil_texture_class", curie=MIXS.curie('0001164'),
                   model_uri=MIXS.VOCAB.soil_texture_class, domain=None, range=Optional[Union[str, "SoilTextureClassEnum"]])

slots.water_frequency = Slot(uri=MIXS['0001174'], name="water_frequency", curie=MIXS.curie('0001174'),
                   model_uri=MIXS.VOCAB.water_frequency, domain=None, range=Optional[str])

slots.water_pH = Slot(uri=MIXS['0001175'], name="water_pH", curie=MIXS.curie('0001175'),
                   model_uri=MIXS.VOCAB.water_pH, domain=None, range=Optional[float])

slots.water_source_shared = Slot(uri=MIXS['0001176'], name="water_source_shared", curie=MIXS.curie('0001176'),
                   model_uri=MIXS.VOCAB.water_source_shared, domain=None, range=Optional[Union[Union[str, "WaterSourceSharedEnum"], List[Union[str, "WaterSourceSharedEnum"]]]])

slots.food_clean_proc = Slot(uri=MIXS['0001182'], name="food_clean_proc", curie=MIXS.curie('0001182'),
                   model_uri=MIXS.VOCAB.food_clean_proc, domain=None, range=Optional[Union[Union[str, "FoodCleanProcEnum"], List[Union[str, "FoodCleanProcEnum"]]]])

slots.photosynt_activ = Slot(uri=MIXS['0001296'], name="photosynt_activ", curie=MIXS.curie('0001296'),
                   model_uri=MIXS.VOCAB.photosynt_activ, domain=None, range=Optional[Union[Union[dict, QuantityValue], List[Union[dict, QuantityValue]]]])

slots.photosynt_activ_meth = Slot(uri=MIXS['0001336'], name="photosynt_activ_meth", curie=MIXS.curie('0001336'),
                   model_uri=MIXS.VOCAB.photosynt_activ_meth, domain=None, range=Optional[Union[str, List[str]]])

slots.texture = Slot(uri=MIXS['0000335'], name="texture", curie=MIXS.curie('0000335'),
                   model_uri=MIXS.VOCAB.texture, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.texture_meth = Slot(uri=MIXS['0000336'], name="texture_meth", curie=MIXS.curie('0000336'),
                   model_uri=MIXS.VOCAB.texture_meth, domain=None, range=Optional[str])

slots.Food_Product_type = Slot(uri=MIXS['0001184'], name="Food_Product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.Food_Product_type, domain=None, range=Optional[str])

slots.Food_source = Slot(uri=MIXS['0001139'], name="Food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.Food_source, domain=None, range=Optional[str])

slots.soil_depth = Slot(uri=MIXS['0000018'], name="soil_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.soil_depth, domain=Soil, range=Union[dict, "QuantityValue"])

slots.non_mineral_nutr_regm = Slot(uri=MIXS['0000571'], name="non_mineral_nutr_regm", curie=MIXS.curie('0000571'),
                   model_uri=MIXS.VOCAB.non_mineral_nutr_regm, domain=None, range=Optional[Union[str, List[str]]])

slots.assembly_quality = Slot(uri=MIXS['0000058'], name="assembly_quality", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.assembly_quality, domain=None, range=Optional[str])

slots.url = Slot(uri=MIXS['0000091'], name="url", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.url, domain=None, range=Optional[Union[str, List[str]]])

slots.horizon = Slot(uri=MIXS['0001082'], name="horizon", curie=MIXS.curie('0001082'),
                   model_uri=MIXS.VOCAB.horizon, domain=None, range=Optional[Union[str, "HorizonEnum"]])

slots.previous_land_use_meth = Slot(uri=MIXS['0000316'], name="previous_land_use_meth", curie=MIXS.curie('0000316'),
                   model_uri=MIXS.VOCAB.previous_land_use_meth, domain=None, range=Optional[str])

slots.tot_n_meth = Slot(uri=MIXS['0000338'], name="tot_n_meth", curie=MIXS.curie('0000338'),
                   model_uri=MIXS.VOCAB.tot_n_meth, domain=None, range=Optional[str])

slots.microbial_biomass_meth = Slot(uri=MIXS['0000339'], name="microbial_biomass_meth", curie=MIXS.curie('0000339'),
                   model_uri=MIXS.VOCAB.microbial_biomass_meth, domain=None, range=Optional[str])

slots.tot_car = Slot(uri=MIXS['0000525'], name="tot_car", curie=MIXS.curie('0000525'),
                   model_uri=MIXS.VOCAB.tot_car, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.tot_phos = Slot(uri=MIXS['0000689'], name="tot_phos", curie=MIXS.curie('0000689'),
                   model_uri=MIXS.VOCAB.tot_phos, domain=None, range=Optional[Union[dict, QuantityValue]])

slots.quantityValue__has_unit = Slot(uri=MIXS.VOCAB.has_unit, name="quantityValue__has_unit", curie=MIXS.VOCAB.curie('has_unit'),
                   model_uri=MIXS.VOCAB.quantityValue__has_unit, domain=None, range=Optional[str])

slots.quantityValue__has_numeric_value = Slot(uri=MIXS.VOCAB.has_numeric_value, name="quantityValue__has_numeric_value", curie=MIXS.VOCAB.curie('has_numeric_value'),
                   model_uri=MIXS.VOCAB.quantityValue__has_numeric_value, domain=None, range=Optional[float])

slots.quantityValue__has_raw_value = Slot(uri=MIXS.VOCAB.has_raw_value, name="quantityValue__has_raw_value", curie=MIXS.VOCAB.curie('has_raw_value'),
                   model_uri=MIXS.VOCAB.quantityValue__has_raw_value, domain=None, range=Optional[str])

slots.MIGS_eukaryote_samp_name = Slot(uri=MIXS['0001107'], name="MIGS eukaryote_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_name, domain=None, range=str)

slots.MIGS_eukaryote_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIGS eukaryote_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_taxon_id, domain=None, range=str)

slots.MIGS_eukaryote_project_name = Slot(uri=MIXS['0000092'], name="MIGS eukaryote_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_project_name, domain=None, range=str)

slots.MIGS_eukaryote_experimental_factor = Slot(uri=MIXS['0000008'], name="MIGS eukaryote_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_experimental_factor, domain=None, range=Optional[str])

slots.MIGS_eukaryote_lat_lon = Slot(uri=MIXS['0000009'], name="MIGS eukaryote_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lat_lon, domain=None, range=str)

slots.MIGS_eukaryote_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIGS eukaryote_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_geo_loc_name, domain=None, range=str)

slots.MIGS_eukaryote_collection_date = Slot(uri=MIXS['0000011'], name="MIGS eukaryote_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIGS_eukaryote_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIGS eukaryote_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIGS_eukaryote_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIGS eukaryote_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_pos_cont_type, domain=None, range=Optional[str])

slots.MIGS_eukaryote_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIGS eukaryote_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_env_broad_scale, domain=None, range=str)

slots.MIGS_eukaryote_env_local_scale = Slot(uri=MIXS['0000013'], name="MIGS eukaryote_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_env_local_scale, domain=None, range=str)

slots.MIGS_eukaryote_env_medium = Slot(uri=MIXS['0000014'], name="MIGS eukaryote_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_env_medium, domain=None, range=str)

slots.MIGS_eukaryote_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIGS eukaryote_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIGS_eukaryote_ploidy = Slot(uri=MIXS['0000021'], name="MIGS eukaryote_ploidy", curie=MIXS.curie('0000021'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_ploidy, domain=None, range=Optional[str])

slots.MIGS_eukaryote_num_replicons = Slot(uri=MIXS['0000022'], name="MIGS eukaryote_num_replicons", curie=MIXS.curie('0000022'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_num_replicons, domain=None, range=Optional[int])

slots.MIGS_eukaryote_extrachrom_elements = Slot(uri=MIXS['0000023'], name="MIGS eukaryote_extrachrom_elements", curie=MIXS.curie('0000023'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_extrachrom_elements, domain=None, range=Optional[int])

slots.MIGS_eukaryote_estimated_size = Slot(uri=MIXS['0000024'], name="MIGS eukaryote_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_estimated_size, domain=None, range=Optional[str])

slots.MIGS_eukaryote_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIGS eukaryote_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_ref_biomaterial, domain=None, range=Optional[str])

slots.MIGS_eukaryote_source_mat_id = Slot(uri=MIXS['0000026'], name="MIGS eukaryote_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_source_mat_id, domain=None, range=Optional[str])

slots.MIGS_eukaryote_pathogenicity = Slot(uri=MIXS['0000027'], name="MIGS eukaryote_pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_pathogenicity, domain=None, range=Optional[str])

slots.MIGS_eukaryote_biotic_relationship = Slot(uri=MIXS['0000028'], name="MIGS eukaryote_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.MIGS_eukaryote_specific_host = Slot(uri=MIXS['0000029'], name="MIGS eukaryote_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_specific_host, domain=None, range=Optional[str])

slots.MIGS_eukaryote_host_spec_range = Slot(uri=MIXS['0000030'], name="MIGS eukaryote_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_host_spec_range, domain=None, range=Optional[int])

slots.MIGS_eukaryote_host_disease_stat = Slot(uri=MIXS['0000031'], name="MIGS eukaryote_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_host_disease_stat, domain=None, range=Optional[str])

slots.MIGS_eukaryote_trophic_level = Slot(uri=MIXS['0000032'], name="MIGS eukaryote_trophic_level", curie=MIXS.curie('0000032'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_trophic_level, domain=None, range=Optional[Union[str, "TrophicLevelEnum"]])

slots.MIGS_eukaryote_propagation = Slot(uri=MIXS['0000033'], name="MIGS eukaryote_propagation", curie=MIXS.curie('0000033'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_propagation, domain=None, range=Optional[str])

slots.MIGS_eukaryote_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIGS eukaryote_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_isol_growth_condt, domain=None, range=str)

slots.MIGS_eukaryote_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIGS eukaryote_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_collec_device, domain=None, range=Optional[str])

slots.MIGS_eukaryote_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIGS eukaryote_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_collec_method, domain=None, range=Optional[str])

slots.MIGS_eukaryote_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIGS eukaryote_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_mat_process, domain=None, range=Optional[str])

slots.MIGS_eukaryote_samp_size = Slot(uri=MIXS['0000001'], name="MIGS eukaryote_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_eukaryote_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIGS eukaryote_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_eukaryote_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIGS eukaryote_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIGS_eukaryote_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIGS eukaryote_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIGS_eukaryote_lib_size = Slot(uri=MIXS['0000039'], name="MIGS eukaryote_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lib_size, domain=None, range=Optional[int])

slots.MIGS_eukaryote_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIGS eukaryote_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIGS_eukaryote_lib_layout = Slot(uri=MIXS['0000041'], name="MIGS eukaryote_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIGS_eukaryote_lib_vector = Slot(uri=MIXS['0000042'], name="MIGS eukaryote_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lib_vector, domain=None, range=Optional[str])

slots.MIGS_eukaryote_lib_screen = Slot(uri=MIXS['0000043'], name="MIGS eukaryote_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_lib_screen, domain=None, range=Optional[str])

slots.MIGS_eukaryote_adapters = Slot(uri=MIXS['0000048'], name="MIGS eukaryote_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_adapters, domain=None, range=Optional[str])

slots.MIGS_eukaryote_seq_meth = Slot(uri=MIXS['0000050'], name="MIGS eukaryote_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_seq_meth, domain=None, range=str)

slots.MIGS_eukaryote_tax_ident = Slot(uri=MIXS['0000053'], name="MIGS eukaryote_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIGS_eukaryote_assembly_qual = Slot(uri=MIXS['0000056'], name="MIGS eukaryote_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_assembly_qual, domain=None, range=Union[str, "AssemblyQualEnum"])

slots.MIGS_eukaryote_assembly_name = Slot(uri=MIXS['0000057'], name="MIGS eukaryote_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_assembly_name, domain=None, range=Optional[str])

slots.MIGS_eukaryote_assembly_software = Slot(uri=MIXS['0000058'], name="MIGS eukaryote_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_assembly_software, domain=None, range=str)

slots.MIGS_eukaryote_annot = Slot(uri=MIXS['0000059'], name="MIGS eukaryote_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_annot, domain=None, range=Optional[str])

slots.MIGS_eukaryote_number_contig = Slot(uri=MIXS['0000060'], name="MIGS eukaryote_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_number_contig, domain=None, range=int)

slots.MIGS_eukaryote_feat_pred = Slot(uri=MIXS['0000061'], name="MIGS eukaryote_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_feat_pred, domain=None, range=Optional[str])

slots.MIGS_eukaryote_ref_db = Slot(uri=MIXS['0000062'], name="MIGS eukaryote_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_ref_db, domain=None, range=Optional[str])

slots.MIGS_eukaryote_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIGS eukaryote_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_sim_search_meth, domain=None, range=Optional[str])

slots.MIGS_eukaryote_tax_class = Slot(uri=MIXS['0000064'], name="MIGS eukaryote_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_tax_class, domain=None, range=Optional[str])

slots.MIGS_eukaryote_compl_score = Slot(uri=MIXS['0000069'], name="MIGS eukaryote_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIGS_eukaryote_compl_software = Slot(uri=MIXS['0000070'], name="MIGS eukaryote_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_compl_software, domain=None, range=Optional[str])

slots.MIGS_eukaryote_associated_resource = Slot(uri=MIXS['0000091'], name="MIGS eukaryote_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_associated_resource, domain=None, range=Optional[str])

slots.MIGS_eukaryote_sop = Slot(uri=MIXS['0000090'], name="MIGS eukaryote_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIGS_eukaryote_sop, domain=None, range=Optional[str])

slots.MIGS_bacteria_samp_name = Slot(uri=MIXS['0001107'], name="MIGS bacteria_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_name, domain=None, range=str)

slots.MIGS_bacteria_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIGS bacteria_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_taxon_id, domain=None, range=str)

slots.MIGS_bacteria_project_name = Slot(uri=MIXS['0000092'], name="MIGS bacteria_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_project_name, domain=None, range=str)

slots.MIGS_bacteria_experimental_factor = Slot(uri=MIXS['0000008'], name="MIGS bacteria_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_experimental_factor, domain=None, range=Optional[str])

slots.MIGS_bacteria_lat_lon = Slot(uri=MIXS['0000009'], name="MIGS bacteria_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lat_lon, domain=None, range=str)

slots.MIGS_bacteria_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIGS bacteria_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_geo_loc_name, domain=None, range=str)

slots.MIGS_bacteria_collection_date = Slot(uri=MIXS['0000011'], name="MIGS bacteria_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIGS_bacteria_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIGS bacteria_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIGS_bacteria_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIGS bacteria_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_pos_cont_type, domain=None, range=Optional[str])

slots.MIGS_bacteria_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIGS bacteria_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_env_broad_scale, domain=None, range=str)

slots.MIGS_bacteria_env_local_scale = Slot(uri=MIXS['0000013'], name="MIGS bacteria_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_env_local_scale, domain=None, range=str)

slots.MIGS_bacteria_env_medium = Slot(uri=MIXS['0000014'], name="MIGS bacteria_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_env_medium, domain=None, range=str)

slots.MIGS_bacteria_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIGS bacteria_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIGS_bacteria_num_replicons = Slot(uri=MIXS['0000022'], name="MIGS bacteria_num_replicons", curie=MIXS.curie('0000022'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_num_replicons, domain=None, range=int)

slots.MIGS_bacteria_extrachrom_elements = Slot(uri=MIXS['0000023'], name="MIGS bacteria_extrachrom_elements", curie=MIXS.curie('0000023'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_extrachrom_elements, domain=None, range=Optional[int])

slots.MIGS_bacteria_estimated_size = Slot(uri=MIXS['0000024'], name="MIGS bacteria_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_estimated_size, domain=None, range=Optional[str])

slots.MIGS_bacteria_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIGS bacteria_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_ref_biomaterial, domain=None, range=str)

slots.MIGS_bacteria_source_mat_id = Slot(uri=MIXS['0000026'], name="MIGS bacteria_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_source_mat_id, domain=None, range=Optional[str])

slots.MIGS_bacteria_pathogenicity = Slot(uri=MIXS['0000027'], name="MIGS bacteria_pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_pathogenicity, domain=None, range=Optional[str])

slots.MIGS_bacteria_biotic_relationship = Slot(uri=MIXS['0000028'], name="MIGS bacteria_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.MIGS_bacteria_specific_host = Slot(uri=MIXS['0000029'], name="MIGS bacteria_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_specific_host, domain=None, range=Optional[str])

slots.MIGS_bacteria_host_spec_range = Slot(uri=MIXS['0000030'], name="MIGS bacteria_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_host_spec_range, domain=None, range=Optional[int])

slots.MIGS_bacteria_host_disease_stat = Slot(uri=MIXS['0000031'], name="MIGS bacteria_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_host_disease_stat, domain=None, range=Optional[str])

slots.MIGS_bacteria_trophic_level = Slot(uri=MIXS['0000032'], name="MIGS bacteria_trophic_level", curie=MIXS.curie('0000032'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_trophic_level, domain=None, range=Optional[Union[str, "TrophicLevelEnum"]])

slots.MIGS_bacteria_encoded_traits = Slot(uri=MIXS['0000034'], name="MIGS bacteria_encoded_traits", curie=MIXS.curie('0000034'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_encoded_traits, domain=None, range=Optional[str])

slots.MIGS_bacteria_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MIGS bacteria_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MIGS_bacteria_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIGS bacteria_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_isol_growth_condt, domain=None, range=str)

slots.MIGS_bacteria_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIGS bacteria_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_collec_device, domain=None, range=Optional[str])

slots.MIGS_bacteria_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIGS bacteria_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_collec_method, domain=None, range=Optional[str])

slots.MIGS_bacteria_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIGS bacteria_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_mat_process, domain=None, range=Optional[str])

slots.MIGS_bacteria_samp_size = Slot(uri=MIXS['0000001'], name="MIGS bacteria_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_bacteria_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIGS bacteria_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_bacteria_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIGS bacteria_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIGS_bacteria_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIGS bacteria_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIGS_bacteria_lib_size = Slot(uri=MIXS['0000039'], name="MIGS bacteria_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lib_size, domain=None, range=Optional[int])

slots.MIGS_bacteria_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIGS bacteria_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIGS_bacteria_lib_layout = Slot(uri=MIXS['0000041'], name="MIGS bacteria_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIGS_bacteria_lib_vector = Slot(uri=MIXS['0000042'], name="MIGS bacteria_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lib_vector, domain=None, range=Optional[str])

slots.MIGS_bacteria_lib_screen = Slot(uri=MIXS['0000043'], name="MIGS bacteria_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_lib_screen, domain=None, range=Optional[str])

slots.MIGS_bacteria_adapters = Slot(uri=MIXS['0000048'], name="MIGS bacteria_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_adapters, domain=None, range=Optional[str])

slots.MIGS_bacteria_seq_meth = Slot(uri=MIXS['0000050'], name="MIGS bacteria_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_seq_meth, domain=None, range=str)

slots.MIGS_bacteria_tax_ident = Slot(uri=MIXS['0000053'], name="MIGS bacteria_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIGS_bacteria_assembly_qual = Slot(uri=MIXS['0000056'], name="MIGS bacteria_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_assembly_qual, domain=None, range=Union[str, "AssemblyQualEnum"])

slots.MIGS_bacteria_assembly_name = Slot(uri=MIXS['0000057'], name="MIGS bacteria_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_assembly_name, domain=None, range=Optional[str])

slots.MIGS_bacteria_assembly_software = Slot(uri=MIXS['0000058'], name="MIGS bacteria_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_assembly_software, domain=None, range=str)

slots.MIGS_bacteria_annot = Slot(uri=MIXS['0000059'], name="MIGS bacteria_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_annot, domain=None, range=Optional[str])

slots.MIGS_bacteria_number_contig = Slot(uri=MIXS['0000060'], name="MIGS bacteria_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_number_contig, domain=None, range=int)

slots.MIGS_bacteria_feat_pred = Slot(uri=MIXS['0000061'], name="MIGS bacteria_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_feat_pred, domain=None, range=Optional[str])

slots.MIGS_bacteria_ref_db = Slot(uri=MIXS['0000062'], name="MIGS bacteria_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_ref_db, domain=None, range=Optional[str])

slots.MIGS_bacteria_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIGS bacteria_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_sim_search_meth, domain=None, range=Optional[str])

slots.MIGS_bacteria_tax_class = Slot(uri=MIXS['0000064'], name="MIGS bacteria_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_tax_class, domain=None, range=Optional[str])

slots.MIGS_bacteria_compl_score = Slot(uri=MIXS['0000069'], name="MIGS bacteria_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIGS_bacteria_compl_software = Slot(uri=MIXS['0000070'], name="MIGS bacteria_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_compl_software, domain=None, range=Optional[str])

slots.MIGS_bacteria_associated_resource = Slot(uri=MIXS['0000091'], name="MIGS bacteria_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_associated_resource, domain=None, range=Optional[str])

slots.MIGS_bacteria_sop = Slot(uri=MIXS['0000090'], name="MIGS bacteria_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIGS_bacteria_sop, domain=None, range=Optional[str])

slots.MIGS_plant_samp_name = Slot(uri=MIXS['0001107'], name="MIGS plant_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_name, domain=None, range=str)

slots.MIGS_plant_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIGS plant_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_taxon_id, domain=None, range=str)

slots.MIGS_plant_project_name = Slot(uri=MIXS['0000092'], name="MIGS plant_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIGS_plant_project_name, domain=None, range=str)

slots.MIGS_plant_experimental_factor = Slot(uri=MIXS['0000008'], name="MIGS plant_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIGS_plant_experimental_factor, domain=None, range=Optional[str])

slots.MIGS_plant_lat_lon = Slot(uri=MIXS['0000009'], name="MIGS plant_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lat_lon, domain=None, range=str)

slots.MIGS_plant_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIGS plant_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIGS_plant_geo_loc_name, domain=None, range=str)

slots.MIGS_plant_collection_date = Slot(uri=MIXS['0000011'], name="MIGS plant_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIGS_plant_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIGS_plant_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIGS plant_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIGS_plant_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIGS_plant_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIGS plant_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIGS_plant_pos_cont_type, domain=None, range=Optional[str])

slots.MIGS_plant_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIGS plant_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIGS_plant_env_broad_scale, domain=None, range=str)

slots.MIGS_plant_env_local_scale = Slot(uri=MIXS['0000013'], name="MIGS plant_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIGS_plant_env_local_scale, domain=None, range=str)

slots.MIGS_plant_env_medium = Slot(uri=MIXS['0000014'], name="MIGS plant_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIGS_plant_env_medium, domain=None, range=str)

slots.MIGS_plant_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIGS plant_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIGS_plant_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIGS_plant_estimated_size = Slot(uri=MIXS['0000024'], name="MIGS plant_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIGS_plant_estimated_size, domain=None, range=Optional[str])

slots.MIGS_plant_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIGS plant_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIGS_plant_ref_biomaterial, domain=None, range=Optional[str])

slots.MIGS_plant_source_mat_id = Slot(uri=MIXS['0000026'], name="MIGS plant_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIGS_plant_source_mat_id, domain=None, range=Optional[str])

slots.MIGS_plant_specific_host = Slot(uri=MIXS['0000029'], name="MIGS plant_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.MIGS_plant_specific_host, domain=None, range=Optional[str])

slots.MIGS_plant_host_spec_range = Slot(uri=MIXS['0000030'], name="MIGS plant_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.MIGS_plant_host_spec_range, domain=None, range=Optional[int])

slots.MIGS_plant_propagation = Slot(uri=MIXS['0000033'], name="MIGS plant_propagation", curie=MIXS.curie('0000033'),
                   model_uri=MIXS.VOCAB.MIGS_plant_propagation, domain=None, range=str)

slots.MIGS_plant_encoded_traits = Slot(uri=MIXS['0000034'], name="MIGS plant_encoded_traits", curie=MIXS.curie('0000034'),
                   model_uri=MIXS.VOCAB.MIGS_plant_encoded_traits, domain=None, range=Optional[str])

slots.MIGS_plant_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIGS plant_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIGS_plant_isol_growth_condt, domain=None, range=str)

slots.MIGS_plant_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIGS plant_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_collec_device, domain=None, range=Optional[str])

slots.MIGS_plant_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIGS plant_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_collec_method, domain=None, range=Optional[str])

slots.MIGS_plant_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIGS plant_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_mat_process, domain=None, range=Optional[str])

slots.MIGS_plant_samp_size = Slot(uri=MIXS['0000001'], name="MIGS plant_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_plant_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIGS plant_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIGS_plant_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_plant_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIGS plant_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIGS_plant_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIGS_plant_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIGS plant_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIGS_plant_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIGS_plant_lib_size = Slot(uri=MIXS['0000039'], name="MIGS plant_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lib_size, domain=None, range=Optional[int])

slots.MIGS_plant_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIGS plant_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIGS_plant_lib_layout = Slot(uri=MIXS['0000041'], name="MIGS plant_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIGS_plant_lib_vector = Slot(uri=MIXS['0000042'], name="MIGS plant_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lib_vector, domain=None, range=Optional[str])

slots.MIGS_plant_lib_screen = Slot(uri=MIXS['0000043'], name="MIGS plant_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIGS_plant_lib_screen, domain=None, range=Optional[str])

slots.MIGS_plant_adapters = Slot(uri=MIXS['0000048'], name="MIGS plant_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIGS_plant_adapters, domain=None, range=Optional[str])

slots.MIGS_plant_seq_meth = Slot(uri=MIXS['0000050'], name="MIGS plant_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIGS_plant_seq_meth, domain=None, range=str)

slots.MIGS_plant_tax_ident = Slot(uri=MIXS['0000053'], name="MIGS plant_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIGS_plant_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIGS_plant_assembly_qual = Slot(uri=MIXS['0000056'], name="MIGS plant_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIGS_plant_assembly_qual, domain=None, range=Optional[Union[str, "AssemblyQualEnum"]])

slots.MIGS_plant_assembly_name = Slot(uri=MIXS['0000057'], name="MIGS plant_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIGS_plant_assembly_name, domain=None, range=Optional[str])

slots.MIGS_plant_assembly_software = Slot(uri=MIXS['0000058'], name="MIGS plant_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIGS_plant_assembly_software, domain=None, range=str)

slots.MIGS_plant_annot = Slot(uri=MIXS['0000059'], name="MIGS plant_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIGS_plant_annot, domain=None, range=Optional[str])

slots.MIGS_plant_number_contig = Slot(uri=MIXS['0000060'], name="MIGS plant_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIGS_plant_number_contig, domain=None, range=Optional[int])

slots.MIGS_plant_feat_pred = Slot(uri=MIXS['0000061'], name="MIGS plant_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIGS_plant_feat_pred, domain=None, range=Optional[str])

slots.MIGS_plant_ref_db = Slot(uri=MIXS['0000062'], name="MIGS plant_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIGS_plant_ref_db, domain=None, range=Optional[str])

slots.MIGS_plant_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIGS plant_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIGS_plant_sim_search_meth, domain=None, range=Optional[str])

slots.MIGS_plant_tax_class = Slot(uri=MIXS['0000064'], name="MIGS plant_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIGS_plant_tax_class, domain=None, range=Optional[str])

slots.MIGS_plant_compl_score = Slot(uri=MIXS['0000069'], name="MIGS plant_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIGS_plant_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIGS_plant_compl_software = Slot(uri=MIXS['0000070'], name="MIGS plant_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIGS_plant_compl_software, domain=None, range=Optional[str])

slots.MIGS_plant_associated_resource = Slot(uri=MIXS['0000091'], name="MIGS plant_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIGS_plant_associated_resource, domain=None, range=Optional[str])

slots.MIGS_plant_sop = Slot(uri=MIXS['0000090'], name="MIGS plant_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIGS_plant_sop, domain=None, range=Optional[str])

slots.MIGS_virus_samp_name = Slot(uri=MIXS['0001107'], name="MIGS virus_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_name, domain=None, range=str)

slots.MIGS_virus_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIGS virus_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_taxon_id, domain=None, range=str)

slots.MIGS_virus_project_name = Slot(uri=MIXS['0000092'], name="MIGS virus_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIGS_virus_project_name, domain=None, range=str)

slots.MIGS_virus_experimental_factor = Slot(uri=MIXS['0000008'], name="MIGS virus_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIGS_virus_experimental_factor, domain=None, range=Optional[str])

slots.MIGS_virus_lat_lon = Slot(uri=MIXS['0000009'], name="MIGS virus_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lat_lon, domain=None, range=str)

slots.MIGS_virus_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIGS virus_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIGS_virus_geo_loc_name, domain=None, range=str)

slots.MIGS_virus_collection_date = Slot(uri=MIXS['0000011'], name="MIGS virus_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIGS_virus_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIGS_virus_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIGS virus_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIGS_virus_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIGS_virus_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIGS virus_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIGS_virus_pos_cont_type, domain=None, range=Optional[str])

slots.MIGS_virus_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIGS virus_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIGS_virus_env_broad_scale, domain=None, range=str)

slots.MIGS_virus_env_local_scale = Slot(uri=MIXS['0000013'], name="MIGS virus_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIGS_virus_env_local_scale, domain=None, range=str)

slots.MIGS_virus_env_medium = Slot(uri=MIXS['0000014'], name="MIGS virus_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIGS_virus_env_medium, domain=None, range=str)

slots.MIGS_virus_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIGS virus_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIGS_virus_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIGS_virus_num_replicons = Slot(uri=MIXS['0000022'], name="MIGS virus_num_replicons", curie=MIXS.curie('0000022'),
                   model_uri=MIXS.VOCAB.MIGS_virus_num_replicons, domain=None, range=Optional[int])

slots.MIGS_virus_estimated_size = Slot(uri=MIXS['0000024'], name="MIGS virus_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIGS_virus_estimated_size, domain=None, range=Optional[str])

slots.MIGS_virus_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIGS virus_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIGS_virus_ref_biomaterial, domain=None, range=Optional[str])

slots.MIGS_virus_source_mat_id = Slot(uri=MIXS['0000026'], name="MIGS virus_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIGS_virus_source_mat_id, domain=None, range=Optional[str])

slots.MIGS_virus_pathogenicity = Slot(uri=MIXS['0000027'], name="MIGS virus_pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.MIGS_virus_pathogenicity, domain=None, range=Optional[str])

slots.MIGS_virus_biotic_relationship = Slot(uri=MIXS['0000028'], name="MIGS virus_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.MIGS_virus_biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.MIGS_virus_specific_host = Slot(uri=MIXS['0000029'], name="MIGS virus_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.MIGS_virus_specific_host, domain=None, range=Optional[str])

slots.MIGS_virus_host_spec_range = Slot(uri=MIXS['0000030'], name="MIGS virus_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.MIGS_virus_host_spec_range, domain=None, range=Optional[int])

slots.MIGS_virus_host_disease_stat = Slot(uri=MIXS['0000031'], name="MIGS virus_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.MIGS_virus_host_disease_stat, domain=None, range=Optional[str])

slots.MIGS_virus_propagation = Slot(uri=MIXS['0000033'], name="MIGS virus_propagation", curie=MIXS.curie('0000033'),
                   model_uri=MIXS.VOCAB.MIGS_virus_propagation, domain=None, range=str)

slots.MIGS_virus_encoded_traits = Slot(uri=MIXS['0000034'], name="MIGS virus_encoded_traits", curie=MIXS.curie('0000034'),
                   model_uri=MIXS.VOCAB.MIGS_virus_encoded_traits, domain=None, range=Optional[str])

slots.MIGS_virus_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIGS virus_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIGS_virus_isol_growth_condt, domain=None, range=str)

slots.MIGS_virus_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIGS virus_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_collec_device, domain=None, range=Optional[str])

slots.MIGS_virus_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIGS virus_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_collec_method, domain=None, range=Optional[str])

slots.MIGS_virus_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIGS virus_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_mat_process, domain=None, range=Optional[str])

slots.MIGS_virus_samp_size = Slot(uri=MIXS['0000001'], name="MIGS virus_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_virus_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIGS virus_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIGS_virus_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_virus_virus_enrich_appr = Slot(uri=MIXS['0000036'], name="MIGS virus_virus_enrich_appr", curie=MIXS.curie('0000036'),
                   model_uri=MIXS.VOCAB.MIGS_virus_virus_enrich_appr, domain=None, range=Optional[Union[str, "VirusEnrichApprEnum"]])

slots.MIGS_virus_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIGS virus_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIGS_virus_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIGS_virus_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIGS virus_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIGS_virus_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIGS_virus_lib_size = Slot(uri=MIXS['0000039'], name="MIGS virus_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lib_size, domain=None, range=Optional[int])

slots.MIGS_virus_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIGS virus_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIGS_virus_lib_layout = Slot(uri=MIXS['0000041'], name="MIGS virus_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIGS_virus_lib_vector = Slot(uri=MIXS['0000042'], name="MIGS virus_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lib_vector, domain=None, range=Optional[str])

slots.MIGS_virus_lib_screen = Slot(uri=MIXS['0000043'], name="MIGS virus_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIGS_virus_lib_screen, domain=None, range=Optional[str])

slots.MIGS_virus_adapters = Slot(uri=MIXS['0000048'], name="MIGS virus_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIGS_virus_adapters, domain=None, range=Optional[str])

slots.MIGS_virus_seq_meth = Slot(uri=MIXS['0000050'], name="MIGS virus_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIGS_virus_seq_meth, domain=None, range=str)

slots.MIGS_virus_tax_ident = Slot(uri=MIXS['0000053'], name="MIGS virus_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIGS_virus_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIGS_virus_assembly_qual = Slot(uri=MIXS['0000056'], name="MIGS virus_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIGS_virus_assembly_qual, domain=None, range=Optional[Union[str, "AssemblyQualEnum"]])

slots.MIGS_virus_assembly_name = Slot(uri=MIXS['0000057'], name="MIGS virus_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIGS_virus_assembly_name, domain=None, range=Optional[str])

slots.MIGS_virus_assembly_software = Slot(uri=MIXS['0000058'], name="MIGS virus_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIGS_virus_assembly_software, domain=None, range=str)

slots.MIGS_virus_annot = Slot(uri=MIXS['0000059'], name="MIGS virus_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIGS_virus_annot, domain=None, range=Optional[str])

slots.MIGS_virus_number_contig = Slot(uri=MIXS['0000060'], name="MIGS virus_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIGS_virus_number_contig, domain=None, range=Optional[int])

slots.MIGS_virus_feat_pred = Slot(uri=MIXS['0000061'], name="MIGS virus_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIGS_virus_feat_pred, domain=None, range=Optional[str])

slots.MIGS_virus_ref_db = Slot(uri=MIXS['0000062'], name="MIGS virus_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIGS_virus_ref_db, domain=None, range=Optional[str])

slots.MIGS_virus_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIGS virus_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIGS_virus_sim_search_meth, domain=None, range=Optional[str])

slots.MIGS_virus_tax_class = Slot(uri=MIXS['0000064'], name="MIGS virus_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIGS_virus_tax_class, domain=None, range=Optional[str])

slots.MIGS_virus_compl_score = Slot(uri=MIXS['0000069'], name="MIGS virus_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIGS_virus_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIGS_virus_compl_software = Slot(uri=MIXS['0000070'], name="MIGS virus_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIGS_virus_compl_software, domain=None, range=Optional[str])

slots.MIGS_virus_associated_resource = Slot(uri=MIXS['0000091'], name="MIGS virus_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIGS_virus_associated_resource, domain=None, range=Optional[str])

slots.MIGS_virus_sop = Slot(uri=MIXS['0000090'], name="MIGS virus_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIGS_virus_sop, domain=None, range=Optional[str])

slots.MIGS_org_samp_name = Slot(uri=MIXS['0001107'], name="MIGS org_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_name, domain=None, range=str)

slots.MIGS_org_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIGS org_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_taxon_id, domain=None, range=str)

slots.MIGS_org_project_name = Slot(uri=MIXS['0000092'], name="MIGS org_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIGS_org_project_name, domain=None, range=str)

slots.MIGS_org_experimental_factor = Slot(uri=MIXS['0000008'], name="MIGS org_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIGS_org_experimental_factor, domain=None, range=Optional[str])

slots.MIGS_org_lat_lon = Slot(uri=MIXS['0000009'], name="MIGS org_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIGS_org_lat_lon, domain=None, range=str)

slots.MIGS_org_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIGS org_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIGS_org_geo_loc_name, domain=None, range=str)

slots.MIGS_org_collection_date = Slot(uri=MIXS['0000011'], name="MIGS org_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIGS_org_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIGS_org_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIGS org_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIGS_org_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIGS_org_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIGS org_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIGS_org_pos_cont_type, domain=None, range=Optional[str])

slots.MIGS_org_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIGS org_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIGS_org_env_broad_scale, domain=None, range=str)

slots.MIGS_org_env_local_scale = Slot(uri=MIXS['0000013'], name="MIGS org_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIGS_org_env_local_scale, domain=None, range=str)

slots.MIGS_org_env_medium = Slot(uri=MIXS['0000014'], name="MIGS org_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIGS_org_env_medium, domain=None, range=str)

slots.MIGS_org_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIGS org_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIGS_org_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIGS_org_extrachrom_elements = Slot(uri=MIXS['0000023'], name="MIGS org_extrachrom_elements", curie=MIXS.curie('0000023'),
                   model_uri=MIXS.VOCAB.MIGS_org_extrachrom_elements, domain=None, range=Optional[int])

slots.MIGS_org_estimated_size = Slot(uri=MIXS['0000024'], name="MIGS org_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIGS_org_estimated_size, domain=None, range=Optional[str])

slots.MIGS_org_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIGS org_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIGS_org_ref_biomaterial, domain=None, range=Optional[str])

slots.MIGS_org_source_mat_id = Slot(uri=MIXS['0000026'], name="MIGS org_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIGS_org_source_mat_id, domain=None, range=Optional[str])

slots.MIGS_org_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIGS org_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIGS_org_isol_growth_condt, domain=None, range=str)

slots.MIGS_org_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIGS org_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_collec_device, domain=None, range=Optional[str])

slots.MIGS_org_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIGS org_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_collec_method, domain=None, range=Optional[str])

slots.MIGS_org_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIGS org_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_mat_process, domain=None, range=Optional[str])

slots.MIGS_org_samp_size = Slot(uri=MIXS['0000001'], name="MIGS org_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_org_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIGS org_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIGS_org_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIGS_org_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIGS org_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIGS_org_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIGS_org_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIGS org_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIGS_org_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIGS_org_lib_size = Slot(uri=MIXS['0000039'], name="MIGS org_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIGS_org_lib_size, domain=None, range=Optional[int])

slots.MIGS_org_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIGS org_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIGS_org_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIGS_org_lib_layout = Slot(uri=MIXS['0000041'], name="MIGS org_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIGS_org_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIGS_org_lib_vector = Slot(uri=MIXS['0000042'], name="MIGS org_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIGS_org_lib_vector, domain=None, range=Optional[str])

slots.MIGS_org_lib_screen = Slot(uri=MIXS['0000043'], name="MIGS org_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIGS_org_lib_screen, domain=None, range=Optional[str])

slots.MIGS_org_adapters = Slot(uri=MIXS['0000048'], name="MIGS org_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIGS_org_adapters, domain=None, range=Optional[str])

slots.MIGS_org_seq_meth = Slot(uri=MIXS['0000050'], name="MIGS org_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIGS_org_seq_meth, domain=None, range=str)

slots.MIGS_org_tax_ident = Slot(uri=MIXS['0000053'], name="MIGS org_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIGS_org_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIGS_org_assembly_qual = Slot(uri=MIXS['0000056'], name="MIGS org_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIGS_org_assembly_qual, domain=None, range=Optional[Union[str, "AssemblyQualEnum"]])

slots.MIGS_org_assembly_name = Slot(uri=MIXS['0000057'], name="MIGS org_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIGS_org_assembly_name, domain=None, range=Optional[str])

slots.MIGS_org_assembly_software = Slot(uri=MIXS['0000058'], name="MIGS org_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIGS_org_assembly_software, domain=None, range=str)

slots.MIGS_org_annot = Slot(uri=MIXS['0000059'], name="MIGS org_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIGS_org_annot, domain=None, range=Optional[str])

slots.MIGS_org_number_contig = Slot(uri=MIXS['0000060'], name="MIGS org_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIGS_org_number_contig, domain=None, range=Optional[int])

slots.MIGS_org_feat_pred = Slot(uri=MIXS['0000061'], name="MIGS org_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIGS_org_feat_pred, domain=None, range=Optional[str])

slots.MIGS_org_ref_db = Slot(uri=MIXS['0000062'], name="MIGS org_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIGS_org_ref_db, domain=None, range=Optional[str])

slots.MIGS_org_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIGS org_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIGS_org_sim_search_meth, domain=None, range=Optional[str])

slots.MIGS_org_tax_class = Slot(uri=MIXS['0000064'], name="MIGS org_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIGS_org_tax_class, domain=None, range=Optional[str])

slots.MIGS_org_compl_score = Slot(uri=MIXS['0000069'], name="MIGS org_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIGS_org_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIGS_org_compl_software = Slot(uri=MIXS['0000070'], name="MIGS org_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIGS_org_compl_software, domain=None, range=Optional[str])

slots.MIGS_org_associated_resource = Slot(uri=MIXS['0000091'], name="MIGS org_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIGS_org_associated_resource, domain=None, range=Optional[str])

slots.MIGS_org_sop = Slot(uri=MIXS['0000090'], name="MIGS org_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIGS_org_sop, domain=None, range=Optional[str])

slots.MIMS_samp_name = Slot(uri=MIXS['0001107'], name="MIMS_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIMS_samp_name, domain=None, range=str)

slots.MIMS_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIMS_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIMS_samp_taxon_id, domain=None, range=str)

slots.MIMS_project_name = Slot(uri=MIXS['0000092'], name="MIMS_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIMS_project_name, domain=None, range=str)

slots.MIMS_experimental_factor = Slot(uri=MIXS['0000008'], name="MIMS_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIMS_experimental_factor, domain=None, range=Optional[str])

slots.MIMS_lat_lon = Slot(uri=MIXS['0000009'], name="MIMS_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIMS_lat_lon, domain=None, range=str)

slots.MIMS_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIMS_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIMS_geo_loc_name, domain=None, range=str)

slots.MIMS_collection_date = Slot(uri=MIXS['0000011'], name="MIMS_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIMS_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIMS_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIMS_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIMS_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIMS_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIMS_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIMS_pos_cont_type, domain=None, range=Optional[str])

slots.MIMS_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIMS_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIMS_env_broad_scale, domain=None, range=str)

slots.MIMS_env_local_scale = Slot(uri=MIXS['0000013'], name="MIMS_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIMS_env_local_scale, domain=None, range=str)

slots.MIMS_env_medium = Slot(uri=MIXS['0000014'], name="MIMS_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIMS_env_medium, domain=None, range=str)

slots.MIMS_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIMS_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIMS_ref_biomaterial, domain=None, range=Optional[str])

slots.MIMS_source_mat_id = Slot(uri=MIXS['0000026'], name="MIMS_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIMS_source_mat_id, domain=None, range=Optional[str])

slots.MIMS_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MIMS_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MIMS_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MIMS_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIMS_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIMS_samp_collec_device, domain=None, range=Optional[str])

slots.MIMS_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIMS_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIMS_samp_collec_method, domain=None, range=Optional[str])

slots.MIMS_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIMS_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIMS_samp_mat_process, domain=None, range=Optional[str])

slots.MIMS_size_frac = Slot(uri=MIXS['0000017'], name="MIMS_size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.MIMS_size_frac, domain=None, range=Optional[str])

slots.MIMS_samp_size = Slot(uri=MIXS['0000001'], name="MIMS_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIMS_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMS_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIMS_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIMS_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMS_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIMS_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIMS_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIMS_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIMS_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIMS_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIMS_lib_size = Slot(uri=MIXS['0000039'], name="MIMS_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIMS_lib_size, domain=None, range=Optional[int])

slots.MIMS_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIMS_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIMS_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIMS_lib_layout = Slot(uri=MIXS['0000041'], name="MIMS_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIMS_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIMS_lib_vector = Slot(uri=MIXS['0000042'], name="MIMS_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIMS_lib_vector, domain=None, range=Optional[str])

slots.MIMS_lib_screen = Slot(uri=MIXS['0000043'], name="MIMS_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIMS_lib_screen, domain=None, range=Optional[str])

slots.MIMS_mid = Slot(uri=MIXS['0000047'], name="MIMS_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.MIMS_mid, domain=None, range=Optional[str])

slots.MIMS_adapters = Slot(uri=MIXS['0000048'], name="MIMS_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIMS_adapters, domain=None, range=Optional[str])

slots.MIMS_seq_meth = Slot(uri=MIXS['0000050'], name="MIMS_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIMS_seq_meth, domain=None, range=str)

slots.MIMS_assembly_qual = Slot(uri=MIXS['0000056'], name="MIMS_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIMS_assembly_qual, domain=None, range=Optional[Union[str, "AssemblyQualEnum"]])

slots.MIMS_assembly_name = Slot(uri=MIXS['0000057'], name="MIMS_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIMS_assembly_name, domain=None, range=Optional[str])

slots.MIMS_assembly_software = Slot(uri=MIXS['0000058'], name="MIMS_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIMS_assembly_software, domain=None, range=Optional[str])

slots.MIMS_annot = Slot(uri=MIXS['0000059'], name="MIMS_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIMS_annot, domain=None, range=Optional[str])

slots.MIMS_number_contig = Slot(uri=MIXS['0000060'], name="MIMS_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIMS_number_contig, domain=None, range=Optional[int])

slots.MIMS_feat_pred = Slot(uri=MIXS['0000061'], name="MIMS_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIMS_feat_pred, domain=None, range=Optional[str])

slots.MIMS_ref_db = Slot(uri=MIXS['0000062'], name="MIMS_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIMS_ref_db, domain=None, range=Optional[str])

slots.MIMS_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIMS_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIMS_sim_search_meth, domain=None, range=Optional[str])

slots.MIMS_tax_class = Slot(uri=MIXS['0000064'], name="MIMS_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIMS_tax_class, domain=None, range=Optional[str])

slots.MIMS_associated_resource = Slot(uri=MIXS['0000091'], name="MIMS_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIMS_associated_resource, domain=None, range=Optional[str])

slots.MIMS_sop = Slot(uri=MIXS['0000090'], name="MIMS_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIMS_sop, domain=None, range=Optional[str])

slots.MIMARKS_specimen_samp_name = Slot(uri=MIXS['0001107'], name="MIMARKS specimen_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_name, domain=None, range=str)

slots.MIMARKS_specimen_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIMARKS specimen_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_taxon_id, domain=None, range=str)

slots.MIMARKS_specimen_project_name = Slot(uri=MIXS['0000092'], name="MIMARKS specimen_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_project_name, domain=None, range=str)

slots.MIMARKS_specimen_experimental_factor = Slot(uri=MIXS['0000008'], name="MIMARKS specimen_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_experimental_factor, domain=None, range=Optional[str])

slots.MIMARKS_specimen_lat_lon = Slot(uri=MIXS['0000009'], name="MIMARKS specimen_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lat_lon, domain=None, range=str)

slots.MIMARKS_specimen_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIMARKS specimen_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_geo_loc_name, domain=None, range=str)

slots.MIMARKS_specimen_collection_date = Slot(uri=MIXS['0000011'], name="MIMARKS specimen_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIMARKS_specimen_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIMARKS specimen_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIMARKS_specimen_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIMARKS specimen_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_pos_cont_type, domain=None, range=Optional[str])

slots.MIMARKS_specimen_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIMARKS specimen_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_env_broad_scale, domain=None, range=str)

slots.MIMARKS_specimen_env_local_scale = Slot(uri=MIXS['0000013'], name="MIMARKS specimen_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_env_local_scale, domain=None, range=str)

slots.MIMARKS_specimen_env_medium = Slot(uri=MIXS['0000014'], name="MIMARKS specimen_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_env_medium, domain=None, range=str)

slots.MIMARKS_specimen_source_mat_id = Slot(uri=MIXS['0000026'], name="MIMARKS specimen_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_source_mat_id, domain=None, range=Optional[str])

slots.MIMARKS_specimen_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MIMARKS specimen_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MIMARKS_specimen_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIMARKS specimen_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_collec_device, domain=None, range=Optional[str])

slots.MIMARKS_specimen_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIMARKS specimen_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_collec_method, domain=None, range=Optional[str])

slots.MIMARKS_specimen_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIMARKS specimen_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_mat_process, domain=None, range=Optional[str])

slots.MIMARKS_specimen_size_frac = Slot(uri=MIXS['0000017'], name="MIMARKS specimen_size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_size_frac, domain=None, range=Optional[str])

slots.MIMARKS_specimen_samp_size = Slot(uri=MIXS['0000001'], name="MIMARKS specimen_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMARKS_specimen_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIMARKS specimen_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMARKS_specimen_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIMARKS specimen_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIMARKS_specimen_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIMARKS specimen_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIMARKS_specimen_lib_size = Slot(uri=MIXS['0000039'], name="MIMARKS specimen_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lib_size, domain=None, range=Optional[int])

slots.MIMARKS_specimen_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIMARKS specimen_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIMARKS_specimen_lib_layout = Slot(uri=MIXS['0000041'], name="MIMARKS specimen_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIMARKS_specimen_lib_vector = Slot(uri=MIXS['0000042'], name="MIMARKS specimen_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lib_vector, domain=None, range=Optional[str])

slots.MIMARKS_specimen_lib_screen = Slot(uri=MIXS['0000043'], name="MIMARKS specimen_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_lib_screen, domain=None, range=Optional[str])

slots.MIMARKS_specimen_target_gene = Slot(uri=MIXS['0000044'], name="MIMARKS specimen_target_gene", curie=MIXS.curie('0000044'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_target_gene, domain=None, range=str)

slots.MIMARKS_specimen_target_subfragment = Slot(uri=MIXS['0000045'], name="MIMARKS specimen_target_subfragment", curie=MIXS.curie('0000045'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_target_subfragment, domain=None, range=Optional[str])

slots.MIMARKS_specimen_pcr_primers = Slot(uri=MIXS['0000046'], name="MIMARKS specimen_pcr_primers", curie=MIXS.curie('0000046'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_pcr_primers, domain=None, range=Optional[str])

slots.MIMARKS_specimen_mid = Slot(uri=MIXS['0000047'], name="MIMARKS specimen_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_mid, domain=None, range=Optional[str])

slots.MIMARKS_specimen_adapters = Slot(uri=MIXS['0000048'], name="MIMARKS specimen_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_adapters, domain=None, range=Optional[str])

slots.MIMARKS_specimen_pcr_cond = Slot(uri=MIXS['0000049'], name="MIMARKS specimen_pcr_cond", curie=MIXS.curie('0000049'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_pcr_cond, domain=None, range=Optional[str])

slots.MIMARKS_specimen_seq_meth = Slot(uri=MIXS['0000050'], name="MIMARKS specimen_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_seq_meth, domain=None, range=str)

slots.MIMARKS_specimen_seq_quality_check = Slot(uri=MIXS['0000051'], name="MIMARKS specimen_seq_quality_check", curie=MIXS.curie('0000051'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_seq_quality_check, domain=None, range=Optional[str])

slots.MIMARKS_specimen_chimera_check = Slot(uri=MIXS['0000052'], name="MIMARKS specimen_chimera_check", curie=MIXS.curie('0000052'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_chimera_check, domain=None, range=Optional[str])

slots.MIMARKS_specimen_assembly_software = Slot(uri=MIXS['0000058'], name="MIMARKS specimen_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_assembly_software, domain=None, range=Optional[str])

slots.MIMARKS_specimen_associated_resource = Slot(uri=MIXS['0000091'], name="MIMARKS specimen_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_associated_resource, domain=None, range=Optional[str])

slots.MIMARKS_specimen_sop = Slot(uri=MIXS['0000090'], name="MIMARKS specimen_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIMARKS_specimen_sop, domain=None, range=Optional[str])

slots.MIMARKS_survey_samp_name = Slot(uri=MIXS['0001107'], name="MIMARKS survey_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_name, domain=None, range=str)

slots.MIMARKS_survey_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIMARKS survey_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_taxon_id, domain=None, range=str)

slots.MIMARKS_survey_project_name = Slot(uri=MIXS['0000092'], name="MIMARKS survey_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_project_name, domain=None, range=str)

slots.MIMARKS_survey_experimental_factor = Slot(uri=MIXS['0000008'], name="MIMARKS survey_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_experimental_factor, domain=None, range=Optional[str])

slots.MIMARKS_survey_lat_lon = Slot(uri=MIXS['0000009'], name="MIMARKS survey_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_lat_lon, domain=None, range=str)

slots.MIMARKS_survey_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIMARKS survey_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_geo_loc_name, domain=None, range=str)

slots.MIMARKS_survey_collection_date = Slot(uri=MIXS['0000011'], name="MIMARKS survey_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIMARKS_survey_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIMARKS survey_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIMARKS_survey_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIMARKS survey_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_pos_cont_type, domain=None, range=Optional[str])

slots.MIMARKS_survey_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIMARKS survey_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_env_broad_scale, domain=None, range=str)

slots.MIMARKS_survey_env_local_scale = Slot(uri=MIXS['0000013'], name="MIMARKS survey_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_env_local_scale, domain=None, range=str)

slots.MIMARKS_survey_env_medium = Slot(uri=MIXS['0000014'], name="MIMARKS survey_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_env_medium, domain=None, range=str)

slots.MIMARKS_survey_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="MIMARKS survey_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_subspecf_gen_lin, domain=None, range=Optional[str])

slots.MIMARKS_survey_extrachrom_elements = Slot(uri=MIXS['0000023'], name="MIMARKS survey_extrachrom_elements", curie=MIXS.curie('0000023'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_extrachrom_elements, domain=None, range=Optional[int])

slots.MIMARKS_survey_source_mat_id = Slot(uri=MIXS['0000026'], name="MIMARKS survey_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_source_mat_id, domain=None, range=Optional[str])

slots.MIMARKS_survey_biotic_relationship = Slot(uri=MIXS['0000028'], name="MIMARKS survey_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.MIMARKS_survey_trophic_level = Slot(uri=MIXS['0000032'], name="MIMARKS survey_trophic_level", curie=MIXS.curie('0000032'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_trophic_level, domain=None, range=Optional[Union[str, "TrophicLevelEnum"]])

slots.MIMARKS_survey_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MIMARKS survey_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MIMARKS_survey_isol_growth_condt = Slot(uri=MIXS['0000003'], name="MIMARKS survey_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_isol_growth_condt, domain=None, range=str)

slots.MIMARKS_survey_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIMARKS survey_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_collec_device, domain=None, range=Optional[str])

slots.MIMARKS_survey_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIMARKS survey_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_collec_method, domain=None, range=Optional[str])

slots.MIMARKS_survey_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIMARKS survey_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_mat_process, domain=None, range=Optional[str])

slots.MIMARKS_survey_samp_size = Slot(uri=MIXS['0000001'], name="MIMARKS survey_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMARKS_survey_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIMARKS survey_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMARKS_survey_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIMARKS survey_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIMARKS_survey_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIMARKS survey_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIMARKS_survey_target_gene = Slot(uri=MIXS['0000044'], name="MIMARKS survey_target_gene", curie=MIXS.curie('0000044'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_target_gene, domain=None, range=str)

slots.MIMARKS_survey_target_subfragment = Slot(uri=MIXS['0000045'], name="MIMARKS survey_target_subfragment", curie=MIXS.curie('0000045'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_target_subfragment, domain=None, range=Optional[str])

slots.MIMARKS_survey_pcr_primers = Slot(uri=MIXS['0000046'], name="MIMARKS survey_pcr_primers", curie=MIXS.curie('0000046'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_pcr_primers, domain=None, range=Optional[str])

slots.MIMARKS_survey_pcr_cond = Slot(uri=MIXS['0000049'], name="MIMARKS survey_pcr_cond", curie=MIXS.curie('0000049'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_pcr_cond, domain=None, range=Optional[str])

slots.MIMARKS_survey_seq_meth = Slot(uri=MIXS['0000050'], name="MIMARKS survey_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_seq_meth, domain=None, range=str)

slots.MIMARKS_survey_seq_quality_check = Slot(uri=MIXS['0000051'], name="MIMARKS survey_seq_quality_check", curie=MIXS.curie('0000051'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_seq_quality_check, domain=None, range=Optional[str])

slots.MIMARKS_survey_chimera_check = Slot(uri=MIXS['0000052'], name="MIMARKS survey_chimera_check", curie=MIXS.curie('0000052'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_chimera_check, domain=None, range=Optional[str])

slots.MIMARKS_survey_associated_resource = Slot(uri=MIXS['0000091'], name="MIMARKS survey_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_associated_resource, domain=None, range=Optional[str])

slots.MIMARKS_survey_sop = Slot(uri=MIXS['0000090'], name="MIMARKS survey_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIMARKS_survey_sop, domain=None, range=Optional[str])

slots.MISAG_samp_name = Slot(uri=MIXS['0001107'], name="MISAG_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MISAG_samp_name, domain=None, range=str)

slots.MISAG_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MISAG_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MISAG_samp_taxon_id, domain=None, range=str)

slots.MISAG_project_name = Slot(uri=MIXS['0000092'], name="MISAG_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MISAG_project_name, domain=None, range=str)

slots.MISAG_experimental_factor = Slot(uri=MIXS['0000008'], name="MISAG_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MISAG_experimental_factor, domain=None, range=Optional[str])

slots.MISAG_lat_lon = Slot(uri=MIXS['0000009'], name="MISAG_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MISAG_lat_lon, domain=None, range=str)

slots.MISAG_geo_loc_name = Slot(uri=MIXS['0000010'], name="MISAG_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MISAG_geo_loc_name, domain=None, range=str)

slots.MISAG_collection_date = Slot(uri=MIXS['0000011'], name="MISAG_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MISAG_collection_date, domain=None, range=Union[str, XSDDate])

slots.MISAG_neg_cont_type = Slot(uri=MIXS['0001321'], name="MISAG_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MISAG_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MISAG_pos_cont_type = Slot(uri=MIXS['0001322'], name="MISAG_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MISAG_pos_cont_type, domain=None, range=Optional[str])

slots.MISAG_env_broad_scale = Slot(uri=MIXS['0000012'], name="MISAG_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MISAG_env_broad_scale, domain=None, range=str)

slots.MISAG_env_local_scale = Slot(uri=MIXS['0000013'], name="MISAG_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MISAG_env_local_scale, domain=None, range=str)

slots.MISAG_env_medium = Slot(uri=MIXS['0000014'], name="MISAG_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MISAG_env_medium, domain=None, range=str)

slots.MISAG_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MISAG_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MISAG_ref_biomaterial, domain=None, range=Optional[str])

slots.MISAG_source_mat_id = Slot(uri=MIXS['0000026'], name="MISAG_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MISAG_source_mat_id, domain=None, range=Optional[str])

slots.MISAG_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MISAG_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MISAG_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MISAG_samp_collec_device = Slot(uri=MIXS['0000002'], name="MISAG_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MISAG_samp_collec_device, domain=None, range=Optional[str])

slots.MISAG_samp_collec_method = Slot(uri=MIXS['0001225'], name="MISAG_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MISAG_samp_collec_method, domain=None, range=Optional[str])

slots.MISAG_samp_mat_process = Slot(uri=MIXS['0000016'], name="MISAG_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MISAG_samp_mat_process, domain=None, range=Optional[str])

slots.MISAG_size_frac = Slot(uri=MIXS['0000017'], name="MISAG_size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.MISAG_size_frac, domain=None, range=Optional[str])

slots.MISAG_samp_size = Slot(uri=MIXS['0000001'], name="MISAG_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MISAG_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MISAG_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MISAG_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MISAG_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MISAG_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MISAG_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MISAG_nucl_acid_ext, domain=None, range=Optional[str])

slots.MISAG_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MISAG_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MISAG_nucl_acid_amp, domain=None, range=Optional[str])

slots.MISAG_lib_size = Slot(uri=MIXS['0000039'], name="MISAG_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MISAG_lib_size, domain=None, range=Optional[int])

slots.MISAG_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MISAG_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MISAG_lib_reads_seqd, domain=None, range=Optional[int])

slots.MISAG_lib_layout = Slot(uri=MIXS['0000041'], name="MISAG_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MISAG_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MISAG_lib_vector = Slot(uri=MIXS['0000042'], name="MISAG_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MISAG_lib_vector, domain=None, range=Optional[str])

slots.MISAG_lib_screen = Slot(uri=MIXS['0000043'], name="MISAG_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MISAG_lib_screen, domain=None, range=Optional[str])

slots.MISAG_mid = Slot(uri=MIXS['0000047'], name="MISAG_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.MISAG_mid, domain=None, range=Optional[str])

slots.MISAG_adapters = Slot(uri=MIXS['0000048'], name="MISAG_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MISAG_adapters, domain=None, range=Optional[str])

slots.MISAG_seq_meth = Slot(uri=MIXS['0000050'], name="MISAG_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MISAG_seq_meth, domain=None, range=str)

slots.MISAG_tax_ident = Slot(uri=MIXS['0000053'], name="MISAG_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MISAG_tax_ident, domain=None, range=Union[str, "TaxIdentEnum"])

slots.MISAG_assembly_qual = Slot(uri=MIXS['0000056'], name="MISAG_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MISAG_assembly_qual, domain=None, range=Union[str, "AssemblyQualEnum"])

slots.MISAG_assembly_name = Slot(uri=MIXS['0000057'], name="MISAG_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MISAG_assembly_name, domain=None, range=Optional[str])

slots.MISAG_assembly_software = Slot(uri=MIXS['0000058'], name="MISAG_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MISAG_assembly_software, domain=None, range=str)

slots.MISAG_annot = Slot(uri=MIXS['0000059'], name="MISAG_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MISAG_annot, domain=None, range=Optional[str])

slots.MISAG_number_contig = Slot(uri=MIXS['0000060'], name="MISAG_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MISAG_number_contig, domain=None, range=Optional[int])

slots.MISAG_feat_pred = Slot(uri=MIXS['0000061'], name="MISAG_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MISAG_feat_pred, domain=None, range=Optional[str])

slots.MISAG_ref_db = Slot(uri=MIXS['0000062'], name="MISAG_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MISAG_ref_db, domain=None, range=Optional[str])

slots.MISAG_sim_search_meth = Slot(uri=MIXS['0000063'], name="MISAG_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MISAG_sim_search_meth, domain=None, range=Optional[str])

slots.MISAG_tax_class = Slot(uri=MIXS['0000064'], name="MISAG_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MISAG_tax_class, domain=None, range=Optional[str])

slots.MISAG_x_16s_recover = Slot(uri=MIXS['0000065'], name="MISAG_x_16s_recover", curie=MIXS.curie('0000065'),
                   model_uri=MIXS.VOCAB.MISAG_x_16s_recover, domain=None, range=Optional[str])

slots.MISAG_x_16s_recover_software = Slot(uri=MIXS['0000066'], name="MISAG_x_16s_recover_software", curie=MIXS.curie('0000066'),
                   model_uri=MIXS.VOCAB.MISAG_x_16s_recover_software, domain=None, range=Optional[str])

slots.MISAG_trnas = Slot(uri=MIXS['0000067'], name="MISAG_trnas", curie=MIXS.curie('0000067'),
                   model_uri=MIXS.VOCAB.MISAG_trnas, domain=None, range=Optional[int])

slots.MISAG_trna_ext_software = Slot(uri=MIXS['0000068'], name="MISAG_trna_ext_software", curie=MIXS.curie('0000068'),
                   model_uri=MIXS.VOCAB.MISAG_trna_ext_software, domain=None, range=Optional[str])

slots.MISAG_compl_score = Slot(uri=MIXS['0000069'], name="MISAG_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MISAG_compl_score, domain=None, range=str,
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MISAG_compl_software = Slot(uri=MIXS['0000070'], name="MISAG_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MISAG_compl_software, domain=None, range=str)

slots.MISAG_compl_appr = Slot(uri=MIXS['0000071'], name="MISAG_compl_appr", curie=MIXS.curie('0000071'),
                   model_uri=MIXS.VOCAB.MISAG_compl_appr, domain=None, range=Optional[Union[str, "ComplApprEnum"]])

slots.MISAG_contam_score = Slot(uri=MIXS['0000072'], name="MISAG_contam_score", curie=MIXS.curie('0000072'),
                   model_uri=MIXS.VOCAB.MISAG_contam_score, domain=None, range=str)

slots.MISAG_contam_screen_input = Slot(uri=MIXS['0000005'], name="MISAG_contam_screen_input", curie=MIXS.curie('0000005'),
                   model_uri=MIXS.VOCAB.MISAG_contam_screen_input, domain=None, range=Optional[str])

slots.MISAG_contam_screen_param = Slot(uri=MIXS['0000073'], name="MISAG_contam_screen_param", curie=MIXS.curie('0000073'),
                   model_uri=MIXS.VOCAB.MISAG_contam_screen_param, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(ref db|kmer|coverage|combination);.+'))

slots.MISAG_decontam_software = Slot(uri=MIXS['0000074'], name="MISAG_decontam_software", curie=MIXS.curie('0000074'),
                   model_uri=MIXS.VOCAB.MISAG_decontam_software, domain=None, range=Optional[Union[str, "DecontamSoftwareEnum"]])

slots.MISAG_sort_tech = Slot(uri=MIXS['0000075'], name="MISAG_sort_tech", curie=MIXS.curie('0000075'),
                   model_uri=MIXS.VOCAB.MISAG_sort_tech, domain=None, range=Union[str, "SortTechEnum"])

slots.MISAG_single_cell_lysis_appr = Slot(uri=MIXS['0000076'], name="MISAG_single_cell_lysis_appr", curie=MIXS.curie('0000076'),
                   model_uri=MIXS.VOCAB.MISAG_single_cell_lysis_appr, domain=None, range=Union[str, "SingleCellLysisApprEnum"])

slots.MISAG_single_cell_lysis_prot = Slot(uri=MIXS['0000054'], name="MISAG_single_cell_lysis_prot", curie=MIXS.curie('0000054'),
                   model_uri=MIXS.VOCAB.MISAG_single_cell_lysis_prot, domain=None, range=Optional[str])

slots.MISAG_wga_amp_appr = Slot(uri=MIXS['0000055'], name="MISAG_wga_amp_appr", curie=MIXS.curie('0000055'),
                   model_uri=MIXS.VOCAB.MISAG_wga_amp_appr, domain=None, range=str)

slots.MISAG_wga_amp_kit = Slot(uri=MIXS['0000006'], name="MISAG_wga_amp_kit", curie=MIXS.curie('0000006'),
                   model_uri=MIXS.VOCAB.MISAG_wga_amp_kit, domain=None, range=Optional[str])

slots.MISAG_associated_resource = Slot(uri=MIXS['0000091'], name="MISAG_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MISAG_associated_resource, domain=None, range=Optional[str])

slots.MISAG_sop = Slot(uri=MIXS['0000090'], name="MISAG_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MISAG_sop, domain=None, range=Optional[str])

slots.MIMAG_samp_name = Slot(uri=MIXS['0001107'], name="MIMAG_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_name, domain=None, range=str)

slots.MIMAG_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIMAG_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_taxon_id, domain=None, range=str)

slots.MIMAG_project_name = Slot(uri=MIXS['0000092'], name="MIMAG_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIMAG_project_name, domain=None, range=str)

slots.MIMAG_experimental_factor = Slot(uri=MIXS['0000008'], name="MIMAG_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIMAG_experimental_factor, domain=None, range=Optional[str])

slots.MIMAG_lat_lon = Slot(uri=MIXS['0000009'], name="MIMAG_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIMAG_lat_lon, domain=None, range=str)

slots.MIMAG_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIMAG_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIMAG_geo_loc_name, domain=None, range=str)

slots.MIMAG_collection_date = Slot(uri=MIXS['0000011'], name="MIMAG_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIMAG_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIMAG_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIMAG_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIMAG_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIMAG_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIMAG_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIMAG_pos_cont_type, domain=None, range=Optional[str])

slots.MIMAG_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIMAG_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIMAG_env_broad_scale, domain=None, range=str)

slots.MIMAG_env_local_scale = Slot(uri=MIXS['0000013'], name="MIMAG_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIMAG_env_local_scale, domain=None, range=str)

slots.MIMAG_env_medium = Slot(uri=MIXS['0000014'], name="MIMAG_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIMAG_env_medium, domain=None, range=str)

slots.MIMAG_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIMAG_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIMAG_ref_biomaterial, domain=None, range=Optional[str])

slots.MIMAG_source_mat_id = Slot(uri=MIXS['0000026'], name="MIMAG_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIMAG_source_mat_id, domain=None, range=Optional[str])

slots.MIMAG_rel_to_oxygen = Slot(uri=MIXS['0000015'], name="MIMAG_rel_to_oxygen", curie=MIXS.curie('0000015'),
                   model_uri=MIXS.VOCAB.MIMAG_rel_to_oxygen, domain=None, range=Optional[Union[str, "RelToOxygenEnum"]])

slots.MIMAG_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIMAG_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_collec_device, domain=None, range=Optional[str])

slots.MIMAG_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIMAG_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_collec_method, domain=None, range=Optional[str])

slots.MIMAG_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIMAG_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_mat_process, domain=None, range=Optional[str])

slots.MIMAG_size_frac = Slot(uri=MIXS['0000017'], name="MIMAG_size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.MIMAG_size_frac, domain=None, range=Optional[str])

slots.MIMAG_samp_size = Slot(uri=MIXS['0000001'], name="MIMAG_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMAG_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIMAG_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIMAG_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIMAG_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIMAG_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIMAG_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIMAG_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIMAG_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIMAG_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIMAG_lib_size = Slot(uri=MIXS['0000039'], name="MIMAG_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIMAG_lib_size, domain=None, range=Optional[int])

slots.MIMAG_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIMAG_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIMAG_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIMAG_lib_layout = Slot(uri=MIXS['0000041'], name="MIMAG_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIMAG_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIMAG_lib_vector = Slot(uri=MIXS['0000042'], name="MIMAG_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIMAG_lib_vector, domain=None, range=Optional[str])

slots.MIMAG_lib_screen = Slot(uri=MIXS['0000043'], name="MIMAG_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIMAG_lib_screen, domain=None, range=Optional[str])

slots.MIMAG_mid = Slot(uri=MIXS['0000047'], name="MIMAG_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.MIMAG_mid, domain=None, range=Optional[str])

slots.MIMAG_adapters = Slot(uri=MIXS['0000048'], name="MIMAG_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIMAG_adapters, domain=None, range=Optional[str])

slots.MIMAG_seq_meth = Slot(uri=MIXS['0000050'], name="MIMAG_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIMAG_seq_meth, domain=None, range=str)

slots.MIMAG_tax_ident = Slot(uri=MIXS['0000053'], name="MIMAG_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIMAG_tax_ident, domain=None, range=Union[str, "TaxIdentEnum"])

slots.MIMAG_assembly_qual = Slot(uri=MIXS['0000056'], name="MIMAG_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIMAG_assembly_qual, domain=None, range=Union[str, "AssemblyQualEnum"])

slots.MIMAG_assembly_name = Slot(uri=MIXS['0000057'], name="MIMAG_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIMAG_assembly_name, domain=None, range=Optional[str])

slots.MIMAG_assembly_software = Slot(uri=MIXS['0000058'], name="MIMAG_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIMAG_assembly_software, domain=None, range=str)

slots.MIMAG_annot = Slot(uri=MIXS['0000059'], name="MIMAG_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIMAG_annot, domain=None, range=Optional[str])

slots.MIMAG_number_contig = Slot(uri=MIXS['0000060'], name="MIMAG_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIMAG_number_contig, domain=None, range=Optional[int])

slots.MIMAG_feat_pred = Slot(uri=MIXS['0000061'], name="MIMAG_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIMAG_feat_pred, domain=None, range=Optional[str])

slots.MIMAG_ref_db = Slot(uri=MIXS['0000062'], name="MIMAG_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIMAG_ref_db, domain=None, range=Optional[str])

slots.MIMAG_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIMAG_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIMAG_sim_search_meth, domain=None, range=Optional[str])

slots.MIMAG_tax_class = Slot(uri=MIXS['0000064'], name="MIMAG_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIMAG_tax_class, domain=None, range=Optional[str])

slots.MIMAG_x_16s_recover = Slot(uri=MIXS['0000065'], name="MIMAG_x_16s_recover", curie=MIXS.curie('0000065'),
                   model_uri=MIXS.VOCAB.MIMAG_x_16s_recover, domain=None, range=Optional[str])

slots.MIMAG_x_16s_recover_software = Slot(uri=MIXS['0000066'], name="MIMAG_x_16s_recover_software", curie=MIXS.curie('0000066'),
                   model_uri=MIXS.VOCAB.MIMAG_x_16s_recover_software, domain=None, range=Optional[str])

slots.MIMAG_trnas = Slot(uri=MIXS['0000067'], name="MIMAG_trnas", curie=MIXS.curie('0000067'),
                   model_uri=MIXS.VOCAB.MIMAG_trnas, domain=None, range=Optional[int])

slots.MIMAG_trna_ext_software = Slot(uri=MIXS['0000068'], name="MIMAG_trna_ext_software", curie=MIXS.curie('0000068'),
                   model_uri=MIXS.VOCAB.MIMAG_trna_ext_software, domain=None, range=Optional[str])

slots.MIMAG_compl_score = Slot(uri=MIXS['0000069'], name="MIMAG_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIMAG_compl_score, domain=None, range=str,
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIMAG_compl_software = Slot(uri=MIXS['0000070'], name="MIMAG_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIMAG_compl_software, domain=None, range=str)

slots.MIMAG_compl_appr = Slot(uri=MIXS['0000071'], name="MIMAG_compl_appr", curie=MIXS.curie('0000071'),
                   model_uri=MIXS.VOCAB.MIMAG_compl_appr, domain=None, range=Optional[Union[str, "ComplApprEnum"]])

slots.MIMAG_contam_score = Slot(uri=MIXS['0000072'], name="MIMAG_contam_score", curie=MIXS.curie('0000072'),
                   model_uri=MIXS.VOCAB.MIMAG_contam_score, domain=None, range=str)

slots.MIMAG_contam_screen_input = Slot(uri=MIXS['0000005'], name="MIMAG_contam_screen_input", curie=MIXS.curie('0000005'),
                   model_uri=MIXS.VOCAB.MIMAG_contam_screen_input, domain=None, range=Optional[str])

slots.MIMAG_contam_screen_param = Slot(uri=MIXS['0000073'], name="MIMAG_contam_screen_param", curie=MIXS.curie('0000073'),
                   model_uri=MIXS.VOCAB.MIMAG_contam_screen_param, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(ref db|kmer|coverage|combination);.+'))

slots.MIMAG_decontam_software = Slot(uri=MIXS['0000074'], name="MIMAG_decontam_software", curie=MIXS.curie('0000074'),
                   model_uri=MIXS.VOCAB.MIMAG_decontam_software, domain=None, range=Optional[Union[str, "DecontamSoftwareEnum"]])

slots.MIMAG_bin_param = Slot(uri=MIXS['0000077'], name="MIMAG_bin_param", curie=MIXS.curie('0000077'),
                   model_uri=MIXS.VOCAB.MIMAG_bin_param, domain=None, range=Union[str, "BinParamEnum"])

slots.MIMAG_bin_software = Slot(uri=MIXS['0000078'], name="MIMAG_bin_software", curie=MIXS.curie('0000078'),
                   model_uri=MIXS.VOCAB.MIMAG_bin_software, domain=None, range=str)

slots.MIMAG_reassembly_bin = Slot(uri=MIXS['0000079'], name="MIMAG_reassembly_bin", curie=MIXS.curie('0000079'),
                   model_uri=MIXS.VOCAB.MIMAG_reassembly_bin, domain=None, range=Optional[str])

slots.MIMAG_mag_cov_software = Slot(uri=MIXS['0000080'], name="MIMAG_mag_cov_software", curie=MIXS.curie('0000080'),
                   model_uri=MIXS.VOCAB.MIMAG_mag_cov_software, domain=None, range=Optional[Union[str, "MagCovSoftwareEnum"]])

slots.MIMAG_associated_resource = Slot(uri=MIXS['0000091'], name="MIMAG_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIMAG_associated_resource, domain=None, range=Optional[str])

slots.MIMAG_sop = Slot(uri=MIXS['0000090'], name="MIMAG_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIMAG_sop, domain=None, range=Optional[str])

slots.MIUVIG_samp_name = Slot(uri=MIXS['0001107'], name="MIUVIG_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_name, domain=None, range=str)

slots.MIUVIG_samp_taxon_id = Slot(uri=MIXS['0001320'], name="MIUVIG_samp_taxon_id", curie=MIXS.curie('0001320'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_taxon_id, domain=None, range=str)

slots.MIUVIG_project_name = Slot(uri=MIXS['0000092'], name="MIUVIG_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.MIUVIG_project_name, domain=None, range=str)

slots.MIUVIG_experimental_factor = Slot(uri=MIXS['0000008'], name="MIUVIG_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.MIUVIG_experimental_factor, domain=None, range=Optional[str])

slots.MIUVIG_lat_lon = Slot(uri=MIXS['0000009'], name="MIUVIG_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.MIUVIG_lat_lon, domain=None, range=str)

slots.MIUVIG_geo_loc_name = Slot(uri=MIXS['0000010'], name="MIUVIG_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.MIUVIG_geo_loc_name, domain=None, range=str)

slots.MIUVIG_collection_date = Slot(uri=MIXS['0000011'], name="MIUVIG_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.MIUVIG_collection_date, domain=None, range=Union[str, XSDDate])

slots.MIUVIG_neg_cont_type = Slot(uri=MIXS['0001321'], name="MIUVIG_neg_cont_type", curie=MIXS.curie('0001321'),
                   model_uri=MIXS.VOCAB.MIUVIG_neg_cont_type, domain=None, range=Optional[Union[str, "NegContTypeEnum"]])

slots.MIUVIG_pos_cont_type = Slot(uri=MIXS['0001322'], name="MIUVIG_pos_cont_type", curie=MIXS.curie('0001322'),
                   model_uri=MIXS.VOCAB.MIUVIG_pos_cont_type, domain=None, range=Optional[str])

slots.MIUVIG_env_broad_scale = Slot(uri=MIXS['0000012'], name="MIUVIG_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.MIUVIG_env_broad_scale, domain=None, range=str)

slots.MIUVIG_env_local_scale = Slot(uri=MIXS['0000013'], name="MIUVIG_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.MIUVIG_env_local_scale, domain=None, range=str)

slots.MIUVIG_env_medium = Slot(uri=MIXS['0000014'], name="MIUVIG_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.MIUVIG_env_medium, domain=None, range=str)

slots.MIUVIG_estimated_size = Slot(uri=MIXS['0000024'], name="MIUVIG_estimated_size", curie=MIXS.curie('0000024'),
                   model_uri=MIXS.VOCAB.MIUVIG_estimated_size, domain=None, range=Optional[str])

slots.MIUVIG_ref_biomaterial = Slot(uri=MIXS['0000025'], name="MIUVIG_ref_biomaterial", curie=MIXS.curie('0000025'),
                   model_uri=MIXS.VOCAB.MIUVIG_ref_biomaterial, domain=None, range=Optional[str])

slots.MIUVIG_source_mat_id = Slot(uri=MIXS['0000026'], name="MIUVIG_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.MIUVIG_source_mat_id, domain=None, range=Optional[str])

slots.MIUVIG_pathogenicity = Slot(uri=MIXS['0000027'], name="MIUVIG_pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.MIUVIG_pathogenicity, domain=None, range=Optional[str])

slots.MIUVIG_biotic_relationship = Slot(uri=MIXS['0000028'], name="MIUVIG_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.MIUVIG_biotic_relationship, domain=None, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.MIUVIG_specific_host = Slot(uri=MIXS['0000029'], name="MIUVIG_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.MIUVIG_specific_host, domain=None, range=Optional[str])

slots.MIUVIG_host_spec_range = Slot(uri=MIXS['0000030'], name="MIUVIG_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.MIUVIG_host_spec_range, domain=None, range=Optional[int])

slots.MIUVIG_host_disease_stat = Slot(uri=MIXS['0000031'], name="MIUVIG_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.MIUVIG_host_disease_stat, domain=None, range=Optional[str])

slots.MIUVIG_samp_collec_device = Slot(uri=MIXS['0000002'], name="MIUVIG_samp_collec_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_collec_device, domain=None, range=Optional[str])

slots.MIUVIG_samp_collec_method = Slot(uri=MIXS['0001225'], name="MIUVIG_samp_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_collec_method, domain=None, range=Optional[str])

slots.MIUVIG_samp_mat_process = Slot(uri=MIXS['0000016'], name="MIUVIG_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_mat_process, domain=None, range=Optional[str])

slots.MIUVIG_size_frac = Slot(uri=MIXS['0000017'], name="MIUVIG_size_frac", curie=MIXS.curie('0000017'),
                   model_uri=MIXS.VOCAB.MIUVIG_size_frac, domain=None, range=Optional[str])

slots.MIUVIG_samp_size = Slot(uri=MIXS['0000001'], name="MIUVIG_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_size, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIUVIG_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="MIUVIG_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.MIUVIG_samp_vol_we_dna_ext, domain=None, range=Optional[Union[dict, "QuantityValue"]])

slots.MIUVIG_source_uvig = Slot(uri=MIXS['0000035'], name="MIUVIG_source_uvig", curie=MIXS.curie('0000035'),
                   model_uri=MIXS.VOCAB.MIUVIG_source_uvig, domain=None, range=Union[str, "SourceUvigEnum"])

slots.MIUVIG_virus_enrich_appr = Slot(uri=MIXS['0000036'], name="MIUVIG_virus_enrich_appr", curie=MIXS.curie('0000036'),
                   model_uri=MIXS.VOCAB.MIUVIG_virus_enrich_appr, domain=None, range=Union[str, "VirusEnrichApprEnum"])

slots.MIUVIG_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="MIUVIG_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.MIUVIG_nucl_acid_ext, domain=None, range=Optional[str])

slots.MIUVIG_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="MIUVIG_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.MIUVIG_nucl_acid_amp, domain=None, range=Optional[str])

slots.MIUVIG_lib_size = Slot(uri=MIXS['0000039'], name="MIUVIG_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.MIUVIG_lib_size, domain=None, range=Optional[int])

slots.MIUVIG_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="MIUVIG_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.MIUVIG_lib_reads_seqd, domain=None, range=Optional[int])

slots.MIUVIG_lib_layout = Slot(uri=MIXS['0000041'], name="MIUVIG_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.MIUVIG_lib_layout, domain=None, range=Optional[Union[str, "LibLayoutEnum"]])

slots.MIUVIG_lib_vector = Slot(uri=MIXS['0000042'], name="MIUVIG_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.MIUVIG_lib_vector, domain=None, range=Optional[str])

slots.MIUVIG_lib_screen = Slot(uri=MIXS['0000043'], name="MIUVIG_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.MIUVIG_lib_screen, domain=None, range=Optional[str])

slots.MIUVIG_mid = Slot(uri=MIXS['0000047'], name="MIUVIG_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.MIUVIG_mid, domain=None, range=Optional[str])

slots.MIUVIG_adapters = Slot(uri=MIXS['0000048'], name="MIUVIG_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.MIUVIG_adapters, domain=None, range=Optional[str])

slots.MIUVIG_seq_meth = Slot(uri=MIXS['0000050'], name="MIUVIG_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.MIUVIG_seq_meth, domain=None, range=str)

slots.MIUVIG_tax_ident = Slot(uri=MIXS['0000053'], name="MIUVIG_tax_ident", curie=MIXS.curie('0000053'),
                   model_uri=MIXS.VOCAB.MIUVIG_tax_ident, domain=None, range=Optional[Union[str, "TaxIdentEnum"]])

slots.MIUVIG_assembly_qual = Slot(uri=MIXS['0000056'], name="MIUVIG_assembly_qual", curie=MIXS.curie('0000056'),
                   model_uri=MIXS.VOCAB.MIUVIG_assembly_qual, domain=None, range=Union[str, "AssemblyQualEnum"])

slots.MIUVIG_assembly_name = Slot(uri=MIXS['0000057'], name="MIUVIG_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.MIUVIG_assembly_name, domain=None, range=Optional[str])

slots.MIUVIG_assembly_software = Slot(uri=MIXS['0000058'], name="MIUVIG_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.MIUVIG_assembly_software, domain=None, range=str)

slots.MIUVIG_annot = Slot(uri=MIXS['0000059'], name="MIUVIG_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.MIUVIG_annot, domain=None, range=Optional[str])

slots.MIUVIG_number_contig = Slot(uri=MIXS['0000060'], name="MIUVIG_number_contig", curie=MIXS.curie('0000060'),
                   model_uri=MIXS.VOCAB.MIUVIG_number_contig, domain=None, range=int)

slots.MIUVIG_feat_pred = Slot(uri=MIXS['0000061'], name="MIUVIG_feat_pred", curie=MIXS.curie('0000061'),
                   model_uri=MIXS.VOCAB.MIUVIG_feat_pred, domain=None, range=Optional[str])

slots.MIUVIG_ref_db = Slot(uri=MIXS['0000062'], name="MIUVIG_ref_db", curie=MIXS.curie('0000062'),
                   model_uri=MIXS.VOCAB.MIUVIG_ref_db, domain=None, range=Optional[str])

slots.MIUVIG_sim_search_meth = Slot(uri=MIXS['0000063'], name="MIUVIG_sim_search_meth", curie=MIXS.curie('0000063'),
                   model_uri=MIXS.VOCAB.MIUVIG_sim_search_meth, domain=None, range=Optional[str])

slots.MIUVIG_tax_class = Slot(uri=MIXS['0000064'], name="MIUVIG_tax_class", curie=MIXS.curie('0000064'),
                   model_uri=MIXS.VOCAB.MIUVIG_tax_class, domain=None, range=Optional[str])

slots.MIUVIG_trnas = Slot(uri=MIXS['0000067'], name="MIUVIG_trnas", curie=MIXS.curie('0000067'),
                   model_uri=MIXS.VOCAB.MIUVIG_trnas, domain=None, range=Optional[int])

slots.MIUVIG_trna_ext_software = Slot(uri=MIXS['0000068'], name="MIUVIG_trna_ext_software", curie=MIXS.curie('0000068'),
                   model_uri=MIXS.VOCAB.MIUVIG_trna_ext_software, domain=None, range=Optional[str])

slots.MIUVIG_compl_score = Slot(uri=MIXS['0000069'], name="MIUVIG_compl_score", curie=MIXS.curie('0000069'),
                   model_uri=MIXS.VOCAB.MIUVIG_compl_score, domain=None, range=Optional[str],
                   pattern=re.compile(r'^(high|med|low);(0|([0-9]{1,2})|100)%$'))

slots.MIUVIG_compl_software = Slot(uri=MIXS['0000070'], name="MIUVIG_compl_software", curie=MIXS.curie('0000070'),
                   model_uri=MIXS.VOCAB.MIUVIG_compl_software, domain=None, range=Optional[str])

slots.MIUVIG_compl_appr = Slot(uri=MIXS['0000071'], name="MIUVIG_compl_appr", curie=MIXS.curie('0000071'),
                   model_uri=MIXS.VOCAB.MIUVIG_compl_appr, domain=None, range=Optional[Union[str, "ComplApprEnum"]])

slots.MIUVIG_sort_tech = Slot(uri=MIXS['0000075'], name="MIUVIG_sort_tech", curie=MIXS.curie('0000075'),
                   model_uri=MIXS.VOCAB.MIUVIG_sort_tech, domain=None, range=Optional[Union[str, "SortTechEnum"]])

slots.MIUVIG_single_cell_lysis_appr = Slot(uri=MIXS['0000076'], name="MIUVIG_single_cell_lysis_appr", curie=MIXS.curie('0000076'),
                   model_uri=MIXS.VOCAB.MIUVIG_single_cell_lysis_appr, domain=None, range=Optional[Union[str, "SingleCellLysisApprEnum"]])

slots.MIUVIG_single_cell_lysis_prot = Slot(uri=MIXS['0000054'], name="MIUVIG_single_cell_lysis_prot", curie=MIXS.curie('0000054'),
                   model_uri=MIXS.VOCAB.MIUVIG_single_cell_lysis_prot, domain=None, range=Optional[str])

slots.MIUVIG_wga_amp_appr = Slot(uri=MIXS['0000055'], name="MIUVIG_wga_amp_appr", curie=MIXS.curie('0000055'),
                   model_uri=MIXS.VOCAB.MIUVIG_wga_amp_appr, domain=None, range=Optional[str])

slots.MIUVIG_wga_amp_kit = Slot(uri=MIXS['0000006'], name="MIUVIG_wga_amp_kit", curie=MIXS.curie('0000006'),
                   model_uri=MIXS.VOCAB.MIUVIG_wga_amp_kit, domain=None, range=Optional[str])

slots.MIUVIG_bin_param = Slot(uri=MIXS['0000077'], name="MIUVIG_bin_param", curie=MIXS.curie('0000077'),
                   model_uri=MIXS.VOCAB.MIUVIG_bin_param, domain=None, range=Optional[Union[str, "BinParamEnum"]])

slots.MIUVIG_bin_software = Slot(uri=MIXS['0000078'], name="MIUVIG_bin_software", curie=MIXS.curie('0000078'),
                   model_uri=MIXS.VOCAB.MIUVIG_bin_software, domain=None, range=Optional[str])

slots.MIUVIG_reassembly_bin = Slot(uri=MIXS['0000079'], name="MIUVIG_reassembly_bin", curie=MIXS.curie('0000079'),
                   model_uri=MIXS.VOCAB.MIUVIG_reassembly_bin, domain=None, range=Optional[str])

slots.MIUVIG_mag_cov_software = Slot(uri=MIXS['0000080'], name="MIUVIG_mag_cov_software", curie=MIXS.curie('0000080'),
                   model_uri=MIXS.VOCAB.MIUVIG_mag_cov_software, domain=None, range=Optional[Union[str, "MagCovSoftwareEnum"]])

slots.MIUVIG_vir_ident_software = Slot(uri=MIXS['0000081'], name="MIUVIG_vir_ident_software", curie=MIXS.curie('0000081'),
                   model_uri=MIXS.VOCAB.MIUVIG_vir_ident_software, domain=None, range=str)

slots.MIUVIG_pred_genome_type = Slot(uri=MIXS['0000082'], name="MIUVIG_pred_genome_type", curie=MIXS.curie('0000082'),
                   model_uri=MIXS.VOCAB.MIUVIG_pred_genome_type, domain=None, range=Union[str, "PredGenomeTypeEnum"])

slots.MIUVIG_pred_genome_struc = Slot(uri=MIXS['0000083'], name="MIUVIG_pred_genome_struc", curie=MIXS.curie('0000083'),
                   model_uri=MIXS.VOCAB.MIUVIG_pred_genome_struc, domain=None, range=Union[str, "PredGenomeStrucEnum"])

slots.MIUVIG_detec_type = Slot(uri=MIXS['0000084'], name="MIUVIG_detec_type", curie=MIXS.curie('0000084'),
                   model_uri=MIXS.VOCAB.MIUVIG_detec_type, domain=None, range=str)

slots.MIUVIG_otu_class_appr = Slot(uri=MIXS['0000085'], name="MIUVIG_otu_class_appr", curie=MIXS.curie('0000085'),
                   model_uri=MIXS.VOCAB.MIUVIG_otu_class_appr, domain=None, range=Optional[str])

slots.MIUVIG_otu_seq_comp_appr = Slot(uri=MIXS['0000086'], name="MIUVIG_otu_seq_comp_appr", curie=MIXS.curie('0000086'),
                   model_uri=MIXS.VOCAB.MIUVIG_otu_seq_comp_appr, domain=None, range=Optional[str])

slots.MIUVIG_otu_db = Slot(uri=MIXS['0000087'], name="MIUVIG_otu_db", curie=MIXS.curie('0000087'),
                   model_uri=MIXS.VOCAB.MIUVIG_otu_db, domain=None, range=Optional[str])

slots.MIUVIG_host_pred_appr = Slot(uri=MIXS['0000088'], name="MIUVIG_host_pred_appr", curie=MIXS.curie('0000088'),
                   model_uri=MIXS.VOCAB.MIUVIG_host_pred_appr, domain=None, range=Optional[Union[str, "HostPredApprEnum"]])

slots.MIUVIG_host_pred_est_acc = Slot(uri=MIXS['0000089'], name="MIUVIG_host_pred_est_acc", curie=MIXS.curie('0000089'),
                   model_uri=MIXS.VOCAB.MIUVIG_host_pred_est_acc, domain=None, range=Optional[str])

slots.MIUVIG_associated_resource = Slot(uri=MIXS['0000091'], name="MIUVIG_associated resource", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.MIUVIG_associated_resource, domain=None, range=Optional[str])

slots.MIUVIG_sop = Slot(uri=MIXS['0000090'], name="MIUVIG_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.MIUVIG_sop, domain=None, range=Optional[str])

slots.air_samp_name = Slot(uri=MIXS['0001107'], name="air_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.air_samp_name, domain=Air, range=str)

slots.air_project_name = Slot(uri=MIXS['0000092'], name="air_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.air_project_name, domain=Air, range=str)

slots.air_alt = Slot(uri=MIXS['0000094'], name="air_alt", curie=MIXS.curie('0000094'),
                   model_uri=MIXS.VOCAB.air_alt, domain=Air, range=Union[dict, "QuantityValue"])

slots.air_elev = Slot(uri=MIXS['0000093'], name="air_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.air_elev, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_barometric_press = Slot(uri=MIXS['0000096'], name="air_barometric_press", curie=MIXS.curie('0000096'),
                   model_uri=MIXS.VOCAB.air_barometric_press, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_carb_dioxide = Slot(uri=MIXS['0000097'], name="air_carb_dioxide", curie=MIXS.curie('0000097'),
                   model_uri=MIXS.VOCAB.air_carb_dioxide, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_carb_monoxide = Slot(uri=MIXS['0000098'], name="air_carb_monoxide", curie=MIXS.curie('0000098'),
                   model_uri=MIXS.VOCAB.air_carb_monoxide, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_chem_administration = Slot(uri=MIXS['0000751'], name="air_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.air_chem_administration, domain=Air, range=Optional[Union[str, List[str]]])

slots.air_humidity = Slot(uri=MIXS['0000100'], name="air_humidity", curie=MIXS.curie('0000100'),
                   model_uri=MIXS.VOCAB.air_humidity, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_methane = Slot(uri=MIXS['0000101'], name="air_methane", curie=MIXS.curie('0000101'),
                   model_uri=MIXS.VOCAB.air_methane, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_organism_count = Slot(uri=MIXS['0000103'], name="air_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.air_organism_count, domain=Air, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.air_oxygen = Slot(uri=MIXS['0000104'], name="air_oxygen", curie=MIXS.curie('0000104'),
                   model_uri=MIXS.VOCAB.air_oxygen, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="air_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.air_oxy_stat_samp, domain=Air, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.air_perturbation = Slot(uri=MIXS['0000754'], name="air_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.air_perturbation, domain=Air, range=Optional[Union[str, List[str]]])

slots.air_pollutants = Slot(uri=MIXS['0000107'], name="air_pollutants", curie=MIXS.curie('0000107'),
                   model_uri=MIXS.VOCAB.air_pollutants, domain=Air, range=Optional[Union[str, List[str]]])

slots.air_air_particulate_matter_concentration = Slot(uri=MIXS['0000108'], name="air_air particulate matter concentration", curie=MIXS.curie('0000108'),
                   model_uri=MIXS.VOCAB.air_air_particulate_matter_concentration, domain=Air, range=Optional[Union[str, List[str]]])

slots.air_salinity = Slot(uri=MIXS['0000183'], name="air_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.air_salinity, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_samp_store_dur = Slot(uri=MIXS['0000116'], name="air_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.air_samp_store_dur, domain=Air, range=Optional[str])

slots.air_samp_store_loc = Slot(uri=MIXS['0000755'], name="air_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.air_samp_store_loc, domain=Air, range=Optional[str])

slots.air_samp_store_temp = Slot(uri=MIXS['0000110'], name="air_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.air_samp_store_temp, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="air_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.air_samp_vol_we_dna_ext, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_solar_irradiance = Slot(uri=MIXS['0000112'], name="air_solar_irradiance", curie=MIXS.curie('0000112'),
                   model_uri=MIXS.VOCAB.air_solar_irradiance, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_ventilation_rate = Slot(uri=MIXS['0000114'], name="air_ventilation_rate", curie=MIXS.curie('0000114'),
                   model_uri=MIXS.VOCAB.air_ventilation_rate, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_ventilation_type = Slot(uri=MIXS['0000756'], name="air_ventilation_type", curie=MIXS.curie('0000756'),
                   model_uri=MIXS.VOCAB.air_ventilation_type, domain=Air, range=Optional[str])

slots.air_volatile_org_comp = Slot(uri=MIXS['0000115'], name="air_volatile_org_comp", curie=MIXS.curie('0000115'),
                   model_uri=MIXS.VOCAB.air_volatile_org_comp, domain=Air, range=Optional[Union[str, List[str]]])

slots.air_wind_direction = Slot(uri=MIXS['0000757'], name="air_wind_direction", curie=MIXS.curie('0000757'),
                   model_uri=MIXS.VOCAB.air_wind_direction, domain=Air, range=Optional[str])

slots.air_wind_speed = Slot(uri=MIXS['0000118'], name="air_wind_speed", curie=MIXS.curie('0000118'),
                   model_uri=MIXS.VOCAB.air_wind_speed, domain=Air, range=Optional[Union[dict, "QuantityValue"]])

slots.air_misc_param = Slot(uri=MIXS['0000752'], name="air_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.air_misc_param, domain=Air, range=Optional[Union[str, List[str]]])

slots.built_environment_samp_name = Slot(uri=MIXS['0001107'], name="built environment_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.built_environment_samp_name, domain=BuiltEnvironment, range=str)

slots.built_environment_project_name = Slot(uri=MIXS['0000092'], name="built environment_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.built_environment_project_name, domain=BuiltEnvironment, range=str)

slots.built_environment_surf_material = Slot(uri=MIXS['0000758'], name="built environment_surf_material", curie=MIXS.curie('0000758'),
                   model_uri=MIXS.VOCAB.built_environment_surf_material, domain=BuiltEnvironment, range=Optional[Union[str, "SurfMaterialEnum"]])

slots.built_environment_surf_air_cont = Slot(uri=MIXS['0000759'], name="built environment_surf_air_cont", curie=MIXS.curie('0000759'),
                   model_uri=MIXS.VOCAB.built_environment_surf_air_cont, domain=BuiltEnvironment, range=Optional[Union[Union[str, "SurfAirContEnum"], List[Union[str, "SurfAirContEnum"]]]])

slots.built_environment_rel_air_humidity = Slot(uri=MIXS['0000121'], name="built environment_rel_air_humidity", curie=MIXS.curie('0000121'),
                   model_uri=MIXS.VOCAB.built_environment_rel_air_humidity, domain=BuiltEnvironment, range=Union[dict, "QuantityValue"])

slots.built_environment_abs_air_humidity = Slot(uri=MIXS['0000122'], name="built environment_abs_air_humidity", curie=MIXS.curie('0000122'),
                   model_uri=MIXS.VOCAB.built_environment_abs_air_humidity, domain=BuiltEnvironment, range=Union[dict, "QuantityValue"])

slots.built_environment_surf_humidity = Slot(uri=MIXS['0000123'], name="built environment_surf_humidity", curie=MIXS.curie('0000123'),
                   model_uri=MIXS.VOCAB.built_environment_surf_humidity, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_air_temp = Slot(uri=MIXS['0000113'], name="built environment_air_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.built_environment_air_temp, domain=BuiltEnvironment, range=Union[dict, "QuantityValue"])

slots.built_environment_surf_temp = Slot(uri=MIXS['0000125'], name="built environment_surf_temp", curie=MIXS.curie('0000125'),
                   model_uri=MIXS.VOCAB.built_environment_surf_temp, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_surf_moisture_ph = Slot(uri=MIXS['0000760'], name="built environment_surf_moisture_ph", curie=MIXS.curie('0000760'),
                   model_uri=MIXS.VOCAB.built_environment_surf_moisture_ph, domain=BuiltEnvironment, range=Optional[float])

slots.built_environment_build_occup_type = Slot(uri=MIXS['0000761'], name="built environment_build_occup_type", curie=MIXS.curie('0000761'),
                   model_uri=MIXS.VOCAB.built_environment_build_occup_type, domain=BuiltEnvironment, range=Union[Union[str, "BuildOccupTypeEnum"], List[Union[str, "BuildOccupTypeEnum"]]])

slots.built_environment_surf_moisture = Slot(uri=MIXS['0000128'], name="built environment_surf_moisture", curie=MIXS.curie('0000128'),
                   model_uri=MIXS.VOCAB.built_environment_surf_moisture, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_dew_point = Slot(uri=MIXS['0000129'], name="built environment_dew_point", curie=MIXS.curie('0000129'),
                   model_uri=MIXS.VOCAB.built_environment_dew_point, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_carb_dioxide = Slot(uri=MIXS['0000097'], name="built environment_carb_dioxide", curie=MIXS.curie('0000097'),
                   model_uri=MIXS.VOCAB.built_environment_carb_dioxide, domain=BuiltEnvironment, range=Union[dict, "QuantityValue"])

slots.built_environment_ventilation_type = Slot(uri=MIXS['0000756'], name="built environment_ventilation_type", curie=MIXS.curie('0000756'),
                   model_uri=MIXS.VOCAB.built_environment_ventilation_type, domain=BuiltEnvironment, range=str)

slots.built_environment_organism_count = Slot(uri=MIXS['0000103'], name="built environment_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.built_environment_organism_count, domain=BuiltEnvironment, range=Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]])

slots.built_environment_indoor_space = Slot(uri=MIXS['0000763'], name="built environment_indoor_space", curie=MIXS.curie('0000763'),
                   model_uri=MIXS.VOCAB.built_environment_indoor_space, domain=BuiltEnvironment, range=Union[str, "IndoorSpaceEnum"])

slots.built_environment_indoor_surf = Slot(uri=MIXS['0000764'], name="built environment_indoor_surf", curie=MIXS.curie('0000764'),
                   model_uri=MIXS.VOCAB.built_environment_indoor_surf, domain=BuiltEnvironment, range=Optional[Union[str, "IndoorSurfEnum"]])

slots.built_environment_filter_type = Slot(uri=MIXS['0000765'], name="built environment_filter_type", curie=MIXS.curie('0000765'),
                   model_uri=MIXS.VOCAB.built_environment_filter_type, domain=BuiltEnvironment, range=Union[Union[str, "FilterTypeEnum"], List[Union[str, "FilterTypeEnum"]]])

slots.built_environment_heat_cool_type = Slot(uri=MIXS['0000766'], name="built environment_heat_cool_type", curie=MIXS.curie('0000766'),
                   model_uri=MIXS.VOCAB.built_environment_heat_cool_type, domain=BuiltEnvironment, range=Union[Union[str, "HeatCoolTypeEnum"], List[Union[str, "HeatCoolTypeEnum"]]])

slots.built_environment_substructure_type = Slot(uri=MIXS['0000767'], name="built environment_substructure_type", curie=MIXS.curie('0000767'),
                   model_uri=MIXS.VOCAB.built_environment_substructure_type, domain=BuiltEnvironment, range=Optional[Union[Union[str, "SubstructureTypeEnum"], List[Union[str, "SubstructureTypeEnum"]]]])

slots.built_environment_building_setting = Slot(uri=MIXS['0000768'], name="built environment_building_setting", curie=MIXS.curie('0000768'),
                   model_uri=MIXS.VOCAB.built_environment_building_setting, domain=BuiltEnvironment, range=Union[str, "BuildingSettingEnum"])

slots.built_environment_light_type = Slot(uri=MIXS['0000769'], name="built environment_light_type", curie=MIXS.curie('0000769'),
                   model_uri=MIXS.VOCAB.built_environment_light_type, domain=BuiltEnvironment, range=Union[Union[str, "LightTypeEnum"], List[Union[str, "LightTypeEnum"]]])

slots.built_environment_samp_sort_meth = Slot(uri=MIXS['0000216'], name="built environment_samp_sort_meth", curie=MIXS.curie('0000216'),
                   model_uri=MIXS.VOCAB.built_environment_samp_sort_meth, domain=BuiltEnvironment, range=Optional[Union[str, List[str]]])

slots.built_environment_space_typ_state = Slot(uri=MIXS['0000770'], name="built environment_space_typ_state", curie=MIXS.curie('0000770'),
                   model_uri=MIXS.VOCAB.built_environment_space_typ_state, domain=BuiltEnvironment, range=str)

slots.built_environment_typ_occup_density = Slot(uri=MIXS['0000771'], name="built environment_typ_occup_density", curie=MIXS.curie('0000771'),
                   model_uri=MIXS.VOCAB.built_environment_typ_occup_density, domain=BuiltEnvironment, range=float)

slots.built_environment_occup_samp = Slot(uri=MIXS['0000772'], name="built environment_occup_samp", curie=MIXS.curie('0000772'),
                   model_uri=MIXS.VOCAB.built_environment_occup_samp, domain=BuiltEnvironment, range=int)

slots.built_environment_occup_density_samp = Slot(uri=MIXS['0000217'], name="built environment_occup_density_samp", curie=MIXS.curie('0000217'),
                   model_uri=MIXS.VOCAB.built_environment_occup_density_samp, domain=BuiltEnvironment, range=float)

slots.built_environment_address = Slot(uri=MIXS['0000218'], name="built environment_address", curie=MIXS.curie('0000218'),
                   model_uri=MIXS.VOCAB.built_environment_address, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_adj_room = Slot(uri=MIXS['0000219'], name="built environment_adj_room", curie=MIXS.curie('0000219'),
                   model_uri=MIXS.VOCAB.built_environment_adj_room, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_aero_struc = Slot(uri=MIXS['0000773'], name="built environment_aero_struc", curie=MIXS.curie('0000773'),
                   model_uri=MIXS.VOCAB.built_environment_aero_struc, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_amount_light = Slot(uri=MIXS['0000140'], name="built environment_amount_light", curie=MIXS.curie('0000140'),
                   model_uri=MIXS.VOCAB.built_environment_amount_light, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_arch_struc = Slot(uri=MIXS['0000774'], name="built environment_arch_struc", curie=MIXS.curie('0000774'),
                   model_uri=MIXS.VOCAB.built_environment_arch_struc, domain=BuiltEnvironment, range=Optional[Union[str, "ArchStrucEnum"]])

slots.built_environment_avg_occup = Slot(uri=MIXS['0000775'], name="built environment_avg_occup", curie=MIXS.curie('0000775'),
                   model_uri=MIXS.VOCAB.built_environment_avg_occup, domain=BuiltEnvironment, range=Optional[float])

slots.built_environment_avg_dew_point = Slot(uri=MIXS['0000141'], name="built environment_avg_dew_point", curie=MIXS.curie('0000141'),
                   model_uri=MIXS.VOCAB.built_environment_avg_dew_point, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_avg_temp = Slot(uri=MIXS['0000142'], name="built environment_avg_temp", curie=MIXS.curie('0000142'),
                   model_uri=MIXS.VOCAB.built_environment_avg_temp, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_bathroom_count = Slot(uri=MIXS['0000776'], name="built environment_bathroom_count", curie=MIXS.curie('0000776'),
                   model_uri=MIXS.VOCAB.built_environment_bathroom_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_bedroom_count = Slot(uri=MIXS['0000777'], name="built environment_bedroom_count", curie=MIXS.curie('0000777'),
                   model_uri=MIXS.VOCAB.built_environment_bedroom_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_built_struc_age = Slot(uri=MIXS['0000145'], name="built environment_built_struc_age", curie=MIXS.curie('0000145'),
                   model_uri=MIXS.VOCAB.built_environment_built_struc_age, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_built_struc_set = Slot(uri=MIXS['0000778'], name="built environment_built_struc_set", curie=MIXS.curie('0000778'),
                   model_uri=MIXS.VOCAB.built_environment_built_struc_set, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_built_struc_type = Slot(uri=MIXS['0000721'], name="built environment_built_struc_type", curie=MIXS.curie('0000721'),
                   model_uri=MIXS.VOCAB.built_environment_built_struc_type, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_ceil_area = Slot(uri=MIXS['0000148'], name="built environment_ceil_area", curie=MIXS.curie('0000148'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_area, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_ceil_cond = Slot(uri=MIXS['0000779'], name="built environment_ceil_cond", curie=MIXS.curie('0000779'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_cond, domain=BuiltEnvironment, range=Optional[Union[str, "CeilCondEnum"]])

slots.built_environment_ceil_finish_mat = Slot(uri=MIXS['0000780'], name="built environment_ceil_finish_mat", curie=MIXS.curie('0000780'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_finish_mat, domain=BuiltEnvironment, range=Optional[Union[str, "CeilFinishMatEnum"]])

slots.built_environment_ceil_water_mold = Slot(uri=MIXS['0000781'], name="built environment_ceil_water_mold", curie=MIXS.curie('0000781'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_water_mold, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_ceil_struc = Slot(uri=MIXS['0000782'], name="built environment_ceil_struc", curie=MIXS.curie('0000782'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_struc, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_ceil_texture = Slot(uri=MIXS['0000783'], name="built environment_ceil_texture", curie=MIXS.curie('0000783'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_texture, domain=BuiltEnvironment, range=Optional[Union[str, "CeilTextureEnum"]])

slots.built_environment_ceil_thermal_mass = Slot(uri=MIXS['0000143'], name="built environment_ceil_thermal_mass", curie=MIXS.curie('0000143'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_thermal_mass, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_ceil_type = Slot(uri=MIXS['0000784'], name="built environment_ceil_type", curie=MIXS.curie('0000784'),
                   model_uri=MIXS.VOCAB.built_environment_ceil_type, domain=BuiltEnvironment, range=Optional[Union[str, "CeilTypeEnum"]])

slots.built_environment_cool_syst_id = Slot(uri=MIXS['0000785'], name="built environment_cool_syst_id", curie=MIXS.curie('0000785'),
                   model_uri=MIXS.VOCAB.built_environment_cool_syst_id, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_date_last_rain = Slot(uri=MIXS['0000786'], name="built environment_date_last_rain", curie=MIXS.curie('0000786'),
                   model_uri=MIXS.VOCAB.built_environment_date_last_rain, domain=BuiltEnvironment, range=Optional[Union[str, XSDDate]])

slots.built_environment_build_docs = Slot(uri=MIXS['0000787'], name="built environment_build_docs", curie=MIXS.curie('0000787'),
                   model_uri=MIXS.VOCAB.built_environment_build_docs, domain=BuiltEnvironment, range=Optional[Union[str, "BuildDocsEnum"]])

slots.built_environment_door_size = Slot(uri=MIXS['0000158'], name="built environment_door_size", curie=MIXS.curie('0000158'),
                   model_uri=MIXS.VOCAB.built_environment_door_size, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_door_cond = Slot(uri=MIXS['0000788'], name="built environment_door_cond", curie=MIXS.curie('0000788'),
                   model_uri=MIXS.VOCAB.built_environment_door_cond, domain=BuiltEnvironment, range=Optional[Union[str, "DoorCondEnum"]])

slots.built_environment_door_direct = Slot(uri=MIXS['0000789'], name="built environment_door_direct", curie=MIXS.curie('0000789'),
                   model_uri=MIXS.VOCAB.built_environment_door_direct, domain=BuiltEnvironment, range=Optional[Union[str, "DoorDirectEnum"]])

slots.built_environment_door_loc = Slot(uri=MIXS['0000790'], name="built environment_door_loc", curie=MIXS.curie('0000790'),
                   model_uri=MIXS.VOCAB.built_environment_door_loc, domain=BuiltEnvironment, range=Optional[Union[str, "DoorLocEnum"]])

slots.built_environment_door_mat = Slot(uri=MIXS['0000791'], name="built environment_door_mat", curie=MIXS.curie('0000791'),
                   model_uri=MIXS.VOCAB.built_environment_door_mat, domain=BuiltEnvironment, range=Optional[Union[str, "DoorMatEnum"]])

slots.built_environment_door_move = Slot(uri=MIXS['0000792'], name="built environment_door_move", curie=MIXS.curie('0000792'),
                   model_uri=MIXS.VOCAB.built_environment_door_move, domain=BuiltEnvironment, range=Optional[Union[str, "DoorMoveEnum"]])

slots.built_environment_door_water_mold = Slot(uri=MIXS['0000793'], name="built environment_door_water_mold", curie=MIXS.curie('0000793'),
                   model_uri=MIXS.VOCAB.built_environment_door_water_mold, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_door_type = Slot(uri=MIXS['0000794'], name="built environment_door_type", curie=MIXS.curie('0000794'),
                   model_uri=MIXS.VOCAB.built_environment_door_type, domain=BuiltEnvironment, range=Optional[Union[str, "DoorTypeEnum"]])

slots.built_environment_door_comp_type = Slot(uri=MIXS['0000795'], name="built environment_door_comp_type", curie=MIXS.curie('0000795'),
                   model_uri=MIXS.VOCAB.built_environment_door_comp_type, domain=BuiltEnvironment, range=Optional[Union[str, "DoorCompTypeEnum"]])

slots.built_environment_door_type_metal = Slot(uri=MIXS['0000796'], name="built environment_door_type_metal", curie=MIXS.curie('0000796'),
                   model_uri=MIXS.VOCAB.built_environment_door_type_metal, domain=BuiltEnvironment, range=Optional[Union[str, "DoorTypeMetalEnum"]])

slots.built_environment_door_type_wood = Slot(uri=MIXS['0000797'], name="built environment_door_type_wood", curie=MIXS.curie('0000797'),
                   model_uri=MIXS.VOCAB.built_environment_door_type_wood, domain=BuiltEnvironment, range=Optional[Union[str, "DoorTypeWoodEnum"]])

slots.built_environment_drawings = Slot(uri=MIXS['0000798'], name="built environment_drawings", curie=MIXS.curie('0000798'),
                   model_uri=MIXS.VOCAB.built_environment_drawings, domain=BuiltEnvironment, range=Optional[Union[str, "DrawingsEnum"]])

slots.built_environment_elevator = Slot(uri=MIXS['0000799'], name="built environment_elevator", curie=MIXS.curie('0000799'),
                   model_uri=MIXS.VOCAB.built_environment_elevator, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_escalator = Slot(uri=MIXS['0000800'], name="built environment_escalator", curie=MIXS.curie('0000800'),
                   model_uri=MIXS.VOCAB.built_environment_escalator, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_exp_duct = Slot(uri=MIXS['0000144'], name="built environment_exp_duct", curie=MIXS.curie('0000144'),
                   model_uri=MIXS.VOCAB.built_environment_exp_duct, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_exp_pipe = Slot(uri=MIXS['0000220'], name="built environment_exp_pipe", curie=MIXS.curie('0000220'),
                   model_uri=MIXS.VOCAB.built_environment_exp_pipe, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_ext_door = Slot(uri=MIXS['0000170'], name="built environment_ext_door", curie=MIXS.curie('0000170'),
                   model_uri=MIXS.VOCAB.built_environment_ext_door, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_fireplace_type = Slot(uri=MIXS['0000802'], name="built environment_fireplace_type", curie=MIXS.curie('0000802'),
                   model_uri=MIXS.VOCAB.built_environment_fireplace_type, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_floor_age = Slot(uri=MIXS['0000164'], name="built environment_floor_age", curie=MIXS.curie('0000164'),
                   model_uri=MIXS.VOCAB.built_environment_floor_age, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_floor_area = Slot(uri=MIXS['0000165'], name="built environment_floor_area", curie=MIXS.curie('0000165'),
                   model_uri=MIXS.VOCAB.built_environment_floor_area, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_floor_cond = Slot(uri=MIXS['0000803'], name="built environment_floor_cond", curie=MIXS.curie('0000803'),
                   model_uri=MIXS.VOCAB.built_environment_floor_cond, domain=BuiltEnvironment, range=Optional[Union[str, "FloorCondEnum"]])

slots.built_environment_floor_count = Slot(uri=MIXS['0000225'], name="built environment_floor_count", curie=MIXS.curie('0000225'),
                   model_uri=MIXS.VOCAB.built_environment_floor_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_floor_finish_mat = Slot(uri=MIXS['0000804'], name="built environment_floor_finish_mat", curie=MIXS.curie('0000804'),
                   model_uri=MIXS.VOCAB.built_environment_floor_finish_mat, domain=BuiltEnvironment, range=Optional[Union[str, "FloorFinishMatEnum"]])

slots.built_environment_floor_water_mold = Slot(uri=MIXS['0000805'], name="built environment_floor_water_mold", curie=MIXS.curie('0000805'),
                   model_uri=MIXS.VOCAB.built_environment_floor_water_mold, domain=BuiltEnvironment, range=Optional[Union[str, "FloorWaterMoldEnum"]])

slots.built_environment_floor_struc = Slot(uri=MIXS['0000806'], name="built environment_floor_struc", curie=MIXS.curie('0000806'),
                   model_uri=MIXS.VOCAB.built_environment_floor_struc, domain=BuiltEnvironment, range=Optional[Union[str, "FloorStrucEnum"]])

slots.built_environment_floor_thermal_mass = Slot(uri=MIXS['0000166'], name="built environment_floor_thermal_mass", curie=MIXS.curie('0000166'),
                   model_uri=MIXS.VOCAB.built_environment_floor_thermal_mass, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_freq_clean = Slot(uri=MIXS['0000226'], name="built environment_freq_clean", curie=MIXS.curie('0000226'),
                   model_uri=MIXS.VOCAB.built_environment_freq_clean, domain=BuiltEnvironment, range=Optional[Union[str, "FreqCleanEnum"]])

slots.built_environment_freq_cook = Slot(uri=MIXS['0000227'], name="built environment_freq_cook", curie=MIXS.curie('0000227'),
                   model_uri=MIXS.VOCAB.built_environment_freq_cook, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_furniture = Slot(uri=MIXS['0000807'], name="built environment_furniture", curie=MIXS.curie('0000807'),
                   model_uri=MIXS.VOCAB.built_environment_furniture, domain=BuiltEnvironment, range=Optional[Union[str, "FurnitureEnum"]])

slots.built_environment_gender_restroom = Slot(uri=MIXS['0000808'], name="built environment_gender_restroom", curie=MIXS.curie('0000808'),
                   model_uri=MIXS.VOCAB.built_environment_gender_restroom, domain=BuiltEnvironment, range=Optional[Union[str, "GenderRestroomEnum"]])

slots.built_environment_hall_count = Slot(uri=MIXS['0000228'], name="built environment_hall_count", curie=MIXS.curie('0000228'),
                   model_uri=MIXS.VOCAB.built_environment_hall_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_handidness = Slot(uri=MIXS['0000809'], name="built environment_handidness", curie=MIXS.curie('0000809'),
                   model_uri=MIXS.VOCAB.built_environment_handidness, domain=BuiltEnvironment, range=Optional[Union[str, "HandidnessEnum"]])

slots.built_environment_heat_deliv_loc = Slot(uri=MIXS['0000810'], name="built environment_heat_deliv_loc", curie=MIXS.curie('0000810'),
                   model_uri=MIXS.VOCAB.built_environment_heat_deliv_loc, domain=BuiltEnvironment, range=Optional[Union[str, "HeatDelivLocEnum"]])

slots.built_environment_heat_sys_deliv_meth = Slot(uri=MIXS['0000812'], name="built environment_heat_sys_deliv_meth", curie=MIXS.curie('0000812'),
                   model_uri=MIXS.VOCAB.built_environment_heat_sys_deliv_meth, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_heat_system_id = Slot(uri=MIXS['0000833'], name="built environment_heat_system_id", curie=MIXS.curie('0000833'),
                   model_uri=MIXS.VOCAB.built_environment_heat_system_id, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_height_carper_fiber = Slot(uri=MIXS['0000167'], name="built environment_height_carper_fiber", curie=MIXS.curie('0000167'),
                   model_uri=MIXS.VOCAB.built_environment_height_carper_fiber, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_inside_lux = Slot(uri=MIXS['0000168'], name="built environment_inside_lux", curie=MIXS.curie('0000168'),
                   model_uri=MIXS.VOCAB.built_environment_inside_lux, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_int_wall_cond = Slot(uri=MIXS['0000813'], name="built environment_int_wall_cond", curie=MIXS.curie('0000813'),
                   model_uri=MIXS.VOCAB.built_environment_int_wall_cond, domain=BuiltEnvironment, range=Optional[Union[str, "IntWallCondEnum"]])

slots.built_environment_last_clean = Slot(uri=MIXS['0000814'], name="built environment_last_clean", curie=MIXS.curie('0000814'),
                   model_uri=MIXS.VOCAB.built_environment_last_clean, domain=BuiltEnvironment, range=Optional[Union[str, XSDDate]])

slots.built_environment_max_occup = Slot(uri=MIXS['0000229'], name="built environment_max_occup", curie=MIXS.curie('0000229'),
                   model_uri=MIXS.VOCAB.built_environment_max_occup, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_mech_struc = Slot(uri=MIXS['0000815'], name="built environment_mech_struc", curie=MIXS.curie('0000815'),
                   model_uri=MIXS.VOCAB.built_environment_mech_struc, domain=BuiltEnvironment, range=Optional[Union[str, "MechStrucEnum"]])

slots.built_environment_number_plants = Slot(uri=MIXS['0000230'], name="built environment_number_plants", curie=MIXS.curie('0000230'),
                   model_uri=MIXS.VOCAB.built_environment_number_plants, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_number_pets = Slot(uri=MIXS['0000231'], name="built environment_number_pets", curie=MIXS.curie('0000231'),
                   model_uri=MIXS.VOCAB.built_environment_number_pets, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_number_resident = Slot(uri=MIXS['0000232'], name="built environment_number_resident", curie=MIXS.curie('0000232'),
                   model_uri=MIXS.VOCAB.built_environment_number_resident, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_occup_document = Slot(uri=MIXS['0000816'], name="built environment_occup_document", curie=MIXS.curie('0000816'),
                   model_uri=MIXS.VOCAB.built_environment_occup_document, domain=BuiltEnvironment, range=Optional[Union[str, "OccupDocumentEnum"]])

slots.built_environment_ext_wall_orient = Slot(uri=MIXS['0000817'], name="built environment_ext_wall_orient", curie=MIXS.curie('0000817'),
                   model_uri=MIXS.VOCAB.built_environment_ext_wall_orient, domain=BuiltEnvironment, range=Optional[Union[str, "ExtWallOrientEnum"]])

slots.built_environment_ext_window_orient = Slot(uri=MIXS['0000818'], name="built environment_ext_window_orient", curie=MIXS.curie('0000818'),
                   model_uri=MIXS.VOCAB.built_environment_ext_window_orient, domain=BuiltEnvironment, range=Optional[Union[str, "ExtWindowOrientEnum"]])

slots.built_environment_rel_humidity_out = Slot(uri=MIXS['0000188'], name="built environment_rel_humidity_out", curie=MIXS.curie('0000188'),
                   model_uri=MIXS.VOCAB.built_environment_rel_humidity_out, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_pres_animal_insect = Slot(uri=MIXS['0000819'], name="built environment_pres_animal_insect", curie=MIXS.curie('0000819'),
                   model_uri=MIXS.VOCAB.built_environment_pres_animal_insect, domain=BuiltEnvironment, range=Optional[str],
                   pattern=re.compile(r'^(cat|dog|rodent|snake|other);\d+$'))

slots.built_environment_quad_pos = Slot(uri=MIXS['0000820'], name="built environment_quad_pos", curie=MIXS.curie('0000820'),
                   model_uri=MIXS.VOCAB.built_environment_quad_pos, domain=BuiltEnvironment, range=Optional[Union[str, "QuadPosEnum"]])

slots.built_environment_rel_samp_loc = Slot(uri=MIXS['0000821'], name="built environment_rel_samp_loc", curie=MIXS.curie('0000821'),
                   model_uri=MIXS.VOCAB.built_environment_rel_samp_loc, domain=BuiltEnvironment, range=Optional[Union[str, "RelSampLocEnum"]])

slots.built_environment_room_air_exch_rate = Slot(uri=MIXS['0000169'], name="built environment_room_air_exch_rate", curie=MIXS.curie('0000169'),
                   model_uri=MIXS.VOCAB.built_environment_room_air_exch_rate, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_room_architec_elem = Slot(uri=MIXS['0000233'], name="built environment_room_architec_elem", curie=MIXS.curie('0000233'),
                   model_uri=MIXS.VOCAB.built_environment_room_architec_elem, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_condt = Slot(uri=MIXS['0000822'], name="built environment_room_condt", curie=MIXS.curie('0000822'),
                   model_uri=MIXS.VOCAB.built_environment_room_condt, domain=BuiltEnvironment, range=Optional[Union[str, "RoomCondtEnum"]])

slots.built_environment_room_count = Slot(uri=MIXS['0000234'], name="built environment_room_count", curie=MIXS.curie('0000234'),
                   model_uri=MIXS.VOCAB.built_environment_room_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_room_dim = Slot(uri=MIXS['0000192'], name="built environment_room_dim", curie=MIXS.curie('0000192'),
                   model_uri=MIXS.VOCAB.built_environment_room_dim, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_door_dist = Slot(uri=MIXS['0000193'], name="built environment_room_door_dist", curie=MIXS.curie('0000193'),
                   model_uri=MIXS.VOCAB.built_environment_room_door_dist, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_loc = Slot(uri=MIXS['0000823'], name="built environment_room_loc", curie=MIXS.curie('0000823'),
                   model_uri=MIXS.VOCAB.built_environment_room_loc, domain=BuiltEnvironment, range=Optional[Union[str, "RoomLocEnum"]])

slots.built_environment_room_moist_dam_hist = Slot(uri=MIXS['0000235'], name="built environment_room_moist_dam_hist", curie=MIXS.curie('0000235'),
                   model_uri=MIXS.VOCAB.built_environment_room_moist_dam_hist, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_room_net_area = Slot(uri=MIXS['0000194'], name="built environment_room_net_area", curie=MIXS.curie('0000194'),
                   model_uri=MIXS.VOCAB.built_environment_room_net_area, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_occup = Slot(uri=MIXS['0000236'], name="built environment_room_occup", curie=MIXS.curie('0000236'),
                   model_uri=MIXS.VOCAB.built_environment_room_occup, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_room_samp_pos = Slot(uri=MIXS['0000824'], name="built environment_room_samp_pos", curie=MIXS.curie('0000824'),
                   model_uri=MIXS.VOCAB.built_environment_room_samp_pos, domain=BuiltEnvironment, range=Optional[Union[str, "RoomSampPosEnum"]])

slots.built_environment_room_type = Slot(uri=MIXS['0000825'], name="built environment_room_type", curie=MIXS.curie('0000825'),
                   model_uri=MIXS.VOCAB.built_environment_room_type, domain=BuiltEnvironment, range=Optional[Union[str, "RoomTypeEnum"]])

slots.built_environment_room_vol = Slot(uri=MIXS['0000195'], name="built environment_room_vol", curie=MIXS.curie('0000195'),
                   model_uri=MIXS.VOCAB.built_environment_room_vol, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_window_count = Slot(uri=MIXS['0000237'], name="built environment_room_window_count", curie=MIXS.curie('0000237'),
                   model_uri=MIXS.VOCAB.built_environment_room_window_count, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_room_connected = Slot(uri=MIXS['0000826'], name="built environment_room_connected", curie=MIXS.curie('0000826'),
                   model_uri=MIXS.VOCAB.built_environment_room_connected, domain=BuiltEnvironment, range=Optional[Union[str, "RoomConnectedEnum"]])

slots.built_environment_room_hallway = Slot(uri=MIXS['0000238'], name="built environment_room_hallway", curie=MIXS.curie('0000238'),
                   model_uri=MIXS.VOCAB.built_environment_room_hallway, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_door_share = Slot(uri=MIXS['0000242'], name="built environment_room_door_share", curie=MIXS.curie('0000242'),
                   model_uri=MIXS.VOCAB.built_environment_room_door_share, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_room_wall_share = Slot(uri=MIXS['0000243'], name="built environment_room_wall_share", curie=MIXS.curie('0000243'),
                   model_uri=MIXS.VOCAB.built_environment_room_wall_share, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_samp_weather = Slot(uri=MIXS['0000827'], name="built environment_samp_weather", curie=MIXS.curie('0000827'),
                   model_uri=MIXS.VOCAB.built_environment_samp_weather, domain=BuiltEnvironment, range=Optional[Union[str, "SampWeatherEnum"]])

slots.built_environment_samp_floor = Slot(uri=MIXS['0000828'], name="built environment_samp_floor", curie=MIXS.curie('0000828'),
                   model_uri=MIXS.VOCAB.built_environment_samp_floor, domain=BuiltEnvironment, range=Optional[Union[str, "SampFloorEnum"]])

slots.built_environment_samp_room_id = Slot(uri=MIXS['0000244'], name="built environment_samp_room_id", curie=MIXS.curie('0000244'),
                   model_uri=MIXS.VOCAB.built_environment_samp_room_id, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_samp_time_out = Slot(uri=MIXS['0000196'], name="built environment_samp_time_out", curie=MIXS.curie('0000196'),
                   model_uri=MIXS.VOCAB.built_environment_samp_time_out, domain=BuiltEnvironment, range=Optional[float])

slots.built_environment_season = Slot(uri=MIXS['0000829'], name="built environment_season", curie=MIXS.curie('0000829'),
                   model_uri=MIXS.VOCAB.built_environment_season, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_season_use = Slot(uri=MIXS['0000830'], name="built environment_season_use", curie=MIXS.curie('0000830'),
                   model_uri=MIXS.VOCAB.built_environment_season_use, domain=BuiltEnvironment, range=Optional[Union[str, "SeasonUseEnum"]])

slots.built_environment_shading_device_cond = Slot(uri=MIXS['0000831'], name="built environment_shading_device_cond", curie=MIXS.curie('0000831'),
                   model_uri=MIXS.VOCAB.built_environment_shading_device_cond, domain=BuiltEnvironment, range=Optional[Union[str, "ShadingDeviceCondEnum"]])

slots.built_environment_shading_device_loc = Slot(uri=MIXS['0000832'], name="built environment_shading_device_loc", curie=MIXS.curie('0000832'),
                   model_uri=MIXS.VOCAB.built_environment_shading_device_loc, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_shading_device_mat = Slot(uri=MIXS['0000245'], name="built environment_shading_device_mat", curie=MIXS.curie('0000245'),
                   model_uri=MIXS.VOCAB.built_environment_shading_device_mat, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_shad_dev_water_mold = Slot(uri=MIXS['0000834'], name="built environment_shad_dev_water_mold", curie=MIXS.curie('0000834'),
                   model_uri=MIXS.VOCAB.built_environment_shad_dev_water_mold, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_shading_device_type = Slot(uri=MIXS['0000835'], name="built environment_shading_device_type", curie=MIXS.curie('0000835'),
                   model_uri=MIXS.VOCAB.built_environment_shading_device_type, domain=BuiltEnvironment, range=Optional[Union[str, "ShadingDeviceTypeEnum"]])

slots.built_environment_specific_humidity = Slot(uri=MIXS['0000214'], name="built environment_specific_humidity", curie=MIXS.curie('0000214'),
                   model_uri=MIXS.VOCAB.built_environment_specific_humidity, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_specific = Slot(uri=MIXS['0000836'], name="built environment_specific", curie=MIXS.curie('0000836'),
                   model_uri=MIXS.VOCAB.built_environment_specific, domain=BuiltEnvironment, range=Optional[Union[str, "SpecificEnum"]])

slots.built_environment_temp_out = Slot(uri=MIXS['0000197'], name="built environment_temp_out", curie=MIXS.curie('0000197'),
                   model_uri=MIXS.VOCAB.built_environment_temp_out, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_train_line = Slot(uri=MIXS['0000837'], name="built environment_train_line", curie=MIXS.curie('0000837'),
                   model_uri=MIXS.VOCAB.built_environment_train_line, domain=BuiltEnvironment, range=Optional[Union[str, "TrainLineEnum"]])

slots.built_environment_train_stat_loc = Slot(uri=MIXS['0000838'], name="built environment_train_stat_loc", curie=MIXS.curie('0000838'),
                   model_uri=MIXS.VOCAB.built_environment_train_stat_loc, domain=BuiltEnvironment, range=Optional[Union[str, "TrainStatLocEnum"]])

slots.built_environment_train_stop_loc = Slot(uri=MIXS['0000839'], name="built environment_train_stop_loc", curie=MIXS.curie('0000839'),
                   model_uri=MIXS.VOCAB.built_environment_train_stop_loc, domain=BuiltEnvironment, range=Optional[Union[str, "TrainStopLocEnum"]])

slots.built_environment_vis_media = Slot(uri=MIXS['0000840'], name="built environment_vis_media", curie=MIXS.curie('0000840'),
                   model_uri=MIXS.VOCAB.built_environment_vis_media, domain=BuiltEnvironment, range=Optional[Union[str, "VisMediaEnum"]])

slots.built_environment_wall_area = Slot(uri=MIXS['0000198'], name="built environment_wall_area", curie=MIXS.curie('0000198'),
                   model_uri=MIXS.VOCAB.built_environment_wall_area, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_wall_const_type = Slot(uri=MIXS['0000841'], name="built environment_wall_const_type", curie=MIXS.curie('0000841'),
                   model_uri=MIXS.VOCAB.built_environment_wall_const_type, domain=BuiltEnvironment, range=Optional[Union[str, "WallConstTypeEnum"]])

slots.built_environment_wall_finish_mat = Slot(uri=MIXS['0000842'], name="built environment_wall_finish_mat", curie=MIXS.curie('0000842'),
                   model_uri=MIXS.VOCAB.built_environment_wall_finish_mat, domain=BuiltEnvironment, range=Optional[Union[str, "WallFinishMatEnum"]])

slots.built_environment_wall_height = Slot(uri=MIXS['0000221'], name="built environment_wall_height", curie=MIXS.curie('0000221'),
                   model_uri=MIXS.VOCAB.built_environment_wall_height, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_wall_loc = Slot(uri=MIXS['0000843'], name="built environment_wall_loc", curie=MIXS.curie('0000843'),
                   model_uri=MIXS.VOCAB.built_environment_wall_loc, domain=BuiltEnvironment, range=Optional[Union[str, "WallLocEnum"]])

slots.built_environment_wall_water_mold = Slot(uri=MIXS['0000844'], name="built environment_wall_water_mold", curie=MIXS.curie('0000844'),
                   model_uri=MIXS.VOCAB.built_environment_wall_water_mold, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_wall_surf_treatment = Slot(uri=MIXS['0000845'], name="built environment_wall_surf_treatment", curie=MIXS.curie('0000845'),
                   model_uri=MIXS.VOCAB.built_environment_wall_surf_treatment, domain=BuiltEnvironment, range=Optional[Union[str, "WallSurfTreatmentEnum"]])

slots.built_environment_wall_texture = Slot(uri=MIXS['0000846'], name="built environment_wall_texture", curie=MIXS.curie('0000846'),
                   model_uri=MIXS.VOCAB.built_environment_wall_texture, domain=BuiltEnvironment, range=Optional[Union[str, "WallTextureEnum"]])

slots.built_environment_wall_thermal_mass = Slot(uri=MIXS['0000222'], name="built environment_wall_thermal_mass", curie=MIXS.curie('0000222'),
                   model_uri=MIXS.VOCAB.built_environment_wall_thermal_mass, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_water_feat_size = Slot(uri=MIXS['0000223'], name="built environment_water_feat_size", curie=MIXS.curie('0000223'),
                   model_uri=MIXS.VOCAB.built_environment_water_feat_size, domain=BuiltEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.built_environment_water_feat_type = Slot(uri=MIXS['0000847'], name="built environment_water_feat_type", curie=MIXS.curie('0000847'),
                   model_uri=MIXS.VOCAB.built_environment_water_feat_type, domain=BuiltEnvironment, range=Optional[Union[str, "WaterFeatTypeEnum"]])

slots.built_environment_weekday = Slot(uri=MIXS['0000848'], name="built environment_weekday", curie=MIXS.curie('0000848'),
                   model_uri=MIXS.VOCAB.built_environment_weekday, domain=BuiltEnvironment, range=Optional[Union[str, "WeekdayEnum"]])

slots.built_environment_window_size = Slot(uri=MIXS['0000224'], name="built environment_window_size", curie=MIXS.curie('0000224'),
                   model_uri=MIXS.VOCAB.built_environment_window_size, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_window_cond = Slot(uri=MIXS['0000849'], name="built environment_window_cond", curie=MIXS.curie('0000849'),
                   model_uri=MIXS.VOCAB.built_environment_window_cond, domain=BuiltEnvironment, range=Optional[Union[str, "WindowCondEnum"]])

slots.built_environment_window_cover = Slot(uri=MIXS['0000850'], name="built environment_window_cover", curie=MIXS.curie('0000850'),
                   model_uri=MIXS.VOCAB.built_environment_window_cover, domain=BuiltEnvironment, range=Optional[Union[str, "WindowCoverEnum"]])

slots.built_environment_window_horiz_pos = Slot(uri=MIXS['0000851'], name="built environment_window_horiz_pos", curie=MIXS.curie('0000851'),
                   model_uri=MIXS.VOCAB.built_environment_window_horiz_pos, domain=BuiltEnvironment, range=Optional[Union[str, "WindowHorizPosEnum"]])

slots.built_environment_window_loc = Slot(uri=MIXS['0000852'], name="built environment_window_loc", curie=MIXS.curie('0000852'),
                   model_uri=MIXS.VOCAB.built_environment_window_loc, domain=BuiltEnvironment, range=Optional[Union[str, "WindowLocEnum"]])

slots.built_environment_window_mat = Slot(uri=MIXS['0000853'], name="built environment_window_mat", curie=MIXS.curie('0000853'),
                   model_uri=MIXS.VOCAB.built_environment_window_mat, domain=BuiltEnvironment, range=Optional[Union[str, "WindowMatEnum"]])

slots.built_environment_window_open_freq = Slot(uri=MIXS['0000246'], name="built environment_window_open_freq", curie=MIXS.curie('0000246'),
                   model_uri=MIXS.VOCAB.built_environment_window_open_freq, domain=BuiltEnvironment, range=Optional[int])

slots.built_environment_window_water_mold = Slot(uri=MIXS['0000854'], name="built environment_window_water_mold", curie=MIXS.curie('0000854'),
                   model_uri=MIXS.VOCAB.built_environment_window_water_mold, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_window_status = Slot(uri=MIXS['0000855'], name="built environment_window_status", curie=MIXS.curie('0000855'),
                   model_uri=MIXS.VOCAB.built_environment_window_status, domain=BuiltEnvironment, range=Optional[str])

slots.built_environment_window_type = Slot(uri=MIXS['0000856'], name="built environment_window_type", curie=MIXS.curie('0000856'),
                   model_uri=MIXS.VOCAB.built_environment_window_type, domain=BuiltEnvironment, range=Optional[Union[str, "WindowTypeEnum"]])

slots.built_environment_window_vert_pos = Slot(uri=MIXS['0000857'], name="built environment_window_vert_pos", curie=MIXS.curie('0000857'),
                   model_uri=MIXS.VOCAB.built_environment_window_vert_pos, domain=BuiltEnvironment, range=Optional[Union[str, "WindowVertPosEnum"]])

slots.host_associated_samp_name = Slot(uri=MIXS['0001107'], name="host-associated_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.host_associated_samp_name, domain=Host-associated, range=str)

slots.host_associated_project_name = Slot(uri=MIXS['0000092'], name="host-associated_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.host_associated_project_name, domain=Host-associated, range=str)

slots.host_associated_alt = Slot(uri=MIXS['0000094'], name="host-associated_alt", curie=MIXS.curie('0000094'),
                   model_uri=MIXS.VOCAB.host_associated_alt, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_depth = Slot(uri=MIXS['0000018'], name="host-associated_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.host_associated_depth, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_elev = Slot(uri=MIXS['0000093'], name="host-associated_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.host_associated_elev, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_ances_data = Slot(uri=MIXS['0000247'], name="host-associated_ances_data", curie=MIXS.curie('0000247'),
                   model_uri=MIXS.VOCAB.host_associated_ances_data, domain=Host-associated, range=Optional[str])

slots.host_associated_biol_stat = Slot(uri=MIXS['0000858'], name="host-associated_biol_stat", curie=MIXS.curie('0000858'),
                   model_uri=MIXS.VOCAB.host_associated_biol_stat, domain=Host-associated, range=Optional[Union[str, "BiolStatEnum"]])

slots.host_associated_genetic_mod = Slot(uri=MIXS['0000859'], name="host-associated_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.host_associated_genetic_mod, domain=Host-associated, range=Optional[str])

slots.host_associated_host_common_name = Slot(uri=MIXS['0000248'], name="host-associated_host_common_name", curie=MIXS.curie('0000248'),
                   model_uri=MIXS.VOCAB.host_associated_host_common_name, domain=Host-associated, range=Optional[str])

slots.host_associated_samp_capt_status = Slot(uri=MIXS['0000860'], name="host-associated_samp_capt_status", curie=MIXS.curie('0000860'),
                   model_uri=MIXS.VOCAB.host_associated_samp_capt_status, domain=Host-associated, range=Optional[Union[str, "SampCaptStatusEnum"]])

slots.host_associated_samp_dis_stage = Slot(uri=MIXS['0000249'], name="host-associated_samp_dis_stage", curie=MIXS.curie('0000249'),
                   model_uri=MIXS.VOCAB.host_associated_samp_dis_stage, domain=Host-associated, range=Optional[Union[str, "SampDisStageEnum"]])

slots.host_associated_host_taxid = Slot(uri=MIXS['0000250'], name="host-associated_host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.host_associated_host_taxid, domain=Host-associated, range=Optional[str])

slots.host_associated_host_subject_id = Slot(uri=MIXS['0000861'], name="host-associated_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.host_associated_host_subject_id, domain=Host-associated, range=Optional[str])

slots.host_associated_host_age = Slot(uri=MIXS['0000255'], name="host-associated_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.host_associated_host_age, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_life_stage = Slot(uri=MIXS['0000251'], name="host-associated_host_life_stage", curie=MIXS.curie('0000251'),
                   model_uri=MIXS.VOCAB.host_associated_host_life_stage, domain=Host-associated, range=Optional[str])

slots.host_associated_host_sex = Slot(uri=MIXS['0000811'], name="host-associated_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.host_associated_host_sex, domain=Host-associated, range=Optional[Union[str, "HostSexEnum"]])

slots.host_associated_host_disease_stat = Slot(uri=MIXS['0000031'], name="host-associated_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.host_associated_host_disease_stat, domain=Host-associated, range=Optional[str])

slots.host_associated_chem_administration = Slot(uri=MIXS['0000751'], name="host-associated_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.host_associated_chem_administration, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_host_body_habitat = Slot(uri=MIXS['0000866'], name="host-associated_host_body_habitat", curie=MIXS.curie('0000866'),
                   model_uri=MIXS.VOCAB.host_associated_host_body_habitat, domain=Host-associated, range=Optional[str])

slots.host_associated_host_body_site = Slot(uri=MIXS['0000867'], name="host-associated_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.host_associated_host_body_site, domain=Host-associated, range=Optional[str])

slots.host_associated_host_body_product = Slot(uri=MIXS['0000888'], name="host-associated_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.host_associated_host_body_product, domain=Host-associated, range=Optional[str])

slots.host_associated_host_tot_mass = Slot(uri=MIXS['0000263'], name="host-associated_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.host_associated_host_tot_mass, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_height = Slot(uri=MIXS['0000264'], name="host-associated_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.host_associated_host_height, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_length = Slot(uri=MIXS['0000256'], name="host-associated_host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.host_associated_host_length, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_diet = Slot(uri=MIXS['0000869'], name="host-associated_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.host_associated_host_diet, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_host_last_meal = Slot(uri=MIXS['0000870'], name="host-associated_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.host_associated_host_last_meal, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_host_growth_cond = Slot(uri=MIXS['0000871'], name="host-associated_host_growth_cond", curie=MIXS.curie('0000871'),
                   model_uri=MIXS.VOCAB.host_associated_host_growth_cond, domain=Host-associated, range=Optional[str])

slots.host_associated_host_substrate = Slot(uri=MIXS['0000252'], name="host-associated_host_substrate", curie=MIXS.curie('0000252'),
                   model_uri=MIXS.VOCAB.host_associated_host_substrate, domain=Host-associated, range=Optional[str])

slots.host_associated_host_family_relation = Slot(uri=MIXS['0000872'], name="host-associated_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.host_associated_host_family_relation, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_host_subspecf_genlin = Slot(uri=MIXS['0001318'], name="host-associated_host_subspecf_genlin", curie=MIXS.curie('0001318'),
                   model_uri=MIXS.VOCAB.host_associated_host_subspecf_genlin, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_host_genotype = Slot(uri=MIXS['0000365'], name="host-associated_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.host_associated_host_genotype, domain=Host-associated, range=Optional[str])

slots.host_associated_host_phenotype = Slot(uri=MIXS['0000874'], name="host-associated_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.host_associated_host_phenotype, domain=Host-associated, range=Optional[str])

slots.host_associated_host_body_temp = Slot(uri=MIXS['0000274'], name="host-associated_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.host_associated_host_body_temp, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_dry_mass = Slot(uri=MIXS['0000257'], name="host-associated_host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.host_associated_host_dry_mass, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_blood_press_diast = Slot(uri=MIXS['0000258'], name="host-associated_blood_press_diast", curie=MIXS.curie('0000258'),
                   model_uri=MIXS.VOCAB.host_associated_blood_press_diast, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_blood_press_syst = Slot(uri=MIXS['0000259'], name="host-associated_blood_press_syst", curie=MIXS.curie('0000259'),
                   model_uri=MIXS.VOCAB.host_associated_blood_press_syst, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_host_color = Slot(uri=MIXS['0000260'], name="host-associated_host_color", curie=MIXS.curie('0000260'),
                   model_uri=MIXS.VOCAB.host_associated_host_color, domain=Host-associated, range=Optional[str])

slots.host_associated_host_shape = Slot(uri=MIXS['0000261'], name="host-associated_host_shape", curie=MIXS.curie('0000261'),
                   model_uri=MIXS.VOCAB.host_associated_host_shape, domain=Host-associated, range=Optional[str])

slots.host_associated_gravidity = Slot(uri=MIXS['0000875'], name="host-associated_gravidity", curie=MIXS.curie('0000875'),
                   model_uri=MIXS.VOCAB.host_associated_gravidity, domain=Host-associated, range=Optional[str])

slots.host_associated_perturbation = Slot(uri=MIXS['0000754'], name="host-associated_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.host_associated_perturbation, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_salinity = Slot(uri=MIXS['0000183'], name="host-associated_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.host_associated_salinity, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="host-associated_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.host_associated_oxy_stat_samp, domain=Host-associated, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.host_associated_temp = Slot(uri=MIXS['0000113'], name="host-associated_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.host_associated_temp, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_organism_count = Slot(uri=MIXS['0000103'], name="host-associated_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.host_associated_organism_count, domain=Host-associated, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.host_associated_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="host-associated_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.host_associated_samp_vol_we_dna_ext, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_samp_store_temp = Slot(uri=MIXS['0000110'], name="host-associated_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.host_associated_samp_store_temp, domain=Host-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.host_associated_samp_store_dur = Slot(uri=MIXS['0000116'], name="host-associated_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.host_associated_samp_store_dur, domain=Host-associated, range=Optional[str])

slots.host_associated_samp_store_loc = Slot(uri=MIXS['0000755'], name="host-associated_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.host_associated_samp_store_loc, domain=Host-associated, range=Optional[str])

slots.host_associated_host_symbiont = Slot(uri=MIXS['0001298'], name="host-associated_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.host_associated_host_symbiont, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.host_associated_misc_param = Slot(uri=MIXS['0000752'], name="host-associated_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.host_associated_misc_param, domain=Host-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_samp_name = Slot(uri=MIXS['0001107'], name="human-associated_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.human_associated_samp_name, domain=Human-associated, range=str)

slots.human_associated_project_name = Slot(uri=MIXS['0000092'], name="human-associated_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.human_associated_project_name, domain=Human-associated, range=str)

slots.human_associated_host_subject_id = Slot(uri=MIXS['0000861'], name="human-associated_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.human_associated_host_subject_id, domain=Human-associated, range=Optional[str])

slots.human_associated_host_age = Slot(uri=MIXS['0000255'], name="human-associated_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.human_associated_host_age, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_host_sex = Slot(uri=MIXS['0000811'], name="human-associated_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.human_associated_host_sex, domain=Human-associated, range=Optional[Union[str, "HostSexEnum"]])

slots.human_associated_host_disease_stat = Slot(uri=MIXS['0000031'], name="human-associated_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.human_associated_host_disease_stat, domain=Human-associated, range=Optional[str])

slots.human_associated_ihmc_medication_code = Slot(uri=MIXS['0000884'], name="human-associated_ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.human_associated_ihmc_medication_code, domain=Human-associated, range=Optional[Union[int, List[int]]])

slots.human_associated_chem_administration = Slot(uri=MIXS['0000751'], name="human-associated_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.human_associated_chem_administration, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_body_site = Slot(uri=MIXS['0000867'], name="human-associated_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.human_associated_host_body_site, domain=Human-associated, range=Optional[str])

slots.human_associated_host_body_product = Slot(uri=MIXS['0000888'], name="human-associated_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.human_associated_host_body_product, domain=Human-associated, range=Optional[str])

slots.human_associated_host_tot_mass = Slot(uri=MIXS['0000263'], name="human-associated_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.human_associated_host_tot_mass, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_host_height = Slot(uri=MIXS['0000264'], name="human-associated_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.human_associated_host_height, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_host_diet = Slot(uri=MIXS['0000869'], name="human-associated_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.human_associated_host_diet, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_last_meal = Slot(uri=MIXS['0000870'], name="human-associated_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.human_associated_host_last_meal, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_family_relation = Slot(uri=MIXS['0000872'], name="human-associated_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.human_associated_host_family_relation, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_genotype = Slot(uri=MIXS['0000365'], name="human-associated_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.human_associated_host_genotype, domain=Human-associated, range=Optional[str])

slots.human_associated_host_phenotype = Slot(uri=MIXS['0000874'], name="human-associated_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.human_associated_host_phenotype, domain=Human-associated, range=Optional[str])

slots.human_associated_host_body_temp = Slot(uri=MIXS['0000274'], name="human-associated_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.human_associated_host_body_temp, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_smoker = Slot(uri=MIXS['0000262'], name="human-associated_smoker", curie=MIXS.curie('0000262'),
                   model_uri=MIXS.VOCAB.human_associated_smoker, domain=Human-associated, range=Optional[str])

slots.human_associated_host_hiv_stat = Slot(uri=MIXS['0000265'], name="human-associated_host_hiv_stat", curie=MIXS.curie('0000265'),
                   model_uri=MIXS.VOCAB.human_associated_host_hiv_stat, domain=Human-associated, range=Optional[str])

slots.human_associated_drug_usage = Slot(uri=MIXS['0000894'], name="human-associated_drug_usage", curie=MIXS.curie('0000894'),
                   model_uri=MIXS.VOCAB.human_associated_drug_usage, domain=Human-associated, range=Optional[Union[Union[str, "DrugUsageEnum"], List[Union[str, "DrugUsageEnum"]]]])

slots.human_associated_host_body_mass_index = Slot(uri=MIXS['0000317'], name="human-associated_host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.human_associated_host_body_mass_index, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_diet_last_six_month = Slot(uri=MIXS['0000266'], name="human-associated_diet_last_six_month", curie=MIXS.curie('0000266'),
                   model_uri=MIXS.VOCAB.human_associated_diet_last_six_month, domain=Human-associated, range=Optional[str])

slots.human_associated_weight_loss_3_month = Slot(uri=MIXS['0000295'], name="human-associated_weight_loss_3_month", curie=MIXS.curie('0000295'),
                   model_uri=MIXS.VOCAB.human_associated_weight_loss_3_month, domain=Human-associated, range=Optional[str])

slots.human_associated_ethnicity = Slot(uri=MIXS['0000895'], name="human-associated_ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.human_associated_ethnicity, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_occupation = Slot(uri=MIXS['0000896'], name="human-associated_host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.human_associated_host_occupation, domain=Human-associated, range=Optional[int])

slots.human_associated_pet_farm_animal = Slot(uri=MIXS['0000267'], name="human-associated_pet_farm_animal", curie=MIXS.curie('0000267'),
                   model_uri=MIXS.VOCAB.human_associated_pet_farm_animal, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_travel_out_six_month = Slot(uri=MIXS['0000268'], name="human-associated_travel_out_six_month", curie=MIXS.curie('0000268'),
                   model_uri=MIXS.VOCAB.human_associated_travel_out_six_month, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_twin_sibling = Slot(uri=MIXS['0000326'], name="human-associated_twin_sibling", curie=MIXS.curie('0000326'),
                   model_uri=MIXS.VOCAB.human_associated_twin_sibling, domain=Human-associated, range=Optional[str])

slots.human_associated_medic_hist_perform = Slot(uri=MIXS['0000897'], name="human-associated_medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.human_associated_medic_hist_perform, domain=Human-associated, range=Optional[str])

slots.human_associated_study_complt_stat = Slot(uri=MIXS['0000898'], name="human-associated_study_complt_stat", curie=MIXS.curie('0000898'),
                   model_uri=MIXS.VOCAB.human_associated_study_complt_stat, domain=Human-associated, range=Optional[Union[str, "StudyCompltStatEnum"]])

slots.human_associated_pulmonary_disord = Slot(uri=MIXS['0000269'], name="human-associated_pulmonary_disord", curie=MIXS.curie('0000269'),
                   model_uri=MIXS.VOCAB.human_associated_pulmonary_disord, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_nose_throat_disord = Slot(uri=MIXS['0000270'], name="human-associated_nose_throat_disord", curie=MIXS.curie('0000270'),
                   model_uri=MIXS.VOCAB.human_associated_nose_throat_disord, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_blood_blood_disord = Slot(uri=MIXS['0000271'], name="human-associated_blood_blood_disord", curie=MIXS.curie('0000271'),
                   model_uri=MIXS.VOCAB.human_associated_blood_blood_disord, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_host_pulse = Slot(uri=MIXS['0000333'], name="human-associated_host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.human_associated_host_pulse, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_gestation_state = Slot(uri=MIXS['0000272'], name="human-associated_gestation_state", curie=MIXS.curie('0000272'),
                   model_uri=MIXS.VOCAB.human_associated_gestation_state, domain=Human-associated, range=Optional[str])

slots.human_associated_maternal_health_stat = Slot(uri=MIXS['0000273'], name="human-associated_maternal_health_stat", curie=MIXS.curie('0000273'),
                   model_uri=MIXS.VOCAB.human_associated_maternal_health_stat, domain=Human-associated, range=Optional[str])

slots.human_associated_foetal_health_stat = Slot(uri=MIXS['0000275'], name="human-associated_foetal_health_stat", curie=MIXS.curie('0000275'),
                   model_uri=MIXS.VOCAB.human_associated_foetal_health_stat, domain=Human-associated, range=Optional[str])

slots.human_associated_amniotic_fluid_color = Slot(uri=MIXS['0000276'], name="human-associated_amniotic_fluid_color", curie=MIXS.curie('0000276'),
                   model_uri=MIXS.VOCAB.human_associated_amniotic_fluid_color, domain=Human-associated, range=Optional[str])

slots.human_associated_kidney_disord = Slot(uri=MIXS['0000277'], name="human-associated_kidney_disord", curie=MIXS.curie('0000277'),
                   model_uri=MIXS.VOCAB.human_associated_kidney_disord, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_urogenit_tract_disor = Slot(uri=MIXS['0000278'], name="human-associated_urogenit_tract_disor", curie=MIXS.curie('0000278'),
                   model_uri=MIXS.VOCAB.human_associated_urogenit_tract_disor, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_urine_collect_meth = Slot(uri=MIXS['0000899'], name="human-associated_urine_collect_meth", curie=MIXS.curie('0000899'),
                   model_uri=MIXS.VOCAB.human_associated_urine_collect_meth, domain=Human-associated, range=Optional[str])

slots.human_associated_perturbation = Slot(uri=MIXS['0000754'], name="human-associated_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.human_associated_perturbation, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_salinity = Slot(uri=MIXS['0000183'], name="human-associated_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.human_associated_salinity, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="human-associated_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.human_associated_oxy_stat_samp, domain=Human-associated, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.human_associated_temp = Slot(uri=MIXS['0000113'], name="human-associated_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.human_associated_temp, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_organism_count = Slot(uri=MIXS['0000103'], name="human-associated_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.human_associated_organism_count, domain=Human-associated, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.human_associated_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="human-associated_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.human_associated_samp_vol_we_dna_ext, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_samp_store_temp = Slot(uri=MIXS['0000110'], name="human-associated_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.human_associated_samp_store_temp, domain=Human-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.human_associated_samp_store_dur = Slot(uri=MIXS['0000116'], name="human-associated_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.human_associated_samp_store_dur, domain=Human-associated, range=Optional[str])

slots.human_associated_host_symbiont = Slot(uri=MIXS['0001298'], name="human-associated_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.human_associated_host_symbiont, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_associated_samp_store_loc = Slot(uri=MIXS['0000755'], name="human-associated_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.human_associated_samp_store_loc, domain=Human-associated, range=Optional[str])

slots.human_associated_misc_param = Slot(uri=MIXS['0000752'], name="human-associated_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.human_associated_misc_param, domain=Human-associated, range=Optional[Union[str, List[str]]])

slots.human_gut_samp_name = Slot(uri=MIXS['0001107'], name="human-gut_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.human_gut_samp_name, domain=Human-gut, range=str)

slots.human_gut_project_name = Slot(uri=MIXS['0000092'], name="human-gut_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.human_gut_project_name, domain=Human-gut, range=str)

slots.human_gut_gastrointest_disord = Slot(uri=MIXS['0000280'], name="human-gut_gastrointest_disord", curie=MIXS.curie('0000280'),
                   model_uri=MIXS.VOCAB.human_gut_gastrointest_disord, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_liver_disord = Slot(uri=MIXS['0000282'], name="human-gut_liver_disord", curie=MIXS.curie('0000282'),
                   model_uri=MIXS.VOCAB.human_gut_liver_disord, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_special_diet = Slot(uri=MIXS['0000905'], name="human-gut_special_diet", curie=MIXS.curie('0000905'),
                   model_uri=MIXS.VOCAB.human_gut_special_diet, domain=Human-gut, range=Optional[Union[Union[str, "SpecialDietEnum"], List[Union[str, "SpecialDietEnum"]]]])

slots.human_gut_host_subject_id = Slot(uri=MIXS['0000861'], name="human-gut_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.human_gut_host_subject_id, domain=Human-gut, range=Optional[str])

slots.human_gut_host_age = Slot(uri=MIXS['0000255'], name="human-gut_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.human_gut_host_age, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_host_sex = Slot(uri=MIXS['0000811'], name="human-gut_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.human_gut_host_sex, domain=Human-gut, range=Optional[Union[str, "HostSexEnum"]])

slots.human_gut_host_disease_stat = Slot(uri=MIXS['0000031'], name="human-gut_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.human_gut_host_disease_stat, domain=Human-gut, range=Optional[str])

slots.human_gut_ihmc_medication_code = Slot(uri=MIXS['0000884'], name="human-gut_ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.human_gut_ihmc_medication_code, domain=Human-gut, range=Optional[Union[int, List[int]]])

slots.human_gut_chem_administration = Slot(uri=MIXS['0000751'], name="human-gut_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.human_gut_chem_administration, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_host_body_site = Slot(uri=MIXS['0000867'], name="human-gut_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.human_gut_host_body_site, domain=Human-gut, range=Optional[str])

slots.human_gut_host_body_product = Slot(uri=MIXS['0000888'], name="human-gut_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.human_gut_host_body_product, domain=Human-gut, range=Optional[str])

slots.human_gut_host_tot_mass = Slot(uri=MIXS['0000263'], name="human-gut_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.human_gut_host_tot_mass, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_host_height = Slot(uri=MIXS['0000264'], name="human-gut_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.human_gut_host_height, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_host_diet = Slot(uri=MIXS['0000869'], name="human-gut_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.human_gut_host_diet, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_host_last_meal = Slot(uri=MIXS['0000870'], name="human-gut_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.human_gut_host_last_meal, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_host_family_relation = Slot(uri=MIXS['0000872'], name="human-gut_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.human_gut_host_family_relation, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_host_genotype = Slot(uri=MIXS['0000365'], name="human-gut_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.human_gut_host_genotype, domain=Human-gut, range=Optional[str])

slots.human_gut_host_phenotype = Slot(uri=MIXS['0000874'], name="human-gut_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.human_gut_host_phenotype, domain=Human-gut, range=Optional[str])

slots.human_gut_host_body_temp = Slot(uri=MIXS['0000274'], name="human-gut_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.human_gut_host_body_temp, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_host_body_mass_index = Slot(uri=MIXS['0000317'], name="human-gut_host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.human_gut_host_body_mass_index, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_ethnicity = Slot(uri=MIXS['0000895'], name="human-gut_ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.human_gut_ethnicity, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_host_occupation = Slot(uri=MIXS['0000896'], name="human-gut_host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.human_gut_host_occupation, domain=Human-gut, range=Optional[int])

slots.human_gut_medic_hist_perform = Slot(uri=MIXS['0000897'], name="human-gut_medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.human_gut_medic_hist_perform, domain=Human-gut, range=Optional[str])

slots.human_gut_host_pulse = Slot(uri=MIXS['0000333'], name="human-gut_host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.human_gut_host_pulse, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_perturbation = Slot(uri=MIXS['0000754'], name="human-gut_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.human_gut_perturbation, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_salinity = Slot(uri=MIXS['0000183'], name="human-gut_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.human_gut_salinity, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="human-gut_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.human_gut_oxy_stat_samp, domain=Human-gut, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.human_gut_temp = Slot(uri=MIXS['0000113'], name="human-gut_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.human_gut_temp, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_organism_count = Slot(uri=MIXS['0000103'], name="human-gut_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.human_gut_organism_count, domain=Human-gut, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.human_gut_samp_store_temp = Slot(uri=MIXS['0000110'], name="human-gut_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.human_gut_samp_store_temp, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="human-gut_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.human_gut_samp_vol_we_dna_ext, domain=Human-gut, range=Optional[Union[dict, "QuantityValue"]])

slots.human_gut_samp_store_dur = Slot(uri=MIXS['0000116'], name="human-gut_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.human_gut_samp_store_dur, domain=Human-gut, range=Optional[str])

slots.human_gut_host_symbiont = Slot(uri=MIXS['0001298'], name="human-gut_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.human_gut_host_symbiont, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_gut_samp_store_loc = Slot(uri=MIXS['0000755'], name="human-gut_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.human_gut_samp_store_loc, domain=Human-gut, range=Optional[str])

slots.human_gut_misc_param = Slot(uri=MIXS['0000752'], name="human-gut_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.human_gut_misc_param, domain=Human-gut, range=Optional[Union[str, List[str]]])

slots.human_oral_samp_name = Slot(uri=MIXS['0001107'], name="human-oral_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.human_oral_samp_name, domain=Human-oral, range=str)

slots.human_oral_project_name = Slot(uri=MIXS['0000092'], name="human-oral_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.human_oral_project_name, domain=Human-oral, range=str)

slots.human_oral_nose_throat_disord = Slot(uri=MIXS['0000270'], name="human-oral_nose_throat_disord", curie=MIXS.curie('0000270'),
                   model_uri=MIXS.VOCAB.human_oral_nose_throat_disord, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_time_last_toothbrush = Slot(uri=MIXS['0000924'], name="human-oral_time_last_toothbrush", curie=MIXS.curie('0000924'),
                   model_uri=MIXS.VOCAB.human_oral_time_last_toothbrush, domain=Human-oral, range=Optional[str])

slots.human_oral_host_subject_id = Slot(uri=MIXS['0000861'], name="human-oral_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.human_oral_host_subject_id, domain=Human-oral, range=Optional[str])

slots.human_oral_host_age = Slot(uri=MIXS['0000255'], name="human-oral_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.human_oral_host_age, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_host_sex = Slot(uri=MIXS['0000811'], name="human-oral_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.human_oral_host_sex, domain=Human-oral, range=Optional[Union[str, "HostSexEnum"]])

slots.human_oral_host_disease_stat = Slot(uri=MIXS['0000031'], name="human-oral_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.human_oral_host_disease_stat, domain=Human-oral, range=Optional[str])

slots.human_oral_ihmc_medication_code = Slot(uri=MIXS['0000884'], name="human-oral_ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.human_oral_ihmc_medication_code, domain=Human-oral, range=Optional[Union[int, List[int]]])

slots.human_oral_chem_administration = Slot(uri=MIXS['0000751'], name="human-oral_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.human_oral_chem_administration, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_host_body_site = Slot(uri=MIXS['0000867'], name="human-oral_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.human_oral_host_body_site, domain=Human-oral, range=Optional[str])

slots.human_oral_host_body_product = Slot(uri=MIXS['0000888'], name="human-oral_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.human_oral_host_body_product, domain=Human-oral, range=Optional[str])

slots.human_oral_host_tot_mass = Slot(uri=MIXS['0000263'], name="human-oral_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.human_oral_host_tot_mass, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_host_height = Slot(uri=MIXS['0000264'], name="human-oral_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.human_oral_host_height, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_host_diet = Slot(uri=MIXS['0000869'], name="human-oral_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.human_oral_host_diet, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_host_last_meal = Slot(uri=MIXS['0000870'], name="human-oral_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.human_oral_host_last_meal, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_host_family_relation = Slot(uri=MIXS['0000872'], name="human-oral_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.human_oral_host_family_relation, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_host_genotype = Slot(uri=MIXS['0000365'], name="human-oral_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.human_oral_host_genotype, domain=Human-oral, range=Optional[str])

slots.human_oral_host_phenotype = Slot(uri=MIXS['0000874'], name="human-oral_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.human_oral_host_phenotype, domain=Human-oral, range=Optional[str])

slots.human_oral_host_body_temp = Slot(uri=MIXS['0000274'], name="human-oral_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.human_oral_host_body_temp, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_host_body_mass_index = Slot(uri=MIXS['0000317'], name="human-oral_host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.human_oral_host_body_mass_index, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_ethnicity = Slot(uri=MIXS['0000895'], name="human-oral_ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.human_oral_ethnicity, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_host_occupation = Slot(uri=MIXS['0000896'], name="human-oral_host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.human_oral_host_occupation, domain=Human-oral, range=Optional[int])

slots.human_oral_medic_hist_perform = Slot(uri=MIXS['0000897'], name="human-oral_medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.human_oral_medic_hist_perform, domain=Human-oral, range=Optional[str])

slots.human_oral_host_pulse = Slot(uri=MIXS['0000333'], name="human-oral_host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.human_oral_host_pulse, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_perturbation = Slot(uri=MIXS['0000754'], name="human-oral_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.human_oral_perturbation, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_salinity = Slot(uri=MIXS['0000183'], name="human-oral_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.human_oral_salinity, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="human-oral_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.human_oral_oxy_stat_samp, domain=Human-oral, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.human_oral_temp = Slot(uri=MIXS['0000113'], name="human-oral_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.human_oral_temp, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_organism_count = Slot(uri=MIXS['0000103'], name="human-oral_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.human_oral_organism_count, domain=Human-oral, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.human_oral_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="human-oral_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.human_oral_samp_vol_we_dna_ext, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_samp_store_temp = Slot(uri=MIXS['0000110'], name="human-oral_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.human_oral_samp_store_temp, domain=Human-oral, range=Optional[Union[dict, "QuantityValue"]])

slots.human_oral_samp_store_dur = Slot(uri=MIXS['0000116'], name="human-oral_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.human_oral_samp_store_dur, domain=Human-oral, range=Optional[str])

slots.human_oral_host_symbiont = Slot(uri=MIXS['0001298'], name="human-oral_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.human_oral_host_symbiont, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_oral_samp_store_loc = Slot(uri=MIXS['0000755'], name="human-oral_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.human_oral_samp_store_loc, domain=Human-oral, range=Optional[str])

slots.human_oral_misc_param = Slot(uri=MIXS['0000752'], name="human-oral_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.human_oral_misc_param, domain=Human-oral, range=Optional[Union[str, List[str]]])

slots.human_skin_samp_name = Slot(uri=MIXS['0001107'], name="human-skin_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.human_skin_samp_name, domain=Human-skin, range=str)

slots.human_skin_project_name = Slot(uri=MIXS['0000092'], name="human-skin_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.human_skin_project_name, domain=Human-skin, range=str)

slots.human_skin_dermatology_disord = Slot(uri=MIXS['0000284'], name="human-skin_dermatology_disord", curie=MIXS.curie('0000284'),
                   model_uri=MIXS.VOCAB.human_skin_dermatology_disord, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_time_since_last_wash = Slot(uri=MIXS['0000943'], name="human-skin_time_since_last_wash", curie=MIXS.curie('0000943'),
                   model_uri=MIXS.VOCAB.human_skin_time_since_last_wash, domain=Human-skin, range=Optional[str])

slots.human_skin_dominant_hand = Slot(uri=MIXS['0000944'], name="human-skin_dominant_hand", curie=MIXS.curie('0000944'),
                   model_uri=MIXS.VOCAB.human_skin_dominant_hand, domain=Human-skin, range=Optional[Union[str, "DominantHandEnum"]])

slots.human_skin_host_subject_id = Slot(uri=MIXS['0000861'], name="human-skin_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.human_skin_host_subject_id, domain=Human-skin, range=Optional[str])

slots.human_skin_host_age = Slot(uri=MIXS['0000255'], name="human-skin_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.human_skin_host_age, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_host_sex = Slot(uri=MIXS['0000811'], name="human-skin_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.human_skin_host_sex, domain=Human-skin, range=Optional[Union[str, "HostSexEnum"]])

slots.human_skin_host_disease_stat = Slot(uri=MIXS['0000031'], name="human-skin_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.human_skin_host_disease_stat, domain=Human-skin, range=Optional[str])

slots.human_skin_ihmc_medication_code = Slot(uri=MIXS['0000884'], name="human-skin_ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.human_skin_ihmc_medication_code, domain=Human-skin, range=Optional[Union[int, List[int]]])

slots.human_skin_chem_administration = Slot(uri=MIXS['0000751'], name="human-skin_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.human_skin_chem_administration, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_host_body_site = Slot(uri=MIXS['0000867'], name="human-skin_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.human_skin_host_body_site, domain=Human-skin, range=Optional[str])

slots.human_skin_host_body_product = Slot(uri=MIXS['0000888'], name="human-skin_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.human_skin_host_body_product, domain=Human-skin, range=Optional[str])

slots.human_skin_host_tot_mass = Slot(uri=MIXS['0000263'], name="human-skin_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.human_skin_host_tot_mass, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_host_height = Slot(uri=MIXS['0000264'], name="human-skin_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.human_skin_host_height, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_host_diet = Slot(uri=MIXS['0000869'], name="human-skin_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.human_skin_host_diet, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_host_last_meal = Slot(uri=MIXS['0000870'], name="human-skin_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.human_skin_host_last_meal, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_host_family_relation = Slot(uri=MIXS['0000872'], name="human-skin_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.human_skin_host_family_relation, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_host_genotype = Slot(uri=MIXS['0000365'], name="human-skin_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.human_skin_host_genotype, domain=Human-skin, range=Optional[str])

slots.human_skin_host_phenotype = Slot(uri=MIXS['0000874'], name="human-skin_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.human_skin_host_phenotype, domain=Human-skin, range=Optional[str])

slots.human_skin_host_body_temp = Slot(uri=MIXS['0000274'], name="human-skin_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.human_skin_host_body_temp, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_host_body_mass_index = Slot(uri=MIXS['0000317'], name="human-skin_host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.human_skin_host_body_mass_index, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_ethnicity = Slot(uri=MIXS['0000895'], name="human-skin_ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.human_skin_ethnicity, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_host_occupation = Slot(uri=MIXS['0000896'], name="human-skin_host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.human_skin_host_occupation, domain=Human-skin, range=Optional[int])

slots.human_skin_medic_hist_perform = Slot(uri=MIXS['0000897'], name="human-skin_medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.human_skin_medic_hist_perform, domain=Human-skin, range=Optional[str])

slots.human_skin_host_pulse = Slot(uri=MIXS['0000333'], name="human-skin_host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.human_skin_host_pulse, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_perturbation = Slot(uri=MIXS['0000754'], name="human-skin_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.human_skin_perturbation, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_salinity = Slot(uri=MIXS['0000183'], name="human-skin_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.human_skin_salinity, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="human-skin_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.human_skin_oxy_stat_samp, domain=Human-skin, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.human_skin_temp = Slot(uri=MIXS['0000113'], name="human-skin_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.human_skin_temp, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_organism_count = Slot(uri=MIXS['0000103'], name="human-skin_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.human_skin_organism_count, domain=Human-skin, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.human_skin_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="human-skin_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.human_skin_samp_vol_we_dna_ext, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_samp_store_temp = Slot(uri=MIXS['0000110'], name="human-skin_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.human_skin_samp_store_temp, domain=Human-skin, range=Optional[Union[dict, "QuantityValue"]])

slots.human_skin_samp_store_dur = Slot(uri=MIXS['0000116'], name="human-skin_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.human_skin_samp_store_dur, domain=Human-skin, range=Optional[str])

slots.human_skin_samp_store_loc = Slot(uri=MIXS['0000755'], name="human-skin_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.human_skin_samp_store_loc, domain=Human-skin, range=Optional[str])

slots.human_skin_host_symbiont = Slot(uri=MIXS['0001298'], name="human-skin_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.human_skin_host_symbiont, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_skin_misc_param = Slot(uri=MIXS['0000752'], name="human-skin_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.human_skin_misc_param, domain=Human-skin, range=Optional[Union[str, List[str]]])

slots.human_vaginal_samp_name = Slot(uri=MIXS['0001107'], name="human-vaginal_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_name, domain=Human-vaginal, range=str)

slots.human_vaginal_project_name = Slot(uri=MIXS['0000092'], name="human-vaginal_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.human_vaginal_project_name, domain=Human-vaginal, range=str)

slots.human_vaginal_menarche = Slot(uri=MIXS['0000965'], name="human-vaginal_menarche", curie=MIXS.curie('0000965'),
                   model_uri=MIXS.VOCAB.human_vaginal_menarche, domain=Human-vaginal, range=Optional[Union[str, XSDDate]])

slots.human_vaginal_sexual_act = Slot(uri=MIXS['0000285'], name="human-vaginal_sexual_act", curie=MIXS.curie('0000285'),
                   model_uri=MIXS.VOCAB.human_vaginal_sexual_act, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_pregnancy = Slot(uri=MIXS['0000966'], name="human-vaginal_pregnancy", curie=MIXS.curie('0000966'),
                   model_uri=MIXS.VOCAB.human_vaginal_pregnancy, domain=Human-vaginal, range=Optional[Union[str, XSDDate]])

slots.human_vaginal_douche = Slot(uri=MIXS['0000967'], name="human-vaginal_douche", curie=MIXS.curie('0000967'),
                   model_uri=MIXS.VOCAB.human_vaginal_douche, domain=Human-vaginal, range=Optional[Union[str, XSDDate]])

slots.human_vaginal_birth_control = Slot(uri=MIXS['0000286'], name="human-vaginal_birth_control", curie=MIXS.curie('0000286'),
                   model_uri=MIXS.VOCAB.human_vaginal_birth_control, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_menopause = Slot(uri=MIXS['0000968'], name="human-vaginal_menopause", curie=MIXS.curie('0000968'),
                   model_uri=MIXS.VOCAB.human_vaginal_menopause, domain=Human-vaginal, range=Optional[Union[str, XSDDate]])

slots.human_vaginal_hrt = Slot(uri=MIXS['0000969'], name="human-vaginal_hrt", curie=MIXS.curie('0000969'),
                   model_uri=MIXS.VOCAB.human_vaginal_hrt, domain=Human-vaginal, range=Optional[Union[str, XSDDate]])

slots.human_vaginal_hysterectomy = Slot(uri=MIXS['0000287'], name="human-vaginal_hysterectomy", curie=MIXS.curie('0000287'),
                   model_uri=MIXS.VOCAB.human_vaginal_hysterectomy, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_gynecologic_disord = Slot(uri=MIXS['0000288'], name="human-vaginal_gynecologic_disord", curie=MIXS.curie('0000288'),
                   model_uri=MIXS.VOCAB.human_vaginal_gynecologic_disord, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_urogenit_disord = Slot(uri=MIXS['0000289'], name="human-vaginal_urogenit_disord", curie=MIXS.curie('0000289'),
                   model_uri=MIXS.VOCAB.human_vaginal_urogenit_disord, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_subject_id = Slot(uri=MIXS['0000861'], name="human-vaginal_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_subject_id, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_age = Slot(uri=MIXS['0000255'], name="human-vaginal_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_age, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_host_sex = Slot(uri=MIXS['0000811'], name="human-vaginal_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_sex, domain=Human-vaginal, range=Optional[Union[str, "HostSexEnum"]])

slots.human_vaginal_host_disease_stat = Slot(uri=MIXS['0000031'], name="human-vaginal_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_disease_stat, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_ihmc_medication_code = Slot(uri=MIXS['0000884'], name="human-vaginal_ihmc_medication_code", curie=MIXS.curie('0000884'),
                   model_uri=MIXS.VOCAB.human_vaginal_ihmc_medication_code, domain=Human-vaginal, range=Optional[Union[int, List[int]]])

slots.human_vaginal_chem_administration = Slot(uri=MIXS['0000751'], name="human-vaginal_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.human_vaginal_chem_administration, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_body_site = Slot(uri=MIXS['0000867'], name="human-vaginal_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_body_site, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_body_product = Slot(uri=MIXS['0000888'], name="human-vaginal_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_body_product, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_tot_mass = Slot(uri=MIXS['0000263'], name="human-vaginal_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_tot_mass, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_host_height = Slot(uri=MIXS['0000264'], name="human-vaginal_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_height, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_host_diet = Slot(uri=MIXS['0000869'], name="human-vaginal_host_diet", curie=MIXS.curie('0000869'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_diet, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_last_meal = Slot(uri=MIXS['0000870'], name="human-vaginal_host_last_meal", curie=MIXS.curie('0000870'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_last_meal, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_family_relation = Slot(uri=MIXS['0000872'], name="human-vaginal_host_family_relation", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_family_relation, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_genotype = Slot(uri=MIXS['0000365'], name="human-vaginal_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_genotype, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_phenotype = Slot(uri=MIXS['0000874'], name="human-vaginal_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_phenotype, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_body_temp = Slot(uri=MIXS['0000274'], name="human-vaginal_host_body_temp", curie=MIXS.curie('0000274'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_body_temp, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_host_body_mass_index = Slot(uri=MIXS['0000317'], name="human-vaginal_host_body_mass_index", curie=MIXS.curie('0000317'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_body_mass_index, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_ethnicity = Slot(uri=MIXS['0000895'], name="human-vaginal_ethnicity", curie=MIXS.curie('0000895'),
                   model_uri=MIXS.VOCAB.human_vaginal_ethnicity, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_host_occupation = Slot(uri=MIXS['0000896'], name="human-vaginal_host_occupation", curie=MIXS.curie('0000896'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_occupation, domain=Human-vaginal, range=Optional[int])

slots.human_vaginal_medic_hist_perform = Slot(uri=MIXS['0000897'], name="human-vaginal_medic_hist_perform", curie=MIXS.curie('0000897'),
                   model_uri=MIXS.VOCAB.human_vaginal_medic_hist_perform, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_pulse = Slot(uri=MIXS['0000333'], name="human-vaginal_host_pulse", curie=MIXS.curie('0000333'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_pulse, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_perturbation = Slot(uri=MIXS['0000754'], name="human-vaginal_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.human_vaginal_perturbation, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_samp_salinity = Slot(uri=MIXS['0000109'], name="human-vaginal_samp_salinity", curie=MIXS.curie('0000109'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_salinity, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_salinity = Slot(uri=MIXS['0000183'], name="human-vaginal_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.human_vaginal_salinity, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="human-vaginal_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.human_vaginal_oxy_stat_samp, domain=Human-vaginal, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.human_vaginal_temp = Slot(uri=MIXS['0000113'], name="human-vaginal_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.human_vaginal_temp, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_organism_count = Slot(uri=MIXS['0000103'], name="human-vaginal_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.human_vaginal_organism_count, domain=Human-vaginal, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.human_vaginal_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="human-vaginal_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_vol_we_dna_ext, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_samp_store_temp = Slot(uri=MIXS['0000110'], name="human-vaginal_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_store_temp, domain=Human-vaginal, range=Optional[Union[dict, "QuantityValue"]])

slots.human_vaginal_samp_store_loc = Slot(uri=MIXS['0000755'], name="human-vaginal_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_store_loc, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_samp_store_dur = Slot(uri=MIXS['0000116'], name="human-vaginal_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.human_vaginal_samp_store_dur, domain=Human-vaginal, range=Optional[str])

slots.human_vaginal_host_symbiont = Slot(uri=MIXS['0001298'], name="human-vaginal_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.human_vaginal_host_symbiont, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.human_vaginal_misc_param = Slot(uri=MIXS['0000752'], name="human-vaginal_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.human_vaginal_misc_param, domain=Human-vaginal, range=Optional[Union[str, List[str]]])

slots.hydrocarbon_resources_cores_samp_name = Slot(uri=MIXS['0001107'], name="hydrocarbon resources-cores_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_name, domain=HydrocarbonResources-cores, range=str)

slots.hydrocarbon_resources_cores_project_name = Slot(uri=MIXS['0000092'], name="hydrocarbon resources-cores_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_project_name, domain=HydrocarbonResources-cores, range=str)

slots.hydrocarbon_resources_cores_hcr = Slot(uri=MIXS['0000988'], name="hydrocarbon resources-cores_hcr", curie=MIXS.curie('0000988'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hcr, domain=HydrocarbonResources-cores, range=Union[str, "HcrEnum"])

slots.hydrocarbon_resources_cores_hc_produced = Slot(uri=MIXS['0000989'], name="hydrocarbon resources-cores_hc_produced", curie=MIXS.curie('0000989'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hc_produced, domain=HydrocarbonResources-cores, range=Union[str, "HcProducedEnum"])

slots.hydrocarbon_resources_cores_basin = Slot(uri=MIXS['0000290'], name="hydrocarbon resources-cores_basin", curie=MIXS.curie('0000290'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_basin, domain=HydrocarbonResources-cores, range=str)

slots.hydrocarbon_resources_cores_field = Slot(uri=MIXS['0000291'], name="hydrocarbon resources-cores_field", curie=MIXS.curie('0000291'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_field, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_reservoir = Slot(uri=MIXS['0000303'], name="hydrocarbon resources-cores_reservoir", curie=MIXS.curie('0000303'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_reservoir, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_hcr_temp = Slot(uri=MIXS['0000393'], name="hydrocarbon resources-cores_hcr_temp", curie=MIXS.curie('0000393'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hcr_temp, domain=HydrocarbonResources-cores, range=str)

slots.hydrocarbon_resources_cores_tvdss_of_hcr_temp = Slot(uri=MIXS['0000394'], name="hydrocarbon resources-cores_tvdss_of_hcr_temp", curie=MIXS.curie('0000394'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tvdss_of_hcr_temp, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_hcr_pressure = Slot(uri=MIXS['0000395'], name="hydrocarbon resources-cores_hcr_pressure", curie=MIXS.curie('0000395'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hcr_pressure, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_tvdss_of_hcr_press = Slot(uri=MIXS['0000397'], name="hydrocarbon resources-cores_tvdss_of_hcr_press", curie=MIXS.curie('0000397'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tvdss_of_hcr_press, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_permeability = Slot(uri=MIXS['0000404'], name="hydrocarbon resources-cores_permeability", curie=MIXS.curie('0000404'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_permeability, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_porosity = Slot(uri=MIXS['0000211'], name="hydrocarbon resources-cores_porosity", curie=MIXS.curie('0000211'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_porosity, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_lithology = Slot(uri=MIXS['0000990'], name="hydrocarbon resources-cores_lithology", curie=MIXS.curie('0000990'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_lithology, domain=HydrocarbonResources-cores, range=Optional[Union[str, "LithologyEnum"]])

slots.hydrocarbon_resources_cores_depos_env = Slot(uri=MIXS['0000992'], name="hydrocarbon resources-cores_depos_env", curie=MIXS.curie('0000992'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_depos_env, domain=HydrocarbonResources-cores, range=Optional[Union[str, "DeposEnvEnum"]])

slots.hydrocarbon_resources_cores_hcr_geol_age = Slot(uri=MIXS['0000993'], name="hydrocarbon resources-cores_hcr_geol_age", curie=MIXS.curie('0000993'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hcr_geol_age, domain=HydrocarbonResources-cores, range=Optional[Union[str, "HcrGeolAgeEnum"]])

slots.hydrocarbon_resources_cores_owc_tvdss = Slot(uri=MIXS['0000405'], name="hydrocarbon resources-cores_owc_tvdss", curie=MIXS.curie('0000405'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_owc_tvdss, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_hcr_fw_salinity = Slot(uri=MIXS['0000406'], name="hydrocarbon resources-cores_hcr_fw_salinity", curie=MIXS.curie('0000406'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_hcr_fw_salinity, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_sulfate_fw = Slot(uri=MIXS['0000407'], name="hydrocarbon resources-cores_sulfate_fw", curie=MIXS.curie('0000407'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sulfate_fw, domain=HydrocarbonResources-cores, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_cores_vfa_fw = Slot(uri=MIXS['0000408'], name="hydrocarbon resources-cores_vfa_fw", curie=MIXS.curie('0000408'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_vfa_fw, domain=HydrocarbonResources-cores, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_cores_sr_kerog_type = Slot(uri=MIXS['0000994'], name="hydrocarbon resources-cores_sr_kerog_type", curie=MIXS.curie('0000994'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sr_kerog_type, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SrKerogTypeEnum"]])

slots.hydrocarbon_resources_cores_sr_lithology = Slot(uri=MIXS['0000995'], name="hydrocarbon resources-cores_sr_lithology", curie=MIXS.curie('0000995'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sr_lithology, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SrLithologyEnum"]])

slots.hydrocarbon_resources_cores_sr_dep_env = Slot(uri=MIXS['0000996'], name="hydrocarbon resources-cores_sr_dep_env", curie=MIXS.curie('0000996'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sr_dep_env, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SrDepEnvEnum"]])

slots.hydrocarbon_resources_cores_sr_geol_age = Slot(uri=MIXS['0000997'], name="hydrocarbon resources-cores_sr_geol_age", curie=MIXS.curie('0000997'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sr_geol_age, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SrGeolAgeEnum"]])

slots.hydrocarbon_resources_cores_samp_well_name = Slot(uri=MIXS['0000296'], name="hydrocarbon resources-cores_samp_well_name", curie=MIXS.curie('0000296'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_well_name, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_win = Slot(uri=MIXS['0000297'], name="hydrocarbon resources-cores_win", curie=MIXS.curie('0000297'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_win, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_samp_type = Slot(uri=MIXS['0000998'], name="hydrocarbon resources-cores_samp_type", curie=MIXS.curie('0000998'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_type, domain=HydrocarbonResources-cores, range=str)

slots.hydrocarbon_resources_cores_samp_subtype = Slot(uri=MIXS['0000999'], name="hydrocarbon resources-cores_samp_subtype", curie=MIXS.curie('0000999'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_subtype, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SampSubtypeEnum"]])

slots.hydrocarbon_resources_cores_temp = Slot(uri=MIXS['0000113'], name="hydrocarbon resources-cores_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_temp, domain=HydrocarbonResources-cores, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_cores_pressure = Slot(uri=MIXS['0000412'], name="hydrocarbon resources-cores_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_pressure, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_samp_tvdss = Slot(uri=MIXS['0000409'], name="hydrocarbon resources-cores_samp_tvdss", curie=MIXS.curie('0000409'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_tvdss, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_samp_md = Slot(uri=MIXS['0000413'], name="hydrocarbon resources-cores_samp_md", curie=MIXS.curie('0000413'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_md, domain=HydrocarbonResources-cores, range=Optional[Union[str, "SampMdEnum"]])

slots.hydrocarbon_resources_cores_elev = Slot(uri=MIXS['0000093'], name="hydrocarbon resources-cores_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_elev, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="hydrocarbon resources-cores_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_oxy_stat_samp, domain=HydrocarbonResources-cores, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.hydrocarbon_resources_cores_samp_transport_cond = Slot(uri=MIXS['0000410'], name="hydrocarbon resources-cores_samp_transport_cond", curie=MIXS.curie('0000410'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_transport_cond, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_samp_store_temp = Slot(uri=MIXS['0000110'], name="hydrocarbon resources-cores_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_store_temp, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_samp_store_dur = Slot(uri=MIXS['0000116'], name="hydrocarbon resources-cores_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_store_dur, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_samp_store_loc = Slot(uri=MIXS['0000755'], name="hydrocarbon resources-cores_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_store_loc, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="hydrocarbon resources-cores_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_samp_vol_we_dna_ext, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_organism_count = Slot(uri=MIXS['0000103'], name="hydrocarbon resources-cores_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_organism_count, domain=HydrocarbonResources-cores, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.hydrocarbon_resources_cores_org_count_qpcr_info = Slot(uri=MIXS['0000099'], name="hydrocarbon resources-cores_org_count_qpcr_info", curie=MIXS.curie('0000099'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_org_count_qpcr_info, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_ph = Slot(uri=MIXS['0001001'], name="hydrocarbon resources-cores_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_ph, domain=HydrocarbonResources-cores, range=Optional[float])

slots.hydrocarbon_resources_cores_salinity = Slot(uri=MIXS['0000183'], name="hydrocarbon resources-cores_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_salinity, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_alkalinity = Slot(uri=MIXS['0000421'], name="hydrocarbon resources-cores_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_alkalinity, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_alkalinity_method = Slot(uri=MIXS['0000298'], name="hydrocarbon resources-cores_alkalinity_method", curie=MIXS.curie('0000298'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_alkalinity_method, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_sulfate = Slot(uri=MIXS['0000423'], name="hydrocarbon resources-cores_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sulfate, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_sulfide = Slot(uri=MIXS['0000424'], name="hydrocarbon resources-cores_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sulfide, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_tot_sulfur = Slot(uri=MIXS['0000419'], name="hydrocarbon resources-cores_tot_sulfur", curie=MIXS.curie('0000419'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tot_sulfur, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_nitrate = Slot(uri=MIXS['0000425'], name="hydrocarbon resources-cores_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_nitrate, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_nitrite = Slot(uri=MIXS['0000426'], name="hydrocarbon resources-cores_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_nitrite, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_ammonium = Slot(uri=MIXS['0000427'], name="hydrocarbon resources-cores_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_ammonium, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_tot_nitro = Slot(uri=MIXS['0000102'], name="hydrocarbon resources-cores_tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tot_nitro, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_iron = Slot(uri=MIXS['0000139'], name="hydrocarbon resources-cores_diss_iron", curie=MIXS.curie('0000139'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_iron, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_sodium = Slot(uri=MIXS['0000428'], name="hydrocarbon resources-cores_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_sodium, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_chloride = Slot(uri=MIXS['0000429'], name="hydrocarbon resources-cores_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_chloride, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_potassium = Slot(uri=MIXS['0000430'], name="hydrocarbon resources-cores_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_potassium, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_magnesium = Slot(uri=MIXS['0000431'], name="hydrocarbon resources-cores_magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_magnesium, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_calcium = Slot(uri=MIXS['0000432'], name="hydrocarbon resources-cores_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_calcium, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_tot_iron = Slot(uri=MIXS['0000105'], name="hydrocarbon resources-cores_tot_iron", curie=MIXS.curie('0000105'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tot_iron, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_org_carb = Slot(uri=MIXS['0000433'], name="hydrocarbon resources-cores_diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_org_carb, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="hydrocarbon resources-cores_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_inorg_carb, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_inorg_phosp = Slot(uri=MIXS['0000106'], name="hydrocarbon resources-cores_diss_inorg_phosp", curie=MIXS.curie('0000106'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_inorg_phosp, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_tot_phosp = Slot(uri=MIXS['0000117'], name="hydrocarbon resources-cores_tot_phosp", curie=MIXS.curie('0000117'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tot_phosp, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_suspend_solids = Slot(uri=MIXS['0000150'], name="hydrocarbon resources-cores_suspend_solids", curie=MIXS.curie('0000150'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_suspend_solids, domain=HydrocarbonResources-cores, range=Optional[Union[str, List[str]]])

slots.hydrocarbon_resources_cores_density = Slot(uri=MIXS['0000435'], name="hydrocarbon resources-cores_density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_density, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="hydrocarbon resources-cores_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_carb_dioxide, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_diss_oxygen_fluid = Slot(uri=MIXS['0000438'], name="hydrocarbon resources-cores_diss_oxygen_fluid", curie=MIXS.curie('0000438'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_diss_oxygen_fluid, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_vfa = Slot(uri=MIXS['0000152'], name="hydrocarbon resources-cores_vfa", curie=MIXS.curie('0000152'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_vfa, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_benzene = Slot(uri=MIXS['0000153'], name="hydrocarbon resources-cores_benzene", curie=MIXS.curie('0000153'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_benzene, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_toluene = Slot(uri=MIXS['0000154'], name="hydrocarbon resources-cores_toluene", curie=MIXS.curie('0000154'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_toluene, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_ethylbenzene = Slot(uri=MIXS['0000155'], name="hydrocarbon resources-cores_ethylbenzene", curie=MIXS.curie('0000155'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_ethylbenzene, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_xylene = Slot(uri=MIXS['0000156'], name="hydrocarbon resources-cores_xylene", curie=MIXS.curie('0000156'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_xylene, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_api = Slot(uri=MIXS['0000157'], name="hydrocarbon resources-cores_api", curie=MIXS.curie('0000157'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_api, domain=HydrocarbonResources-cores, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_cores_tan = Slot(uri=MIXS['0000120'], name="hydrocarbon resources-cores_tan", curie=MIXS.curie('0000120'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_tan, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_viscosity = Slot(uri=MIXS['0000126'], name="hydrocarbon resources-cores_viscosity", curie=MIXS.curie('0000126'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_viscosity, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_pour_point = Slot(uri=MIXS['0000127'], name="hydrocarbon resources-cores_pour_point", curie=MIXS.curie('0000127'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_pour_point, domain=HydrocarbonResources-cores, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_cores_saturates_pc = Slot(uri=MIXS['0000131'], name="hydrocarbon resources-cores_saturates_pc", curie=MIXS.curie('0000131'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_saturates_pc, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_aromatics_pc = Slot(uri=MIXS['0000133'], name="hydrocarbon resources-cores_aromatics_pc", curie=MIXS.curie('0000133'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_aromatics_pc, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_resins_pc = Slot(uri=MIXS['0000134'], name="hydrocarbon resources-cores_resins_pc", curie=MIXS.curie('0000134'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_resins_pc, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_asphaltenes_pc = Slot(uri=MIXS['0000135'], name="hydrocarbon resources-cores_asphaltenes_pc", curie=MIXS.curie('0000135'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_asphaltenes_pc, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_cores_misc_param = Slot(uri=MIXS['0000752'], name="hydrocarbon resources-cores_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_misc_param, domain=HydrocarbonResources-cores, range=Optional[Union[str, List[str]]])

slots.hydrocarbon_resources_cores_additional_info = Slot(uri=MIXS['0000300'], name="hydrocarbon resources-cores_additional_info", curie=MIXS.curie('0000300'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_cores_additional_info, domain=HydrocarbonResources-cores, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_name = Slot(uri=MIXS['0001107'], name="hydrocarbon resources-fluids_swabs_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_name, domain=HydrocarbonResources-fluidsSwabs, range=str)

slots.hydrocarbon_resources_fluids_swabs_project_name = Slot(uri=MIXS['0000092'], name="hydrocarbon resources-fluids_swabs_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_project_name, domain=HydrocarbonResources-fluidsSwabs, range=str)

slots.hydrocarbon_resources_fluids_swabs_hcr = Slot(uri=MIXS['0000988'], name="hydrocarbon resources-fluids_swabs_hcr", curie=MIXS.curie('0000988'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hcr, domain=HydrocarbonResources-fluidsSwabs, range=Union[str, "HcrEnum"])

slots.hydrocarbon_resources_fluids_swabs_hc_produced = Slot(uri=MIXS['0000989'], name="hydrocarbon resources-fluids_swabs_hc_produced", curie=MIXS.curie('0000989'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hc_produced, domain=HydrocarbonResources-fluidsSwabs, range=Union[str, "HcProducedEnum"])

slots.hydrocarbon_resources_fluids_swabs_basin = Slot(uri=MIXS['0000290'], name="hydrocarbon resources-fluids_swabs_basin", curie=MIXS.curie('0000290'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_basin, domain=HydrocarbonResources-fluidsSwabs, range=str)

slots.hydrocarbon_resources_fluids_swabs_field = Slot(uri=MIXS['0000291'], name="hydrocarbon resources-fluids_swabs_field", curie=MIXS.curie('0000291'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_field, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_reservoir = Slot(uri=MIXS['0000303'], name="hydrocarbon resources-fluids_swabs_reservoir", curie=MIXS.curie('0000303'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_reservoir, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_hcr_temp = Slot(uri=MIXS['0000393'], name="hydrocarbon resources-fluids_swabs_hcr_temp", curie=MIXS.curie('0000393'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hcr_temp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_tvdss_of_hcr_temp = Slot(uri=MIXS['0000394'], name="hydrocarbon resources-fluids_swabs_tvdss_of_hcr_temp", curie=MIXS.curie('0000394'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tvdss_of_hcr_temp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_hcr_pressure = Slot(uri=MIXS['0000395'], name="hydrocarbon resources-fluids_swabs_hcr_pressure", curie=MIXS.curie('0000395'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hcr_pressure, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_tvdss_of_hcr_press = Slot(uri=MIXS['0000397'], name="hydrocarbon resources-fluids_swabs_tvdss_of_hcr_press", curie=MIXS.curie('0000397'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tvdss_of_hcr_press, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_lithology = Slot(uri=MIXS['0000990'], name="hydrocarbon resources-fluids_swabs_lithology", curie=MIXS.curie('0000990'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_lithology, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, "LithologyEnum"]])

slots.hydrocarbon_resources_fluids_swabs_depos_env = Slot(uri=MIXS['0000992'], name="hydrocarbon resources-fluids_swabs_depos_env", curie=MIXS.curie('0000992'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_depos_env, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, "DeposEnvEnum"]])

slots.hydrocarbon_resources_fluids_swabs_hcr_geol_age = Slot(uri=MIXS['0000993'], name="hydrocarbon resources-fluids_swabs_hcr_geol_age", curie=MIXS.curie('0000993'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hcr_geol_age, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, "HcrGeolAgeEnum"]])

slots.hydrocarbon_resources_fluids_swabs_hcr_fw_salinity = Slot(uri=MIXS['0000406'], name="hydrocarbon resources-fluids_swabs_hcr_fw_salinity", curie=MIXS.curie('0000406'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_hcr_fw_salinity, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_sulfate_fw = Slot(uri=MIXS['0000407'], name="hydrocarbon resources-fluids_swabs_sulfate_fw", curie=MIXS.curie('0000407'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_sulfate_fw, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_vfa_fw = Slot(uri=MIXS['0000408'], name="hydrocarbon resources-fluids_swabs_vfa_fw", curie=MIXS.curie('0000408'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_vfa_fw, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_prod_start_date = Slot(uri=MIXS['0001008'], name="hydrocarbon resources-fluids_swabs_prod_start_date", curie=MIXS.curie('0001008'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_prod_start_date, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, XSDDate]])

slots.hydrocarbon_resources_fluids_swabs_prod_rate = Slot(uri=MIXS['0000452'], name="hydrocarbon resources-fluids_swabs_prod_rate", curie=MIXS.curie('0000452'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_prod_rate, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_water_prod_rate = Slot(uri=MIXS['0000453'], name="hydrocarbon resources-fluids_swabs_water_prod_rate", curie=MIXS.curie('0000453'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_water_prod_rate, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_water_cut = Slot(uri=MIXS['0000454'], name="hydrocarbon resources-fluids_swabs_water_cut", curie=MIXS.curie('0000454'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_water_cut, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_iwf = Slot(uri=MIXS['0000455'], name="hydrocarbon resources-fluids_swabs_iwf", curie=MIXS.curie('0000455'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_iwf, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_add_recov_method = Slot(uri=MIXS['0001009'], name="hydrocarbon resources-fluids_swabs_add_recov_method", curie=MIXS.curie('0001009'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_add_recov_method, domain=HydrocarbonResources-fluidsSwabs, range=str,
                   pattern=re.compile(r'^(Water Injection|Dump Flood|Gas Injection|Wag Immiscible Injection|Polymer Addition|Surfactant Addition|Not Applicable|other);([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$'))

slots.hydrocarbon_resources_fluids_swabs_iw_bt_date_well = Slot(uri=MIXS['0001010'], name="hydrocarbon resources-fluids_swabs_iw_bt_date_well", curie=MIXS.curie('0001010'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_iw_bt_date_well, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, XSDDate]])

slots.hydrocarbon_resources_fluids_swabs_biocide = Slot(uri=MIXS['0001011'], name="hydrocarbon resources-fluids_swabs_biocide", curie=MIXS.curie('0001011'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_biocide, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_biocide_admin_method = Slot(uri=MIXS['0000456'], name="hydrocarbon resources-fluids_swabs_biocide_admin_method", curie=MIXS.curie('0000456'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_biocide_admin_method, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_chem_treatment = Slot(uri=MIXS['0001012'], name="hydrocarbon resources-fluids_swabs_chem_treatment", curie=MIXS.curie('0001012'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_chem_treatment, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_chem_treat_method = Slot(uri=MIXS['0000457'], name="hydrocarbon resources-fluids_swabs_chem_treat_method", curie=MIXS.curie('0000457'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_chem_treat_method, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_loc_corr_rate = Slot(uri=MIXS['0000136'], name="hydrocarbon resources-fluids_swabs_samp_loc_corr_rate", curie=MIXS.curie('0000136'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_loc_corr_rate, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_well_name = Slot(uri=MIXS['0000296'], name="hydrocarbon resources-fluids_swabs_samp_well_name", curie=MIXS.curie('0000296'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_well_name, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_win = Slot(uri=MIXS['0000297'], name="hydrocarbon resources-fluids_swabs_win", curie=MIXS.curie('0000297'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_win, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_type = Slot(uri=MIXS['0000998'], name="hydrocarbon resources-fluids_swabs_samp_type", curie=MIXS.curie('0000998'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_type, domain=HydrocarbonResources-fluidsSwabs, range=str)

slots.hydrocarbon_resources_fluids_swabs_samp_subtype = Slot(uri=MIXS['0000999'], name="hydrocarbon resources-fluids_swabs_samp_subtype", curie=MIXS.curie('0000999'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_subtype, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, "SampSubtypeEnum"]])

slots.hydrocarbon_resources_fluids_swabs_samp_collect_point = Slot(uri=MIXS['0001015'], name="hydrocarbon resources-fluids_swabs_samp_collect_point", curie=MIXS.curie('0001015'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_collect_point, domain=HydrocarbonResources-fluidsSwabs, range=Union[str, "SampCollectPointEnum"])

slots.hydrocarbon_resources_fluids_swabs_temp = Slot(uri=MIXS['0000113'], name="hydrocarbon resources-fluids_swabs_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_temp, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_pressure = Slot(uri=MIXS['0000412'], name="hydrocarbon resources-fluids_swabs_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_pressure, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="hydrocarbon resources-fluids_swabs_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_oxy_stat_samp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.hydrocarbon_resources_fluids_swabs_samp_preserv = Slot(uri=MIXS['0000463'], name="hydrocarbon resources-fluids_swabs_samp_preserv", curie=MIXS.curie('0000463'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_preserv, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_transport_cond = Slot(uri=MIXS['0000410'], name="hydrocarbon resources-fluids_swabs_samp_transport_cond", curie=MIXS.curie('0000410'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_transport_cond, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_store_temp = Slot(uri=MIXS['0000110'], name="hydrocarbon resources-fluids_swabs_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_store_temp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_samp_store_dur = Slot(uri=MIXS['0000116'], name="hydrocarbon resources-fluids_swabs_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_store_dur, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_store_loc = Slot(uri=MIXS['0000755'], name="hydrocarbon resources-fluids_swabs_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_store_loc, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="hydrocarbon resources-fluids_swabs_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_samp_vol_we_dna_ext, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_organism_count = Slot(uri=MIXS['0000103'], name="hydrocarbon resources-fluids_swabs_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_organism_count, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.hydrocarbon_resources_fluids_swabs_org_count_qpcr_info = Slot(uri=MIXS['0000099'], name="hydrocarbon resources-fluids_swabs_org_count_qpcr_info", curie=MIXS.curie('0000099'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_org_count_qpcr_info, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_ph = Slot(uri=MIXS['0001001'], name="hydrocarbon resources-fluids_swabs_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_ph, domain=HydrocarbonResources-fluidsSwabs, range=Optional[float])

slots.hydrocarbon_resources_fluids_swabs_salinity = Slot(uri=MIXS['0000183'], name="hydrocarbon resources-fluids_swabs_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_salinity, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_alkalinity = Slot(uri=MIXS['0000421'], name="hydrocarbon resources-fluids_swabs_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_alkalinity, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_alkalinity_method = Slot(uri=MIXS['0000298'], name="hydrocarbon resources-fluids_swabs_alkalinity_method", curie=MIXS.curie('0000298'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_alkalinity_method, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_sulfate = Slot(uri=MIXS['0000423'], name="hydrocarbon resources-fluids_swabs_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_sulfate, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_sulfide = Slot(uri=MIXS['0000424'], name="hydrocarbon resources-fluids_swabs_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_sulfide, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_tot_sulfur = Slot(uri=MIXS['0000419'], name="hydrocarbon resources-fluids_swabs_tot_sulfur", curie=MIXS.curie('0000419'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tot_sulfur, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_nitrate = Slot(uri=MIXS['0000425'], name="hydrocarbon resources-fluids_swabs_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_nitrate, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_nitrite = Slot(uri=MIXS['0000426'], name="hydrocarbon resources-fluids_swabs_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_nitrite, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_ammonium = Slot(uri=MIXS['0000427'], name="hydrocarbon resources-fluids_swabs_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_ammonium, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_tot_nitro = Slot(uri=MIXS['0000102'], name="hydrocarbon resources-fluids_swabs_tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tot_nitro, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_iron = Slot(uri=MIXS['0000139'], name="hydrocarbon resources-fluids_swabs_diss_iron", curie=MIXS.curie('0000139'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_iron, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_sodium = Slot(uri=MIXS['0000428'], name="hydrocarbon resources-fluids_swabs_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_sodium, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_chloride = Slot(uri=MIXS['0000429'], name="hydrocarbon resources-fluids_swabs_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_chloride, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_potassium = Slot(uri=MIXS['0000430'], name="hydrocarbon resources-fluids_swabs_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_potassium, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_magnesium = Slot(uri=MIXS['0000431'], name="hydrocarbon resources-fluids_swabs_magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_magnesium, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_calcium = Slot(uri=MIXS['0000432'], name="hydrocarbon resources-fluids_swabs_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_calcium, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_tot_iron = Slot(uri=MIXS['0000105'], name="hydrocarbon resources-fluids_swabs_tot_iron", curie=MIXS.curie('0000105'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tot_iron, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_org_carb = Slot(uri=MIXS['0000433'], name="hydrocarbon resources-fluids_swabs_diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_org_carb, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="hydrocarbon resources-fluids_swabs_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_inorg_carb, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_inorg_phosp = Slot(uri=MIXS['0000106'], name="hydrocarbon resources-fluids_swabs_diss_inorg_phosp", curie=MIXS.curie('0000106'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_inorg_phosp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_tot_phosp = Slot(uri=MIXS['0000117'], name="hydrocarbon resources-fluids_swabs_tot_phosp", curie=MIXS.curie('0000117'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tot_phosp, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_suspend_solids = Slot(uri=MIXS['0000150'], name="hydrocarbon resources-fluids_swabs_suspend_solids", curie=MIXS.curie('0000150'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_suspend_solids, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, List[str]]])

slots.hydrocarbon_resources_fluids_swabs_density = Slot(uri=MIXS['0000435'], name="hydrocarbon resources-fluids_swabs_density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_density, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="hydrocarbon resources-fluids_swabs_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_carb_dioxide, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_diss_oxygen_fluid = Slot(uri=MIXS['0000438'], name="hydrocarbon resources-fluids_swabs_diss_oxygen_fluid", curie=MIXS.curie('0000438'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_diss_oxygen_fluid, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_vfa = Slot(uri=MIXS['0000152'], name="hydrocarbon resources-fluids_swabs_vfa", curie=MIXS.curie('0000152'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_vfa, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_benzene = Slot(uri=MIXS['0000153'], name="hydrocarbon resources-fluids_swabs_benzene", curie=MIXS.curie('0000153'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_benzene, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_toluene = Slot(uri=MIXS['0000154'], name="hydrocarbon resources-fluids_swabs_toluene", curie=MIXS.curie('0000154'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_toluene, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_ethylbenzene = Slot(uri=MIXS['0000155'], name="hydrocarbon resources-fluids_swabs_ethylbenzene", curie=MIXS.curie('0000155'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_ethylbenzene, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_xylene = Slot(uri=MIXS['0000156'], name="hydrocarbon resources-fluids_swabs_xylene", curie=MIXS.curie('0000156'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_xylene, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_api = Slot(uri=MIXS['0000157'], name="hydrocarbon resources-fluids_swabs_api", curie=MIXS.curie('0000157'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_api, domain=HydrocarbonResources-fluidsSwabs, range=Union[dict, "QuantityValue"])

slots.hydrocarbon_resources_fluids_swabs_tan = Slot(uri=MIXS['0000120'], name="hydrocarbon resources-fluids_swabs_tan", curie=MIXS.curie('0000120'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_tan, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_viscosity = Slot(uri=MIXS['0000126'], name="hydrocarbon resources-fluids_swabs_viscosity", curie=MIXS.curie('0000126'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_viscosity, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_pour_point = Slot(uri=MIXS['0000127'], name="hydrocarbon resources-fluids_swabs_pour_point", curie=MIXS.curie('0000127'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_pour_point, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[dict, "QuantityValue"]])

slots.hydrocarbon_resources_fluids_swabs_saturates_pc = Slot(uri=MIXS['0000131'], name="hydrocarbon resources-fluids_swabs_saturates_pc", curie=MIXS.curie('0000131'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_saturates_pc, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_aromatics_pc = Slot(uri=MIXS['0000133'], name="hydrocarbon resources-fluids_swabs_aromatics_pc", curie=MIXS.curie('0000133'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_aromatics_pc, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_resins_pc = Slot(uri=MIXS['0000134'], name="hydrocarbon resources-fluids_swabs_resins_pc", curie=MIXS.curie('0000134'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_resins_pc, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_asphaltenes_pc = Slot(uri=MIXS['0000135'], name="hydrocarbon resources-fluids_swabs_asphaltenes_pc", curie=MIXS.curie('0000135'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_asphaltenes_pc, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.hydrocarbon_resources_fluids_swabs_misc_param = Slot(uri=MIXS['0000752'], name="hydrocarbon resources-fluids_swabs_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_misc_param, domain=HydrocarbonResources-fluidsSwabs, range=Optional[Union[str, List[str]]])

slots.hydrocarbon_resources_fluids_swabs_additional_info = Slot(uri=MIXS['0000300'], name="hydrocarbon resources-fluids_swabs_additional_info", curie=MIXS.curie('0000300'),
                   model_uri=MIXS.VOCAB.hydrocarbon_resources_fluids_swabs_additional_info, domain=HydrocarbonResources-fluidsSwabs, range=Optional[str])

slots.microbial_mat_biofilm_samp_name = Slot(uri=MIXS['0001107'], name="microbial mat_biofilm_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_samp_name, domain=MicrobialMatBiofilm, range=str)

slots.microbial_mat_biofilm_project_name = Slot(uri=MIXS['0000092'], name="microbial mat_biofilm_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_project_name, domain=MicrobialMatBiofilm, range=str)

slots.microbial_mat_biofilm_depth = Slot(uri=MIXS['0000018'], name="microbial mat_biofilm_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_depth, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_elev = Slot(uri=MIXS['0000093'], name="microbial mat_biofilm_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_elev, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_alkalinity = Slot(uri=MIXS['0000421'], name="microbial mat_biofilm_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_alkalinity, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_alkyl_diethers = Slot(uri=MIXS['0000490'], name="microbial mat_biofilm_alkyl_diethers", curie=MIXS.curie('0000490'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_alkyl_diethers, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_aminopept_act = Slot(uri=MIXS['0000172'], name="microbial mat_biofilm_aminopept_act", curie=MIXS.curie('0000172'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_aminopept_act, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_ammonium = Slot(uri=MIXS['0000427'], name="microbial mat_biofilm_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_ammonium, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_bacteria_carb_prod = Slot(uri=MIXS['0000173'], name="microbial mat_biofilm_bacteria_carb_prod", curie=MIXS.curie('0000173'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_bacteria_carb_prod, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_biomass = Slot(uri=MIXS['0000174'], name="microbial mat_biofilm_biomass", curie=MIXS.curie('0000174'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_biomass, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_bishomohopanol = Slot(uri=MIXS['0000175'], name="microbial mat_biofilm_bishomohopanol", curie=MIXS.curie('0000175'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_bishomohopanol, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_bromide = Slot(uri=MIXS['0000176'], name="microbial mat_biofilm_bromide", curie=MIXS.curie('0000176'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_bromide, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_calcium = Slot(uri=MIXS['0000432'], name="microbial mat_biofilm_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_calcium, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_carb_nitro_ratio = Slot(uri=MIXS['0000310'], name="microbial mat_biofilm_carb_nitro_ratio", curie=MIXS.curie('0000310'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_carb_nitro_ratio, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_chem_administration = Slot(uri=MIXS['0000751'], name="microbial mat_biofilm_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_chem_administration, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_chloride = Slot(uri=MIXS['0000429'], name="microbial mat_biofilm_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_chloride, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_chlorophyll = Slot(uri=MIXS['0000177'], name="microbial mat_biofilm_chlorophyll", curie=MIXS.curie('0000177'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_chlorophyll, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diether_lipids = Slot(uri=MIXS['0000178'], name="microbial mat_biofilm_diether_lipids", curie=MIXS.curie('0000178'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diether_lipids, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="microbial mat_biofilm_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_carb_dioxide, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diss_hydrogen = Slot(uri=MIXS['0000179'], name="microbial mat_biofilm_diss_hydrogen", curie=MIXS.curie('0000179'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_hydrogen, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="microbial mat_biofilm_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_inorg_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diss_org_carb = Slot(uri=MIXS['0000433'], name="microbial mat_biofilm_diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_org_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diss_org_nitro = Slot(uri=MIXS['0000162'], name="microbial mat_biofilm_diss_org_nitro", curie=MIXS.curie('0000162'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_org_nitro, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_diss_oxygen = Slot(uri=MIXS['0000119'], name="microbial mat_biofilm_diss_oxygen", curie=MIXS.curie('0000119'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_diss_oxygen, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_glucosidase_act = Slot(uri=MIXS['0000137'], name="microbial mat_biofilm_glucosidase_act", curie=MIXS.curie('0000137'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_glucosidase_act, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_magnesium = Slot(uri=MIXS['0000431'], name="microbial mat_biofilm_magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_magnesium, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_mean_frict_vel = Slot(uri=MIXS['0000498'], name="microbial mat_biofilm_mean_frict_vel", curie=MIXS.curie('0000498'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_mean_frict_vel, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_mean_peak_frict_vel = Slot(uri=MIXS['0000502'], name="microbial mat_biofilm_mean_peak_frict_vel", curie=MIXS.curie('0000502'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_mean_peak_frict_vel, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_methane = Slot(uri=MIXS['0000101'], name="microbial mat_biofilm_methane", curie=MIXS.curie('0000101'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_methane, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_misc_param = Slot(uri=MIXS['0000752'], name="microbial mat_biofilm_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_misc_param, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_n_alkanes = Slot(uri=MIXS['0000503'], name="microbial mat_biofilm_n_alkanes", curie=MIXS.curie('0000503'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_n_alkanes, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_nitrate = Slot(uri=MIXS['0000425'], name="microbial mat_biofilm_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_nitrate, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_nitrite = Slot(uri=MIXS['0000426'], name="microbial mat_biofilm_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_nitrite, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_nitro = Slot(uri=MIXS['0000504'], name="microbial mat_biofilm_nitro", curie=MIXS.curie('0000504'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_nitro, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_org_carb = Slot(uri=MIXS['0000508'], name="microbial mat_biofilm_org_carb", curie=MIXS.curie('0000508'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_org_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_org_matter = Slot(uri=MIXS['0000204'], name="microbial mat_biofilm_org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_org_matter, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_org_nitro = Slot(uri=MIXS['0000205'], name="microbial mat_biofilm_org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_org_nitro, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_organism_count = Slot(uri=MIXS['0000103'], name="microbial mat_biofilm_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_organism_count, domain=MicrobialMatBiofilm, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.microbial_mat_biofilm_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="microbial mat_biofilm_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_oxy_stat_samp, domain=MicrobialMatBiofilm, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.microbial_mat_biofilm_ph = Slot(uri=MIXS['0001001'], name="microbial mat_biofilm_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_ph, domain=MicrobialMatBiofilm, range=Optional[float])

slots.microbial_mat_biofilm_part_org_carb = Slot(uri=MIXS['0000515'], name="microbial mat_biofilm_part_org_carb", curie=MIXS.curie('0000515'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_part_org_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_perturbation = Slot(uri=MIXS['0000754'], name="microbial mat_biofilm_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_perturbation, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_petroleum_hydrocarb = Slot(uri=MIXS['0000516'], name="microbial mat_biofilm_petroleum_hydrocarb", curie=MIXS.curie('0000516'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_petroleum_hydrocarb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_phaeopigments = Slot(uri=MIXS['0000180'], name="microbial mat_biofilm_phaeopigments", curie=MIXS.curie('0000180'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_phaeopigments, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_phosphate = Slot(uri=MIXS['0000505'], name="microbial mat_biofilm_phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_phosphate, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_phosplipid_fatt_acid = Slot(uri=MIXS['0000181'], name="microbial mat_biofilm_phosplipid_fatt_acid", curie=MIXS.curie('0000181'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_phosplipid_fatt_acid, domain=MicrobialMatBiofilm, range=Optional[Union[str, List[str]]])

slots.microbial_mat_biofilm_potassium = Slot(uri=MIXS['0000430'], name="microbial mat_biofilm_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_potassium, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_pressure = Slot(uri=MIXS['0000412'], name="microbial mat_biofilm_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_pressure, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_redox_potential = Slot(uri=MIXS['0000182'], name="microbial mat_biofilm_redox_potential", curie=MIXS.curie('0000182'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_redox_potential, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_salinity = Slot(uri=MIXS['0000183'], name="microbial mat_biofilm_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_salinity, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_samp_store_dur = Slot(uri=MIXS['0000116'], name="microbial mat_biofilm_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_samp_store_dur, domain=MicrobialMatBiofilm, range=Optional[str])

slots.microbial_mat_biofilm_samp_store_loc = Slot(uri=MIXS['0000755'], name="microbial mat_biofilm_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_samp_store_loc, domain=MicrobialMatBiofilm, range=Optional[str])

slots.microbial_mat_biofilm_samp_store_temp = Slot(uri=MIXS['0000110'], name="microbial mat_biofilm_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_samp_store_temp, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="microbial mat_biofilm_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_samp_vol_we_dna_ext, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_silicate = Slot(uri=MIXS['0000184'], name="microbial mat_biofilm_silicate", curie=MIXS.curie('0000184'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_silicate, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_sodium = Slot(uri=MIXS['0000428'], name="microbial mat_biofilm_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_sodium, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_sulfate = Slot(uri=MIXS['0000423'], name="microbial mat_biofilm_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_sulfate, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_sulfide = Slot(uri=MIXS['0000424'], name="microbial mat_biofilm_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_sulfide, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_temp = Slot(uri=MIXS['0000113'], name="microbial mat_biofilm_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_temp, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_tot_carb = Slot(uri=MIXS['0000525'], name="microbial mat_biofilm_tot_carb", curie=MIXS.curie('0000525'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_tot_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_tot_nitro_content = Slot(uri=MIXS['0000530'], name="microbial mat_biofilm_tot_nitro_content", curie=MIXS.curie('0000530'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_tot_nitro_content, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_tot_org_carb = Slot(uri=MIXS['0000533'], name="microbial mat_biofilm_tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_tot_org_carb, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_turbidity = Slot(uri=MIXS['0000191'], name="microbial mat_biofilm_turbidity", curie=MIXS.curie('0000191'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_turbidity, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.microbial_mat_biofilm_water_content = Slot(uri=MIXS['0000185'], name="microbial mat_biofilm_water_content", curie=MIXS.curie('0000185'),
                   model_uri=MIXS.VOCAB.microbial_mat_biofilm_water_content, domain=MicrobialMatBiofilm, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_samp_name = Slot(uri=MIXS['0001107'], name="miscellaneous natural or artificial environment_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_samp_name, domain=MiscellaneousNaturalOrArtificialEnvironment, range=str)

slots.miscellaneous_natural_or_artificial_environment_project_name = Slot(uri=MIXS['0000092'], name="miscellaneous natural or artificial environment_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_project_name, domain=MiscellaneousNaturalOrArtificialEnvironment, range=str)

slots.miscellaneous_natural_or_artificial_environment_alt = Slot(uri=MIXS['0000094'], name="miscellaneous natural or artificial environment_alt", curie=MIXS.curie('0000094'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_alt, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_depth = Slot(uri=MIXS['0000018'], name="miscellaneous natural or artificial environment_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_depth, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_elev = Slot(uri=MIXS['0000093'], name="miscellaneous natural or artificial environment_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_elev, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_alkalinity = Slot(uri=MIXS['0000421'], name="miscellaneous natural or artificial environment_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_alkalinity, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_ammonium = Slot(uri=MIXS['0000427'], name="miscellaneous natural or artificial environment_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_ammonium, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_biomass = Slot(uri=MIXS['0000174'], name="miscellaneous natural or artificial environment_biomass", curie=MIXS.curie('0000174'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_biomass, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_bromide = Slot(uri=MIXS['0000176'], name="miscellaneous natural or artificial environment_bromide", curie=MIXS.curie('0000176'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_bromide, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_calcium = Slot(uri=MIXS['0000432'], name="miscellaneous natural or artificial environment_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_calcium, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_chem_administration = Slot(uri=MIXS['0000751'], name="miscellaneous natural or artificial environment_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_chem_administration, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_chloride = Slot(uri=MIXS['0000429'], name="miscellaneous natural or artificial environment_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_chloride, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_chlorophyll = Slot(uri=MIXS['0000177'], name="miscellaneous natural or artificial environment_chlorophyll", curie=MIXS.curie('0000177'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_chlorophyll, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_density = Slot(uri=MIXS['0000435'], name="miscellaneous natural or artificial environment_density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_density, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_diether_lipids = Slot(uri=MIXS['0000178'], name="miscellaneous natural or artificial environment_diether_lipids", curie=MIXS.curie('0000178'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diether_lipids, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="miscellaneous natural or artificial environment_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diss_carb_dioxide, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_diss_hydrogen = Slot(uri=MIXS['0000179'], name="miscellaneous natural or artificial environment_diss_hydrogen", curie=MIXS.curie('0000179'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diss_hydrogen, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="miscellaneous natural or artificial environment_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diss_inorg_carb, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_diss_org_nitro = Slot(uri=MIXS['0000162'], name="miscellaneous natural or artificial environment_diss_org_nitro", curie=MIXS.curie('0000162'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diss_org_nitro, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_diss_oxygen = Slot(uri=MIXS['0000119'], name="miscellaneous natural or artificial environment_diss_oxygen", curie=MIXS.curie('0000119'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_diss_oxygen, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_misc_param = Slot(uri=MIXS['0000752'], name="miscellaneous natural or artificial environment_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_misc_param, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_nitrate = Slot(uri=MIXS['0000425'], name="miscellaneous natural or artificial environment_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_nitrate, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_nitrite = Slot(uri=MIXS['0000426'], name="miscellaneous natural or artificial environment_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_nitrite, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_nitro = Slot(uri=MIXS['0000504'], name="miscellaneous natural or artificial environment_nitro", curie=MIXS.curie('0000504'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_nitro, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_org_carb = Slot(uri=MIXS['0000508'], name="miscellaneous natural or artificial environment_org_carb", curie=MIXS.curie('0000508'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_org_carb, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_org_matter = Slot(uri=MIXS['0000204'], name="miscellaneous natural or artificial environment_org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_org_matter, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_org_nitro = Slot(uri=MIXS['0000205'], name="miscellaneous natural or artificial environment_org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_org_nitro, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_organism_count = Slot(uri=MIXS['0000103'], name="miscellaneous natural or artificial environment_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_organism_count, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.miscellaneous_natural_or_artificial_environment_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="miscellaneous natural or artificial environment_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_oxy_stat_samp, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.miscellaneous_natural_or_artificial_environment_ph = Slot(uri=MIXS['0001001'], name="miscellaneous natural or artificial environment_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_ph, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[float])

slots.miscellaneous_natural_or_artificial_environment_perturbation = Slot(uri=MIXS['0000754'], name="miscellaneous natural or artificial environment_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_perturbation, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_phosphate = Slot(uri=MIXS['0000505'], name="miscellaneous natural or artificial environment_phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_phosphate, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_phosplipid_fatt_acid = Slot(uri=MIXS['0000181'], name="miscellaneous natural or artificial environment_phosplipid_fatt_acid", curie=MIXS.curie('0000181'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_phosplipid_fatt_acid, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[str, List[str]]])

slots.miscellaneous_natural_or_artificial_environment_potassium = Slot(uri=MIXS['0000430'], name="miscellaneous natural or artificial environment_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_potassium, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_pressure = Slot(uri=MIXS['0000412'], name="miscellaneous natural or artificial environment_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_pressure, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_salinity = Slot(uri=MIXS['0000183'], name="miscellaneous natural or artificial environment_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_salinity, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_samp_store_dur = Slot(uri=MIXS['0000116'], name="miscellaneous natural or artificial environment_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_samp_store_dur, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[str])

slots.miscellaneous_natural_or_artificial_environment_samp_store_loc = Slot(uri=MIXS['0000755'], name="miscellaneous natural or artificial environment_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_samp_store_loc, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[str])

slots.miscellaneous_natural_or_artificial_environment_samp_store_temp = Slot(uri=MIXS['0000110'], name="miscellaneous natural or artificial environment_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_samp_store_temp, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="miscellaneous natural or artificial environment_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_samp_vol_we_dna_ext, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_silicate = Slot(uri=MIXS['0000184'], name="miscellaneous natural or artificial environment_silicate", curie=MIXS.curie('0000184'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_silicate, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_sodium = Slot(uri=MIXS['0000428'], name="miscellaneous natural or artificial environment_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_sodium, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_sulfate = Slot(uri=MIXS['0000423'], name="miscellaneous natural or artificial environment_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_sulfate, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_sulfide = Slot(uri=MIXS['0000424'], name="miscellaneous natural or artificial environment_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_sulfide, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_temp = Slot(uri=MIXS['0000113'], name="miscellaneous natural or artificial environment_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_temp, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.miscellaneous_natural_or_artificial_environment_water_current = Slot(uri=MIXS['0000203'], name="miscellaneous natural or artificial environment_water_current", curie=MIXS.curie('0000203'),
                   model_uri=MIXS.VOCAB.miscellaneous_natural_or_artificial_environment_water_current, domain=MiscellaneousNaturalOrArtificialEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_samp_name = Slot(uri=MIXS['0001107'], name="plant-associated_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_name, domain=Plant-associated, range=str)

slots.plant_associated_project_name = Slot(uri=MIXS['0000092'], name="plant-associated_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.plant_associated_project_name, domain=Plant-associated, range=str)

slots.plant_associated_depth = Slot(uri=MIXS['0000018'], name="plant-associated_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.plant_associated_depth, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_elev = Slot(uri=MIXS['0000093'], name="plant-associated_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.plant_associated_elev, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_air_temp_regm = Slot(uri=MIXS['0000551'], name="plant-associated_air_temp_regm", curie=MIXS.curie('0000551'),
                   model_uri=MIXS.VOCAB.plant_associated_air_temp_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_ances_data = Slot(uri=MIXS['0000247'], name="plant-associated_ances_data", curie=MIXS.curie('0000247'),
                   model_uri=MIXS.VOCAB.plant_associated_ances_data, domain=Plant-associated, range=Optional[str])

slots.plant_associated_antibiotic_regm = Slot(uri=MIXS['0000553'], name="plant-associated_antibiotic_regm", curie=MIXS.curie('0000553'),
                   model_uri=MIXS.VOCAB.plant_associated_antibiotic_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_biol_stat = Slot(uri=MIXS['0000858'], name="plant-associated_biol_stat", curie=MIXS.curie('0000858'),
                   model_uri=MIXS.VOCAB.plant_associated_biol_stat, domain=Plant-associated, range=Optional[Union[str, "BiolStatEnum"]])

slots.plant_associated_biotic_regm = Slot(uri=MIXS['0001038'], name="plant-associated_biotic_regm", curie=MIXS.curie('0001038'),
                   model_uri=MIXS.VOCAB.plant_associated_biotic_regm, domain=Plant-associated, range=Optional[str])

slots.plant_associated_chem_administration = Slot(uri=MIXS['0000751'], name="plant-associated_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.plant_associated_chem_administration, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_chem_mutagen = Slot(uri=MIXS['0000555'], name="plant-associated_chem_mutagen", curie=MIXS.curie('0000555'),
                   model_uri=MIXS.VOCAB.plant_associated_chem_mutagen, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_climate_environment = Slot(uri=MIXS['0001040'], name="plant-associated_climate_environment", curie=MIXS.curie('0001040'),
                   model_uri=MIXS.VOCAB.plant_associated_climate_environment, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_cult_root_med = Slot(uri=MIXS['0001041'], name="plant-associated_cult_root_med", curie=MIXS.curie('0001041'),
                   model_uri=MIXS.VOCAB.plant_associated_cult_root_med, domain=Plant-associated, range=Optional[str])

slots.plant_associated_fertilizer_regm = Slot(uri=MIXS['0000556'], name="plant-associated_fertilizer_regm", curie=MIXS.curie('0000556'),
                   model_uri=MIXS.VOCAB.plant_associated_fertilizer_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_fungicide_regm = Slot(uri=MIXS['0000557'], name="plant-associated_fungicide_regm", curie=MIXS.curie('0000557'),
                   model_uri=MIXS.VOCAB.plant_associated_fungicide_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_gaseous_environment = Slot(uri=MIXS['0000558'], name="plant-associated_gaseous_environment", curie=MIXS.curie('0000558'),
                   model_uri=MIXS.VOCAB.plant_associated_gaseous_environment, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_genetic_mod = Slot(uri=MIXS['0000859'], name="plant-associated_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.plant_associated_genetic_mod, domain=Plant-associated, range=Optional[str])

slots.plant_associated_gravity = Slot(uri=MIXS['0000559'], name="plant-associated_gravity", curie=MIXS.curie('0000559'),
                   model_uri=MIXS.VOCAB.plant_associated_gravity, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_growth_facil = Slot(uri=MIXS['0001043'], name="plant-associated_growth_facil", curie=MIXS.curie('0001043'),
                   model_uri=MIXS.VOCAB.plant_associated_growth_facil, domain=Plant-associated, range=Optional[str])

slots.plant_associated_growth_habit = Slot(uri=MIXS['0001044'], name="plant-associated_growth_habit", curie=MIXS.curie('0001044'),
                   model_uri=MIXS.VOCAB.plant_associated_growth_habit, domain=Plant-associated, range=Optional[Union[str, "GrowthHabitEnum"]])

slots.plant_associated_growth_hormone_regm = Slot(uri=MIXS['0000560'], name="plant-associated_growth_hormone_regm", curie=MIXS.curie('0000560'),
                   model_uri=MIXS.VOCAB.plant_associated_growth_hormone_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_herbicide_regm = Slot(uri=MIXS['0000561'], name="plant-associated_herbicide_regm", curie=MIXS.curie('0000561'),
                   model_uri=MIXS.VOCAB.plant_associated_herbicide_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_host_age = Slot(uri=MIXS['0000255'], name="plant-associated_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.plant_associated_host_age, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_host_common_name = Slot(uri=MIXS['0000248'], name="plant-associated_host_common_name", curie=MIXS.curie('0000248'),
                   model_uri=MIXS.VOCAB.plant_associated_host_common_name, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_disease_stat = Slot(uri=MIXS['0000031'], name="plant-associated_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.plant_associated_host_disease_stat, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_dry_mass = Slot(uri=MIXS['0000257'], name="plant-associated_host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.plant_associated_host_dry_mass, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_host_genotype = Slot(uri=MIXS['0000365'], name="plant-associated_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.plant_associated_host_genotype, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_height = Slot(uri=MIXS['0000264'], name="plant-associated_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.plant_associated_host_height, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_host_subspecf_genlin = Slot(uri=MIXS['0001318'], name="plant-associated_host_subspecf_genlin", curie=MIXS.curie('0001318'),
                   model_uri=MIXS.VOCAB.plant_associated_host_subspecf_genlin, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_host_length = Slot(uri=MIXS['0000256'], name="plant-associated_host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.plant_associated_host_length, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_host_life_stage = Slot(uri=MIXS['0000251'], name="plant-associated_host_life_stage", curie=MIXS.curie('0000251'),
                   model_uri=MIXS.VOCAB.plant_associated_host_life_stage, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_phenotype = Slot(uri=MIXS['0000874'], name="plant-associated_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.plant_associated_host_phenotype, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_taxid = Slot(uri=MIXS['0000250'], name="plant-associated_host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.plant_associated_host_taxid, domain=Plant-associated, range=Optional[str])

slots.plant_associated_host_tot_mass = Slot(uri=MIXS['0000263'], name="plant-associated_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.plant_associated_host_tot_mass, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_host_wet_mass = Slot(uri=MIXS['0000567'], name="plant-associated_host_wet_mass", curie=MIXS.curie('0000567'),
                   model_uri=MIXS.VOCAB.plant_associated_host_wet_mass, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_humidity_regm = Slot(uri=MIXS['0000568'], name="plant-associated_humidity_regm", curie=MIXS.curie('0000568'),
                   model_uri=MIXS.VOCAB.plant_associated_humidity_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_light_regm = Slot(uri=MIXS['0000569'], name="plant-associated_light_regm", curie=MIXS.curie('0000569'),
                   model_uri=MIXS.VOCAB.plant_associated_light_regm, domain=Plant-associated, range=Optional[str])

slots.plant_associated_mechanical_damage = Slot(uri=MIXS['0001052'], name="plant-associated_mechanical_damage", curie=MIXS.curie('0001052'),
                   model_uri=MIXS.VOCAB.plant_associated_mechanical_damage, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_mineral_nutr_regm = Slot(uri=MIXS['0000570'], name="plant-associated_mineral_nutr_regm", curie=MIXS.curie('0000570'),
                   model_uri=MIXS.VOCAB.plant_associated_mineral_nutr_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_misc_param = Slot(uri=MIXS['0000752'], name="plant-associated_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.plant_associated_misc_param, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_non_min_nutr_regm = Slot(uri=MIXS['0000571'], name="plant-associated_non_min_nutr_regm", curie=MIXS.curie('0000571'),
                   model_uri=MIXS.VOCAB.plant_associated_non_min_nutr_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_organism_count = Slot(uri=MIXS['0000103'], name="plant-associated_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.plant_associated_organism_count, domain=Plant-associated, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.plant_associated_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="plant-associated_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.plant_associated_oxy_stat_samp, domain=Plant-associated, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.plant_associated_ph_regm = Slot(uri=MIXS['0001056'], name="plant-associated_ph_regm", curie=MIXS.curie('0001056'),
                   model_uri=MIXS.VOCAB.plant_associated_ph_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_perturbation = Slot(uri=MIXS['0000754'], name="plant-associated_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.plant_associated_perturbation, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_pesticide_regm = Slot(uri=MIXS['0000573'], name="plant-associated_pesticide_regm", curie=MIXS.curie('0000573'),
                   model_uri=MIXS.VOCAB.plant_associated_pesticide_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_plant_growth_med = Slot(uri=MIXS['0001057'], name="plant-associated_plant_growth_med", curie=MIXS.curie('0001057'),
                   model_uri=MIXS.VOCAB.plant_associated_plant_growth_med, domain=Plant-associated, range=Optional[Union[str, "PlantGrowthMedEnum"]])

slots.plant_associated_plant_product = Slot(uri=MIXS['0001058'], name="plant-associated_plant_product", curie=MIXS.curie('0001058'),
                   model_uri=MIXS.VOCAB.plant_associated_plant_product, domain=Plant-associated, range=Optional[str])

slots.plant_associated_plant_sex = Slot(uri=MIXS['0001059'], name="plant-associated_plant_sex", curie=MIXS.curie('0001059'),
                   model_uri=MIXS.VOCAB.plant_associated_plant_sex, domain=Plant-associated, range=Optional[Union[str, "PlantSexEnum"]])

slots.plant_associated_plant_struc = Slot(uri=MIXS['0001060'], name="plant-associated_plant_struc", curie=MIXS.curie('0001060'),
                   model_uri=MIXS.VOCAB.plant_associated_plant_struc, domain=Plant-associated, range=Optional[str])

slots.plant_associated_radiation_regm = Slot(uri=MIXS['0000575'], name="plant-associated_radiation_regm", curie=MIXS.curie('0000575'),
                   model_uri=MIXS.VOCAB.plant_associated_radiation_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_rainfall_regm = Slot(uri=MIXS['0000576'], name="plant-associated_rainfall_regm", curie=MIXS.curie('0000576'),
                   model_uri=MIXS.VOCAB.plant_associated_rainfall_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_root_cond = Slot(uri=MIXS['0001061'], name="plant-associated_root_cond", curie=MIXS.curie('0001061'),
                   model_uri=MIXS.VOCAB.plant_associated_root_cond, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_carbon = Slot(uri=MIXS['0000577'], name="plant-associated_root_med_carbon", curie=MIXS.curie('0000577'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_carbon, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_macronutr = Slot(uri=MIXS['0000578'], name="plant-associated_root_med_macronutr", curie=MIXS.curie('0000578'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_macronutr, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_micronutr = Slot(uri=MIXS['0000579'], name="plant-associated_root_med_micronutr", curie=MIXS.curie('0000579'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_micronutr, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_suppl = Slot(uri=MIXS['0000580'], name="plant-associated_root_med_suppl", curie=MIXS.curie('0000580'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_suppl, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_ph = Slot(uri=MIXS['0001062'], name="plant-associated_root_med_ph", curie=MIXS.curie('0001062'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_ph, domain=Plant-associated, range=Optional[float])

slots.plant_associated_root_med_regl = Slot(uri=MIXS['0000581'], name="plant-associated_root_med_regl", curie=MIXS.curie('0000581'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_regl, domain=Plant-associated, range=Optional[str])

slots.plant_associated_root_med_solid = Slot(uri=MIXS['0001063'], name="plant-associated_root_med_solid", curie=MIXS.curie('0001063'),
                   model_uri=MIXS.VOCAB.plant_associated_root_med_solid, domain=Plant-associated, range=Optional[str])

slots.plant_associated_salt_regm = Slot(uri=MIXS['0000582'], name="plant-associated_salt_regm", curie=MIXS.curie('0000582'),
                   model_uri=MIXS.VOCAB.plant_associated_salt_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_samp_capt_status = Slot(uri=MIXS['0000860'], name="plant-associated_samp_capt_status", curie=MIXS.curie('0000860'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_capt_status, domain=Plant-associated, range=Optional[Union[str, "SampCaptStatusEnum"]])

slots.plant_associated_samp_dis_stage = Slot(uri=MIXS['0000249'], name="plant-associated_samp_dis_stage", curie=MIXS.curie('0000249'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_dis_stage, domain=Plant-associated, range=Optional[Union[str, "SampDisStageEnum"]])

slots.plant_associated_salinity = Slot(uri=MIXS['0000183'], name="plant-associated_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.plant_associated_salinity, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_samp_store_dur = Slot(uri=MIXS['0000116'], name="plant-associated_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_store_dur, domain=Plant-associated, range=Optional[str])

slots.plant_associated_samp_store_loc = Slot(uri=MIXS['0000755'], name="plant-associated_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_store_loc, domain=Plant-associated, range=Optional[str])

slots.plant_associated_samp_store_temp = Slot(uri=MIXS['0000110'], name="plant-associated_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_store_temp, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="plant-associated_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.plant_associated_samp_vol_we_dna_ext, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_season_environment = Slot(uri=MIXS['0001068'], name="plant-associated_season_environment", curie=MIXS.curie('0001068'),
                   model_uri=MIXS.VOCAB.plant_associated_season_environment, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_standing_water_regm = Slot(uri=MIXS['0001069'], name="plant-associated_standing_water_regm", curie=MIXS.curie('0001069'),
                   model_uri=MIXS.VOCAB.plant_associated_standing_water_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_temp = Slot(uri=MIXS['0000113'], name="plant-associated_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.plant_associated_temp, domain=Plant-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.plant_associated_tiss_cult_growth_med = Slot(uri=MIXS['0001070'], name="plant-associated_tiss_cult_growth_med", curie=MIXS.curie('0001070'),
                   model_uri=MIXS.VOCAB.plant_associated_tiss_cult_growth_med, domain=Plant-associated, range=Optional[str])

slots.plant_associated_water_temp_regm = Slot(uri=MIXS['0000590'], name="plant-associated_water_temp_regm", curie=MIXS.curie('0000590'),
                   model_uri=MIXS.VOCAB.plant_associated_water_temp_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_watering_regm = Slot(uri=MIXS['0000591'], name="plant-associated_watering_regm", curie=MIXS.curie('0000591'),
                   model_uri=MIXS.VOCAB.plant_associated_watering_regm, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.plant_associated_host_symbiont = Slot(uri=MIXS['0001298'], name="plant-associated_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.plant_associated_host_symbiont, domain=Plant-associated, range=Optional[Union[str, List[str]]])

slots.sediment_samp_name = Slot(uri=MIXS['0001107'], name="sediment_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.sediment_samp_name, domain=Sediment, range=str)

slots.sediment_project_name = Slot(uri=MIXS['0000092'], name="sediment_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.sediment_project_name, domain=Sediment, range=str)

slots.sediment_depth = Slot(uri=MIXS['0000018'], name="sediment_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.sediment_depth, domain=Sediment, range=Union[dict, "QuantityValue"])

slots.sediment_elev = Slot(uri=MIXS['0000093'], name="sediment_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.sediment_elev, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_alkalinity = Slot(uri=MIXS['0000421'], name="sediment_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.sediment_alkalinity, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_alkyl_diethers = Slot(uri=MIXS['0000490'], name="sediment_alkyl_diethers", curie=MIXS.curie('0000490'),
                   model_uri=MIXS.VOCAB.sediment_alkyl_diethers, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_aminopept_act = Slot(uri=MIXS['0000172'], name="sediment_aminopept_act", curie=MIXS.curie('0000172'),
                   model_uri=MIXS.VOCAB.sediment_aminopept_act, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_ammonium = Slot(uri=MIXS['0000427'], name="sediment_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.sediment_ammonium, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_bacteria_carb_prod = Slot(uri=MIXS['0000173'], name="sediment_bacteria_carb_prod", curie=MIXS.curie('0000173'),
                   model_uri=MIXS.VOCAB.sediment_bacteria_carb_prod, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_biomass = Slot(uri=MIXS['0000174'], name="sediment_biomass", curie=MIXS.curie('0000174'),
                   model_uri=MIXS.VOCAB.sediment_biomass, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_bishomohopanol = Slot(uri=MIXS['0000175'], name="sediment_bishomohopanol", curie=MIXS.curie('0000175'),
                   model_uri=MIXS.VOCAB.sediment_bishomohopanol, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_bromide = Slot(uri=MIXS['0000176'], name="sediment_bromide", curie=MIXS.curie('0000176'),
                   model_uri=MIXS.VOCAB.sediment_bromide, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_calcium = Slot(uri=MIXS['0000432'], name="sediment_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.sediment_calcium, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_carb_nitro_ratio = Slot(uri=MIXS['0000310'], name="sediment_carb_nitro_ratio", curie=MIXS.curie('0000310'),
                   model_uri=MIXS.VOCAB.sediment_carb_nitro_ratio, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_chem_administration = Slot(uri=MIXS['0000751'], name="sediment_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.sediment_chem_administration, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_chloride = Slot(uri=MIXS['0000429'], name="sediment_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.sediment_chloride, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_chlorophyll = Slot(uri=MIXS['0000177'], name="sediment_chlorophyll", curie=MIXS.curie('0000177'),
                   model_uri=MIXS.VOCAB.sediment_chlorophyll, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_density = Slot(uri=MIXS['0000435'], name="sediment_density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.sediment_density, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diether_lipids = Slot(uri=MIXS['0000178'], name="sediment_diether_lipids", curie=MIXS.curie('0000178'),
                   model_uri=MIXS.VOCAB.sediment_diether_lipids, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="sediment_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.sediment_diss_carb_dioxide, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diss_hydrogen = Slot(uri=MIXS['0000179'], name="sediment_diss_hydrogen", curie=MIXS.curie('0000179'),
                   model_uri=MIXS.VOCAB.sediment_diss_hydrogen, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="sediment_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.sediment_diss_inorg_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diss_org_carb = Slot(uri=MIXS['0000433'], name="sediment_diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.sediment_diss_org_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diss_org_nitro = Slot(uri=MIXS['0000162'], name="sediment_diss_org_nitro", curie=MIXS.curie('0000162'),
                   model_uri=MIXS.VOCAB.sediment_diss_org_nitro, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_diss_oxygen = Slot(uri=MIXS['0000119'], name="sediment_diss_oxygen", curie=MIXS.curie('0000119'),
                   model_uri=MIXS.VOCAB.sediment_diss_oxygen, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_glucosidase_act = Slot(uri=MIXS['0000137'], name="sediment_glucosidase_act", curie=MIXS.curie('0000137'),
                   model_uri=MIXS.VOCAB.sediment_glucosidase_act, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_magnesium = Slot(uri=MIXS['0000431'], name="sediment_magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.sediment_magnesium, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_mean_frict_vel = Slot(uri=MIXS['0000498'], name="sediment_mean_frict_vel", curie=MIXS.curie('0000498'),
                   model_uri=MIXS.VOCAB.sediment_mean_frict_vel, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_mean_peak_frict_vel = Slot(uri=MIXS['0000502'], name="sediment_mean_peak_frict_vel", curie=MIXS.curie('0000502'),
                   model_uri=MIXS.VOCAB.sediment_mean_peak_frict_vel, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_methane = Slot(uri=MIXS['0000101'], name="sediment_methane", curie=MIXS.curie('0000101'),
                   model_uri=MIXS.VOCAB.sediment_methane, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_misc_param = Slot(uri=MIXS['0000752'], name="sediment_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.sediment_misc_param, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_n_alkanes = Slot(uri=MIXS['0000503'], name="sediment_n_alkanes", curie=MIXS.curie('0000503'),
                   model_uri=MIXS.VOCAB.sediment_n_alkanes, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_nitrate = Slot(uri=MIXS['0000425'], name="sediment_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.sediment_nitrate, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_nitrite = Slot(uri=MIXS['0000426'], name="sediment_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.sediment_nitrite, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_nitro = Slot(uri=MIXS['0000504'], name="sediment_nitro", curie=MIXS.curie('0000504'),
                   model_uri=MIXS.VOCAB.sediment_nitro, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_org_carb = Slot(uri=MIXS['0000508'], name="sediment_org_carb", curie=MIXS.curie('0000508'),
                   model_uri=MIXS.VOCAB.sediment_org_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_org_matter = Slot(uri=MIXS['0000204'], name="sediment_org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.sediment_org_matter, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_org_nitro = Slot(uri=MIXS['0000205'], name="sediment_org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.sediment_org_nitro, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_organism_count = Slot(uri=MIXS['0000103'], name="sediment_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.sediment_organism_count, domain=Sediment, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.sediment_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="sediment_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.sediment_oxy_stat_samp, domain=Sediment, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.sediment_ph = Slot(uri=MIXS['0001001'], name="sediment_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.sediment_ph, domain=Sediment, range=Optional[float])

slots.sediment_particle_class = Slot(uri=MIXS['0000206'], name="sediment_particle_class", curie=MIXS.curie('0000206'),
                   model_uri=MIXS.VOCAB.sediment_particle_class, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_part_org_carb = Slot(uri=MIXS['0000515'], name="sediment_part_org_carb", curie=MIXS.curie('0000515'),
                   model_uri=MIXS.VOCAB.sediment_part_org_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_perturbation = Slot(uri=MIXS['0000754'], name="sediment_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.sediment_perturbation, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_petroleum_hydrocarb = Slot(uri=MIXS['0000516'], name="sediment_petroleum_hydrocarb", curie=MIXS.curie('0000516'),
                   model_uri=MIXS.VOCAB.sediment_petroleum_hydrocarb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_phaeopigments = Slot(uri=MIXS['0000180'], name="sediment_phaeopigments", curie=MIXS.curie('0000180'),
                   model_uri=MIXS.VOCAB.sediment_phaeopigments, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_phosphate = Slot(uri=MIXS['0000505'], name="sediment_phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.sediment_phosphate, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_phosplipid_fatt_acid = Slot(uri=MIXS['0000181'], name="sediment_phosplipid_fatt_acid", curie=MIXS.curie('0000181'),
                   model_uri=MIXS.VOCAB.sediment_phosplipid_fatt_acid, domain=Sediment, range=Optional[Union[str, List[str]]])

slots.sediment_porosity = Slot(uri=MIXS['0000211'], name="sediment_porosity", curie=MIXS.curie('0000211'),
                   model_uri=MIXS.VOCAB.sediment_porosity, domain=Sediment, range=Optional[str])

slots.sediment_potassium = Slot(uri=MIXS['0000430'], name="sediment_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.sediment_potassium, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_pressure = Slot(uri=MIXS['0000412'], name="sediment_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.sediment_pressure, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_redox_potential = Slot(uri=MIXS['0000182'], name="sediment_redox_potential", curie=MIXS.curie('0000182'),
                   model_uri=MIXS.VOCAB.sediment_redox_potential, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_salinity = Slot(uri=MIXS['0000183'], name="sediment_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.sediment_salinity, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_samp_store_dur = Slot(uri=MIXS['0000116'], name="sediment_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.sediment_samp_store_dur, domain=Sediment, range=Optional[str])

slots.sediment_samp_store_loc = Slot(uri=MIXS['0000755'], name="sediment_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.sediment_samp_store_loc, domain=Sediment, range=Optional[str])

slots.sediment_samp_store_temp = Slot(uri=MIXS['0000110'], name="sediment_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.sediment_samp_store_temp, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="sediment_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.sediment_samp_vol_we_dna_ext, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_sediment_type = Slot(uri=MIXS['0001078'], name="sediment_sediment_type", curie=MIXS.curie('0001078'),
                   model_uri=MIXS.VOCAB.sediment_sediment_type, domain=Sediment, range=Optional[Union[str, "SedimentTypeEnum"]])

slots.sediment_silicate = Slot(uri=MIXS['0000184'], name="sediment_silicate", curie=MIXS.curie('0000184'),
                   model_uri=MIXS.VOCAB.sediment_silicate, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_sodium = Slot(uri=MIXS['0000428'], name="sediment_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.sediment_sodium, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_sulfate = Slot(uri=MIXS['0000423'], name="sediment_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.sediment_sulfate, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_sulfide = Slot(uri=MIXS['0000424'], name="sediment_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.sediment_sulfide, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_temp = Slot(uri=MIXS['0000113'], name="sediment_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.sediment_temp, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_tidal_stage = Slot(uri=MIXS['0000750'], name="sediment_tidal_stage", curie=MIXS.curie('0000750'),
                   model_uri=MIXS.VOCAB.sediment_tidal_stage, domain=Sediment, range=Optional[Union[str, "TidalStageEnum"]])

slots.sediment_tot_carb = Slot(uri=MIXS['0000525'], name="sediment_tot_carb", curie=MIXS.curie('0000525'),
                   model_uri=MIXS.VOCAB.sediment_tot_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_tot_depth_water_col = Slot(uri=MIXS['0000634'], name="sediment_tot_depth_water_col", curie=MIXS.curie('0000634'),
                   model_uri=MIXS.VOCAB.sediment_tot_depth_water_col, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_tot_nitro_content = Slot(uri=MIXS['0000530'], name="sediment_tot_nitro_content", curie=MIXS.curie('0000530'),
                   model_uri=MIXS.VOCAB.sediment_tot_nitro_content, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_tot_org_carb = Slot(uri=MIXS['0000533'], name="sediment_tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.sediment_tot_org_carb, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_turbidity = Slot(uri=MIXS['0000191'], name="sediment_turbidity", curie=MIXS.curie('0000191'),
                   model_uri=MIXS.VOCAB.sediment_turbidity, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.sediment_water_content = Slot(uri=MIXS['0000185'], name="sediment_water_content", curie=MIXS.curie('0000185'),
                   model_uri=MIXS.VOCAB.sediment_water_content, domain=Sediment, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_samp_name = Slot(uri=MIXS['0001107'], name="soil_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.soil_samp_name, domain=Soil, range=str)

slots.soil_project_name = Slot(uri=MIXS['0000092'], name="soil_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.soil_project_name, domain=Soil, range=str)

slots.soil_elev = Slot(uri=MIXS['0000093'], name="soil_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.soil_elev, domain=Soil, range=Union[dict, "QuantityValue"])

slots.soil_cur_land_use = Slot(uri=MIXS['0001080'], name="soil_cur_land_use", curie=MIXS.curie('0001080'),
                   model_uri=MIXS.VOCAB.soil_cur_land_use, domain=Soil, range=Optional[Union[str, "CurLandUseEnum"]])

slots.soil_cur_vegetation = Slot(uri=MIXS['0000312'], name="soil_cur_vegetation", curie=MIXS.curie('0000312'),
                   model_uri=MIXS.VOCAB.soil_cur_vegetation, domain=Soil, range=Optional[str])

slots.soil_cur_vegetation_meth = Slot(uri=MIXS['0000314'], name="soil_cur_vegetation_meth", curie=MIXS.curie('0000314'),
                   model_uri=MIXS.VOCAB.soil_cur_vegetation_meth, domain=Soil, range=Optional[str])

slots.soil_previous_land_use = Slot(uri=MIXS['0000315'], name="soil_previous_land_use", curie=MIXS.curie('0000315'),
                   model_uri=MIXS.VOCAB.soil_previous_land_use, domain=Soil, range=Optional[str])

slots.soil_prev_land_use_meth = Slot(uri=MIXS['0000316'], name="soil_prev_land_use_meth", curie=MIXS.curie('0000316'),
                   model_uri=MIXS.VOCAB.soil_prev_land_use_meth, domain=Soil, range=Optional[str])

slots.soil_crop_rotation = Slot(uri=MIXS['0000318'], name="soil_crop_rotation", curie=MIXS.curie('0000318'),
                   model_uri=MIXS.VOCAB.soil_crop_rotation, domain=Soil, range=Optional[str])

slots.soil_agrochem_addition = Slot(uri=MIXS['0000639'], name="soil_agrochem_addition", curie=MIXS.curie('0000639'),
                   model_uri=MIXS.VOCAB.soil_agrochem_addition, domain=Soil, range=Optional[Union[str, List[str]]])

slots.soil_tillage = Slot(uri=MIXS['0001081'], name="soil_tillage", curie=MIXS.curie('0001081'),
                   model_uri=MIXS.VOCAB.soil_tillage, domain=Soil, range=Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]])

slots.soil_fire = Slot(uri=MIXS['0001086'], name="soil_fire", curie=MIXS.curie('0001086'),
                   model_uri=MIXS.VOCAB.soil_fire, domain=Soil, range=Optional[Union[str, XSDDate]])

slots.soil_flooding = Slot(uri=MIXS['0000319'], name="soil_flooding", curie=MIXS.curie('0000319'),
                   model_uri=MIXS.VOCAB.soil_flooding, domain=Soil, range=Optional[Union[str, XSDDate]])

slots.soil_extreme_event = Slot(uri=MIXS['0000320'], name="soil_extreme_event", curie=MIXS.curie('0000320'),
                   model_uri=MIXS.VOCAB.soil_extreme_event, domain=Soil, range=Optional[Union[str, XSDDate]])

slots.soil_soil_horizon = Slot(uri=MIXS['0001082'], name="soil_soil_horizon", curie=MIXS.curie('0001082'),
                   model_uri=MIXS.VOCAB.soil_soil_horizon, domain=Soil, range=Optional[Union[str, "SoilHorizonEnum"]])

slots.soil_horizon_meth = Slot(uri=MIXS['0000321'], name="soil_horizon_meth", curie=MIXS.curie('0000321'),
                   model_uri=MIXS.VOCAB.soil_horizon_meth, domain=Soil, range=Optional[str])

slots.soil_sieving = Slot(uri=MIXS['0000322'], name="soil_sieving", curie=MIXS.curie('0000322'),
                   model_uri=MIXS.VOCAB.soil_sieving, domain=Soil, range=Optional[str])

slots.soil_water_content = Slot(uri=MIXS['0000185'], name="soil_water_content", curie=MIXS.curie('0000185'),
                   model_uri=MIXS.VOCAB.soil_water_content, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_water_cont_soil_meth = Slot(uri=MIXS['0000323'], name="soil_water_cont_soil_meth", curie=MIXS.curie('0000323'),
                   model_uri=MIXS.VOCAB.soil_water_cont_soil_meth, domain=Soil, range=Optional[str])

slots.soil_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="soil_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.soil_samp_vol_we_dna_ext, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_pool_dna_extracts = Slot(uri=MIXS['0000325'], name="soil_pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.soil_pool_dna_extracts, domain=Soil, range=Optional[str])

slots.soil_store_cond = Slot(uri=MIXS['0000327'], name="soil_store_cond", curie=MIXS.curie('0000327'),
                   model_uri=MIXS.VOCAB.soil_store_cond, domain=Soil, range=Optional[str])

slots.soil_link_climate_info = Slot(uri=MIXS['0000328'], name="soil_link_climate_info", curie=MIXS.curie('0000328'),
                   model_uri=MIXS.VOCAB.soil_link_climate_info, domain=Soil, range=Optional[str])

slots.soil_annual_temp = Slot(uri=MIXS['0000642'], name="soil_annual_temp", curie=MIXS.curie('0000642'),
                   model_uri=MIXS.VOCAB.soil_annual_temp, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_season_temp = Slot(uri=MIXS['0000643'], name="soil_season_temp", curie=MIXS.curie('0000643'),
                   model_uri=MIXS.VOCAB.soil_season_temp, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_annual_precpt = Slot(uri=MIXS['0000644'], name="soil_annual_precpt", curie=MIXS.curie('0000644'),
                   model_uri=MIXS.VOCAB.soil_annual_precpt, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_season_precpt = Slot(uri=MIXS['0000645'], name="soil_season_precpt", curie=MIXS.curie('0000645'),
                   model_uri=MIXS.VOCAB.soil_season_precpt, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_link_class_info = Slot(uri=MIXS['0000329'], name="soil_link_class_info", curie=MIXS.curie('0000329'),
                   model_uri=MIXS.VOCAB.soil_link_class_info, domain=Soil, range=Optional[str])

slots.soil_fao_class = Slot(uri=MIXS['0001083'], name="soil_fao_class", curie=MIXS.curie('0001083'),
                   model_uri=MIXS.VOCAB.soil_fao_class, domain=Soil, range=Optional[Union[str, "FaoClassEnum"]])

slots.soil_local_class = Slot(uri=MIXS['0000330'], name="soil_local_class", curie=MIXS.curie('0000330'),
                   model_uri=MIXS.VOCAB.soil_local_class, domain=Soil, range=Optional[str])

slots.soil_local_class_meth = Slot(uri=MIXS['0000331'], name="soil_local_class_meth", curie=MIXS.curie('0000331'),
                   model_uri=MIXS.VOCAB.soil_local_class_meth, domain=Soil, range=Optional[str])

slots.soil_org_nitro = Slot(uri=MIXS['0000205'], name="soil_org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.soil_org_nitro, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_soil_type = Slot(uri=MIXS['0000332'], name="soil_soil_type", curie=MIXS.curie('0000332'),
                   model_uri=MIXS.VOCAB.soil_soil_type, domain=Soil, range=Optional[str])

slots.soil_soil_type_meth = Slot(uri=MIXS['0000334'], name="soil_soil_type_meth", curie=MIXS.curie('0000334'),
                   model_uri=MIXS.VOCAB.soil_soil_type_meth, domain=Soil, range=Optional[str])

slots.soil_slope_gradient = Slot(uri=MIXS['0000646'], name="soil_slope_gradient", curie=MIXS.curie('0000646'),
                   model_uri=MIXS.VOCAB.soil_slope_gradient, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_slope_aspect = Slot(uri=MIXS['0000647'], name="soil_slope_aspect", curie=MIXS.curie('0000647'),
                   model_uri=MIXS.VOCAB.soil_slope_aspect, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_profile_position = Slot(uri=MIXS['0001084'], name="soil_profile_position", curie=MIXS.curie('0001084'),
                   model_uri=MIXS.VOCAB.soil_profile_position, domain=Soil, range=Optional[Union[str, "ProfilePositionEnum"]])

slots.soil_drainage_class = Slot(uri=MIXS['0001085'], name="soil_drainage_class", curie=MIXS.curie('0001085'),
                   model_uri=MIXS.VOCAB.soil_drainage_class, domain=Soil, range=Optional[Union[str, "DrainageClassEnum"]])

slots.soil_soil_text_measure = Slot(uri=MIXS['0000335'], name="soil_soil_text_measure", curie=MIXS.curie('0000335'),
                   model_uri=MIXS.VOCAB.soil_soil_text_measure, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_soil_texture_meth = Slot(uri=MIXS['0000336'], name="soil_soil_texture_meth", curie=MIXS.curie('0000336'),
                   model_uri=MIXS.VOCAB.soil_soil_texture_meth, domain=Soil, range=Optional[str])

slots.soil_ph = Slot(uri=MIXS['0001001'], name="soil_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.soil_ph, domain=Soil, range=Optional[float])

slots.soil_ph_meth = Slot(uri=MIXS['0001106'], name="soil_ph_meth", curie=MIXS.curie('0001106'),
                   model_uri=MIXS.VOCAB.soil_ph_meth, domain=Soil, range=Optional[str])

slots.soil_org_matter = Slot(uri=MIXS['0000204'], name="soil_org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.soil_org_matter, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_tot_org_carb = Slot(uri=MIXS['0000533'], name="soil_tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.soil_tot_org_carb, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_tot_org_c_meth = Slot(uri=MIXS['0000337'], name="soil_tot_org_c_meth", curie=MIXS.curie('0000337'),
                   model_uri=MIXS.VOCAB.soil_tot_org_c_meth, domain=Soil, range=Optional[str])

slots.soil_tot_nitro_content = Slot(uri=MIXS['0000530'], name="soil_tot_nitro_content", curie=MIXS.curie('0000530'),
                   model_uri=MIXS.VOCAB.soil_tot_nitro_content, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_tot_nitro_cont_meth = Slot(uri=MIXS['0000338'], name="soil_tot_nitro_cont_meth", curie=MIXS.curie('0000338'),
                   model_uri=MIXS.VOCAB.soil_tot_nitro_cont_meth, domain=Soil, range=Optional[str])

slots.soil_microbial_biomass = Slot(uri=MIXS['0000650'], name="soil_microbial_biomass", curie=MIXS.curie('0000650'),
                   model_uri=MIXS.VOCAB.soil_microbial_biomass, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_micro_biomass_meth = Slot(uri=MIXS['0000339'], name="soil_micro_biomass_meth", curie=MIXS.curie('0000339'),
                   model_uri=MIXS.VOCAB.soil_micro_biomass_meth, domain=Soil, range=Optional[str])

slots.soil_link_addit_analys = Slot(uri=MIXS['0000340'], name="soil_link_addit_analys", curie=MIXS.curie('0000340'),
                   model_uri=MIXS.VOCAB.soil_link_addit_analys, domain=Soil, range=Optional[str])

slots.soil_salinity_meth = Slot(uri=MIXS['0000341'], name="soil_salinity_meth", curie=MIXS.curie('0000341'),
                   model_uri=MIXS.VOCAB.soil_salinity_meth, domain=Soil, range=Optional[str])

slots.soil_heavy_metals = Slot(uri=MIXS['0000652'], name="soil_heavy_metals", curie=MIXS.curie('0000652'),
                   model_uri=MIXS.VOCAB.soil_heavy_metals, domain=Soil, range=Optional[Union[str, List[str]]])

slots.soil_heavy_metals_meth = Slot(uri=MIXS['0000343'], name="soil_heavy_metals_meth", curie=MIXS.curie('0000343'),
                   model_uri=MIXS.VOCAB.soil_heavy_metals_meth, domain=Soil, range=Optional[str])

slots.soil_al_sat = Slot(uri=MIXS['0000607'], name="soil_al_sat", curie=MIXS.curie('0000607'),
                   model_uri=MIXS.VOCAB.soil_al_sat, domain=Soil, range=Optional[Union[dict, "QuantityValue"]])

slots.soil_al_sat_meth = Slot(uri=MIXS['0000324'], name="soil_al_sat_meth", curie=MIXS.curie('0000324'),
                   model_uri=MIXS.VOCAB.soil_al_sat_meth, domain=Soil, range=Optional[str])

slots.soil_misc_param = Slot(uri=MIXS['0000752'], name="soil_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.soil_misc_param, domain=Soil, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_samp_name = Slot(uri=MIXS['0001107'], name="wastewater_sludge_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_samp_name, domain=WastewaterSludge, range=str)

slots.wastewater_sludge_project_name = Slot(uri=MIXS['0000092'], name="wastewater_sludge_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_project_name, domain=WastewaterSludge, range=str)

slots.wastewater_sludge_depth = Slot(uri=MIXS['0000018'], name="wastewater_sludge_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_depth, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_alkalinity = Slot(uri=MIXS['0000421'], name="wastewater_sludge_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_alkalinity, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_biochem_oxygen_dem = Slot(uri=MIXS['0000653'], name="wastewater_sludge_biochem_oxygen_dem", curie=MIXS.curie('0000653'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_biochem_oxygen_dem, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_chem_administration = Slot(uri=MIXS['0000751'], name="wastewater_sludge_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_chem_administration, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_chem_oxygen_dem = Slot(uri=MIXS['0000656'], name="wastewater_sludge_chem_oxygen_dem", curie=MIXS.curie('0000656'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_chem_oxygen_dem, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_efficiency_percent = Slot(uri=MIXS['0000657'], name="wastewater_sludge_efficiency_percent", curie=MIXS.curie('0000657'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_efficiency_percent, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_emulsions = Slot(uri=MIXS['0000660'], name="wastewater_sludge_emulsions", curie=MIXS.curie('0000660'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_emulsions, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_gaseous_substances = Slot(uri=MIXS['0000661'], name="wastewater_sludge_gaseous_substances", curie=MIXS.curie('0000661'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_gaseous_substances, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_indust_eff_percent = Slot(uri=MIXS['0000662'], name="wastewater_sludge_indust_eff_percent", curie=MIXS.curie('0000662'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_indust_eff_percent, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_inorg_particles = Slot(uri=MIXS['0000664'], name="wastewater_sludge_inorg_particles", curie=MIXS.curie('0000664'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_inorg_particles, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_misc_param = Slot(uri=MIXS['0000752'], name="wastewater_sludge_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_misc_param, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_nitrate = Slot(uri=MIXS['0000425'], name="wastewater_sludge_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_nitrate, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_org_particles = Slot(uri=MIXS['0000665'], name="wastewater_sludge_org_particles", curie=MIXS.curie('0000665'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_org_particles, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_organism_count = Slot(uri=MIXS['0000103'], name="wastewater_sludge_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_organism_count, domain=WastewaterSludge, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.wastewater_sludge_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="wastewater_sludge_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_oxy_stat_samp, domain=WastewaterSludge, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.wastewater_sludge_ph = Slot(uri=MIXS['0001001'], name="wastewater_sludge_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_ph, domain=WastewaterSludge, range=Optional[float])

slots.wastewater_sludge_perturbation = Slot(uri=MIXS['0000754'], name="wastewater_sludge_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_perturbation, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_phosphate = Slot(uri=MIXS['0000505'], name="wastewater_sludge_phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_phosphate, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_pre_treatment = Slot(uri=MIXS['0000348'], name="wastewater_sludge_pre_treatment", curie=MIXS.curie('0000348'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_pre_treatment, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_primary_treatment = Slot(uri=MIXS['0000349'], name="wastewater_sludge_primary_treatment", curie=MIXS.curie('0000349'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_primary_treatment, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_reactor_type = Slot(uri=MIXS['0000350'], name="wastewater_sludge_reactor_type", curie=MIXS.curie('0000350'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_reactor_type, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_salinity = Slot(uri=MIXS['0000183'], name="wastewater_sludge_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_salinity, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_samp_store_dur = Slot(uri=MIXS['0000116'], name="wastewater_sludge_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_samp_store_dur, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_samp_store_loc = Slot(uri=MIXS['0000755'], name="wastewater_sludge_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_samp_store_loc, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_samp_store_temp = Slot(uri=MIXS['0000110'], name="wastewater_sludge_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_samp_store_temp, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="wastewater_sludge_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_samp_vol_we_dna_ext, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_secondary_treatment = Slot(uri=MIXS['0000351'], name="wastewater_sludge_secondary_treatment", curie=MIXS.curie('0000351'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_secondary_treatment, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_sewage_type = Slot(uri=MIXS['0000215'], name="wastewater_sludge_sewage_type", curie=MIXS.curie('0000215'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_sewage_type, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_sludge_retent_time = Slot(uri=MIXS['0000669'], name="wastewater_sludge_sludge_retent_time", curie=MIXS.curie('0000669'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_sludge_retent_time, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_sodium = Slot(uri=MIXS['0000428'], name="wastewater_sludge_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_sodium, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_soluble_inorg_mat = Slot(uri=MIXS['0000672'], name="wastewater_sludge_soluble_inorg_mat", curie=MIXS.curie('0000672'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_soluble_inorg_mat, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_soluble_org_mat = Slot(uri=MIXS['0000673'], name="wastewater_sludge_soluble_org_mat", curie=MIXS.curie('0000673'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_soluble_org_mat, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_suspend_solids = Slot(uri=MIXS['0000150'], name="wastewater_sludge_suspend_solids", curie=MIXS.curie('0000150'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_suspend_solids, domain=WastewaterSludge, range=Optional[Union[str, List[str]]])

slots.wastewater_sludge_temp = Slot(uri=MIXS['0000113'], name="wastewater_sludge_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_temp, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_tertiary_treatment = Slot(uri=MIXS['0000352'], name="wastewater_sludge_tertiary_treatment", curie=MIXS.curie('0000352'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_tertiary_treatment, domain=WastewaterSludge, range=Optional[str])

slots.wastewater_sludge_tot_nitro = Slot(uri=MIXS['0000102'], name="wastewater_sludge_tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_tot_nitro, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_tot_phosphate = Slot(uri=MIXS['0000689'], name="wastewater_sludge_tot_phosphate", curie=MIXS.curie('0000689'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_tot_phosphate, domain=WastewaterSludge, range=Optional[Union[dict, "QuantityValue"]])

slots.wastewater_sludge_wastewater_type = Slot(uri=MIXS['0000353'], name="wastewater_sludge_wastewater_type", curie=MIXS.curie('0000353'),
                   model_uri=MIXS.VOCAB.wastewater_sludge_wastewater_type, domain=WastewaterSludge, range=Optional[str])

slots.water_samp_name = Slot(uri=MIXS['0001107'], name="water_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.water_samp_name, domain=Water, range=str)

slots.water_project_name = Slot(uri=MIXS['0000092'], name="water_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.water_project_name, domain=Water, range=str)

slots.water_depth = Slot(uri=MIXS['0000018'], name="water_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.water_depth, domain=Water, range=Union[dict, "QuantityValue"])

slots.water_elev = Slot(uri=MIXS['0000093'], name="water_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.water_elev, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_alkalinity = Slot(uri=MIXS['0000421'], name="water_alkalinity", curie=MIXS.curie('0000421'),
                   model_uri=MIXS.VOCAB.water_alkalinity, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_alkalinity_method = Slot(uri=MIXS['0000298'], name="water_alkalinity_method", curie=MIXS.curie('0000298'),
                   model_uri=MIXS.VOCAB.water_alkalinity_method, domain=Water, range=Optional[str])

slots.water_alkyl_diethers = Slot(uri=MIXS['0000490'], name="water_alkyl_diethers", curie=MIXS.curie('0000490'),
                   model_uri=MIXS.VOCAB.water_alkyl_diethers, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_aminopept_act = Slot(uri=MIXS['0000172'], name="water_aminopept_act", curie=MIXS.curie('0000172'),
                   model_uri=MIXS.VOCAB.water_aminopept_act, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_ammonium = Slot(uri=MIXS['0000427'], name="water_ammonium", curie=MIXS.curie('0000427'),
                   model_uri=MIXS.VOCAB.water_ammonium, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_atmospheric_data = Slot(uri=MIXS['0001097'], name="water_atmospheric_data", curie=MIXS.curie('0001097'),
                   model_uri=MIXS.VOCAB.water_atmospheric_data, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_bacteria_carb_prod = Slot(uri=MIXS['0000173'], name="water_bacteria_carb_prod", curie=MIXS.curie('0000173'),
                   model_uri=MIXS.VOCAB.water_bacteria_carb_prod, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_bac_prod = Slot(uri=MIXS['0000683'], name="water_bac_prod", curie=MIXS.curie('0000683'),
                   model_uri=MIXS.VOCAB.water_bac_prod, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_bac_resp = Slot(uri=MIXS['0000684'], name="water_bac_resp", curie=MIXS.curie('0000684'),
                   model_uri=MIXS.VOCAB.water_bac_resp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_biomass = Slot(uri=MIXS['0000174'], name="water_biomass", curie=MIXS.curie('0000174'),
                   model_uri=MIXS.VOCAB.water_biomass, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_bishomohopanol = Slot(uri=MIXS['0000175'], name="water_bishomohopanol", curie=MIXS.curie('0000175'),
                   model_uri=MIXS.VOCAB.water_bishomohopanol, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_bromide = Slot(uri=MIXS['0000176'], name="water_bromide", curie=MIXS.curie('0000176'),
                   model_uri=MIXS.VOCAB.water_bromide, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_calcium = Slot(uri=MIXS['0000432'], name="water_calcium", curie=MIXS.curie('0000432'),
                   model_uri=MIXS.VOCAB.water_calcium, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_carb_nitro_ratio = Slot(uri=MIXS['0000310'], name="water_carb_nitro_ratio", curie=MIXS.curie('0000310'),
                   model_uri=MIXS.VOCAB.water_carb_nitro_ratio, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_chem_administration = Slot(uri=MIXS['0000751'], name="water_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.water_chem_administration, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_chloride = Slot(uri=MIXS['0000429'], name="water_chloride", curie=MIXS.curie('0000429'),
                   model_uri=MIXS.VOCAB.water_chloride, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_chlorophyll = Slot(uri=MIXS['0000177'], name="water_chlorophyll", curie=MIXS.curie('0000177'),
                   model_uri=MIXS.VOCAB.water_chlorophyll, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_conduc = Slot(uri=MIXS['0000692'], name="water_conduc", curie=MIXS.curie('0000692'),
                   model_uri=MIXS.VOCAB.water_conduc, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_density = Slot(uri=MIXS['0000435'], name="water_density", curie=MIXS.curie('0000435'),
                   model_uri=MIXS.VOCAB.water_density, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diether_lipids = Slot(uri=MIXS['0000178'], name="water_diether_lipids", curie=MIXS.curie('0000178'),
                   model_uri=MIXS.VOCAB.water_diether_lipids, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_diss_carb_dioxide = Slot(uri=MIXS['0000436'], name="water_diss_carb_dioxide", curie=MIXS.curie('0000436'),
                   model_uri=MIXS.VOCAB.water_diss_carb_dioxide, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_hydrogen = Slot(uri=MIXS['0000179'], name="water_diss_hydrogen", curie=MIXS.curie('0000179'),
                   model_uri=MIXS.VOCAB.water_diss_hydrogen, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_inorg_carb = Slot(uri=MIXS['0000434'], name="water_diss_inorg_carb", curie=MIXS.curie('0000434'),
                   model_uri=MIXS.VOCAB.water_diss_inorg_carb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_inorg_nitro = Slot(uri=MIXS['0000698'], name="water_diss_inorg_nitro", curie=MIXS.curie('0000698'),
                   model_uri=MIXS.VOCAB.water_diss_inorg_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_inorg_phosp = Slot(uri=MIXS['0000106'], name="water_diss_inorg_phosp", curie=MIXS.curie('0000106'),
                   model_uri=MIXS.VOCAB.water_diss_inorg_phosp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_org_carb = Slot(uri=MIXS['0000433'], name="water_diss_org_carb", curie=MIXS.curie('0000433'),
                   model_uri=MIXS.VOCAB.water_diss_org_carb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_org_nitro = Slot(uri=MIXS['0000162'], name="water_diss_org_nitro", curie=MIXS.curie('0000162'),
                   model_uri=MIXS.VOCAB.water_diss_org_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_diss_oxygen = Slot(uri=MIXS['0000119'], name="water_diss_oxygen", curie=MIXS.curie('0000119'),
                   model_uri=MIXS.VOCAB.water_diss_oxygen, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_down_par = Slot(uri=MIXS['0000703'], name="water_down_par", curie=MIXS.curie('0000703'),
                   model_uri=MIXS.VOCAB.water_down_par, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_fluor = Slot(uri=MIXS['0000704'], name="water_fluor", curie=MIXS.curie('0000704'),
                   model_uri=MIXS.VOCAB.water_fluor, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_glucosidase_act = Slot(uri=MIXS['0000137'], name="water_glucosidase_act", curie=MIXS.curie('0000137'),
                   model_uri=MIXS.VOCAB.water_glucosidase_act, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_light_intensity = Slot(uri=MIXS['0000706'], name="water_light_intensity", curie=MIXS.curie('0000706'),
                   model_uri=MIXS.VOCAB.water_light_intensity, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_magnesium = Slot(uri=MIXS['0000431'], name="water_magnesium", curie=MIXS.curie('0000431'),
                   model_uri=MIXS.VOCAB.water_magnesium, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_mean_frict_vel = Slot(uri=MIXS['0000498'], name="water_mean_frict_vel", curie=MIXS.curie('0000498'),
                   model_uri=MIXS.VOCAB.water_mean_frict_vel, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_mean_peak_frict_vel = Slot(uri=MIXS['0000502'], name="water_mean_peak_frict_vel", curie=MIXS.curie('0000502'),
                   model_uri=MIXS.VOCAB.water_mean_peak_frict_vel, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_misc_param = Slot(uri=MIXS['0000752'], name="water_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.water_misc_param, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_n_alkanes = Slot(uri=MIXS['0000503'], name="water_n_alkanes", curie=MIXS.curie('0000503'),
                   model_uri=MIXS.VOCAB.water_n_alkanes, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_nitrate = Slot(uri=MIXS['0000425'], name="water_nitrate", curie=MIXS.curie('0000425'),
                   model_uri=MIXS.VOCAB.water_nitrate, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_nitrite = Slot(uri=MIXS['0000426'], name="water_nitrite", curie=MIXS.curie('0000426'),
                   model_uri=MIXS.VOCAB.water_nitrite, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_nitro = Slot(uri=MIXS['0000504'], name="water_nitro", curie=MIXS.curie('0000504'),
                   model_uri=MIXS.VOCAB.water_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_org_carb = Slot(uri=MIXS['0000508'], name="water_org_carb", curie=MIXS.curie('0000508'),
                   model_uri=MIXS.VOCAB.water_org_carb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_org_matter = Slot(uri=MIXS['0000204'], name="water_org_matter", curie=MIXS.curie('0000204'),
                   model_uri=MIXS.VOCAB.water_org_matter, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_org_nitro = Slot(uri=MIXS['0000205'], name="water_org_nitro", curie=MIXS.curie('0000205'),
                   model_uri=MIXS.VOCAB.water_org_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_organism_count = Slot(uri=MIXS['0000103'], name="water_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.water_organism_count, domain=Water, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.water_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="water_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.water_oxy_stat_samp, domain=Water, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.water_ph = Slot(uri=MIXS['0001001'], name="water_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.water_ph, domain=Water, range=Optional[float])

slots.water_part_org_carb = Slot(uri=MIXS['0000515'], name="water_part_org_carb", curie=MIXS.curie('0000515'),
                   model_uri=MIXS.VOCAB.water_part_org_carb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_part_org_nitro = Slot(uri=MIXS['0000719'], name="water_part_org_nitro", curie=MIXS.curie('0000719'),
                   model_uri=MIXS.VOCAB.water_part_org_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_perturbation = Slot(uri=MIXS['0000754'], name="water_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.water_perturbation, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_petroleum_hydrocarb = Slot(uri=MIXS['0000516'], name="water_petroleum_hydrocarb", curie=MIXS.curie('0000516'),
                   model_uri=MIXS.VOCAB.water_petroleum_hydrocarb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_phaeopigments = Slot(uri=MIXS['0000180'], name="water_phaeopigments", curie=MIXS.curie('0000180'),
                   model_uri=MIXS.VOCAB.water_phaeopigments, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_phosphate = Slot(uri=MIXS['0000505'], name="water_phosphate", curie=MIXS.curie('0000505'),
                   model_uri=MIXS.VOCAB.water_phosphate, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_phosplipid_fatt_acid = Slot(uri=MIXS['0000181'], name="water_phosplipid_fatt_acid", curie=MIXS.curie('0000181'),
                   model_uri=MIXS.VOCAB.water_phosplipid_fatt_acid, domain=Water, range=Optional[Union[str, List[str]]])

slots.water_photon_flux = Slot(uri=MIXS['0000725'], name="water_photon_flux", curie=MIXS.curie('0000725'),
                   model_uri=MIXS.VOCAB.water_photon_flux, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_potassium = Slot(uri=MIXS['0000430'], name="water_potassium", curie=MIXS.curie('0000430'),
                   model_uri=MIXS.VOCAB.water_potassium, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_pressure = Slot(uri=MIXS['0000412'], name="water_pressure", curie=MIXS.curie('0000412'),
                   model_uri=MIXS.VOCAB.water_pressure, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_primary_prod = Slot(uri=MIXS['0000728'], name="water_primary_prod", curie=MIXS.curie('0000728'),
                   model_uri=MIXS.VOCAB.water_primary_prod, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_redox_potential = Slot(uri=MIXS['0000182'], name="water_redox_potential", curie=MIXS.curie('0000182'),
                   model_uri=MIXS.VOCAB.water_redox_potential, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_salinity = Slot(uri=MIXS['0000183'], name="water_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.water_salinity, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_samp_store_dur = Slot(uri=MIXS['0000116'], name="water_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.water_samp_store_dur, domain=Water, range=Optional[str])

slots.water_samp_store_loc = Slot(uri=MIXS['0000755'], name="water_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.water_samp_store_loc, domain=Water, range=Optional[str])

slots.water_samp_store_temp = Slot(uri=MIXS['0000110'], name="water_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.water_samp_store_temp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="water_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.water_samp_vol_we_dna_ext, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_silicate = Slot(uri=MIXS['0000184'], name="water_silicate", curie=MIXS.curie('0000184'),
                   model_uri=MIXS.VOCAB.water_silicate, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_size_frac_low = Slot(uri=MIXS['0000735'], name="water_size_frac_low", curie=MIXS.curie('0000735'),
                   model_uri=MIXS.VOCAB.water_size_frac_low, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_size_frac_up = Slot(uri=MIXS['0000736'], name="water_size_frac_up", curie=MIXS.curie('0000736'),
                   model_uri=MIXS.VOCAB.water_size_frac_up, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_sodium = Slot(uri=MIXS['0000428'], name="water_sodium", curie=MIXS.curie('0000428'),
                   model_uri=MIXS.VOCAB.water_sodium, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_soluble_react_phosp = Slot(uri=MIXS['0000738'], name="water_soluble_react_phosp", curie=MIXS.curie('0000738'),
                   model_uri=MIXS.VOCAB.water_soluble_react_phosp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_sulfate = Slot(uri=MIXS['0000423'], name="water_sulfate", curie=MIXS.curie('0000423'),
                   model_uri=MIXS.VOCAB.water_sulfate, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_sulfide = Slot(uri=MIXS['0000424'], name="water_sulfide", curie=MIXS.curie('0000424'),
                   model_uri=MIXS.VOCAB.water_sulfide, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_suspend_part_matter = Slot(uri=MIXS['0000741'], name="water_suspend_part_matter", curie=MIXS.curie('0000741'),
                   model_uri=MIXS.VOCAB.water_suspend_part_matter, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_temp = Slot(uri=MIXS['0000113'], name="water_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.water_temp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tidal_stage = Slot(uri=MIXS['0000750'], name="water_tidal_stage", curie=MIXS.curie('0000750'),
                   model_uri=MIXS.VOCAB.water_tidal_stage, domain=Water, range=Optional[Union[str, "TidalStageEnum"]])

slots.water_tot_depth_water_col = Slot(uri=MIXS['0000634'], name="water_tot_depth_water_col", curie=MIXS.curie('0000634'),
                   model_uri=MIXS.VOCAB.water_tot_depth_water_col, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tot_diss_nitro = Slot(uri=MIXS['0000744'], name="water_tot_diss_nitro", curie=MIXS.curie('0000744'),
                   model_uri=MIXS.VOCAB.water_tot_diss_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tot_inorg_nitro = Slot(uri=MIXS['0000745'], name="water_tot_inorg_nitro", curie=MIXS.curie('0000745'),
                   model_uri=MIXS.VOCAB.water_tot_inorg_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tot_nitro = Slot(uri=MIXS['0000102'], name="water_tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.water_tot_nitro, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tot_part_carb = Slot(uri=MIXS['0000747'], name="water_tot_part_carb", curie=MIXS.curie('0000747'),
                   model_uri=MIXS.VOCAB.water_tot_part_carb, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_tot_phosp = Slot(uri=MIXS['0000117'], name="water_tot_phosp", curie=MIXS.curie('0000117'),
                   model_uri=MIXS.VOCAB.water_tot_phosp, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_turbidity = Slot(uri=MIXS['0000191'], name="water_turbidity", curie=MIXS.curie('0000191'),
                   model_uri=MIXS.VOCAB.water_turbidity, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.water_water_current = Slot(uri=MIXS['0000203'], name="water_water_current", curie=MIXS.curie('0000203'),
                   model_uri=MIXS.VOCAB.water_water_current, domain=Water, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_sample_name = Slot(uri=MIXS['0001107'], name="symbiont-associated_sample_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.symbiont_associated_sample_name, domain=Symbiont-associated, range=str)

slots.symbiont_associated_project_name = Slot(uri=MIXS['0000092'], name="symbiont-associated_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.symbiont_associated_project_name, domain=Symbiont-associated, range=str)

slots.symbiont_associated_lat_lon = Slot(uri=MIXS['0000009'], name="symbiont-associated_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.symbiont_associated_lat_lon, domain=Symbiont-associated, range=str)

slots.symbiont_associated_geo_loc_name = Slot(uri=MIXS['0000010'], name="symbiont-associated_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.symbiont_associated_geo_loc_name, domain=Symbiont-associated, range=str)

slots.symbiont_associated_collection_date = Slot(uri=MIXS['0000011'], name="symbiont-associated_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.symbiont_associated_collection_date, domain=Symbiont-associated, range=Union[str, XSDDate])

slots.symbiont_associated_env_broad_scale = Slot(uri=MIXS['0000012'], name="symbiont-associated_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.symbiont_associated_env_broad_scale, domain=Symbiont-associated, range=str)

slots.symbiont_associated_env_local_scale = Slot(uri=MIXS['0000013'], name="symbiont-associated_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.symbiont_associated_env_local_scale, domain=Symbiont-associated, range=str)

slots.symbiont_associated_env_medium = Slot(uri=MIXS['0000014'], name="symbiont-associated_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.symbiont_associated_env_medium, domain=Symbiont-associated, range=str)

slots.symbiont_associated_alt = Slot(uri=MIXS['0000094'], name="symbiont-associated_alt", curie=MIXS.curie('0000094'),
                   model_uri=MIXS.VOCAB.symbiont_associated_alt, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_depth = Slot(uri=MIXS['0000018'], name="symbiont-associated_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.symbiont_associated_depth, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_elev = Slot(uri=MIXS['0000093'], name="symbiont-associated_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.symbiont_associated_elev, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_subject_id = Slot(uri=MIXS['0000861'], name="symbiont-associated_host_subject_id", curie=MIXS.curie('0000861'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_subject_id, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_common_name = Slot(uri=MIXS['0000248'], name="symbiont-associated_host_common_name", curie=MIXS.curie('0000248'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_common_name, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_taxid = Slot(uri=MIXS['0000250'], name="symbiont-associated_host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_taxid, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_source_mat_id = Slot(uri=MIXS['0000026'], name="symbiont-associated_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.symbiont_associated_source_mat_id, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_dependence = Slot(uri=MIXS['0001315'], name="symbiont-associated_host_dependence", curie=MIXS.curie('0001315'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_dependence, domain=Symbiont-associated, range=str)

slots.symbiont_associated_type_of_symbiosis = Slot(uri=MIXS['0001307'], name="symbiont-associated_type_of_symbiosis", curie=MIXS.curie('0001307'),
                   model_uri=MIXS.VOCAB.symbiont_associated_type_of_symbiosis, domain=Symbiont-associated, range=Optional[Union[str, "TypeOfSymbiosisEnum"]])

slots.symbiont_associated_sym_life_cycle_type = Slot(uri=MIXS['0001300'], name="symbiont-associated_sym_life_cycle_type", curie=MIXS.curie('0001300'),
                   model_uri=MIXS.VOCAB.symbiont_associated_sym_life_cycle_type, domain=Symbiont-associated, range=str)

slots.symbiont_associated_host_life_stage = Slot(uri=MIXS['0000251'], name="symbiont-associated_host_life_stage", curie=MIXS.curie('0000251'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_life_stage, domain=Symbiont-associated, range=str)

slots.symbiont_associated_host_age = Slot(uri=MIXS['0000255'], name="symbiont-associated_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_age, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_sex = Slot(uri=MIXS['0000811'], name="symbiont-associated_host_sex", curie=MIXS.curie('0000811'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_sex, domain=Symbiont-associated, range=Optional[Union[str, "HostSexEnum"]])

slots.symbiont_associated_mode_transmission = Slot(uri=MIXS['0001312'], name="symbiont-associated_mode_transmission", curie=MIXS.curie('0001312'),
                   model_uri=MIXS.VOCAB.symbiont_associated_mode_transmission, domain=Symbiont-associated, range=Optional[Union[str, "ModeTransmissionEnum"]])

slots.symbiont_associated_route_transmission = Slot(uri=MIXS['0001316'], name="symbiont-associated_route_transmission", curie=MIXS.curie('0001316'),
                   model_uri=MIXS.VOCAB.symbiont_associated_route_transmission, domain=Symbiont-associated, range=Optional[Union[str, "RouteTransmissionEnum"]])

slots.symbiont_associated_host_body_habitat = Slot(uri=MIXS['0000866'], name="symbiont-associated_host_body_habitat", curie=MIXS.curie('0000866'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_body_habitat, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_body_site = Slot(uri=MIXS['0000867'], name="symbiont-associated_host_body_site", curie=MIXS.curie('0000867'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_body_site, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_body_product = Slot(uri=MIXS['0000888'], name="symbiont-associated_host_body_product", curie=MIXS.curie('0000888'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_body_product, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_tot_mass = Slot(uri=MIXS['0000263'], name="symbiont-associated_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_tot_mass, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_height = Slot(uri=MIXS['0000264'], name="symbiont-associated_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_height, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_length = Slot(uri=MIXS['0000256'], name="symbiont-associated_host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_length, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_growth_cond = Slot(uri=MIXS['0000871'], name="symbiont-associated_host_growth_cond", curie=MIXS.curie('0000871'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_growth_cond, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_substrate = Slot(uri=MIXS['0000252'], name="symbiont-associated_host_substrate", curie=MIXS.curie('0000252'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_substrate, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_family_relationship = Slot(uri=MIXS['0000872'], name="symbiont-associated_host_family_relationship", curie=MIXS.curie('0000872'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_family_relationship, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_infra_specific_name = Slot(uri=MIXS['0000253'], name="symbiont-associated_host_infra_specific_name", curie=MIXS.curie('0000253'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_infra_specific_name, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_infra_specific_rank = Slot(uri=MIXS['0000254'], name="symbiont-associated_host_infra_specific_rank", curie=MIXS.curie('0000254'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_infra_specific_rank, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_genotype = Slot(uri=MIXS['0000365'], name="symbiont-associated_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_genotype, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_phenotype = Slot(uri=MIXS['0000874'], name="symbiont-associated_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_phenotype, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_dry_mass = Slot(uri=MIXS['0000257'], name="symbiont-associated_host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_dry_mass, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_color = Slot(uri=MIXS['0000260'], name="symbiont-associated_host_color", curie=MIXS.curie('0000260'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_color, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_shape = Slot(uri=MIXS['0000261'], name="symbiont-associated_host_shape", curie=MIXS.curie('0000261'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_shape, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_gravidity = Slot(uri=MIXS['0000875'], name="symbiont-associated_gravidity", curie=MIXS.curie('0000875'),
                   model_uri=MIXS.VOCAB.symbiont_associated_gravidity, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_number = Slot(uri=MIXS['0001305'], name="symbiont-associated_host_number", curie=MIXS.curie('0001305'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_number, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_symbiont = Slot(uri=MIXS['0001298'], name="symbiont-associated_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_symbiont, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_host_specificity = Slot(uri=MIXS['0001308'], name="symbiont-associated_host_specificity", curie=MIXS.curie('0001308'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_specificity, domain=Symbiont-associated, range=Optional[Union[str, "HostSpecificityEnum"]])

slots.symbiont_associated_symbiont_host_role = Slot(uri=MIXS['0001303'], name="symbiont-associated_symbiont_host_role", curie=MIXS.curie('0001303'),
                   model_uri=MIXS.VOCAB.symbiont_associated_symbiont_host_role, domain=Symbiont-associated, range=Optional[Union[str, "SymbiontHostRoleEnum"]])

slots.symbiont_associated_host_cellular_loc = Slot(uri=MIXS['0001313'], name="symbiont-associated_host_cellular_loc", curie=MIXS.curie('0001313'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_cellular_loc, domain=Symbiont-associated, range=Optional[Union[str, "HostCellularLocEnum"]])

slots.symbiont_associated_association_duration = Slot(uri=MIXS['0001299'], name="symbiont-associated_association_duration", curie=MIXS.curie('0001299'),
                   model_uri=MIXS.VOCAB.symbiont_associated_association_duration, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_host_of_host_coinf = Slot(uri=MIXS['0001310'], name="symbiont-associated_host_of_host_coinf", curie=MIXS.curie('0001310'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_coinf, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_name = Slot(uri=MIXS['0001324'], name="symbiont-associated_host_of_host_name", curie=MIXS.curie('0001324'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_name, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_env_loc = Slot(uri=MIXS['0001325'], name="symbiont-associated_host_of_host_env_loc", curie=MIXS.curie('0001325'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_env_loc, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_host_of_host_env_med = Slot(uri=MIXS['0001326'], name="symbiont-associated_host_of_host_env_med", curie=MIXS.curie('0001326'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_env_med, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_taxid = Slot(uri=MIXS['0001306'], name="symbiont-associated_host_of_host_taxid", curie=MIXS.curie('0001306'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_taxid, domain=Symbiont-associated, range=Optional[int])

slots.symbiont_associated_host_of_host_sub_id = Slot(uri=MIXS['0001327'], name="symbiont-associated_host_of_host_sub_id", curie=MIXS.curie('0001327'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_sub_id, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_disease = Slot(uri=MIXS['0001319'], name="symbiont-associated_host_of_host_disease", curie=MIXS.curie('0001319'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_disease, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_host_of_host_fam_rel = Slot(uri=MIXS['0001328'], name="symbiont-associated_host_of_host_fam_rel", curie=MIXS.curie('0001328'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_fam_rel, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_host_of_host_infname = Slot(uri=MIXS['0001329'], name="symbiont-associated_host_of_host_infname", curie=MIXS.curie('0001329'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_infname, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_infrank = Slot(uri=MIXS['0001330'], name="symbiont-associated_host_of_host_infrank", curie=MIXS.curie('0001330'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_infrank, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_geno = Slot(uri=MIXS['0001331'], name="symbiont-associated_host_of_host_geno", curie=MIXS.curie('0001331'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_geno, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_pheno = Slot(uri=MIXS['0001332'], name="symbiont-associated_host_of_host_pheno", curie=MIXS.curie('0001332'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_pheno, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_gravid = Slot(uri=MIXS['0001333'], name="symbiont-associated_host_of_host_gravid", curie=MIXS.curie('0001333'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_gravid, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_host_of_host_totmass = Slot(uri=MIXS['0001334'], name="symbiont-associated_host_of_host_totmass", curie=MIXS.curie('0001334'),
                   model_uri=MIXS.VOCAB.symbiont_associated_host_of_host_totmass, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_chem_administration = Slot(uri=MIXS['0000751'], name="symbiont-associated_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.symbiont_associated_chem_administration, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_perturbation = Slot(uri=MIXS['0000754'], name="symbiont-associated_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.symbiont_associated_perturbation, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.symbiont_associated_samp_salinity = Slot(uri=MIXS['0000109'], name="symbiont-associated_samp_salinity", curie=MIXS.curie('0000109'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_salinity, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="symbiont-associated_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.symbiont_associated_oxy_stat_samp, domain=Symbiont-associated, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.symbiont_associated_temp = Slot(uri=MIXS['0000113'], name="symbiont-associated_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.symbiont_associated_temp, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_organism_count = Slot(uri=MIXS['0000103'], name="symbiont-associated_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.symbiont_associated_organism_count, domain=Symbiont-associated, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.symbiont_associated_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="symbiont-associated_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_vol_we_dna_ext, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_samp_store_temp = Slot(uri=MIXS['0000110'], name="symbiont-associated_samp_store_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_store_temp, domain=Symbiont-associated, range=Optional[Union[dict, "QuantityValue"]])

slots.symbiont_associated_samp_store_dur = Slot(uri=MIXS['0000116'], name="symbiont-associated_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_store_dur, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_samp_store_loc = Slot(uri=MIXS['0000755'], name="symbiont-associated_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_store_loc, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_samp_store_sol = Slot(uri=MIXS['0001317'], name="symbiont-associated_samp_store_sol", curie=MIXS.curie('0001317'),
                   model_uri=MIXS.VOCAB.symbiont_associated_samp_store_sol, domain=Symbiont-associated, range=Optional[str])

slots.symbiont_associated_misc_param = Slot(uri=MIXS['0000752'], name="symbiont-associated_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.symbiont_associated_misc_param, domain=Symbiont-associated, range=Optional[Union[str, List[str]]])

slots.food_human_foods_samp_name = Slot(uri=MIXS['0001107'], name="food-human foods_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_name, domain=Food-humanFoods, range=str)

slots.food_human_foods_project_name = Slot(uri=MIXS['0000092'], name="food-human foods_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.food_human_foods_project_name, domain=Food-humanFoods, range=str)

slots.food_human_foods_lat_lon = Slot(uri=MIXS['0000009'], name="food-human foods_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.food_human_foods_lat_lon, domain=Food-humanFoods, range=str)

slots.food_human_foods_geo_loc_name = Slot(uri=MIXS['0000010'], name="food-human foods_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.food_human_foods_geo_loc_name, domain=Food-humanFoods, range=str)

slots.food_human_foods_collection_date = Slot(uri=MIXS['0000011'], name="food-human foods_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.food_human_foods_collection_date, domain=Food-humanFoods, range=Union[str, XSDDate])

slots.food_human_foods_env_broad_scale = Slot(uri=MIXS['0000012'], name="food-human foods_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.food_human_foods_env_broad_scale, domain=Food-humanFoods, range=str)

slots.food_human_foods_env_local_scale = Slot(uri=MIXS['0000013'], name="food-human foods_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.food_human_foods_env_local_scale, domain=Food-humanFoods, range=str)

slots.food_human_foods_env_medium = Slot(uri=MIXS['0000014'], name="food-human foods_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.food_human_foods_env_medium, domain=Food-humanFoods, range=str)

slots.food_human_foods_seq_meth = Slot(uri=MIXS['0000050'], name="food-human foods_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.food_human_foods_seq_meth, domain=Food-humanFoods, range=str)

slots.food_human_foods_samp_size = Slot(uri=MIXS['0000001'], name="food-human foods_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_size, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_collect_device = Slot(uri=MIXS['0000002'], name="food-human foods_samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_collect_device, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_experimental_factor = Slot(uri=MIXS['0000008'], name="food-human foods_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.food_human_foods_experimental_factor, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="food-human foods_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.food_human_foods_nucl_acid_ext, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_organism_count = Slot(uri=MIXS['0000103'], name="food-human foods_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.food_human_foods_organism_count, domain=Food-humanFoods, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.food_human_foods_spikein_count = Slot(uri=MIXS['0001335'], name="food-human foods_spikein_count", curie=MIXS.curie('0001335'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_count, domain=Food-humanFoods, range=Optional[Union[str, "SpikeinCountEnum"]])

slots.food_human_foods_samp_stor_temp = Slot(uri=MIXS['0000110'], name="food-human foods_samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_stor_temp, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_stor_dur = Slot(uri=MIXS['0000116'], name="food-human foods_samp_stor_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_stor_dur, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="food-human foods_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_vol_we_dna_ext, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_pool_dna_extracts = Slot(uri=MIXS['0000325'], name="food-human foods_pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.food_human_foods_pool_dna_extracts, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_temp = Slot(uri=MIXS['0000113'], name="food-human foods_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.food_human_foods_temp, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_stor_loc = Slot(uri=MIXS['0000755'], name="food-human foods_samp_stor_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_stor_loc, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_genetic_mod = Slot(uri=MIXS['0000859'], name="food-human foods_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.food_human_foods_genetic_mod, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_perturbation = Slot(uri=MIXS['0000754'], name="food-human foods_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.food_human_foods_perturbation, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_coll_site_geo_feat = Slot(uri=MIXS['0001183'], name="food-human foods_coll_site_geo_feat", curie=MIXS.curie('0001183'),
                   model_uri=MIXS.VOCAB.food_human_foods_coll_site_geo_feat, domain=Food-humanFoods, range=str)

slots.food_human_foods_food_product_type = Slot(uri=MIXS['0001184'], name="food-human foods_food_product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_product_type, domain=Food-humanFoods, range=Union[str, List[str]])

slots.food_human_foods_IFSAC_category = Slot(uri=MIXS['0001179'], name="food-human foods_IFSAC_category", curie=MIXS.curie('0001179'),
                   model_uri=MIXS.VOCAB.food_human_foods_IFSAC_category, domain=Food-humanFoods, range=Union[str, List[str]])

slots.food_human_foods_ferm_chem_add = Slot(uri=MIXS['0001185'], name="food-human foods_ferm_chem_add", curie=MIXS.curie('0001185'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_chem_add, domain=Food-humanFoods, range=Optional[Union[Union[dict, "QuantityValue"], List[Union[dict, "QuantityValue"]]]])

slots.food_human_foods_ferm_chem_add_perc = Slot(uri=MIXS['0001186'], name="food-human foods_ferm_chem_add_perc", curie=MIXS.curie('0001186'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_chem_add_perc, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_ferm_headspace_oxy = Slot(uri=MIXS['0001187'], name="food-human foods_ferm_headspace_oxy", curie=MIXS.curie('0001187'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_headspace_oxy, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_ferm_medium = Slot(uri=MIXS['0001188'], name="food-human foods_ferm_medium", curie=MIXS.curie('0001188'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_medium, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_ferm_pH = Slot(uri=MIXS['0001189'], name="food-human foods_ferm_pH", curie=MIXS.curie('0001189'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_pH, domain=Food-humanFoods, range=Optional[float])

slots.food_human_foods_ferm_rel_humidity = Slot(uri=MIXS['0001190'], name="food-human foods_ferm_rel_humidity", curie=MIXS.curie('0001190'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_rel_humidity, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_ferm_temp = Slot(uri=MIXS['0001191'], name="food-human foods_ferm_temp", curie=MIXS.curie('0001191'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_temp, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_ferm_time = Slot(uri=MIXS['0001192'], name="food-human foods_ferm_time", curie=MIXS.curie('0001192'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_time, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_ferm_vessel = Slot(uri=MIXS['0001193'], name="food-human foods_ferm_vessel", curie=MIXS.curie('0001193'),
                   model_uri=MIXS.VOCAB.food_human_foods_ferm_vessel, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_bacterial_density = Slot(uri=MIXS['0001194'], name="food-human foods_bacterial_density", curie=MIXS.curie('0001194'),
                   model_uri=MIXS.VOCAB.food_human_foods_bacterial_density, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_cons_food_stor_dur = Slot(uri=MIXS['0001195'], name="food-human foods_cons_food_stor_dur", curie=MIXS.curie('0001195'),
                   model_uri=MIXS.VOCAB.food_human_foods_cons_food_stor_dur, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_cons_food_stor_temp = Slot(uri=MIXS['0001196'], name="food-human foods_cons_food_stor_temp", curie=MIXS.curie('0001196'),
                   model_uri=MIXS.VOCAB.food_human_foods_cons_food_stor_temp, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_cons_purch_date = Slot(uri=MIXS['0001197'], name="food-human foods_cons_purch_date", curie=MIXS.curie('0001197'),
                   model_uri=MIXS.VOCAB.food_human_foods_cons_purch_date, domain=Food-humanFoods, range=Optional[Union[str, XSDDate]])

slots.food_human_foods_cons_qty_purchased = Slot(uri=MIXS['0001198'], name="food-human foods_cons_qty_purchased", curie=MIXS.curie('0001198'),
                   model_uri=MIXS.VOCAB.food_human_foods_cons_qty_purchased, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_cult_isol_date = Slot(uri=MIXS['0001181'], name="food-human foods_cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.food_human_foods_cult_isol_date, domain=Food-humanFoods, range=Optional[Union[str, XSDDate]])

slots.food_human_foods_cult_result = Slot(uri=MIXS['0001117'], name="food-human foods_cult_result", curie=MIXS.curie('0001117'),
                   model_uri=MIXS.VOCAB.food_human_foods_cult_result, domain=Food-humanFoods, range=Optional[Union[str, "CultResultEnum"]])

slots.food_human_foods_cult_result_org = Slot(uri=MIXS['0001118'], name="food-human foods_cult_result_org", curie=MIXS.curie('0001118'),
                   model_uri=MIXS.VOCAB.food_human_foods_cult_result_org, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_cult_target = Slot(uri=MIXS['0001119'], name="food-human foods_cult_target", curie=MIXS.curie('0001119'),
                   model_uri=MIXS.VOCAB.food_human_foods_cult_target, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_dietary_claim_use = Slot(uri=MIXS['0001199'], name="food-human foods_dietary_claim_use", curie=MIXS.curie('0001199'),
                   model_uri=MIXS.VOCAB.food_human_foods_dietary_claim_use, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_enrichment_protocol = Slot(uri=MIXS['0001177'], name="food-human foods_enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.food_human_foods_enrichment_protocol, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_additive = Slot(uri=MIXS['0001200'], name="food-human foods_food_additive", curie=MIXS.curie('0001200'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_additive, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_allergen_label = Slot(uri=MIXS['0001201'], name="food-human foods_food_allergen_label", curie=MIXS.curie('0001201'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_allergen_label, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_contact_surf = Slot(uri=MIXS['0001131'], name="food-human foods_food_contact_surf", curie=MIXS.curie('0001131'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_contact_surf, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_contain_wrap = Slot(uri=MIXS['0001132'], name="food-human foods_food_contain_wrap", curie=MIXS.curie('0001132'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_contain_wrap, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_cooking_proc = Slot(uri=MIXS['0001202'], name="food-human foods_food_cooking_proc", curie=MIXS.curie('0001202'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_cooking_proc, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_dis_point = Slot(uri=MIXS['0001203'], name="food-human foods_food_dis_point", curie=MIXS.curie('0001203'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_dis_point, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_ingredient = Slot(uri=MIXS['0001205'], name="food-human foods_food_ingredient", curie=MIXS.curie('0001205'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_ingredient, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_name_status = Slot(uri=MIXS['0001206'], name="food-human foods_food_name_status", curie=MIXS.curie('0001206'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_name_status, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_origin = Slot(uri=MIXS['0001207'], name="food-human foods_food_origin", curie=MIXS.curie('0001207'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_origin, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_pack_capacity = Slot(uri=MIXS['0001208'], name="food-human foods_food_pack_capacity", curie=MIXS.curie('0001208'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_pack_capacity, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_food_pack_integrity = Slot(uri=MIXS['0001209'], name="food-human foods_food_pack_integrity", curie=MIXS.curie('0001209'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_pack_integrity, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_pack_medium = Slot(uri=MIXS['0001134'], name="food-human foods_food_pack_medium", curie=MIXS.curie('0001134'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_pack_medium, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_preserv_proc = Slot(uri=MIXS['0001135'], name="food-human foods_food_preserv_proc", curie=MIXS.curie('0001135'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_preserv_proc, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_prior_contact = Slot(uri=MIXS['0001210'], name="food-human foods_food_prior_contact", curie=MIXS.curie('0001210'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_prior_contact, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_prod = Slot(uri=MIXS['0001211'], name="food-human foods_food_prod", curie=MIXS.curie('0001211'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_prod, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_prod_synonym = Slot(uri=MIXS['0001212'], name="food-human foods_food_prod_synonym", curie=MIXS.curie('0001212'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_prod_synonym, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_product_qual = Slot(uri=MIXS['0001213'], name="food-human foods_food_product_qual", curie=MIXS.curie('0001213'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_product_qual, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_quality_date = Slot(uri=MIXS['0001178'], name="food-human foods_food_quality_date", curie=MIXS.curie('0001178'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_quality_date, domain=Food-humanFoods, range=Optional[str],
                   pattern=re.compile(r'^(best by|best if used by|freeze by||use by);(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'))

slots.food_human_foods_food_source = Slot(uri=MIXS['0001139'], name="food-human foods_food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_source, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_food_trace_list = Slot(uri=MIXS['0001214'], name="food-human foods_food_trace_list", curie=MIXS.curie('0001214'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_trace_list, domain=Food-humanFoods, range=Optional[Union[str, "FoodTraceListEnum"]])

slots.food_human_foods_food_trav_mode = Slot(uri=MIXS['0001137'], name="food-human foods_food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_trav_mode, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_trav_vehic = Slot(uri=MIXS['0001138'], name="food-human foods_food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_trav_vehic, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_food_treat_proc = Slot(uri=MIXS['0001140'], name="food-human foods_food_treat_proc", curie=MIXS.curie('0001140'),
                   model_uri=MIXS.VOCAB.food_human_foods_food_treat_proc, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_HACCP_term = Slot(uri=MIXS['0001215'], name="food-human foods_HACCP_term", curie=MIXS.curie('0001215'),
                   model_uri=MIXS.VOCAB.food_human_foods_HACCP_term, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_intended_consumer = Slot(uri=MIXS['0001144'], name="food-human foods_intended_consumer", curie=MIXS.curie('0001144'),
                   model_uri=MIXS.VOCAB.food_human_foods_intended_consumer, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_library_prep_kit = Slot(uri=MIXS['0001145'], name="food-human foods_library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.food_human_foods_library_prep_kit, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_lot_number = Slot(uri=MIXS['0001147'], name="food-human foods_lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.food_human_foods_lot_number, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_microb_cult_med = Slot(uri=MIXS['0001216'], name="food-human foods_microb_cult_med", curie=MIXS.curie('0001216'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_cult_med, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_microb_start = Slot(uri=MIXS['0001217'], name="food-human foods_microb_start", curie=MIXS.curie('0001217'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_microb_start_count = Slot(uri=MIXS['0001218'], name="food-human foods_microb_start_count", curie=MIXS.curie('0001218'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start_count, domain=Food-humanFoods, range=Optional[Union[str, "MicrobStartCountEnum"]])

slots.food_human_foods_microb_start_inoc = Slot(uri=MIXS['0001219'], name="food-human foods_microb_start_inoc", curie=MIXS.curie('0001219'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start_inoc, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_microb_start_prep = Slot(uri=MIXS['0001220'], name="food-human foods_microb_start_prep", curie=MIXS.curie('0001220'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start_prep, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_microb_start_source = Slot(uri=MIXS['0001221'], name="food-human foods_microb_start_source", curie=MIXS.curie('0001221'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start_source, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_microb_start_taxID = Slot(uri=MIXS['0001222'], name="food-human foods_microb_start_taxID", curie=MIXS.curie('0001222'),
                   model_uri=MIXS.VOCAB.food_human_foods_microb_start_taxID, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_nucl_acid_ext_kit = Slot(uri=MIXS['0001223'], name="food-human foods_nucl_acid_ext_kit", curie=MIXS.curie('0001223'),
                   model_uri=MIXS.VOCAB.food_human_foods_nucl_acid_ext_kit, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_num_samp_collect = Slot(uri=MIXS['0001224'], name="food-human foods_num_samp_collect", curie=MIXS.curie('0001224'),
                   model_uri=MIXS.VOCAB.food_human_foods_num_samp_collect, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_part_plant_animal = Slot(uri=MIXS['0001149'], name="food-human foods_part_plant_animal", curie=MIXS.curie('0001149'),
                   model_uri=MIXS.VOCAB.food_human_foods_part_plant_animal, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_repository_name = Slot(uri=MIXS['0001152'], name="food-human foods_repository_name", curie=MIXS.curie('0001152'),
                   model_uri=MIXS.VOCAB.food_human_foods_repository_name, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_sample_collec_method = Slot(uri=MIXS['0001225'], name="food-human foods_sample_collec_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.food_human_foods_sample_collec_method, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_pooling = Slot(uri=MIXS['0001153'], name="food-human foods_samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_pooling, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_samp_rep_biol = Slot(uri=MIXS['0001226'], name="food-human foods_samp_rep_biol", curie=MIXS.curie('0001226'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_rep_biol, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_rep_tech = Slot(uri=MIXS['0001227'], name="food-human foods_samp_rep_tech", curie=MIXS.curie('0001227'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_rep_tech, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_source_mat_cat = Slot(uri=MIXS['0001154'], name="food-human foods_samp_source_mat_cat", curie=MIXS.curie('0001154'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_source_mat_cat, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_stor_device = Slot(uri=MIXS['0001228'], name="food-human foods_samp_stor_device", curie=MIXS.curie('0001228'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_stor_device, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_stor_media = Slot(uri=MIXS['0001229'], name="food-human foods_samp_stor_media", curie=MIXS.curie('0001229'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_stor_media, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_transport_cont = Slot(uri=MIXS['0001230'], name="food-human foods_samp_transport_cont", curie=MIXS.curie('0001230'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_transport_cont, domain=Food-humanFoods, range=Optional[Union[str, "SampTransportContEnum"]])

slots.food_human_foods_samp_transport_dur = Slot(uri=MIXS['0001231'], name="food-human foods_samp_transport_dur", curie=MIXS.curie('0001231'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_transport_dur, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_samp_transport_temp = Slot(uri=MIXS['0001232'], name="food-human foods_samp_transport_temp", curie=MIXS.curie('0001232'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_transport_temp, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_samp_purpose = Slot(uri=MIXS['0001151'], name="food-human foods_samp_purpose", curie=MIXS.curie('0001151'),
                   model_uri=MIXS.VOCAB.food_human_foods_samp_purpose, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_sequencing_kit = Slot(uri=MIXS['0001155'], name="food-human foods_sequencing_kit", curie=MIXS.curie('0001155'),
                   model_uri=MIXS.VOCAB.food_human_foods_sequencing_kit, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_sequencing_location = Slot(uri=MIXS['0001156'], name="food-human foods_sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.food_human_foods_sequencing_location, domain=Food-humanFoods, range=Optional[str])

slots.food_human_foods_serovar_or_serotype = Slot(uri=MIXS['0001157'], name="food-human foods_serovar_or_serotype", curie=MIXS.curie('0001157'),
                   model_uri=MIXS.VOCAB.food_human_foods_serovar_or_serotype, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_AMR = Slot(uri=MIXS['0001235'], name="food-human foods_spikein_AMR", curie=MIXS.curie('0001235'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_AMR, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_antibiotic = Slot(uri=MIXS['0001171'], name="food-human foods_spikein_antibiotic", curie=MIXS.curie('0001171'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_antibiotic, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_growth_med = Slot(uri=MIXS['0001169'], name="food-human foods_spikein_growth_med", curie=MIXS.curie('0001169'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_growth_med, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_metal = Slot(uri=MIXS['0001172'], name="food-human foods_spikein_metal", curie=MIXS.curie('0001172'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_metal, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_org = Slot(uri=MIXS['0001167'], name="food-human foods_spikein_org", curie=MIXS.curie('0001167'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_org, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_serovar = Slot(uri=MIXS['0001168'], name="food-human foods_spikein_serovar", curie=MIXS.curie('0001168'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_serovar, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_spikein_strain = Slot(uri=MIXS['0001170'], name="food-human foods_spikein_strain", curie=MIXS.curie('0001170'),
                   model_uri=MIXS.VOCAB.food_human_foods_spikein_strain, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_study_design = Slot(uri=MIXS['0001236'], name="food-human foods_study_design", curie=MIXS.curie('0001236'),
                   model_uri=MIXS.VOCAB.food_human_foods_study_design, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_study_inc_dur = Slot(uri=MIXS['0001237'], name="food-human foods_study_inc_dur", curie=MIXS.curie('0001237'),
                   model_uri=MIXS.VOCAB.food_human_foods_study_inc_dur, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_study_inc_temp = Slot(uri=MIXS['0001238'], name="food-human foods_study_inc_temp", curie=MIXS.curie('0001238'),
                   model_uri=MIXS.VOCAB.food_human_foods_study_inc_temp, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_study_timecourse = Slot(uri=MIXS['0001239'], name="food-human foods_study_timecourse", curie=MIXS.curie('0001239'),
                   model_uri=MIXS.VOCAB.food_human_foods_study_timecourse, domain=Food-humanFoods, range=Optional[Union[dict, "QuantityValue"]])

slots.food_human_foods_study_tmnt = Slot(uri=MIXS['0001240'], name="food-human foods_study_tmnt", curie=MIXS.curie('0001240'),
                   model_uri=MIXS.VOCAB.food_human_foods_study_tmnt, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_human_foods_timepoint = Slot(uri=MIXS['0001173'], name="food-human foods_timepoint", curie=MIXS.curie('0001173'),
                   model_uri=MIXS.VOCAB.food_human_foods_timepoint, domain=Food-humanFoods, range=Optional[float])

slots.food_human_foods_misc_param = Slot(uri=MIXS['0000752'], name="food-human foods_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.food_human_foods_misc_param, domain=Food-humanFoods, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_samp_name = Slot(uri=MIXS['0001107'], name="food-animal and animal feed_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_name, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_project_name = Slot(uri=MIXS['0000092'], name="food-animal and animal feed_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_project_name, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_lat_lon = Slot(uri=MIXS['0000009'], name="food-animal and animal feed_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_lat_lon, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_geo_loc_name = Slot(uri=MIXS['0000010'], name="food-animal and animal feed_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_geo_loc_name, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_collection_date = Slot(uri=MIXS['0000011'], name="food-animal and animal feed_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_collection_date, domain=Food-animalAndAnimalFeed, range=Union[str, XSDDate])

slots.food_animal_and_animal_feed_env_broad_scale = Slot(uri=MIXS['0000012'], name="food-animal and animal feed_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_env_broad_scale, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_env_local_scale = Slot(uri=MIXS['0000013'], name="food-animal and animal feed_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_env_local_scale, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_env_medium = Slot(uri=MIXS['0000014'], name="food-animal and animal feed_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_env_medium, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_seq_meth = Slot(uri=MIXS['0000050'], name="food-animal and animal feed_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_seq_meth, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_samp_size = Slot(uri=MIXS['0000001'], name="food-animal and animal feed_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_size, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_collect_device = Slot(uri=MIXS['0000002'], name="food-animal and animal feed_samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_collect_device, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_experimental_factor = Slot(uri=MIXS['0000008'], name="food-animal and animal feed_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_experimental_factor, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="food-animal and animal feed_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_nucl_acid_ext, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_organism_count = Slot(uri=MIXS['0000103'], name="food-animal and animal feed_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_organism_count, domain=Food-animalAndAnimalFeed, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.food_animal_and_animal_feed_spikein_count = Slot(uri=MIXS['0001335'], name="food-animal and animal feed_spikein_count", curie=MIXS.curie('0001335'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_count, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "SpikeinCountEnum"]])

slots.food_animal_and_animal_feed_samp_stor_temp = Slot(uri=MIXS['0000110'], name="food-animal and animal feed_samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_stor_temp, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_stor_dur = Slot(uri=MIXS['0000116'], name="food-animal and animal feed_samp_stor_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_stor_dur, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="food-animal and animal feed_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_vol_we_dna_ext, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_pool_dna_extracts = Slot(uri=MIXS['0000325'], name="food-animal and animal feed_pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_pool_dna_extracts, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_temp = Slot(uri=MIXS['0000113'], name="food-animal and animal feed_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_temp, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_stor_loc = Slot(uri=MIXS['0000755'], name="food-animal and animal feed_samp_stor_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_stor_loc, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_transport_cont = Slot(uri=MIXS['0001230'], name="food-animal and animal feed_samp_transport_cont", curie=MIXS.curie('0001230'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_transport_cont, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "SampTransportContEnum"]])

slots.food_animal_and_animal_feed_perturbation = Slot(uri=MIXS['0000754'], name="food-animal and animal feed_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_perturbation, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_coll_site_geo_feat = Slot(uri=MIXS['0001183'], name="food-animal and animal feed_coll_site_geo_feat", curie=MIXS.curie('0001183'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_coll_site_geo_feat, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_food_origin = Slot(uri=MIXS['0001207'], name="food-animal and animal feed_food_origin", curie=MIXS.curie('0001207'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_origin, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_food_prod = Slot(uri=MIXS['0001211'], name="food-animal and animal feed_food_prod", curie=MIXS.curie('0001211'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_prod, domain=Food-animalAndAnimalFeed, range=Union[str, List[str]])

slots.food_animal_and_animal_feed_food_product_type = Slot(uri=MIXS['0001184'], name="food-animal and animal feed_food_product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_product_type, domain=Food-animalAndAnimalFeed, range=Union[str, List[str]])

slots.food_animal_and_animal_feed_food_source = Slot(uri=MIXS['0001139'], name="food-animal and animal feed_food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_source, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_IFSAC_category = Slot(uri=MIXS['0001179'], name="food-animal and animal feed_IFSAC_category", curie=MIXS.curie('0001179'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_IFSAC_category, domain=Food-animalAndAnimalFeed, range=Union[str, List[str]])

slots.food_animal_and_animal_feed_intended_consumer = Slot(uri=MIXS['0001144'], name="food-animal and animal feed_intended_consumer", curie=MIXS.curie('0001144'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_intended_consumer, domain=Food-animalAndAnimalFeed, range=Union[str, List[str]])

slots.food_animal_and_animal_feed_samp_purpose = Slot(uri=MIXS['0001151'], name="food-animal and animal feed_samp_purpose", curie=MIXS.curie('0001151'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_purpose, domain=Food-animalAndAnimalFeed, range=str)

slots.food_animal_and_animal_feed_animal_am = Slot(uri=MIXS['0001243'], name="food-animal and animal feed_animal_am", curie=MIXS.curie('0001243'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_am, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_animal_am_dur = Slot(uri=MIXS['0001244'], name="food-animal and animal feed_animal_am_dur", curie=MIXS.curie('0001244'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_am_dur, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_animal_am_freq = Slot(uri=MIXS['0001245'], name="food-animal and animal feed_animal_am_freq", curie=MIXS.curie('0001245'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_am_freq, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_animal_am_route = Slot(uri=MIXS['0001246'], name="food-animal and animal feed_animal_am_route", curie=MIXS.curie('0001246'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_am_route, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_animal_am_use = Slot(uri=MIXS['0001247'], name="food-animal and animal feed_animal_am_use", curie=MIXS.curie('0001247'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_am_use, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_animal_body_cond = Slot(uri=MIXS['0001248'], name="food-animal and animal feed_animal_body_cond", curie=MIXS.curie('0001248'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_body_cond, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "AnimalBodyCondEnum"]])

slots.food_animal_and_animal_feed_animal_diet = Slot(uri=MIXS['0001130'], name="food-animal and animal feed_animal_diet", curie=MIXS.curie('0001130'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_diet, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_animal_feed_equip = Slot(uri=MIXS['0001113'], name="food-animal and animal feed_animal_feed_equip", curie=MIXS.curie('0001113'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_feed_equip, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_animal_group_size = Slot(uri=MIXS['0001129'], name="food-animal and animal feed_animal_group_size", curie=MIXS.curie('0001129'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_group_size, domain=Food-animalAndAnimalFeed, range=Optional[int])

slots.food_animal_and_animal_feed_animal_housing = Slot(uri=MIXS['0001180'], name="food-animal and animal feed_animal_housing", curie=MIXS.curie('0001180'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_housing, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_animal_sex = Slot(uri=MIXS['0001249'], name="food-animal and animal feed_animal_sex", curie=MIXS.curie('0001249'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_animal_sex, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "AnimalSexEnum"]])

slots.food_animal_and_animal_feed_bacterial_density = Slot(uri=MIXS['0001194'], name="food-animal and animal feed_bacterial_density", curie=MIXS.curie('0001194'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_bacterial_density, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_cons_food_stor_dur = Slot(uri=MIXS['0001195'], name="food-animal and animal feed_cons_food_stor_dur", curie=MIXS.curie('0001195'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cons_food_stor_dur, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_cons_food_stor_temp = Slot(uri=MIXS['0001196'], name="food-animal and animal feed_cons_food_stor_temp", curie=MIXS.curie('0001196'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cons_food_stor_temp, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_cons_purch_date = Slot(uri=MIXS['0001197'], name="food-animal and animal feed_cons_purch_date", curie=MIXS.curie('0001197'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cons_purch_date, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, XSDDate]])

slots.food_animal_and_animal_feed_cons_qty_purchased = Slot(uri=MIXS['0001198'], name="food-animal and animal feed_cons_qty_purchased", curie=MIXS.curie('0001198'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cons_qty_purchased, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_cult_isol_date = Slot(uri=MIXS['0001181'], name="food-animal and animal feed_cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cult_isol_date, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, XSDDate]])

slots.food_animal_and_animal_feed_cult_result = Slot(uri=MIXS['0001117'], name="food-animal and animal feed_cult_result", curie=MIXS.curie('0001117'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cult_result, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "CultResultEnum"]])

slots.food_animal_and_animal_feed_cult_result_org = Slot(uri=MIXS['0001118'], name="food-animal and animal feed_cult_result_org", curie=MIXS.curie('0001118'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cult_result_org, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_cult_target = Slot(uri=MIXS['0001119'], name="food-animal and animal feed_cult_target", curie=MIXS.curie('0001119'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_cult_target, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_enrichment_protocol = Slot(uri=MIXS['0001177'], name="food-animal and animal feed_enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_enrichment_protocol, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_food_additive = Slot(uri=MIXS['0001200'], name="food-animal and animal feed_food_additive", curie=MIXS.curie('0001200'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_additive, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_contact_surf = Slot(uri=MIXS['0001131'], name="food-animal and animal feed_food_contact_surf", curie=MIXS.curie('0001131'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_contact_surf, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_contain_wrap = Slot(uri=MIXS['0001132'], name="food-animal and animal feed_food_contain_wrap", curie=MIXS.curie('0001132'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_contain_wrap, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_food_cooking_proc = Slot(uri=MIXS['0001202'], name="food-animal and animal feed_food_cooking_proc", curie=MIXS.curie('0001202'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_cooking_proc, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_dis_point = Slot(uri=MIXS['0001203'], name="food-animal and animal feed_food_dis_point", curie=MIXS.curie('0001203'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_dis_point, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_dis_point_city = Slot(uri=MIXS['0001204'], name="food-animal and animal feed_food_dis_point_city", curie=MIXS.curie('0001204'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_dis_point_city, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_food_ingredient = Slot(uri=MIXS['0001205'], name="food-animal and animal feed_food_ingredient", curie=MIXS.curie('0001205'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_ingredient, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_pack_capacity = Slot(uri=MIXS['0001208'], name="food-animal and animal feed_food_pack_capacity", curie=MIXS.curie('0001208'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_pack_capacity, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_food_pack_integrity = Slot(uri=MIXS['0001209'], name="food-animal and animal feed_food_pack_integrity", curie=MIXS.curie('0001209'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_pack_integrity, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_pack_medium = Slot(uri=MIXS['0001134'], name="food-animal and animal feed_food_pack_medium", curie=MIXS.curie('0001134'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_pack_medium, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_preserv_proc = Slot(uri=MIXS['0001135'], name="food-animal and animal feed_food_preserv_proc", curie=MIXS.curie('0001135'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_preserv_proc, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_prior_contact = Slot(uri=MIXS['0001210'], name="food-animal and animal feed_food_prior_contact", curie=MIXS.curie('0001210'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_prior_contact, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_prod_synonym = Slot(uri=MIXS['0001212'], name="food-animal and animal feed_food_prod_synonym", curie=MIXS.curie('0001212'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_prod_synonym, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_product_qual = Slot(uri=MIXS['0001213'], name="food-animal and animal feed_food_product_qual", curie=MIXS.curie('0001213'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_product_qual, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_food_quality_date = Slot(uri=MIXS['0001178'], name="food-animal and animal feed_food_quality_date", curie=MIXS.curie('0001178'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_quality_date, domain=Food-animalAndAnimalFeed, range=Optional[str],
                   pattern=re.compile(r'^(best by|best if used by|freeze by||use by);(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'))

slots.food_animal_and_animal_feed_food_source_age = Slot(uri=MIXS['0001251'], name="food-animal and animal feed_food_source_age", curie=MIXS.curie('0001251'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_source_age, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_food_trace_list = Slot(uri=MIXS['0001214'], name="food-animal and animal feed_food_trace_list", curie=MIXS.curie('0001214'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_trace_list, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, "FoodTraceListEnum"]])

slots.food_animal_and_animal_feed_food_trav_mode = Slot(uri=MIXS['0001137'], name="food-animal and animal feed_food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_trav_mode, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_trav_vehic = Slot(uri=MIXS['0001138'], name="food-animal and animal feed_food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_trav_vehic, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_food_treat_proc = Slot(uri=MIXS['0001140'], name="food-animal and animal feed_food_treat_proc", curie=MIXS.curie('0001140'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_food_treat_proc, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_HACCP_term = Slot(uri=MIXS['0001215'], name="food-animal and animal feed_HACCP_term", curie=MIXS.curie('0001215'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_HACCP_term, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_library_prep_kit = Slot(uri=MIXS['0001145'], name="food-animal and animal feed_library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_library_prep_kit, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_lot_number = Slot(uri=MIXS['0001147'], name="food-animal and animal feed_lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_lot_number, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_microb_cult_med = Slot(uri=MIXS['0001216'], name="food-animal and animal feed_microb_cult_med", curie=MIXS.curie('0001216'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_microb_cult_med, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_part_plant_animal = Slot(uri=MIXS['0001149'], name="food-animal and animal feed_part_plant_animal", curie=MIXS.curie('0001149'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_part_plant_animal, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_repository_name = Slot(uri=MIXS['0001152'], name="food-animal and animal feed_repository_name", curie=MIXS.curie('0001152'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_repository_name, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_samp_collect_method = Slot(uri=MIXS['0001225'], name="food-animal and animal feed_samp_collect_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_collect_method, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_pooling = Slot(uri=MIXS['0001153'], name="food-animal and animal feed_samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_pooling, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_samp_rep_biol = Slot(uri=MIXS['0001226'], name="food-animal and animal feed_samp_rep_biol", curie=MIXS.curie('0001226'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_rep_biol, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_rep_tech = Slot(uri=MIXS['0001227'], name="food-animal and animal feed_samp_rep_tech", curie=MIXS.curie('0001227'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_rep_tech, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_source_mat_cat = Slot(uri=MIXS['0001154'], name="food-animal and animal feed_samp_source_mat_cat", curie=MIXS.curie('0001154'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_source_mat_cat, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_stor_device = Slot(uri=MIXS['0001228'], name="food-animal and animal feed_samp_stor_device", curie=MIXS.curie('0001228'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_stor_device, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_stor_media = Slot(uri=MIXS['0001229'], name="food-animal and animal feed_samp_stor_media", curie=MIXS.curie('0001229'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_stor_media, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_samp_transport_dur = Slot(uri=MIXS['0001231'], name="food-animal and animal feed_samp_transport_dur", curie=MIXS.curie('0001231'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_transport_dur, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_samp_transport_temp = Slot(uri=MIXS['0001232'], name="food-animal and animal feed_samp_transport_temp", curie=MIXS.curie('0001232'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_samp_transport_temp, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_sequencing_kit = Slot(uri=MIXS['0001155'], name="food-animal and animal feed_sequencing_kit", curie=MIXS.curie('0001155'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_sequencing_kit, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_sequencing_location = Slot(uri=MIXS['0001156'], name="food-animal and animal feed_sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_sequencing_location, domain=Food-animalAndAnimalFeed, range=Optional[str])

slots.food_animal_and_animal_feed_serovar_or_serotype = Slot(uri=MIXS['0001157'], name="food-animal and animal feed_serovar_or_serotype", curie=MIXS.curie('0001157'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_serovar_or_serotype, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_AMR = Slot(uri=MIXS['0001235'], name="food-animal and animal feed_spikein_AMR", curie=MIXS.curie('0001235'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_AMR, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_antibiotic = Slot(uri=MIXS['0001171'], name="food-animal and animal feed_spikein_antibiotic", curie=MIXS.curie('0001171'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_antibiotic, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_growth_med = Slot(uri=MIXS['0001169'], name="food-animal and animal feed_spikein_growth_med", curie=MIXS.curie('0001169'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_growth_med, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_metal = Slot(uri=MIXS['0001172'], name="food-animal and animal feed_spikein_metal", curie=MIXS.curie('0001172'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_metal, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_org = Slot(uri=MIXS['0001167'], name="food-animal and animal feed_spikein_org", curie=MIXS.curie('0001167'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_org, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_serovar = Slot(uri=MIXS['0001168'], name="food-animal and animal feed_spikein_serovar", curie=MIXS.curie('0001168'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_serovar, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_spikein_strain = Slot(uri=MIXS['0001170'], name="food-animal and animal feed_spikein_strain", curie=MIXS.curie('0001170'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_spikein_strain, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_study_design = Slot(uri=MIXS['0001236'], name="food-animal and animal feed_study_design", curie=MIXS.curie('0001236'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_study_design, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_study_inc_dur = Slot(uri=MIXS['0001237'], name="food-animal and animal feed_study_inc_dur", curie=MIXS.curie('0001237'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_study_inc_dur, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_study_inc_temp = Slot(uri=MIXS['0001238'], name="food-animal and animal feed_study_inc_temp", curie=MIXS.curie('0001238'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_study_inc_temp, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_study_timecourse = Slot(uri=MIXS['0001239'], name="food-animal and animal feed_study_timecourse", curie=MIXS.curie('0001239'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_study_timecourse, domain=Food-animalAndAnimalFeed, range=Optional[Union[dict, "QuantityValue"]])

slots.food_animal_and_animal_feed_study_tmnt = Slot(uri=MIXS['0001240'], name="food-animal and animal feed_study_tmnt", curie=MIXS.curie('0001240'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_study_tmnt, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_animal_and_animal_feed_timepoint = Slot(uri=MIXS['0001173'], name="food-animal and animal feed_timepoint", curie=MIXS.curie('0001173'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_timepoint, domain=Food-animalAndAnimalFeed, range=Optional[float])

slots.food_animal_and_animal_feed_misc_param = Slot(uri=MIXS['0000752'], name="food-animal and animal feed_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.food_animal_and_animal_feed_misc_param, domain=Food-animalAndAnimalFeed, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_samp_name = Slot(uri=MIXS['0001107'], name="food-food production facility_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_name, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_project_name = Slot(uri=MIXS['0000092'], name="food-food production facility_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_project_name, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_lat_lon = Slot(uri=MIXS['0000009'], name="food-food production facility_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_lat_lon, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_geo_loc_name = Slot(uri=MIXS['0000010'], name="food-food production facility_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_geo_loc_name, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_collection_date = Slot(uri=MIXS['0000011'], name="food-food production facility_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_collection_date, domain=Food-foodProductionFacility, range=Union[str, XSDDate])

slots.food_food_production_facility_env_broad_scale = Slot(uri=MIXS['0000012'], name="food-food production facility_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_env_broad_scale, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_env_local_scale = Slot(uri=MIXS['0000013'], name="food-food production facility_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_env_local_scale, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_env_medium = Slot(uri=MIXS['0000014'], name="food-food production facility_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_env_medium, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_seq_meth = Slot(uri=MIXS['0000050'], name="food-food production facility_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_seq_meth, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_samp_size = Slot(uri=MIXS['0000001'], name="food-food production facility_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_size, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_samp_collect_device = Slot(uri=MIXS['0000002'], name="food-food production facility_samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_collect_device, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_experimental_factor = Slot(uri=MIXS['0000008'], name="food-food production facility_experimental_factor", curie=MIXS.curie('0000008'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_experimental_factor, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="food-food production facility_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_nucl_acid_ext, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_organism_count = Slot(uri=MIXS['0000103'], name="food-food production facility_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_organism_count, domain=Food-foodProductionFacility, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.food_food_production_facility_samp_stor_temp = Slot(uri=MIXS['0000110'], name="food-food production facility_samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_stor_temp, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_samp_stor_dur = Slot(uri=MIXS['0000116'], name="food-food production facility_samp_stor_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_stor_dur, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_air_temp = Slot(uri=MIXS['0000113'], name="food-food production facility_air_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_air_temp, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_room_dim = Slot(uri=MIXS['0000192'], name="food-food production facility_room_dim", curie=MIXS.curie('0000192'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_room_dim, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_freq_clean = Slot(uri=MIXS['0000226'], name="food-food production facility_freq_clean", curie=MIXS.curie('0000226'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_freq_clean, domain=Food-foodProductionFacility, range=Optional[Union[str, "FreqCleanEnum"]])

slots.food_food_production_facility_samp_room_id = Slot(uri=MIXS['0000244'], name="food-food production facility_samp_room_id", curie=MIXS.curie('0000244'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_room_id, domain=Food-foodProductionFacility, range=Optional[int])

slots.food_food_production_facility_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="food-food production facility_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_vol_we_dna_ext, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_pool_dna_extracts = Slot(uri=MIXS['0000325'], name="food-food production facility_pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_pool_dna_extracts, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_samp_stor_loc = Slot(uri=MIXS['0000755'], name="food-food production facility_samp_stor_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_stor_loc, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_surf_material = Slot(uri=MIXS['0000758'], name="food-food production facility_surf_material", curie=MIXS.curie('0000758'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_surf_material, domain=Food-foodProductionFacility, range=Optional[Union[str, "SurfMaterialEnum"]])

slots.food_food_production_facility_indoor_surf = Slot(uri=MIXS['0000764'], name="food-food production facility_indoor_surf", curie=MIXS.curie('0000764'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_indoor_surf, domain=Food-foodProductionFacility, range=Optional[Union[str, "IndoorSurfEnum"]])

slots.food_food_production_facility_avg_occup = Slot(uri=MIXS['0000775'], name="food-food production facility_avg_occup", curie=MIXS.curie('0000775'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_avg_occup, domain=Food-foodProductionFacility, range=Optional[float])

slots.food_food_production_facility_samp_floor = Slot(uri=MIXS['0000828'], name="food-food production facility_samp_floor", curie=MIXS.curie('0000828'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_floor, domain=Food-foodProductionFacility, range=Optional[Union[str, "SampFloorEnum"]])

slots.food_food_production_facility_genetic_mod = Slot(uri=MIXS['0000859'], name="food-food production facility_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_genetic_mod, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_coll_site_geo_feat = Slot(uri=MIXS['0001183'], name="food-food production facility_coll_site_geo_feat", curie=MIXS.curie('0001183'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_coll_site_geo_feat, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_samp_source_mat_cat = Slot(uri=MIXS['0001154'], name="food-food production facility_samp_source_mat_cat", curie=MIXS.curie('0001154'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_source_mat_cat, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_samp_type = Slot(uri=MIXS['0000998'], name="food-food production facility_samp_type", curie=MIXS.curie('0000998'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_type, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_samp_stor_media = Slot(uri=MIXS['0001229'], name="food-food production facility_samp_stor_media", curie=MIXS.curie('0001229'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_stor_media, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_samp_stor_device = Slot(uri=MIXS['0001228'], name="food-food production facility_samp_stor_device", curie=MIXS.curie('0001228'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_stor_device, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_food_product_type = Slot(uri=MIXS['0001184'], name="food-food production facility_food_product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_product_type, domain=Food-foodProductionFacility, range=Union[str, List[str]])

slots.food_food_production_facility_IFSAC_category = Slot(uri=MIXS['0001179'], name="food-food production facility_IFSAC_category", curie=MIXS.curie('0001179'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_IFSAC_category, domain=Food-foodProductionFacility, range=Union[str, List[str]])

slots.food_food_production_facility_food_product_qual = Slot(uri=MIXS['0001213'], name="food-food production facility_food_product_qual", curie=MIXS.curie('0001213'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_product_qual, domain=Food-foodProductionFacility, range=str)

slots.food_food_production_facility_food_contact_surf = Slot(uri=MIXS['0001131'], name="food-food production facility_food_contact_surf", curie=MIXS.curie('0001131'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_contact_surf, domain=Food-foodProductionFacility, range=Union[str, List[str]])

slots.food_food_production_facility_facility_type = Slot(uri=MIXS['0001252'], name="food-food production facility_facility_type", curie=MIXS.curie('0001252'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_facility_type, domain=Food-foodProductionFacility, range=Optional[Union[Union[str, "FacilityTypeEnum"], List[Union[str, "FacilityTypeEnum"]]]])

slots.food_food_production_facility_food_trav_mode = Slot(uri=MIXS['0001137'], name="food-food production facility_food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_trav_mode, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_trav_vehic = Slot(uri=MIXS['0001138'], name="food-food production facility_food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_trav_vehic, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_samp_transport_dur = Slot(uri=MIXS['0001231'], name="food-food production facility_samp_transport_dur", curie=MIXS.curie('0001231'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_transport_dur, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_samp_transport_temp = Slot(uri=MIXS['0001232'], name="food-food production facility_samp_transport_temp", curie=MIXS.curie('0001232'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_transport_temp, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_samp_collect_method = Slot(uri=MIXS['0001225'], name="food-food production facility_samp_collect_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_collect_method, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_num_samp_collect = Slot(uri=MIXS['0001224'], name="food-food production facility_num_samp_collect", curie=MIXS.curie('0001224'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_num_samp_collect, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_lot_number = Slot(uri=MIXS['0001147'], name="food-food production facility_lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_lot_number, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_hygienic_area = Slot(uri=MIXS['0001253'], name="food-food production facility_hygienic_area", curie=MIXS.curie('0001253'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_hygienic_area, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_env_monitoring_zone = Slot(uri=MIXS['0001254'], name="food-food production facility_env_monitoring_zone", curie=MIXS.curie('0001254'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_env_monitoring_zone, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_area_samp_size = Slot(uri=MIXS['0001255'], name="food-food production facility_area_samp_size", curie=MIXS.curie('0001255'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_area_samp_size, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_samp_surf_moisture = Slot(uri=MIXS['0001256'], name="food-food production facility_samp_surf_moisture", curie=MIXS.curie('0001256'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_surf_moisture, domain=Food-foodProductionFacility, range=Optional[Union[Union[str, "SampSurfMoistureEnum"], List[Union[str, "SampSurfMoistureEnum"]]]])

slots.food_food_production_facility_samp_loc_condition = Slot(uri=MIXS['0001257'], name="food-food production facility_samp_loc_condition", curie=MIXS.curie('0001257'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_loc_condition, domain=Food-foodProductionFacility, range=Optional[Union[str, "SampLocConditionEnum"]])

slots.food_food_production_facility_biocide_used = Slot(uri=MIXS['0001258'], name="food-food production facility_biocide_used", curie=MIXS.curie('0001258'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_biocide_used, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_ster_meth_samp_room = Slot(uri=MIXS['0001259'], name="food-food production facility_ster_meth_samp_room", curie=MIXS.curie('0001259'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_ster_meth_samp_room, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_enrichment_protocol = Slot(uri=MIXS['0001177'], name="food-food production facility_enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_enrichment_protocol, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_cult_target = Slot(uri=MIXS['0001119'], name="food-food production facility_cult_target", curie=MIXS.curie('0001119'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_cult_target, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_microb_cult_med = Slot(uri=MIXS['0001216'], name="food-food production facility_microb_cult_med", curie=MIXS.curie('0001216'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_microb_cult_med, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_timepoint = Slot(uri=MIXS['0001173'], name="food-food production facility_timepoint", curie=MIXS.curie('0001173'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_timepoint, domain=Food-foodProductionFacility, range=Optional[float])

slots.food_food_production_facility_bacterial_density = Slot(uri=MIXS['0001194'], name="food-food production facility_bacterial_density", curie=MIXS.curie('0001194'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_bacterial_density, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_cult_isol_date = Slot(uri=MIXS['0001181'], name="food-food production facility_cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_cult_isol_date, domain=Food-foodProductionFacility, range=Optional[Union[str, XSDDate]])

slots.food_food_production_facility_cult_result = Slot(uri=MIXS['0001117'], name="food-food production facility_cult_result", curie=MIXS.curie('0001117'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_cult_result, domain=Food-foodProductionFacility, range=Optional[Union[str, "CultResultEnum"]])

slots.food_food_production_facility_cult_result_org = Slot(uri=MIXS['0001118'], name="food-food production facility_cult_result_org", curie=MIXS.curie('0001118'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_cult_result_org, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_subspecf_gen_lin = Slot(uri=MIXS['0000020'], name="food-food production facility_subspecf_gen_lin", curie=MIXS.curie('0000020'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_subspecf_gen_lin, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_samp_pooling = Slot(uri=MIXS['0001153'], name="food-food production facility_samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_pooling, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_samp_purpose = Slot(uri=MIXS['0001151'], name="food-food production facility_samp_purpose", curie=MIXS.curie('0001151'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_purpose, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_samp_rep_tech = Slot(uri=MIXS['0001227'], name="food-food production facility_samp_rep_tech", curie=MIXS.curie('0001227'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_rep_tech, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_samp_rep_biol = Slot(uri=MIXS['0001226'], name="food-food production facility_samp_rep_biol", curie=MIXS.curie('0001226'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_rep_biol, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_samp_transport_cont = Slot(uri=MIXS['0001230'], name="food-food production facility_samp_transport_cont", curie=MIXS.curie('0001230'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_samp_transport_cont, domain=Food-foodProductionFacility, range=Optional[Union[str, "SampTransportContEnum"]])

slots.food_food_production_facility_study_design = Slot(uri=MIXS['0001236'], name="food-food production facility_study_design", curie=MIXS.curie('0001236'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_study_design, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_nucl_acid_ext_kit = Slot(uri=MIXS['0001223'], name="food-food production facility_nucl_acid_ext_kit", curie=MIXS.curie('0001223'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_nucl_acid_ext_kit, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_library_prep_kit = Slot(uri=MIXS['0001145'], name="food-food production facility_library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_library_prep_kit, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_sequencing_kit = Slot(uri=MIXS['0001155'], name="food-food production facility_sequencing_kit", curie=MIXS.curie('0001155'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_sequencing_kit, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_sequencing_location = Slot(uri=MIXS['0001156'], name="food-food production facility_sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_sequencing_location, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_study_inc_temp = Slot(uri=MIXS['0001238'], name="food-food production facility_study_inc_temp", curie=MIXS.curie('0001238'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_study_inc_temp, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_study_inc_dur = Slot(uri=MIXS['0001237'], name="food-food production facility_study_inc_dur", curie=MIXS.curie('0001237'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_study_inc_dur, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_study_timecourse = Slot(uri=MIXS['0001239'], name="food-food production facility_study_timecourse", curie=MIXS.curie('0001239'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_study_timecourse, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_study_tmnt = Slot(uri=MIXS['0001240'], name="food-food production facility_study_tmnt", curie=MIXS.curie('0001240'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_study_tmnt, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_source = Slot(uri=MIXS['0001139'], name="food-food production facility_food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_source, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_food_dis_point = Slot(uri=MIXS['0001203'], name="food-food production facility_food_dis_point", curie=MIXS.curie('0001203'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_dis_point, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_dis_point_city = Slot(uri=MIXS['0001204'], name="food-food production facility_food_dis_point_city", curie=MIXS.curie('0001204'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_dis_point_city, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_food_origin = Slot(uri=MIXS['0001207'], name="food-food production facility_food_origin", curie=MIXS.curie('0001207'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_origin, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_food_prod_synonym = Slot(uri=MIXS['0001212'], name="food-food production facility_food_prod_synonym", curie=MIXS.curie('0001212'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_prod_synonym, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_additive = Slot(uri=MIXS['0001200'], name="food-food production facility_food_additive", curie=MIXS.curie('0001200'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_additive, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_trace_list = Slot(uri=MIXS['0001214'], name="food-food production facility_food_trace_list", curie=MIXS.curie('0001214'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_trace_list, domain=Food-foodProductionFacility, range=Optional[Union[str, "FoodTraceListEnum"]])

slots.food_food_production_facility_part_plant_animal = Slot(uri=MIXS['0001149'], name="food-food production facility_part_plant_animal", curie=MIXS.curie('0001149'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_part_plant_animal, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_ingredient = Slot(uri=MIXS['0001205'], name="food-food production facility_food_ingredient", curie=MIXS.curie('0001205'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_ingredient, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_spec_intended_cons = Slot(uri=MIXS['0001234'], name="food-food production facility_spec_intended_cons", curie=MIXS.curie('0001234'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_spec_intended_cons, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_HACCP_term = Slot(uri=MIXS['0001215'], name="food-food production facility_HACCP_term", curie=MIXS.curie('0001215'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_HACCP_term, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_dietary_claim_use = Slot(uri=MIXS['0001199'], name="food-food production facility_dietary_claim_use", curie=MIXS.curie('0001199'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_dietary_claim_use, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_allergen_label = Slot(uri=MIXS['0001201'], name="food-food production facility_food_allergen_label", curie=MIXS.curie('0001201'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_allergen_label, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_prod_char = Slot(uri=MIXS['0001136'], name="food-food production facility_food_prod_char", curie=MIXS.curie('0001136'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_prod_char, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_prod_label_claims = Slot(uri=MIXS.VOCAB.prod_label_claims, name="food-food production facility_prod_label_claims", curie=MIXS.VOCAB.curie('prod_label_claims'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_prod_label_claims, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_name_status = Slot(uri=MIXS['0001206'], name="food-food production facility_food_name_status", curie=MIXS.curie('0001206'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_name_status, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_food_preserv_proc = Slot(uri=MIXS['0001135'], name="food-food production facility_food_preserv_proc", curie=MIXS.curie('0001135'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_preserv_proc, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_cooking_proc = Slot(uri=MIXS['0001202'], name="food-food production facility_food_cooking_proc", curie=MIXS.curie('0001202'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_cooking_proc, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_treat_proc = Slot(uri=MIXS['0001140'], name="food-food production facility_food_treat_proc", curie=MIXS.curie('0001140'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_treat_proc, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_contain_wrap = Slot(uri=MIXS['0001132'], name="food-food production facility_food_contain_wrap", curie=MIXS.curie('0001132'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_contain_wrap, domain=Food-foodProductionFacility, range=Optional[str])

slots.food_food_production_facility_food_pack_capacity = Slot(uri=MIXS['0001208'], name="food-food production facility_food_pack_capacity", curie=MIXS.curie('0001208'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_pack_capacity, domain=Food-foodProductionFacility, range=Optional[Union[dict, "QuantityValue"]])

slots.food_food_production_facility_food_pack_medium = Slot(uri=MIXS['0001134'], name="food-food production facility_food_pack_medium", curie=MIXS.curie('0001134'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_pack_medium, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_prior_contact = Slot(uri=MIXS['0001210'], name="food-food production facility_food_prior_contact", curie=MIXS.curie('0001210'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_prior_contact, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_prod = Slot(uri=MIXS['0001211'], name="food-food production facility_food_prod", curie=MIXS.curie('0001211'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_prod, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_quality_date = Slot(uri=MIXS['0001178'], name="food-food production facility_food_quality_date", curie=MIXS.curie('0001178'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_quality_date, domain=Food-foodProductionFacility, range=Optional[str],
                   pattern=re.compile(r'^(best by|best if used by|freeze by||use by);(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'))

slots.food_food_production_facility_repository_name = Slot(uri=MIXS['0001152'], name="food-food production facility_repository_name", curie=MIXS.curie('0001152'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_repository_name, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_intended_consumer = Slot(uri=MIXS['0001144'], name="food-food production facility_intended_consumer", curie=MIXS.curie('0001144'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_intended_consumer, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_food_pack_integrity = Slot(uri=MIXS['0001209'], name="food-food production facility_food_pack_integrity", curie=MIXS.curie('0001209'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_food_pack_integrity, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_food_production_facility_misc_param = Slot(uri=MIXS['0000752'], name="food-food production facility_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.food_food_production_facility_misc_param, domain=Food-foodProductionFacility, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_samp_name = Slot(uri=MIXS['0001107'], name="food-farm environment_samp_name", curie=MIXS.curie('0001107'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_name, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_project_name = Slot(uri=MIXS['0000092'], name="food-farm environment_project_name", curie=MIXS.curie('0000092'),
                   model_uri=MIXS.VOCAB.food_farm_environment_project_name, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_lat_lon = Slot(uri=MIXS['0000009'], name="food-farm environment_lat_lon", curie=MIXS.curie('0000009'),
                   model_uri=MIXS.VOCAB.food_farm_environment_lat_lon, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_geo_loc_name = Slot(uri=MIXS['0000010'], name="food-farm environment_geo_loc_name", curie=MIXS.curie('0000010'),
                   model_uri=MIXS.VOCAB.food_farm_environment_geo_loc_name, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_collection_date = Slot(uri=MIXS['0000011'], name="food-farm environment_collection_date", curie=MIXS.curie('0000011'),
                   model_uri=MIXS.VOCAB.food_farm_environment_collection_date, domain=Food-farmEnvironment, range=Union[str, XSDDate])

slots.food_farm_environment_env_broad_scale = Slot(uri=MIXS['0000012'], name="food-farm environment_env_broad_scale", curie=MIXS.curie('0000012'),
                   model_uri=MIXS.VOCAB.food_farm_environment_env_broad_scale, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_env_local_scale = Slot(uri=MIXS['0000013'], name="food-farm environment_env_local_scale", curie=MIXS.curie('0000013'),
                   model_uri=MIXS.VOCAB.food_farm_environment_env_local_scale, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_env_medium = Slot(uri=MIXS['0000014'], name="food-farm environment_env_medium", curie=MIXS.curie('0000014'),
                   model_uri=MIXS.VOCAB.food_farm_environment_env_medium, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_seq_meth = Slot(uri=MIXS['0000050'], name="food-farm environment_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.food_farm_environment_seq_meth, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_samp_size = Slot(uri=MIXS['0000001'], name="food-farm environment_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_size, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_samp_collect_device = Slot(uri=MIXS['0000002'], name="food-farm environment_samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_collect_device, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="food-farm environment_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.food_farm_environment_nucl_acid_ext, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_humidity = Slot(uri=MIXS['0000100'], name="food-farm environment_humidity", curie=MIXS.curie('0000100'),
                   model_uri=MIXS.VOCAB.food_farm_environment_humidity, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_organism_count = Slot(uri=MIXS['0000103'], name="food-farm environment_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.food_farm_environment_organism_count, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.food_farm_environment_spikein_count = Slot(uri=MIXS['0001335'], name="food-farm environment_spikein_count", curie=MIXS.curie('0001335'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_count, domain=Food-farmEnvironment, range=Optional[Union[str, "SpikeinCountEnum"]])

slots.food_farm_environment_samp_stor_temp = Slot(uri=MIXS['0000110'], name="food-farm environment_samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_stor_temp, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_solar_irradiance = Slot(uri=MIXS['0000112'], name="food-farm environment_solar_irradiance", curie=MIXS.curie('0000112'),
                   model_uri=MIXS.VOCAB.food_farm_environment_solar_irradiance, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_ventilation_rate = Slot(uri=MIXS['0000114'], name="food-farm environment_ventilation_rate", curie=MIXS.curie('0000114'),
                   model_uri=MIXS.VOCAB.food_farm_environment_ventilation_rate, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_samp_stor_dur = Slot(uri=MIXS['0000116'], name="food-farm environment_samp_stor_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_stor_dur, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_wind_speed = Slot(uri=MIXS['0000118'], name="food-farm environment_wind_speed", curie=MIXS.curie('0000118'),
                   model_uri=MIXS.VOCAB.food_farm_environment_wind_speed, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_salinity = Slot(uri=MIXS['0000183'], name="food-farm environment_salinity", curie=MIXS.curie('0000183'),
                   model_uri=MIXS.VOCAB.food_farm_environment_salinity, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="food-farm environment_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_vol_we_dna_ext, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_previous_land_use = Slot(uri=MIXS['0000315'], name="food-farm environment_previous_land_use", curie=MIXS.curie('0000315'),
                   model_uri=MIXS.VOCAB.food_farm_environment_previous_land_use, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_crop_rotation = Slot(uri=MIXS['0000318'], name="food-farm environment_crop_rotation", curie=MIXS.curie('0000318'),
                   model_uri=MIXS.VOCAB.food_farm_environment_crop_rotation, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_soil_type_meth = Slot(uri=MIXS['0000334'], name="food-farm environment_soil_type_meth", curie=MIXS.curie('0000334'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_type_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_tot_org_c_meth = Slot(uri=MIXS['0000337'], name="food-farm environment_tot_org_c_meth", curie=MIXS.curie('0000337'),
                   model_uri=MIXS.VOCAB.food_farm_environment_tot_org_c_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_tot_nitro_cont_meth = Slot(uri=MIXS['0000338'], name="food-farm environment_tot_nitro_cont_meth", curie=MIXS.curie('0000338'),
                   model_uri=MIXS.VOCAB.food_farm_environment_tot_nitro_cont_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_salinity_meth = Slot(uri=MIXS['0000341'], name="food-farm environment_salinity_meth", curie=MIXS.curie('0000341'),
                   model_uri=MIXS.VOCAB.food_farm_environment_salinity_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_host_age = Slot(uri=MIXS['0000255'], name="food-farm environment_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_age, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_host_dry_mass = Slot(uri=MIXS['0000257'], name="food-farm environment_host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_dry_mass, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_host_height = Slot(uri=MIXS['0000264'], name="food-farm environment_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_height, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_host_length = Slot(uri=MIXS['0000256'], name="food-farm environment_host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_length, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_host_tot_mass = Slot(uri=MIXS['0000263'], name="food-farm environment_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_tot_mass, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_root_med_carbon = Slot(uri=MIXS['0000577'], name="food-farm environment_root_med_carbon", curie=MIXS.curie('0000577'),
                   model_uri=MIXS.VOCAB.food_farm_environment_root_med_carbon, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_root_med_macronutr = Slot(uri=MIXS['0000578'], name="food-farm environment_root_med_macronutr", curie=MIXS.curie('0000578'),
                   model_uri=MIXS.VOCAB.food_farm_environment_root_med_macronutr, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_root_med_micronutr = Slot(uri=MIXS['0000579'], name="food-farm environment_root_med_micronutr", curie=MIXS.curie('0000579'),
                   model_uri=MIXS.VOCAB.food_farm_environment_root_med_micronutr, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_depth = Slot(uri=MIXS['0000018'], name="food-farm environment_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.food_farm_environment_depth, domain=Food-farmEnvironment, range=Union[dict, "QuantityValue"])

slots.food_farm_environment_season_temp = Slot(uri=MIXS['0000643'], name="food-farm environment_season_temp", curie=MIXS.curie('0000643'),
                   model_uri=MIXS.VOCAB.food_farm_environment_season_temp, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_season_precpt = Slot(uri=MIXS['0000645'], name="food-farm environment_season_precpt", curie=MIXS.curie('0000645'),
                   model_uri=MIXS.VOCAB.food_farm_environment_season_precpt, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_tot_org_carb = Slot(uri=MIXS['0000533'], name="food-farm environment_tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.food_farm_environment_tot_org_carb, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_tot_nitro_content = Slot(uri=MIXS['0000530'], name="food-farm environment_tot_nitro_content", curie=MIXS.curie('0000530'),
                   model_uri=MIXS.VOCAB.food_farm_environment_tot_nitro_content, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_conduc = Slot(uri=MIXS['0000692'], name="food-farm environment_conduc", curie=MIXS.curie('0000692'),
                   model_uri=MIXS.VOCAB.food_farm_environment_conduc, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_turbidity = Slot(uri=MIXS['0000191'], name="food-farm environment_turbidity", curie=MIXS.curie('0000191'),
                   model_uri=MIXS.VOCAB.food_farm_environment_turbidity, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_size_frac_low = Slot(uri=MIXS['0000735'], name="food-farm environment_size_frac_low", curie=MIXS.curie('0000735'),
                   model_uri=MIXS.VOCAB.food_farm_environment_size_frac_low, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_size_frac_up = Slot(uri=MIXS['0000736'], name="food-farm environment_size_frac_up", curie=MIXS.curie('0000736'),
                   model_uri=MIXS.VOCAB.food_farm_environment_size_frac_up, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_temp = Slot(uri=MIXS['0000113'], name="food-farm environment_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.food_farm_environment_temp, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_ventilation_type = Slot(uri=MIXS['0000756'], name="food-farm environment_ventilation_type", curie=MIXS.curie('0000756'),
                   model_uri=MIXS.VOCAB.food_farm_environment_ventilation_type, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_wind_direction = Slot(uri=MIXS['0000757'], name="food-farm environment_wind_direction", curie=MIXS.curie('0000757'),
                   model_uri=MIXS.VOCAB.food_farm_environment_wind_direction, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_genetic_mod = Slot(uri=MIXS['0000859'], name="food-farm environment_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.food_farm_environment_genetic_mod, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_host_phenotype = Slot(uri=MIXS['0000874'], name="food-farm environment_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_phenotype, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_ph = Slot(uri=MIXS['0001001'], name="food-farm environment_ph", curie=MIXS.curie('0001001'),
                   model_uri=MIXS.VOCAB.food_farm_environment_ph, domain=Food-farmEnvironment, range=Optional[float])

slots.food_farm_environment_ances_data = Slot(uri=MIXS['0000247'], name="food-farm environment_ances_data", curie=MIXS.curie('0000247'),
                   model_uri=MIXS.VOCAB.food_farm_environment_ances_data, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_biotic_regm = Slot(uri=MIXS['0001038'], name="food-farm environment_biotic_regm", curie=MIXS.curie('0001038'),
                   model_uri=MIXS.VOCAB.food_farm_environment_biotic_regm, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_chem_administration = Slot(uri=MIXS['0000751'], name="food-farm environment_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.food_farm_environment_chem_administration, domain=Food-farmEnvironment, range=Union[str, List[str]])

slots.food_farm_environment_growth_habit = Slot(uri=MIXS['0001044'], name="food-farm environment_growth_habit", curie=MIXS.curie('0001044'),
                   model_uri=MIXS.VOCAB.food_farm_environment_growth_habit, domain=Food-farmEnvironment, range=Optional[Union[str, "GrowthHabitEnum"]])

slots.food_farm_environment_host_disease_stat = Slot(uri=MIXS['0000031'], name="food-farm environment_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_disease_stat, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_host_genotype = Slot(uri=MIXS['0000365'], name="food-farm environment_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_genotype, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_host_taxid = Slot(uri=MIXS['0000250'], name="food-farm environment_host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_taxid, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_mechanical_damage = Slot(uri=MIXS['0001052'], name="food-farm environment_mechanical_damage", curie=MIXS.curie('0001052'),
                   model_uri=MIXS.VOCAB.food_farm_environment_mechanical_damage, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_perturbation = Slot(uri=MIXS['0000754'], name="food-farm environment_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.food_farm_environment_perturbation, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_root_cond = Slot(uri=MIXS['0001061'], name="food-farm environment_root_cond", curie=MIXS.curie('0001061'),
                   model_uri=MIXS.VOCAB.food_farm_environment_root_cond, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_root_med_ph = Slot(uri=MIXS['0001062'], name="food-farm environment_root_med_ph", curie=MIXS.curie('0001062'),
                   model_uri=MIXS.VOCAB.food_farm_environment_root_med_ph, domain=Food-farmEnvironment, range=Optional[float])

slots.food_farm_environment_tillage = Slot(uri=MIXS['0001081'], name="food-farm environment_tillage", curie=MIXS.curie('0001081'),
                   model_uri=MIXS.VOCAB.food_farm_environment_tillage, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]])

slots.food_farm_environment_ph_meth = Slot(uri=MIXS['0001106'], name="food-farm environment_ph_meth", curie=MIXS.curie('0001106'),
                   model_uri=MIXS.VOCAB.food_farm_environment_ph_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_growth_medium = Slot(uri=MIXS['0001108'], name="food-farm environment_growth_medium", curie=MIXS.curie('0001108'),
                   model_uri=MIXS.VOCAB.food_farm_environment_growth_medium, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_season = Slot(uri=MIXS['0000829'], name="food-farm environment_season", curie=MIXS.curie('0000829'),
                   model_uri=MIXS.VOCAB.food_farm_environment_season, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_food_product_type = Slot(uri=MIXS['0001184'], name="food-farm environment_food_product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_product_type, domain=Food-farmEnvironment, range=Union[str, List[str]])

slots.food_farm_environment_samp_type = Slot(uri=MIXS['0000998'], name="food-farm environment_samp_type", curie=MIXS.curie('0000998'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_type, domain=Food-farmEnvironment, range=str)

slots.food_farm_environment_farm_water_source = Slot(uri=MIXS['0001110'], name="food-farm environment_farm_water_source", curie=MIXS.curie('0001110'),
                   model_uri=MIXS.VOCAB.food_farm_environment_farm_water_source, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "FarmWaterSourceEnum"], List[Union[str, "FarmWaterSourceEnum"]]]])

slots.food_farm_environment_plant_water_method = Slot(uri=MIXS['0001111'], name="food-farm environment_plant_water_method", curie=MIXS.curie('0001111'),
                   model_uri=MIXS.VOCAB.food_farm_environment_plant_water_method, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_air_PM_concen = Slot(uri=MIXS['0000108'], name="food-farm environment_air_PM_concen", curie=MIXS.curie('0000108'),
                   model_uri=MIXS.VOCAB.food_farm_environment_air_PM_concen, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_animal_feed_equip = Slot(uri=MIXS['0001113'], name="food-farm environment_animal_feed_equip", curie=MIXS.curie('0001113'),
                   model_uri=MIXS.VOCAB.food_farm_environment_animal_feed_equip, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_animal_intrusion = Slot(uri=MIXS['0001114'], name="food-farm environment_animal_intrusion", curie=MIXS.curie('0001114'),
                   model_uri=MIXS.VOCAB.food_farm_environment_animal_intrusion, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_anim_water_method = Slot(uri=MIXS['0001115'], name="food-farm environment_anim_water_method", curie=MIXS.curie('0001115'),
                   model_uri=MIXS.VOCAB.food_farm_environment_anim_water_method, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_crop_yield = Slot(uri=MIXS['0001116'], name="food-farm environment_crop_yield", curie=MIXS.curie('0001116'),
                   model_uri=MIXS.VOCAB.food_farm_environment_crop_yield, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_cult_result = Slot(uri=MIXS['0001117'], name="food-farm environment_cult_result", curie=MIXS.curie('0001117'),
                   model_uri=MIXS.VOCAB.food_farm_environment_cult_result, domain=Food-farmEnvironment, range=Optional[Union[str, "CultResultEnum"]])

slots.food_farm_environment_cult_result_org = Slot(uri=MIXS['0001118'], name="food-farm environment_cult_result_org", curie=MIXS.curie('0001118'),
                   model_uri=MIXS.VOCAB.food_farm_environment_cult_result_org, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_cult_target = Slot(uri=MIXS['0001119'], name="food-farm environment_cult_target", curie=MIXS.curie('0001119'),
                   model_uri=MIXS.VOCAB.food_farm_environment_cult_target, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_plant_part_maturity = Slot(uri=MIXS['0001120'], name="food-farm environment_plant_part_maturity", curie=MIXS.curie('0001120'),
                   model_uri=MIXS.VOCAB.food_farm_environment_plant_part_maturity, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_adjacent_environment = Slot(uri=MIXS['0001121'], name="food-farm environment_adjacent_environment", curie=MIXS.curie('0001121'),
                   model_uri=MIXS.VOCAB.food_farm_environment_adjacent_environment, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_water_source_adjac = Slot(uri=MIXS['0001122'], name="food-farm environment_water_source_adjac", curie=MIXS.curie('0001122'),
                   model_uri=MIXS.VOCAB.food_farm_environment_water_source_adjac, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_farm_equip_shared = Slot(uri=MIXS['0001123'], name="food-farm environment_farm_equip_shared", curie=MIXS.curie('0001123'),
                   model_uri=MIXS.VOCAB.food_farm_environment_farm_equip_shared, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_farm_equip_san = Slot(uri=MIXS['0001124'], name="food-farm environment_farm_equip_san", curie=MIXS.curie('0001124'),
                   model_uri=MIXS.VOCAB.food_farm_environment_farm_equip_san, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_farm_equip_san_freq = Slot(uri=MIXS['0001125'], name="food-farm environment_farm_equip_san_freq", curie=MIXS.curie('0001125'),
                   model_uri=MIXS.VOCAB.food_farm_environment_farm_equip_san_freq, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_farm_equip = Slot(uri=MIXS['0001126'], name="food-farm environment_farm_equip", curie=MIXS.curie('0001126'),
                   model_uri=MIXS.VOCAB.food_farm_environment_farm_equip, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_fertilizer_admin = Slot(uri=MIXS['0001127'], name="food-farm environment_fertilizer_admin", curie=MIXS.curie('0001127'),
                   model_uri=MIXS.VOCAB.food_farm_environment_fertilizer_admin, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_fertilizer_date = Slot(uri=MIXS['0001128'], name="food-farm environment_fertilizer_date", curie=MIXS.curie('0001128'),
                   model_uri=MIXS.VOCAB.food_farm_environment_fertilizer_date, domain=Food-farmEnvironment, range=Optional[Union[str, XSDDate]])

slots.food_farm_environment_animal_group_size = Slot(uri=MIXS['0001129'], name="food-farm environment_animal_group_size", curie=MIXS.curie('0001129'),
                   model_uri=MIXS.VOCAB.food_farm_environment_animal_group_size, domain=Food-farmEnvironment, range=Optional[int])

slots.food_farm_environment_animal_diet = Slot(uri=MIXS['0001130'], name="food-farm environment_animal_diet", curie=MIXS.curie('0001130'),
                   model_uri=MIXS.VOCAB.food_farm_environment_animal_diet, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_contact_surf = Slot(uri=MIXS['0001131'], name="food-farm environment_food_contact_surf", curie=MIXS.curie('0001131'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_contact_surf, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_contain_wrap = Slot(uri=MIXS['0001132'], name="food-farm environment_food_contain_wrap", curie=MIXS.curie('0001132'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_contain_wrap, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_food_harvest_proc = Slot(uri=MIXS['0001133'], name="food-farm environment_food_harvest_proc", curie=MIXS.curie('0001133'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_harvest_proc, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_pack_medium = Slot(uri=MIXS['0001134'], name="food-farm environment_food_pack_medium", curie=MIXS.curie('0001134'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_pack_medium, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_preserv_proc = Slot(uri=MIXS['0001135'], name="food-farm environment_food_preserv_proc", curie=MIXS.curie('0001135'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_preserv_proc, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_prod_char = Slot(uri=MIXS['0001136'], name="food-farm environment_food_prod_char", curie=MIXS.curie('0001136'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_prod_char, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_prod_label_claims = Slot(uri=MIXS.VOCAB.prod_label_claims, name="food-farm environment_prod_label_claims", curie=MIXS.VOCAB.curie('prod_label_claims'),
                   model_uri=MIXS.VOCAB.food_farm_environment_prod_label_claims, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_trav_mode = Slot(uri=MIXS['0001137'], name="food-farm environment_food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_trav_mode, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_trav_vehic = Slot(uri=MIXS['0001138'], name="food-farm environment_food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_trav_vehic, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_food_source = Slot(uri=MIXS['0001139'], name="food-farm environment_food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_source, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_food_treat_proc = Slot(uri=MIXS['0001140'], name="food-farm environment_food_treat_proc", curie=MIXS.curie('0001140'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_treat_proc, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_extr_weather_event = Slot(uri=MIXS['0001141'], name="food-farm environment_extr_weather_event", curie=MIXS.curie('0001141'),
                   model_uri=MIXS.VOCAB.food_farm_environment_extr_weather_event, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "ExtrWeatherEventEnum"], List[Union[str, "ExtrWeatherEventEnum"]]]])

slots.food_farm_environment_date_extr_weath = Slot(uri=MIXS['0001142'], name="food-farm environment_date_extr_weath", curie=MIXS.curie('0001142'),
                   model_uri=MIXS.VOCAB.food_farm_environment_date_extr_weath, domain=Food-farmEnvironment, range=Optional[Union[Union[str, XSDDate], List[Union[str, XSDDate]]]])

slots.food_farm_environment_host_subspecf_genlin = Slot(uri=MIXS['0001318'], name="food-farm environment_host_subspecf_genlin", curie=MIXS.curie('0001318'),
                   model_uri=MIXS.VOCAB.food_farm_environment_host_subspecf_genlin, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_intended_consumer = Slot(uri=MIXS['0001144'], name="food-farm environment_intended_consumer", curie=MIXS.curie('0001144'),
                   model_uri=MIXS.VOCAB.food_farm_environment_intended_consumer, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_library_prep_kit = Slot(uri=MIXS['0001145'], name="food-farm environment_library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.food_farm_environment_library_prep_kit, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_air_flow_impede = Slot(uri=MIXS['0001146'], name="food-farm environment_air_flow_impede", curie=MIXS.curie('0001146'),
                   model_uri=MIXS.VOCAB.food_farm_environment_air_flow_impede, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_lot_number = Slot(uri=MIXS['0001147'], name="food-farm environment_lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.food_farm_environment_lot_number, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_season_humidity = Slot(uri=MIXS['0001148'], name="food-farm environment_season_humidity", curie=MIXS.curie('0001148'),
                   model_uri=MIXS.VOCAB.food_farm_environment_season_humidity, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_part_plant_animal = Slot(uri=MIXS['0001149'], name="food-farm environment_part_plant_animal", curie=MIXS.curie('0001149'),
                   model_uri=MIXS.VOCAB.food_farm_environment_part_plant_animal, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_plant_growth_med = Slot(uri=MIXS['0001057'], name="food-farm environment_plant_growth_med", curie=MIXS.curie('0001057'),
                   model_uri=MIXS.VOCAB.food_farm_environment_plant_growth_med, domain=Food-farmEnvironment, range=Optional[Union[str, "PlantGrowthMedEnum"]])

slots.food_farm_environment_plant_reprod_crop = Slot(uri=MIXS['0001150'], name="food-farm environment_plant_reprod_crop", curie=MIXS.curie('0001150'),
                   model_uri=MIXS.VOCAB.food_farm_environment_plant_reprod_crop, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "PlantReprodCropEnum"], List[Union[str, "PlantReprodCropEnum"]]]])

slots.food_farm_environment_samp_purpose = Slot(uri=MIXS['0001151'], name="food-farm environment_samp_purpose", curie=MIXS.curie('0001151'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_purpose, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_repository_name = Slot(uri=MIXS['0001152'], name="food-farm environment_repository_name", curie=MIXS.curie('0001152'),
                   model_uri=MIXS.VOCAB.food_farm_environment_repository_name, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_samp_pooling = Slot(uri=MIXS['0001153'], name="food-farm environment_samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_pooling, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_samp_source_mat_cat = Slot(uri=MIXS['0001154'], name="food-farm environment_samp_source_mat_cat", curie=MIXS.curie('0001154'),
                   model_uri=MIXS.VOCAB.food_farm_environment_samp_source_mat_cat, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_sequencing_kit = Slot(uri=MIXS['0001155'], name="food-farm environment_sequencing_kit", curie=MIXS.curie('0001155'),
                   model_uri=MIXS.VOCAB.food_farm_environment_sequencing_kit, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_sequencing_location = Slot(uri=MIXS['0001156'], name="food-farm environment_sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.food_farm_environment_sequencing_location, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_serovar_or_serotype = Slot(uri=MIXS['0001157'], name="food-farm environment_serovar_or_serotype", curie=MIXS.curie('0001157'),
                   model_uri=MIXS.VOCAB.food_farm_environment_serovar_or_serotype, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_soil_conductivity = Slot(uri=MIXS['0001158'], name="food-farm environment_soil_conductivity", curie=MIXS.curie('0001158'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_conductivity, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_soil_cover = Slot(uri=MIXS['0001159'], name="food-farm environment_soil_cover", curie=MIXS.curie('0001159'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_cover, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_soil_pH = Slot(uri=MIXS['0001160'], name="food-farm environment_soil_pH", curie=MIXS.curie('0001160'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_pH, domain=Food-farmEnvironment, range=Optional[float])

slots.food_farm_environment_rel_location = Slot(uri=MIXS['0001161'], name="food-farm environment_rel_location", curie=MIXS.curie('0001161'),
                   model_uri=MIXS.VOCAB.food_farm_environment_rel_location, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_soil_porosity = Slot(uri=MIXS['0001162'], name="food-farm environment_soil_porosity", curie=MIXS.curie('0001162'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_porosity, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_soil_temp = Slot(uri=MIXS['0000113'], name="food-farm environment_soil_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_temp, domain=Food-farmEnvironment, range=Optional[Union[dict, "QuantityValue"]])

slots.food_farm_environment_soil_texture_class = Slot(uri=MIXS['0001164'], name="food-farm environment_soil_texture_class", curie=MIXS.curie('0001164'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_texture_class, domain=Food-farmEnvironment, range=Optional[Union[str, "SoilTextureClassEnum"]])

slots.food_farm_environment_soil_texture_meth = Slot(uri=MIXS['0000336'], name="food-farm environment_soil_texture_meth", curie=MIXS.curie('0000336'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_texture_meth, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_soil_type = Slot(uri=MIXS['0000332'], name="food-farm environment_soil_type", curie=MIXS.curie('0000332'),
                   model_uri=MIXS.VOCAB.food_farm_environment_soil_type, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_spikein_org = Slot(uri=MIXS['0001167'], name="food-farm environment_spikein_org", curie=MIXS.curie('0001167'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_org, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_spikein_serovar = Slot(uri=MIXS['0001168'], name="food-farm environment_spikein_serovar", curie=MIXS.curie('0001168'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_serovar, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_spikein_growth_med = Slot(uri=MIXS['0001169'], name="food-farm environment_spikein_growth_med", curie=MIXS.curie('0001169'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_growth_med, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_spikein_strain = Slot(uri=MIXS['0001170'], name="food-farm environment_spikein_strain", curie=MIXS.curie('0001170'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_strain, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_spikein_antibiotic = Slot(uri=MIXS['0001171'], name="food-farm environment_spikein_antibiotic", curie=MIXS.curie('0001171'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_antibiotic, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_spikein_metal = Slot(uri=MIXS['0001172'], name="food-farm environment_spikein_metal", curie=MIXS.curie('0001172'),
                   model_uri=MIXS.VOCAB.food_farm_environment_spikein_metal, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_timepoint = Slot(uri=MIXS['0001173'], name="food-farm environment_timepoint", curie=MIXS.curie('0001173'),
                   model_uri=MIXS.VOCAB.food_farm_environment_timepoint, domain=Food-farmEnvironment, range=Optional[float])

slots.food_farm_environment_water_frequency = Slot(uri=MIXS['0001174'], name="food-farm environment_water_frequency", curie=MIXS.curie('0001174'),
                   model_uri=MIXS.VOCAB.food_farm_environment_water_frequency, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_water_pH = Slot(uri=MIXS['0001175'], name="food-farm environment_water_pH", curie=MIXS.curie('0001175'),
                   model_uri=MIXS.VOCAB.food_farm_environment_water_pH, domain=Food-farmEnvironment, range=Optional[float])

slots.food_farm_environment_water_source_shared = Slot(uri=MIXS['0001176'], name="food-farm environment_water_source_shared", curie=MIXS.curie('0001176'),
                   model_uri=MIXS.VOCAB.food_farm_environment_water_source_shared, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "WaterSourceSharedEnum"], List[Union[str, "WaterSourceSharedEnum"]]]])

slots.food_farm_environment_enrichment_protocol = Slot(uri=MIXS['0001177'], name="food-farm environment_enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.food_farm_environment_enrichment_protocol, domain=Food-farmEnvironment, range=Optional[str])

slots.food_farm_environment_food_quality_date = Slot(uri=MIXS['0001178'], name="food-farm environment_food_quality_date", curie=MIXS.curie('0001178'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_quality_date, domain=Food-farmEnvironment, range=Optional[str],
                   pattern=re.compile(r'^(best by|best if used by|freeze by||use by);(19|20)\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'))

slots.food_farm_environment_IFSAC_category = Slot(uri=MIXS['0001179'], name="food-farm environment_IFSAC_category", curie=MIXS.curie('0001179'),
                   model_uri=MIXS.VOCAB.food_farm_environment_IFSAC_category, domain=Food-farmEnvironment, range=Union[str, List[str]])

slots.food_farm_environment_animal_housing = Slot(uri=MIXS['0001180'], name="food-farm environment_animal_housing", curie=MIXS.curie('0001180'),
                   model_uri=MIXS.VOCAB.food_farm_environment_animal_housing, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.food_farm_environment_cult_isol_date = Slot(uri=MIXS['0001181'], name="food-farm environment_cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.food_farm_environment_cult_isol_date, domain=Food-farmEnvironment, range=Optional[Union[str, XSDDate]])

slots.food_farm_environment_food_clean_proc = Slot(uri=MIXS['0001182'], name="food-farm environment_food_clean_proc", curie=MIXS.curie('0001182'),
                   model_uri=MIXS.VOCAB.food_farm_environment_food_clean_proc, domain=Food-farmEnvironment, range=Optional[Union[Union[str, "FoodCleanProcEnum"], List[Union[str, "FoodCleanProcEnum"]]]])

slots.food_farm_environment_misc_param = Slot(uri=MIXS['0000752'], name="food-farm environment_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.food_farm_environment_misc_param, domain=Food-farmEnvironment, range=Optional[Union[str, List[str]]])

slots.agriculture_plant_growth_med = Slot(uri=MIXS['0001057'], name="agriculture_plant_growth_med", curie=MIXS.curie('0001057'),
                   model_uri=MIXS.VOCAB.agriculture_plant_growth_med, domain=Agriculture, range=Optional[Union[str, "PlantGrowthMedEnum"]])

slots.agriculture_soil_horizon = Slot(uri=MIXS['0001082'], name="agriculture_soil_horizon", curie=MIXS.curie('0001082'),
                   model_uri=MIXS.VOCAB.agriculture_soil_horizon, domain=Agriculture, range=Optional[Union[str, "SoilHorizonEnum"]])

slots.agriculture_photosynt_activ = Slot(uri=MIXS['0001296'], name="agriculture_photosynt_activ", curie=MIXS.curie('0001296'),
                   model_uri=MIXS.VOCAB.agriculture_photosynt_activ, domain=Agriculture, range=Optional[Union[Union[dict, "QuantityValue"], List[Union[dict, "QuantityValue"]]]])

slots.agriculture_photosynt_activ_meth = Slot(uri=MIXS['0001336'], name="agriculture_photosynt_activ_meth", curie=MIXS.curie('0001336'),
                   model_uri=MIXS.VOCAB.agriculture_photosynt_activ_meth, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_samp_collect_method = Slot(uri=MIXS['0001225'], name="agriculture_samp_collect_method", curie=MIXS.curie('0001225'),
                   model_uri=MIXS.VOCAB.agriculture_samp_collect_method, domain=Agriculture, range=Optional[str])

slots.agriculture_enrichment_protocol = Slot(uri=MIXS['0001177'], name="agriculture_enrichment_protocol", curie=MIXS.curie('0001177'),
                   model_uri=MIXS.VOCAB.agriculture_enrichment_protocol, domain=Agriculture, range=Optional[str])

slots.agriculture_library_prep_kit = Slot(uri=MIXS['0001145'], name="agriculture_library_prep_kit", curie=MIXS.curie('0001145'),
                   model_uri=MIXS.VOCAB.agriculture_library_prep_kit, domain=Agriculture, range=Optional[str])

slots.agriculture_sequencing_location = Slot(uri=MIXS['0001156'], name="agriculture_sequencing_location", curie=MIXS.curie('0001156'),
                   model_uri=MIXS.VOCAB.agriculture_sequencing_location, domain=Agriculture, range=Optional[str])

slots.agriculture_soil_temp = Slot(uri=MIXS['0000113'], name="agriculture_soil_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.agriculture_soil_temp, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_soil_pH = Slot(uri=MIXS['0001160'], name="agriculture_soil_pH", curie=MIXS.curie('0001160'),
                   model_uri=MIXS.VOCAB.agriculture_soil_pH, domain=Agriculture, range=Optional[float])

slots.agriculture_soil_conductivity = Slot(uri=MIXS['0001158'], name="agriculture_soil_conductivity", curie=MIXS.curie('0001158'),
                   model_uri=MIXS.VOCAB.agriculture_soil_conductivity, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_rel_location = Slot(uri=MIXS['0001161'], name="agriculture_rel_location", curie=MIXS.curie('0001161'),
                   model_uri=MIXS.VOCAB.agriculture_rel_location, domain=Agriculture, range=Optional[str])

slots.agriculture_soil_cover = Slot(uri=MIXS['0001159'], name="agriculture_soil_cover", curie=MIXS.curie('0001159'),
                   model_uri=MIXS.VOCAB.agriculture_soil_cover, domain=Agriculture, range=Optional[str])

slots.agriculture_porosity = Slot(uri=MIXS['0000211'], name="agriculture_porosity", curie=MIXS.curie('0000211'),
                   model_uri=MIXS.VOCAB.agriculture_porosity, domain=Agriculture, range=Optional[str])

slots.agriculture_texture = Slot(uri=MIXS['0000335'], name="agriculture_texture", curie=MIXS.curie('0000335'),
                   model_uri=MIXS.VOCAB.agriculture_texture, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_texture_meth = Slot(uri=MIXS['0000336'], name="agriculture_texture_meth", curie=MIXS.curie('0000336'),
                   model_uri=MIXS.VOCAB.agriculture_texture_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_host_symbiont = Slot(uri=MIXS['0001298'], name="agriculture_host_symbiont", curie=MIXS.curie('0001298'),
                   model_uri=MIXS.VOCAB.agriculture_host_symbiont, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_host_disease_stat = Slot(uri=MIXS['0000031'], name="agriculture_host_disease_stat", curie=MIXS.curie('0000031'),
                   model_uri=MIXS.VOCAB.agriculture_host_disease_stat, domain=Agriculture, range=Optional[str])

slots.agriculture_pres_animal_insect = Slot(uri=MIXS['0000819'], name="agriculture_pres_animal_insect", curie=MIXS.curie('0000819'),
                   model_uri=MIXS.VOCAB.agriculture_pres_animal_insect, domain=Agriculture, range=Optional[str],
                   pattern=re.compile(r'^(cat|dog|rodent|snake|other);\d+$'))

slots.agriculture_plant_water_method = Slot(uri=MIXS['0001111'], name="agriculture_plant_water_method", curie=MIXS.curie('0001111'),
                   model_uri=MIXS.VOCAB.agriculture_plant_water_method, domain=Agriculture, range=Optional[str])

slots.agriculture_anim_water_method = Slot(uri=MIXS['0001115'], name="agriculture_anim_water_method", curie=MIXS.curie('0001115'),
                   model_uri=MIXS.VOCAB.agriculture_anim_water_method, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_farm_water_source = Slot(uri=MIXS['0001110'], name="agriculture_farm_water_source", curie=MIXS.curie('0001110'),
                   model_uri=MIXS.VOCAB.agriculture_farm_water_source, domain=Agriculture, range=Optional[Union[Union[str, "FarmWaterSourceEnum"], List[Union[str, "FarmWaterSourceEnum"]]]])

slots.agriculture_water_source_shared = Slot(uri=MIXS['0001176'], name="agriculture_water_source_shared", curie=MIXS.curie('0001176'),
                   model_uri=MIXS.VOCAB.agriculture_water_source_shared, domain=Agriculture, range=Optional[Union[Union[str, "WaterSourceSharedEnum"], List[Union[str, "WaterSourceSharedEnum"]]]])

slots.agriculture_water_pH = Slot(uri=MIXS['0001175'], name="agriculture_water_pH", curie=MIXS.curie('0001175'),
                   model_uri=MIXS.VOCAB.agriculture_water_pH, domain=Agriculture, range=Optional[float])

slots.agriculture_elev = Slot(uri=MIXS['0000093'], name="agriculture_elev", curie=MIXS.curie('0000093'),
                   model_uri=MIXS.VOCAB.agriculture_elev, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_season = Slot(uri=MIXS['0000829'], name="agriculture_season", curie=MIXS.curie('0000829'),
                   model_uri=MIXS.VOCAB.agriculture_season, domain=Agriculture, range=Optional[str])

slots.agriculture_solar_irradiance = Slot(uri=MIXS['0000112'], name="agriculture_solar_irradiance", curie=MIXS.curie('0000112'),
                   model_uri=MIXS.VOCAB.agriculture_solar_irradiance, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_crop_yield = Slot(uri=MIXS['0001116'], name="agriculture_crop_yield", curie=MIXS.curie('0001116'),
                   model_uri=MIXS.VOCAB.agriculture_crop_yield, domain=Agriculture, range=Optional[str])

slots.agriculture_season_humidity = Slot(uri=MIXS['0001148'], name="agriculture_season_humidity", curie=MIXS.curie('0001148'),
                   model_uri=MIXS.VOCAB.agriculture_season_humidity, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_humidity = Slot(uri=MIXS['0000100'], name="agriculture_humidity", curie=MIXS.curie('0000100'),
                   model_uri=MIXS.VOCAB.agriculture_humidity, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_adjacent_environment = Slot(uri=MIXS['0001121'], name="agriculture_adjacent_environment", curie=MIXS.curie('0001121'),
                   model_uri=MIXS.VOCAB.agriculture_adjacent_environment, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_chem_administration = Slot(uri=MIXS['0000751'], name="agriculture_chem_administration", curie=MIXS.curie('0000751'),
                   model_uri=MIXS.VOCAB.agriculture_chem_administration, domain=Agriculture, range=Union[str, List[str]])

slots.agriculture_food_prod = Slot(uri=MIXS['0001211'], name="agriculture_food_prod", curie=MIXS.curie('0001211'),
                   model_uri=MIXS.VOCAB.agriculture_food_prod, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_lot_number = Slot(uri=MIXS['0001147'], name="agriculture_lot_number", curie=MIXS.curie('0001147'),
                   model_uri=MIXS.VOCAB.agriculture_lot_number, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_fertilizer_admin = Slot(uri=MIXS['0001127'], name="agriculture_fertilizer_admin", curie=MIXS.curie('0001127'),
                   model_uri=MIXS.VOCAB.agriculture_fertilizer_admin, domain=Agriculture, range=Optional[str])

slots.agriculture_samp_stor_temp = Slot(uri=MIXS['0000110'], name="agriculture_samp_stor_temp", curie=MIXS.curie('0000110'),
                   model_uri=MIXS.VOCAB.agriculture_samp_stor_temp, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_food_trav_mode = Slot(uri=MIXS['0001137'], name="agriculture_food_trav_mode", curie=MIXS.curie('0001137'),
                   model_uri=MIXS.VOCAB.agriculture_food_trav_mode, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_food_trav_vehic = Slot(uri=MIXS['0001138'], name="agriculture_food_trav_vehic", curie=MIXS.curie('0001138'),
                   model_uri=MIXS.VOCAB.agriculture_food_trav_vehic, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_farm_equip_san = Slot(uri=MIXS['0001124'], name="agriculture_farm_equip_san", curie=MIXS.curie('0001124'),
                   model_uri=MIXS.VOCAB.agriculture_farm_equip_san, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_farm_equip = Slot(uri=MIXS['0001126'], name="agriculture_farm_equip", curie=MIXS.curie('0001126'),
                   model_uri=MIXS.VOCAB.agriculture_farm_equip, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_farm_equip_shared = Slot(uri=MIXS['0001123'], name="agriculture_farm_equip_shared", curie=MIXS.curie('0001123'),
                   model_uri=MIXS.VOCAB.agriculture_farm_equip_shared, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_food_harvest_proc = Slot(uri=MIXS['0001133'], name="agriculture_food_harvest_proc", curie=MIXS.curie('0001133'),
                   model_uri=MIXS.VOCAB.agriculture_food_harvest_proc, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_plant_struc = Slot(uri=MIXS['0001060'], name="agriculture_plant_struc", curie=MIXS.curie('0001060'),
                   model_uri=MIXS.VOCAB.agriculture_plant_struc, domain=Agriculture, range=Optional[str])

slots.agriculture_host_dry_mass = Slot(uri=MIXS['0000257'], name="agriculture_host_dry_mass", curie=MIXS.curie('0000257'),
                   model_uri=MIXS.VOCAB.agriculture_host_dry_mass, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_ances_data = Slot(uri=MIXS['0000247'], name="agriculture_ances_data", curie=MIXS.curie('0000247'),
                   model_uri=MIXS.VOCAB.agriculture_ances_data, domain=Agriculture, range=Optional[str])

slots.agriculture_genetic_mod = Slot(uri=MIXS['0000859'], name="agriculture_genetic_mod", curie=MIXS.curie('0000859'),
                   model_uri=MIXS.VOCAB.agriculture_genetic_mod, domain=Agriculture, range=Optional[str])

slots.agriculture_Food_Product_type = Slot(uri=MIXS['0001184'], name="agriculture_Food_Product_type", curie=MIXS.curie('0001184'),
                   model_uri=MIXS.VOCAB.agriculture_Food_Product_type, domain=Agriculture, range=Optional[str])

slots.agriculture_Food_source = Slot(uri=MIXS['0001139'], name="agriculture_Food_source", curie=MIXS.curie('0001139'),
                   model_uri=MIXS.VOCAB.agriculture_Food_source, domain=Agriculture, range=str)

slots.agriculture_spikein_strain = Slot(uri=MIXS['0001170'], name="agriculture_spikein_strain", curie=MIXS.curie('0001170'),
                   model_uri=MIXS.VOCAB.agriculture_spikein_strain, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_organism_count = Slot(uri=MIXS['0000103'], name="agriculture_organism_count", curie=MIXS.curie('0000103'),
                   model_uri=MIXS.VOCAB.agriculture_organism_count, domain=Agriculture, range=Optional[Union[Union[str, "OrganismCountEnum"], List[Union[str, "OrganismCountEnum"]]]])

slots.agriculture_size_frac_low = Slot(uri=MIXS['0000735'], name="agriculture_size_frac_low", curie=MIXS.curie('0000735'),
                   model_uri=MIXS.VOCAB.agriculture_size_frac_low, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_size_frac_up = Slot(uri=MIXS['0000736'], name="agriculture_size_frac_up", curie=MIXS.curie('0000736'),
                   model_uri=MIXS.VOCAB.agriculture_size_frac_up, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_cult_isol_date = Slot(uri=MIXS['0001181'], name="agriculture_cult_isol_date", curie=MIXS.curie('0001181'),
                   model_uri=MIXS.VOCAB.agriculture_cult_isol_date, domain=Agriculture, range=Optional[Union[str, XSDDate]])

slots.agriculture_samp_pooling = Slot(uri=MIXS['0001153'], name="agriculture_samp_pooling", curie=MIXS.curie('0001153'),
                   model_uri=MIXS.VOCAB.agriculture_samp_pooling, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_root_med_macronutr = Slot(uri=MIXS['0000578'], name="agriculture_root_med_macronutr", curie=MIXS.curie('0000578'),
                   model_uri=MIXS.VOCAB.agriculture_root_med_macronutr, domain=Agriculture, range=Optional[str])

slots.agriculture_root_med_carbon = Slot(uri=MIXS['0000577'], name="agriculture_root_med_carbon", curie=MIXS.curie('0000577'),
                   model_uri=MIXS.VOCAB.agriculture_root_med_carbon, domain=Agriculture, range=Optional[str])

slots.agriculture_root_med_ph = Slot(uri=MIXS['0001062'], name="agriculture_root_med_ph", curie=MIXS.curie('0001062'),
                   model_uri=MIXS.VOCAB.agriculture_root_med_ph, domain=Agriculture, range=Optional[float])

slots.agriculture_soil_depth = Slot(uri=MIXS['0000018'], name="agriculture_soil_depth", curie=MIXS.curie('0000018'),
                   model_uri=MIXS.VOCAB.agriculture_soil_depth, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_specific_host = Slot(uri=MIXS['0000029'], name="agriculture_specific_host", curie=MIXS.curie('0000029'),
                   model_uri=MIXS.VOCAB.agriculture_specific_host, domain=Agriculture, range=str)

slots.agriculture_pathogenicity = Slot(uri=MIXS['0000027'], name="agriculture_pathogenicity", curie=MIXS.curie('0000027'),
                   model_uri=MIXS.VOCAB.agriculture_pathogenicity, domain=Agriculture, range=str)

slots.agriculture_biotic_relationship = Slot(uri=MIXS['0000028'], name="agriculture_biotic_relationship", curie=MIXS.curie('0000028'),
                   model_uri=MIXS.VOCAB.agriculture_biotic_relationship, domain=Agriculture, range=Optional[Union[str, "BioticRelationshipEnum"]])

slots.agriculture_water_temp_regm = Slot(uri=MIXS['0000590'], name="agriculture_water_temp_regm", curie=MIXS.curie('0000590'),
                   model_uri=MIXS.VOCAB.agriculture_water_temp_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_watering_regm = Slot(uri=MIXS['0000591'], name="agriculture_watering_regm", curie=MIXS.curie('0000591'),
                   model_uri=MIXS.VOCAB.agriculture_watering_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_standing_water_regm = Slot(uri=MIXS['0001069'], name="agriculture_standing_water_regm", curie=MIXS.curie('0001069'),
                   model_uri=MIXS.VOCAB.agriculture_standing_water_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_gaseous_environment = Slot(uri=MIXS['0000558'], name="agriculture_gaseous_environment", curie=MIXS.curie('0000558'),
                   model_uri=MIXS.VOCAB.agriculture_gaseous_environment, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_fungicide_regm = Slot(uri=MIXS['0000557'], name="agriculture_fungicide_regm", curie=MIXS.curie('0000557'),
                   model_uri=MIXS.VOCAB.agriculture_fungicide_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_climate_environment = Slot(uri=MIXS['0001040'], name="agriculture_climate_environment", curie=MIXS.curie('0001040'),
                   model_uri=MIXS.VOCAB.agriculture_climate_environment, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_herbicide_regm = Slot(uri=MIXS['0000561'], name="agriculture_herbicide_regm", curie=MIXS.curie('0000561'),
                   model_uri=MIXS.VOCAB.agriculture_herbicide_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_non_mineral_nutr_regm = Slot(uri=MIXS['0000571'], name="agriculture_non_mineral_nutr_regm", curie=MIXS.curie('0000571'),
                   model_uri=MIXS.VOCAB.agriculture_non_mineral_nutr_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_pesticide_regm = Slot(uri=MIXS['0000573'], name="agriculture_pesticide_regm", curie=MIXS.curie('0000573'),
                   model_uri=MIXS.VOCAB.agriculture_pesticide_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_ph_regm = Slot(uri=MIXS['0001056'], name="agriculture_ph_regm", curie=MIXS.curie('0001056'),
                   model_uri=MIXS.VOCAB.agriculture_ph_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_salt_regm = Slot(uri=MIXS['0000582'], name="agriculture_salt_regm", curie=MIXS.curie('0000582'),
                   model_uri=MIXS.VOCAB.agriculture_salt_regm, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_season_environment = Slot(uri=MIXS['0001068'], name="agriculture_season_environment", curie=MIXS.curie('0001068'),
                   model_uri=MIXS.VOCAB.agriculture_season_environment, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_temp = Slot(uri=MIXS['0000113'], name="agriculture_temp", curie=MIXS.curie('0000113'),
                   model_uri=MIXS.VOCAB.agriculture_temp, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_perturbation = Slot(uri=MIXS['0000754'], name="agriculture_perturbation", curie=MIXS.curie('0000754'),
                   model_uri=MIXS.VOCAB.agriculture_perturbation, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_isol_growth_condt = Slot(uri=MIXS['0000003'], name="agriculture_isol_growth_condt", curie=MIXS.curie('0000003'),
                   model_uri=MIXS.VOCAB.agriculture_isol_growth_condt, domain=Agriculture, range=Optional[str])

slots.agriculture_samp_store_dur = Slot(uri=MIXS['0000116'], name="agriculture_samp_store_dur", curie=MIXS.curie('0000116'),
                   model_uri=MIXS.VOCAB.agriculture_samp_store_dur, domain=Agriculture, range=str)

slots.agriculture_samp_store_loc = Slot(uri=MIXS['0000755'], name="agriculture_samp_store_loc", curie=MIXS.curie('0000755'),
                   model_uri=MIXS.VOCAB.agriculture_samp_store_loc, domain=Agriculture, range=str)

slots.agriculture_samp_collect_device = Slot(uri=MIXS['0000002'], name="agriculture_samp_collect_device", curie=MIXS.curie('0000002'),
                   model_uri=MIXS.VOCAB.agriculture_samp_collect_device, domain=Agriculture, range=str)

slots.agriculture_samp_mat_process = Slot(uri=MIXS['0000016'], name="agriculture_samp_mat_process", curie=MIXS.curie('0000016'),
                   model_uri=MIXS.VOCAB.agriculture_samp_mat_process, domain=Agriculture, range=str)

slots.agriculture_host_age = Slot(uri=MIXS['0000255'], name="agriculture_host_age", curie=MIXS.curie('0000255'),
                   model_uri=MIXS.VOCAB.agriculture_host_age, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_host_common_name = Slot(uri=MIXS['0000248'], name="agriculture_host_common_name", curie=MIXS.curie('0000248'),
                   model_uri=MIXS.VOCAB.agriculture_host_common_name, domain=Agriculture, range=str)

slots.agriculture_host_genotype = Slot(uri=MIXS['0000365'], name="agriculture_host_genotype", curie=MIXS.curie('0000365'),
                   model_uri=MIXS.VOCAB.agriculture_host_genotype, domain=Agriculture, range=str)

slots.agriculture_host_height = Slot(uri=MIXS['0000264'], name="agriculture_host_height", curie=MIXS.curie('0000264'),
                   model_uri=MIXS.VOCAB.agriculture_host_height, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_host_subspecf_genlin = Slot(uri=MIXS['0001318'], name="agriculture_host_subspecf_genlin", curie=MIXS.curie('0001318'),
                   model_uri=MIXS.VOCAB.agriculture_host_subspecf_genlin, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_host_length = Slot(uri=MIXS['0000256'], name="agriculture_host_length", curie=MIXS.curie('0000256'),
                   model_uri=MIXS.VOCAB.agriculture_host_length, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_host_life_stage = Slot(uri=MIXS['0000251'], name="agriculture_host_life_stage", curie=MIXS.curie('0000251'),
                   model_uri=MIXS.VOCAB.agriculture_host_life_stage, domain=Agriculture, range=str)

slots.agriculture_host_phenotype = Slot(uri=MIXS['0000874'], name="agriculture_host_phenotype", curie=MIXS.curie('0000874'),
                   model_uri=MIXS.VOCAB.agriculture_host_phenotype, domain=Agriculture, range=str)

slots.agriculture_host_taxid = Slot(uri=MIXS['0000250'], name="agriculture_host_taxid", curie=MIXS.curie('0000250'),
                   model_uri=MIXS.VOCAB.agriculture_host_taxid, domain=Agriculture, range=str)

slots.agriculture_host_tot_mass = Slot(uri=MIXS['0000263'], name="agriculture_host_tot_mass", curie=MIXS.curie('0000263'),
                   model_uri=MIXS.VOCAB.agriculture_host_tot_mass, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_host_spec_range = Slot(uri=MIXS['0000030'], name="agriculture_host_spec_range", curie=MIXS.curie('0000030'),
                   model_uri=MIXS.VOCAB.agriculture_host_spec_range, domain=Agriculture, range=int)

slots.agriculture_trophic_level = Slot(uri=MIXS['0000032'], name="agriculture_trophic_level", curie=MIXS.curie('0000032'),
                   model_uri=MIXS.VOCAB.agriculture_trophic_level, domain=Agriculture, range=Optional[Union[str, "TrophicLevelEnum"]])

slots.agriculture_plant_product = Slot(uri=MIXS['0001058'], name="agriculture_plant_product", curie=MIXS.curie('0001058'),
                   model_uri=MIXS.VOCAB.agriculture_plant_product, domain=Agriculture, range=Optional[str])

slots.agriculture_samp_size = Slot(uri=MIXS['0000001'], name="agriculture_samp_size", curie=MIXS.curie('0000001'),
                   model_uri=MIXS.VOCAB.agriculture_samp_size, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_oxy_stat_samp = Slot(uri=MIXS['0000753'], name="agriculture_oxy_stat_samp", curie=MIXS.curie('0000753'),
                   model_uri=MIXS.VOCAB.agriculture_oxy_stat_samp, domain=Agriculture, range=Optional[Union[str, "OxyStatSampEnum"]])

slots.agriculture_seq_meth = Slot(uri=MIXS['0000050'], name="agriculture_seq_meth", curie=MIXS.curie('0000050'),
                   model_uri=MIXS.VOCAB.agriculture_seq_meth, domain=Agriculture, range=str)

slots.agriculture_samp_vol_we_dna_ext = Slot(uri=MIXS['0000111'], name="agriculture_samp_vol_we_dna_ext", curie=MIXS.curie('0000111'),
                   model_uri=MIXS.VOCAB.agriculture_samp_vol_we_dna_ext, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_pcr_primers = Slot(uri=MIXS['0000046'], name="agriculture_pcr_primers", curie=MIXS.curie('0000046'),
                   model_uri=MIXS.VOCAB.agriculture_pcr_primers, domain=Agriculture, range=str)

slots.agriculture_nucl_acid_ext = Slot(uri=MIXS['0000037'], name="agriculture_nucl_acid_ext", curie=MIXS.curie('0000037'),
                   model_uri=MIXS.VOCAB.agriculture_nucl_acid_ext, domain=Agriculture, range=str)

slots.agriculture_nucl_acid_amp = Slot(uri=MIXS['0000038'], name="agriculture_nucl_acid_amp", curie=MIXS.curie('0000038'),
                   model_uri=MIXS.VOCAB.agriculture_nucl_acid_amp, domain=Agriculture, range=str)

slots.agriculture_lib_size = Slot(uri=MIXS['0000039'], name="agriculture_lib_size", curie=MIXS.curie('0000039'),
                   model_uri=MIXS.VOCAB.agriculture_lib_size, domain=Agriculture, range=Optional[int])

slots.agriculture_lib_reads_seqd = Slot(uri=MIXS['0000040'], name="agriculture_lib_reads_seqd", curie=MIXS.curie('0000040'),
                   model_uri=MIXS.VOCAB.agriculture_lib_reads_seqd, domain=Agriculture, range=int)

slots.agriculture_lib_layout = Slot(uri=MIXS['0000041'], name="agriculture_lib_layout", curie=MIXS.curie('0000041'),
                   model_uri=MIXS.VOCAB.agriculture_lib_layout, domain=Agriculture, range=Optional[Union[str, "LibLayoutEnum"]])

slots.agriculture_lib_vector = Slot(uri=MIXS['0000042'], name="agriculture_lib_vector", curie=MIXS.curie('0000042'),
                   model_uri=MIXS.VOCAB.agriculture_lib_vector, domain=Agriculture, range=str)

slots.agriculture_lib_screen = Slot(uri=MIXS['0000043'], name="agriculture_lib_screen", curie=MIXS.curie('0000043'),
                   model_uri=MIXS.VOCAB.agriculture_lib_screen, domain=Agriculture, range=str)

slots.agriculture_target_gene = Slot(uri=MIXS['0000044'], name="agriculture_target_gene", curie=MIXS.curie('0000044'),
                   model_uri=MIXS.VOCAB.agriculture_target_gene, domain=Agriculture, range=str)

slots.agriculture_target_subfragment = Slot(uri=MIXS['0000045'], name="agriculture_target_subfragment", curie=MIXS.curie('0000045'),
                   model_uri=MIXS.VOCAB.agriculture_target_subfragment, domain=Agriculture, range=str)

slots.agriculture_mid = Slot(uri=MIXS['0000047'], name="agriculture_mid", curie=MIXS.curie('0000047'),
                   model_uri=MIXS.VOCAB.agriculture_mid, domain=Agriculture, range=str)

slots.agriculture_adapters = Slot(uri=MIXS['0000048'], name="agriculture_adapters", curie=MIXS.curie('0000048'),
                   model_uri=MIXS.VOCAB.agriculture_adapters, domain=Agriculture, range=str)

slots.agriculture_pcr_cond = Slot(uri=MIXS['0000049'], name="agriculture_pcr_cond", curie=MIXS.curie('0000049'),
                   model_uri=MIXS.VOCAB.agriculture_pcr_cond, domain=Agriculture, range=str)

slots.agriculture_seq_quality_check = Slot(uri=MIXS['0000051'], name="agriculture_seq_quality_check", curie=MIXS.curie('0000051'),
                   model_uri=MIXS.VOCAB.agriculture_seq_quality_check, domain=Agriculture, range=Optional[str])

slots.agriculture_chimera_check = Slot(uri=MIXS['0000052'], name="agriculture_chimera_check", curie=MIXS.curie('0000052'),
                   model_uri=MIXS.VOCAB.agriculture_chimera_check, domain=Agriculture, range=str)

slots.agriculture_assembly_name = Slot(uri=MIXS['0000057'], name="agriculture_assembly_name", curie=MIXS.curie('0000057'),
                   model_uri=MIXS.VOCAB.agriculture_assembly_name, domain=Agriculture, range=str)

slots.agriculture_assembly_software = Slot(uri=MIXS['0000058'], name="agriculture_assembly_software", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.agriculture_assembly_software, domain=Agriculture, range=Optional[str])

slots.agriculture_assembly_quality = Slot(uri=MIXS['0000058'], name="agriculture_assembly_quality", curie=MIXS.curie('0000058'),
                   model_uri=MIXS.VOCAB.agriculture_assembly_quality, domain=Agriculture, range=Optional[str])

slots.agriculture_annot = Slot(uri=MIXS['0000059'], name="agriculture_annot", curie=MIXS.curie('0000059'),
                   model_uri=MIXS.VOCAB.agriculture_annot, domain=Agriculture, range=Optional[str])

slots.agriculture_url = Slot(uri=MIXS['0000091'], name="agriculture_url", curie=MIXS.curie('0000091'),
                   model_uri=MIXS.VOCAB.agriculture_url, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_sop = Slot(uri=MIXS['0000090'], name="agriculture_sop", curie=MIXS.curie('0000090'),
                   model_uri=MIXS.VOCAB.agriculture_sop, domain=Agriculture, range=Optional[str])

slots.agriculture_source_mat_id = Slot(uri=MIXS['0000026'], name="agriculture_source_mat_id", curie=MIXS.curie('0000026'),
                   model_uri=MIXS.VOCAB.agriculture_source_mat_id, domain=Agriculture, range=Optional[str])

slots.agriculture_fao_class = Slot(uri=MIXS['0001083'], name="agriculture_fao_class", curie=MIXS.curie('0001083'),
                   model_uri=MIXS.VOCAB.agriculture_fao_class, domain=Agriculture, range=Optional[Union[str, "FaoClassEnum"]])

slots.agriculture_local_class = Slot(uri=MIXS['0000330'], name="agriculture_local_class", curie=MIXS.curie('0000330'),
                   model_uri=MIXS.VOCAB.agriculture_local_class, domain=Agriculture, range=Optional[str])

slots.agriculture_local_class_meth = Slot(uri=MIXS['0000331'], name="agriculture_local_class_meth", curie=MIXS.curie('0000331'),
                   model_uri=MIXS.VOCAB.agriculture_local_class_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_soil_type = Slot(uri=MIXS['0000332'], name="agriculture_soil_type", curie=MIXS.curie('0000332'),
                   model_uri=MIXS.VOCAB.agriculture_soil_type, domain=Agriculture, range=str)

slots.agriculture_soil_type_meth = Slot(uri=MIXS['0000334'], name="agriculture_soil_type_meth", curie=MIXS.curie('0000334'),
                   model_uri=MIXS.VOCAB.agriculture_soil_type_meth, domain=Agriculture, range=str)

slots.agriculture_horizon = Slot(uri=MIXS['0001082'], name="agriculture_horizon", curie=MIXS.curie('0001082'),
                   model_uri=MIXS.VOCAB.agriculture_horizon, domain=Agriculture, range=Optional[Union[str, "HorizonEnum"]])

slots.agriculture_horizon_meth = Slot(uri=MIXS['0000321'], name="agriculture_horizon_meth", curie=MIXS.curie('0000321'),
                   model_uri=MIXS.VOCAB.agriculture_horizon_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_link_class_info = Slot(uri=MIXS['0000329'], name="agriculture_link_class_info", curie=MIXS.curie('0000329'),
                   model_uri=MIXS.VOCAB.agriculture_link_class_info, domain=Agriculture, range=Optional[str])

slots.agriculture_previous_land_use = Slot(uri=MIXS['0000315'], name="agriculture_previous_land_use", curie=MIXS.curie('0000315'),
                   model_uri=MIXS.VOCAB.agriculture_previous_land_use, domain=Agriculture, range=Optional[str])

slots.agriculture_previous_land_use_meth = Slot(uri=MIXS['0000316'], name="agriculture_previous_land_use_meth", curie=MIXS.curie('0000316'),
                   model_uri=MIXS.VOCAB.agriculture_previous_land_use_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_crop_rotation = Slot(uri=MIXS['0000318'], name="agriculture_crop_rotation", curie=MIXS.curie('0000318'),
                   model_uri=MIXS.VOCAB.agriculture_crop_rotation, domain=Agriculture, range=Optional[str])

slots.agriculture_agrochem_addition = Slot(uri=MIXS['0000639'], name="agriculture_agrochem_addition", curie=MIXS.curie('0000639'),
                   model_uri=MIXS.VOCAB.agriculture_agrochem_addition, domain=Agriculture, range=Optional[Union[str, List[str]]])

slots.agriculture_tillage = Slot(uri=MIXS['0001081'], name="agriculture_tillage", curie=MIXS.curie('0001081'),
                   model_uri=MIXS.VOCAB.agriculture_tillage, domain=Agriculture, range=Optional[Union[Union[str, "TillageEnum"], List[Union[str, "TillageEnum"]]]])

slots.agriculture_fire = Slot(uri=MIXS['0001086'], name="agriculture_fire", curie=MIXS.curie('0001086'),
                   model_uri=MIXS.VOCAB.agriculture_fire, domain=Agriculture, range=Optional[Union[str, XSDDate]])

slots.agriculture_flooding = Slot(uri=MIXS['0000319'], name="agriculture_flooding", curie=MIXS.curie('0000319'),
                   model_uri=MIXS.VOCAB.agriculture_flooding, domain=Agriculture, range=Optional[Union[str, XSDDate]])

slots.agriculture_extreme_event = Slot(uri=MIXS['0000320'], name="agriculture_extreme_event", curie=MIXS.curie('0000320'),
                   model_uri=MIXS.VOCAB.agriculture_extreme_event, domain=Agriculture, range=Optional[Union[str, XSDDate]])

slots.agriculture_link_climate_info = Slot(uri=MIXS['0000328'], name="agriculture_link_climate_info", curie=MIXS.curie('0000328'),
                   model_uri=MIXS.VOCAB.agriculture_link_climate_info, domain=Agriculture, range=Optional[str])

slots.agriculture_annual_temp = Slot(uri=MIXS['0000642'], name="agriculture_annual_temp", curie=MIXS.curie('0000642'),
                   model_uri=MIXS.VOCAB.agriculture_annual_temp, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_season_temp = Slot(uri=MIXS['0000643'], name="agriculture_season_temp", curie=MIXS.curie('0000643'),
                   model_uri=MIXS.VOCAB.agriculture_season_temp, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_annual_precpt = Slot(uri=MIXS['0000644'], name="agriculture_annual_precpt", curie=MIXS.curie('0000644'),
                   model_uri=MIXS.VOCAB.agriculture_annual_precpt, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_season_precpt = Slot(uri=MIXS['0000645'], name="agriculture_season_precpt", curie=MIXS.curie('0000645'),
                   model_uri=MIXS.VOCAB.agriculture_season_precpt, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_cur_land_use = Slot(uri=MIXS['0001080'], name="agriculture_cur_land_use", curie=MIXS.curie('0001080'),
                   model_uri=MIXS.VOCAB.agriculture_cur_land_use, domain=Agriculture, range=Optional[Union[str, "CurLandUseEnum"]])

slots.agriculture_slope_gradient = Slot(uri=MIXS['0000646'], name="agriculture_slope_gradient", curie=MIXS.curie('0000646'),
                   model_uri=MIXS.VOCAB.agriculture_slope_gradient, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_slope_aspect = Slot(uri=MIXS['0000647'], name="agriculture_slope_aspect", curie=MIXS.curie('0000647'),
                   model_uri=MIXS.VOCAB.agriculture_slope_aspect, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_profile_position = Slot(uri=MIXS['0001084'], name="agriculture_profile_position", curie=MIXS.curie('0001084'),
                   model_uri=MIXS.VOCAB.agriculture_profile_position, domain=Agriculture, range=Optional[Union[str, "ProfilePositionEnum"]])

slots.agriculture_drainage_class = Slot(uri=MIXS['0001085'], name="agriculture_drainage_class", curie=MIXS.curie('0001085'),
                   model_uri=MIXS.VOCAB.agriculture_drainage_class, domain=Agriculture, range=Optional[Union[str, "DrainageClassEnum"]])

slots.agriculture_store_cond = Slot(uri=MIXS['0000327'], name="agriculture_store_cond", curie=MIXS.curie('0000327'),
                   model_uri=MIXS.VOCAB.agriculture_store_cond, domain=Agriculture, range=str)

slots.agriculture_ph_meth = Slot(uri=MIXS['0001106'], name="agriculture_ph_meth", curie=MIXS.curie('0001106'),
                   model_uri=MIXS.VOCAB.agriculture_ph_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_cur_vegetation = Slot(uri=MIXS['0000312'], name="agriculture_cur_vegetation", curie=MIXS.curie('0000312'),
                   model_uri=MIXS.VOCAB.agriculture_cur_vegetation, domain=Agriculture, range=Optional[str])

slots.agriculture_cur_vegetation_meth = Slot(uri=MIXS['0000314'], name="agriculture_cur_vegetation_meth", curie=MIXS.curie('0000314'),
                   model_uri=MIXS.VOCAB.agriculture_cur_vegetation_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_tot_org_carb = Slot(uri=MIXS['0000533'], name="agriculture_tot_org_carb", curie=MIXS.curie('0000533'),
                   model_uri=MIXS.VOCAB.agriculture_tot_org_carb, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_tot_org_c_meth = Slot(uri=MIXS['0000337'], name="agriculture_tot_org_c_meth", curie=MIXS.curie('0000337'),
                   model_uri=MIXS.VOCAB.agriculture_tot_org_c_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_tot_nitro = Slot(uri=MIXS['0000102'], name="agriculture_tot_nitro", curie=MIXS.curie('0000102'),
                   model_uri=MIXS.VOCAB.agriculture_tot_nitro, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_tot_n_meth = Slot(uri=MIXS['0000338'], name="agriculture_tot_n_meth", curie=MIXS.curie('0000338'),
                   model_uri=MIXS.VOCAB.agriculture_tot_n_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_microbial_biomass = Slot(uri=MIXS['0000650'], name="agriculture_microbial_biomass", curie=MIXS.curie('0000650'),
                   model_uri=MIXS.VOCAB.agriculture_microbial_biomass, domain=Agriculture, range=Union[dict, "QuantityValue"])

slots.agriculture_microbial_biomass_meth = Slot(uri=MIXS['0000339'], name="agriculture_microbial_biomass_meth", curie=MIXS.curie('0000339'),
                   model_uri=MIXS.VOCAB.agriculture_microbial_biomass_meth, domain=Agriculture, range=str)

slots.agriculture_heavy_metals_meth = Slot(uri=MIXS['0000343'], name="agriculture_heavy_metals_meth", curie=MIXS.curie('0000343'),
                   model_uri=MIXS.VOCAB.agriculture_heavy_metals_meth, domain=Agriculture, range=Optional[str])

slots.agriculture_tot_car = Slot(uri=MIXS['0000525'], name="agriculture_tot_car", curie=MIXS.curie('0000525'),
                   model_uri=MIXS.VOCAB.agriculture_tot_car, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_tot_phos = Slot(uri=MIXS['0000689'], name="agriculture_tot_phos", curie=MIXS.curie('0000689'),
                   model_uri=MIXS.VOCAB.agriculture_tot_phos, domain=Agriculture, range=Optional[Union[dict, "QuantityValue"]])

slots.agriculture_sieving = Slot(uri=MIXS['0000322'], name="agriculture_sieving", curie=MIXS.curie('0000322'),
                   model_uri=MIXS.VOCAB.agriculture_sieving, domain=Agriculture, range=str)

slots.agriculture_pool_dna_extracts = Slot(uri=MIXS['0000325'], name="agriculture_pool_dna_extracts", curie=MIXS.curie('0000325'),
                   model_uri=MIXS.VOCAB.agriculture_pool_dna_extracts, domain=Agriculture, range=str)

slots.agriculture_misc_param = Slot(uri=MIXS['0000752'], name="agriculture_misc_param", curie=MIXS.curie('0000752'),
                   model_uri=MIXS.VOCAB.agriculture_misc_param, domain=Agriculture, range=Optional[Union[str, List[str]]])