from dataclasses import dataclass, field
from typing import List, Optional
from bindings.csw.coordinate_operation_name import CoordinateOperationName
from bindings.csw.cs_name import CsName
from bindings.csw.datum_name import DatumName
from bindings.csw.description_1 import Description1
from bindings.csw.ellipsoid_name import EllipsoidName
from bindings.csw.group_name import GroupName
from bindings.csw.meridian_name import MeridianName
from bindings.csw.meta_data_property import MetaDataProperty
from bindings.csw.method_name import MethodName
from bindings.csw.name import Name
from bindings.csw.parameter_name import ParameterName
from bindings.csw.srs_name import SrsName

__NAMESPACE__ = "http://www.opengis.net/gml"


@dataclass
class DefinitionType:
    """A definition, which can be included in or referenced by a dictionary. In
    this extended type, the inherited "description" optional element can hold
    the definition whenever only text is needed. The inherited "name" elements
    can provide one or more brief terms for which this is the definition. The
    inherited "metaDataProperty" elements can be used to reference or include
    more information about this definition.

    The gml:id attribute is required - it must be possible to reference this definition using this handle.
    """

    meta_data_property: List[MetaDataProperty] = field(
        default_factory=list,
        metadata={
            "name": "metaDataProperty",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    description: Optional[Description1] = field(
        default=None,
        metadata={
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    group_name: List[GroupName] = field(
        default_factory=list,
        metadata={
            "name": "groupName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    parameter_name: List[ParameterName] = field(
        default_factory=list,
        metadata={
            "name": "parameterName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    method_name: List[MethodName] = field(
        default_factory=list,
        metadata={
            "name": "methodName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    coordinate_operation_name: List[CoordinateOperationName] = field(
        default_factory=list,
        metadata={
            "name": "coordinateOperationName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    ellipsoid_name: List[EllipsoidName] = field(
        default_factory=list,
        metadata={
            "name": "ellipsoidName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    meridian_name: List[MeridianName] = field(
        default_factory=list,
        metadata={
            "name": "meridianName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    datum_name: List[DatumName] = field(
        default_factory=list,
        metadata={
            "name": "datumName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    cs_name: List[CsName] = field(
        default_factory=list,
        metadata={
            "name": "csName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    srs_name: List[SrsName] = field(
        default_factory=list,
        metadata={
            "name": "srsName",
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    name: List[Name] = field(
        default_factory=list,
        metadata={
            "type": "Element",
            "namespace": "http://www.opengis.net/gml",
        },
    )
    id: Optional[str] = field(
        default=None,
        metadata={
            "type": "Attribute",
            "namespace": "http://www.opengis.net/gml",
            "required": True,
        },
    )
