# Auto generated from referansemodell-bronze-schema.yaml by pythongen.py version: 0.0.1
# Generation date: 2026-08-15T06:19:26
# Schema: referansemodell-bronze
#
# id: https://data.norge.no/linkml/referansemodell-bronze
# description: Viser minstekrava for å bestå bronsepolicyen: HTTP(S)-id, schema-metadata (title, version), class_uri, identifier-slot, slot_uri og begrepsidentifikator på riktig format.
# license: https://creativecommons.org/publicdomain/zero/1.0/

import dataclasses
import re
from dataclasses import dataclass
from datetime import (
    date,
    datetime,
    time
)
from typing import (
    Any,
    ClassVar,
    Dict,
    List,
    Optional,
    Union
)

from jsonasobj2 import (
    JsonObj,
    as_dict
)
from linkml_runtime.linkml_model.meta import (
    EnumDefinition,
    PermissibleValue,
    PvFormulaOptions
)
from linkml_runtime.utils.curienamespace import CurieNamespace
from linkml_runtime.utils.enumerations import EnumDefinitionImpl
from linkml_runtime.utils.formatutils import (
    camelcase,
    sfx,
    underscore
)
from linkml_runtime.utils.metamodelcore import (
    bnode,
    empty_dict,
    empty_list
)
from linkml_runtime.utils.slot import Slot
from linkml_runtime.utils.yamlutils import (
    YAMLRoot,
    extended_float,
    extended_int,
    extended_str
)
from rdflib import (
    Namespace,
    URIRef
)

from linkml_runtime.linkml_model.types import String, Uriorcurie
from linkml_runtime.utils.metamodelcore import URIorCURIE

metamodel_version = "1.11.0"
version = "1.0.0"

# Namespaces
DCT = CurieNamespace('dct', 'http://purl.org/dc/terms/')
EX = CurieNamespace('ex', 'https://example.org/vocab/')
LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/')
DEFAULT_ = CurieNamespace('', 'https://data.norge.no/linkml/referansemodell-bronze/')


# Types

# Class references
class RessursId(URIorCURIE):
    pass


@dataclass(repr=False)
class ReferanseBronseContainer(YAMLRoot):
    """
    Toppnivåobjekt for datafila.
    """
    _inherited_slots: ClassVar[list[str]] = []

    class_class_uri: ClassVar[URIRef] = URIRef("https://data.norge.no/linkml/referansemodell-bronze/ReferanseBronseContainer")
    class_class_curie: ClassVar[str] = None
    class_name: ClassVar[str] = "ReferanseBronseContainer"
    class_model_uri: ClassVar[URIRef] = URIRef("https://data.norge.no/linkml/referansemodell-bronze/ReferanseBronseContainer")

    ressursar: Optional[Union[dict[Union[str, RessursId], Union[dict, "Ressurs"]], list[Union[dict, "Ressurs"]]]] = empty_dict()

    def __post_init__(self, *_: str, **kwargs: Any):
        self._normalize_inlined_as_list(slot_name="ressursar", slot_type=Ressurs, key_name="id", keyed=True)

        super().__post_init__(**kwargs)


@dataclass(repr=False)
class Ressurs(YAMLRoot):
    """
    Ein generisk ressurs med tittel og skildring.
    """
    _inherited_slots: ClassVar[list[str]] = []

    class_class_uri: ClassVar[URIRef] = DCT["BibliographicResource"]
    class_class_curie: ClassVar[str] = "dct:BibliographicResource"
    class_name: ClassVar[str] = "Ressurs"
    class_model_uri: ClassVar[URIRef] = URIRef("https://data.norge.no/linkml/referansemodell-bronze/Ressurs")

    id: Union[str, RessursId] = None
    tittel: str = None
    skildring: Optional[str] = None

    def __post_init__(self, *_: str, **kwargs: Any):
        if self._is_empty(self.id):
            self.MissingRequiredField("id")
        if not isinstance(self.id, RessursId):
            self.id = RessursId(self.id)

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

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

        super().__post_init__(**kwargs)


# Enumerations


# Slots
class slots:
    pass

slots.id = Slot(uri=DCT.identifier, name="id", curie=DCT.curie('identifier'),
                   model_uri=DEFAULT_.id, domain=None, range=URIRef)

slots.tittel = Slot(uri=DCT.title, name="tittel", curie=DCT.curie('title'),
                   model_uri=DEFAULT_.tittel, domain=None, range=Optional[str])

slots.skildring = Slot(uri=DCT.description, name="skildring", curie=DCT.curie('description'),
                   model_uri=DEFAULT_.skildring, domain=None, range=Optional[str])

slots.referanseBronseContainer__ressursar = Slot(uri=DEFAULT_.ressursar, name="referanseBronseContainer__ressursar", curie=DEFAULT_.curie('ressursar'),
                   model_uri=DEFAULT_.referanseBronseContainer__ressursar, domain=None, range=Optional[Union[dict[Union[str, RessursId], Union[dict, Ressurs]], list[Union[dict, Ressurs]]]])

slots.Ressurs_tittel = Slot(uri=DCT.title, name="Ressurs_tittel", curie=DCT.curie('title'),
                   model_uri=DEFAULT_.Ressurs_tittel, domain=Ressurs, range=str)

slots.Ressurs_skildring = Slot(uri=DCT.description, name="Ressurs_skildring", curie=DCT.curie('description'),
                   model_uri=DEFAULT_.Ressurs_skildring, domain=Ressurs, range=Optional[str])

