# metamodel_version: 1.7.0
enum DatasetThemes
  {
    AGRI
    ECON
    EDUC
    ENER
    ENVI
    GOVE
    HEAL
    INTR
    JUST
    OP_DATPRO
    REGI
    SOCI
    TECH
    TRAN
  }

enum TopLevelMediaTypes
  {
    application
    audio
    example
    font
    haptics
    image
    message
    model
    multipart
    text
    video
  }

type Activity implements ClassifierMixin
  {
    id: Uriorcurie!
    title: [String]
    description: [String]
    otherIdentifier: [Identifier]
    hasPart: [Activity]
    hadInputEntity: [Entity]
    hadOutputEntity: [Entity]
    hadInputActivity: [Activity]
    carriedOutBy: [AgenticEntity]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [Activity]
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type Agent
  {
    name: [String]!
    type: Concept
  }

type AgenticEntity implements ClassifierMixin
  {
    id: Uriorcurie!
    title: String
    description: String
    otherIdentifier: [Identifier]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    hasPart: [AgenticEntity]
    partOf: [AgenticEntity]
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type AnalysisDataset
  {
    accessRights: RightsStatement
    applicableLegislation: [LegalResource]
    conformsTo: [Standard]
    contactPoint: [Kind]
    creator: [Agent]
    datasetDistribution: [Distribution]
    description: [String]!
    documentation: [Document]
    frequency: Frequency
    geographicalCoverage: [Location]
    hasVersion: [Dataset]
    identifier: [String]
    inSeries: [DatasetSeries]
    isReferencedBy: [Resource]
    keyword: [String]
    landingPage: [Document]
    language: [LinguisticSystem]
    modificationDate: Date
    otherIdentifier: [Identifier]
    provenance: [ProvenanceStatement]
    publisher: Agent
    qualifiedAttribution: [Attribution]
    qualifiedRelation: [Relationship]
    relatedResource: [Resource]
    releaseDate: Date
    sample: [Distribution]
    source: [Dataset]
    spatialResolution: Decimal
    temporalCoverage: [PeriodOfTime]
    temporalResolution: Duration
    theme: [Concept]
    title: [String]!
    type: [Concept]
    version: String
    versionNotes: [String]
    id: Uriorcurie!
    isAboutEntity: [EvaluatedEntity]
    isAboutActivity: [EvaluatedActivity]
    wasGeneratedBy: [DataAnalysis]
  }

type AnalysisSourceData
  {
    id: Uriorcurie!
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    hasPart: [Entity]
    partOf: [Entity]
    type: DefinedTerm
    rdfType: DefinedTerm
    title: String
    description: String
    otherIdentifier: [Identifier]
    wasGeneratedBy: [DataGeneratingActivity]
  }

type Any
  {
    title: String
    description: String
  }

type Attribution
  {
    title: String
    description: String
  }

type Catalogue
  {
    applicableLegislation: [LegalResource]
    catalogue: [Catalogue]
    creator: Agent
    description: [String]!
    geographicalCoverage: [Location]
    hasDataset: [Dataset]
    hasPart: [Catalogue]
    homepage: Document
    language: [LinguisticSystem]
    licence: LicenseDocument
    modificationDate: Date
    publisher: Agent!
    record: [CatalogueRecord]
    releaseDate: Date
    rights: RightsStatement
    service: [DataService]
    temporalCoverage: [PeriodOfTime]
    themes: [ConceptScheme]
    title: [String]!
  }

type CatalogueRecord
  {
    applicationProfile: [Standard]
    changeType: Concept
    description: [String]
    language: [LinguisticSystem]
    listingDate: Date
    modificationDate: Date!
    primaryTopic: Any!
    sourceMetadata: CatalogueRecord
    title: [String]
  }

type Checksum
  {
    algorithm: ChecksumAlgorithm!
    checksumValue: HexBinary!
  }

type ChecksumAlgorithm
  {
    title: String
    description: String
  }

interface ClassifierMixin
  {
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type Concept
  {
    preferredLabel: [String]!
    title: String
    description: String
  }

type ConceptScheme
  {
    title: [String]!
    description: String
  }

type DataAnalysis
  {
    id: Uriorcurie!
    title: [String]
    description: [String]
    otherIdentifier: [Identifier]
    hasPart: [Activity]
    hadInputEntity: [Entity]
    hadOutputEntity: [Entity]
    hadInputActivity: [Activity]
    carriedOutBy: [AgenticEntity]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [Activity]
    type: DefinedTerm
    rdfType: DefinedTerm
    evaluatedActivity: [EvaluatedActivity]
    realizedPlan: Plan
    occurredIn: Surrounding
    evaluatedEntity: [AnalysisSourceData]
  }

type DataGeneratingActivity
  {
    id: Uriorcurie!
    title: [String]
    description: [String]
    otherIdentifier: [Identifier]
    hasPart: [Activity]
    hadInputEntity: [Entity]
    hadOutputEntity: [Entity]
    hadInputActivity: [Activity]
    carriedOutBy: [AgenticEntity]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [Activity]
    type: DefinedTerm
    rdfType: DefinedTerm
    evaluatedEntity: [EvaluatedEntity]
    evaluatedActivity: [EvaluatedActivity]
    realizedPlan: Plan
    occurredIn: Surrounding
  }

type DataService
  {
    accessRights: RightsStatement
    applicableLegislation: [LegalResource]
    conformsTo: [Standard]
    contactPoint: [Kind]
    description: [String]
    documentation: [Document]
    endpointURL: [Resource]!
    endpointDescription: [Resource]
    format: [MediaTypeOrExtent]
    keyword: [String]
    landingPage: [Document]
    licence: LicenseDocument
    publisher: Agent
    servesDataset: [Dataset]
    theme: [Concept]
    title: [String]!
  }

type Dataset
  {
    accessRights: RightsStatement
    applicableLegislation: [LegalResource]
    conformsTo: [Standard]
    contactPoint: [Kind]
    creator: [Agent]
    datasetDistribution: [Distribution]
    description: [String]!
    documentation: [Document]
    frequency: Frequency
    geographicalCoverage: [Location]
    hasVersion: [Dataset]
    identifier: [String]
    inSeries: [DatasetSeries]
    isReferencedBy: [Resource]
    keyword: [String]
    landingPage: [Document]
    language: [LinguisticSystem]
    modificationDate: Date
    otherIdentifier: [Identifier]
    provenance: [ProvenanceStatement]
    publisher: Agent
    qualifiedAttribution: [Attribution]
    qualifiedRelation: [Relationship]
    relatedResource: [Resource]
    releaseDate: Date
    sample: [Distribution]
    source: [Dataset]
    spatialResolution: Decimal
    temporalCoverage: [PeriodOfTime]
    temporalResolution: Duration
    theme: [Concept]
    title: [String]!
    type: [Concept]
    version: String
    versionNotes: [String]
    wasGeneratedBy: [DataGeneratingActivity]!
    id: Uriorcurie!
    isAboutEntity: [EvaluatedEntity]
    isAboutActivity: [EvaluatedActivity]
  }

type DatasetSeries
  {
    applicableLegislation: [LegalResource]
    contactPoint: [Kind]
    description: [String]!
    frequency: Frequency
    geographicalCoverage: [Location]
    modificationDate: Date
    publisher: Agent
    releaseDate: Date
    temporalCoverage: [PeriodOfTime]
    title: [String]!
  }

type DefinedTerm
  {
    id: Uriorcurie!
    title: String
    fromCV: Uriorcurie
  }

type Device
  {
    id: Uriorcurie!
    title: String
    description: String
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [AgenticEntity]
    type: DefinedTerm
    rdfType: DefinedTerm
    hasPart: [Device]
    otherIdentifier: [Identifier]
  }

type Distribution
  {
    accessURL: [Resource]!
    accessService: [DataService]
    applicableLegislation: [LegalResource]
    availability: Concept
    byteSize: NonNegativeInteger
    checksum: Checksum
    compressionFormat: MediaType
    description: [String]
    documentation: [Document]
    downloadURL: [Resource]
    format: MediaTypeOrExtent
    hasPolicy: Policy
    language: [LinguisticSystem]
    licence: LicenseDocument
    linkedSchemas: [Standard]
    mediaType: MediaType
    modificationDate: Date
    packagingFormat: MediaType
    releaseDate: Date
    rights: RightsStatement
    spatialResolution: Decimal
    status: Concept
    temporalResolution: Duration
    title: [String]
  }

type Document
  {
    id: Uriorcurie!
    title: String
    description: String
  }

type Entity implements ClassifierMixin
  {
    title: String
    description: String
    id: Uriorcurie!
    otherIdentifier: [Identifier]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    hasPart: [Entity]
    partOf: [Entity]
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type EvaluatedActivity
  {
    id: Uriorcurie!
    title: [String]
    description: [String]
    hasPart: [Activity]
    hadInputEntity: [Entity]
    hadOutputEntity: [Entity]
    hadInputActivity: [Activity]
    carriedOutBy: [AgenticEntity]
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [Activity]
    type: DefinedTerm
    rdfType: DefinedTerm
    otherIdentifier: [Identifier]
  }

type EvaluatedEntity
  {
    id: Uriorcurie!
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    hasPart: [Entity]
    partOf: [Entity]
    type: DefinedTerm
    rdfType: DefinedTerm
    wasGeneratedBy: [Activity]
    title: String
    description: String
    otherIdentifier: [Identifier]
  }

type Frequency
  {
    title: String
    description: String
  }

type Geometry
  {
    title: String
    description: String
  }

type Identifier
  {
    notation: String!
    title: String
    description: String
  }

type Kind
  {
  }

type LegalResource
  {
    id: Uriorcurie!
    title: String
    description: String
  }

type LicenseDocument
  {
    type: [Concept]
    id: Uriorcurie!
    title: String
    description: String
  }

type LinguisticSystem
  {
    title: String
    description: String
  }

type Location
  {
    bbox: String
    centroid: String
    geometry: Geometry
  }

type MediaType
  {
    title: String
    description: String
  }

type MediaTypeOrExtent
  {
    title: String
    description: String
  }

type PeriodOfTime
  {
    beginning: TimeInstant
    end: TimeInstant
    endDate: Date
    startDate: Date
    title: String
    description: String
  }

type Plan implements ClassifierMixin
  {
    title: String
    description: String
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type Policy
  {
    title: String
    description: String
  }

type ProvenanceStatement
  {
    title: String
    description: String
  }

type QualitativeAttribute implements ClassifierMixin
  {
    title: String
    description: String
    value: String!
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type QuantitativeAttribute implements ClassifierMixin
  {
    title: String
    description: String
    value: Float!
    hasQuantityType: DefinedTerm!
    unit: DefinedTerm
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type Relationship
  {
    hadRole: [Role]!
    relation: [Resource]!
  }

type Resource
  {
    id: Uriorcurie!
    title: String
    description: String
  }

type RightsStatement
  {
    title: String
    description: String
  }

type Role
  {
    title: String
    description: String
  }

type Software
  {
    id: Uriorcurie!
    title: String
    description: String
    hasQualitativeAttribute: [QualitativeAttribute]
    hasQuantitativeAttribute: [QuantitativeAttribute]
    partOf: [AgenticEntity]
    type: DefinedTerm
    rdfType: DefinedTerm
    hasPart: [Software]
    otherIdentifier: [Identifier]
  }

type Standard
  {
    title: String
    description: String
  }

type SupportiveEntity
  {
    title: String
    description: String
  }

type Surrounding implements ClassifierMixin
  {
    title: String
    description: String
    type: DefinedTerm
    rdfType: DefinedTerm
  }

type TimeInstant
  {
    title: String
    description: String
  }
