---
id: https://w3id.org/biolink/information_resource_registry.yaml
name: Information-Resource-Registry-Schema
license: https://creativecommons.org/publicdomain/zero/1.0/

version: 1.0.0

default_prefix: infores
default_range: string


imports:
  - linkml:types

prefixes:
  biolink: 'https://w3id.org/biolink/'
  linkml: 'https://w3id.org/linkml/'
  infores: 'https://w3id.org/biolink/infores/'

default_curi_maps:
  - obo_context
  - idot_context
  - monarch_context
  - semweb_context

classes:
  InformationResourceContainer:
    tree_root: true
    description: >-
      A collection of information resources
    slots:
      - information_resources

  InformationResource:
    aliases: ['knowledgebase']
    slots:
      - status
      - name
      - id
      - xref
      - synonym
      - description
      - knowledge_level
      - agent_type
      - consumes
      - consumed_by
    description: >-
      A database or knowledgebase and its supporting ecosystem of interfaces 
      and services that deliver content to consumers (e.g. web portals, APIs, 
      query endpoints, streaming services, data downloads, etc.).
      A single Information Resource by this definition may span many different datasets or
      databases, and include many access endpoints and user
      interfaces. Information Resources include project-specific resources
      such as a Translator Knowledge Provider, and community knowledgebases like ChemBL, OMIM, or DGIdb.
    rules:
      - preconditions:
          slot_conditions:
            status:
              equals_string: "released"
        postconditions:
          slot_conditions:
            knowledge_level:
              required: true
            agent_type:
              required: true

slots:

  consumes:
    description: >-
      A collection of information resources that are consumed by this information resource
    multivalued: true
    range: uriorcurie

  consumed_by:
    description: >-
      A collection of information resources that consume this information resource
    multivalued: true
    range: uriorcurie

  status:
    description: the status of the infores identifier, the default is "released"
    range: InformationResourceStatusEnum
    required: true

  information_resources:
    description: a collection of information resources
    multivalued: true
    range: InformationResource
    inlined_as_list: true
    inlined: true

  name:
    aliases: ['label', 'display name', 'title']
    description: >-
      A human-readable name for an attribute or entity.
    required: true
    slot_uri: rdfs:label

  id:
    description: >-
      A unique identifier for an entity.
      Must be either a CURIE shorthand for a URI or a complete URI
    required: true

  xref:
    aliases: ['dbxref', 'Dbxref', 'DbXref', 'record_url', 'source_record_urls']
    description: >-
      A database cross reference or alternative identifier for a NamedThing or edge between two 
      NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or 
      gives more detail about the edge. This property can be used on a node or edge to provide multiple
      URIs or CURIE cross references.
    multivalued: true

  synonym:
    aliases: ['alias']
    description: >-
      Alternate human-readable names for a thing
    multivalued: true

  description:
    aliases: ['comment', 'note', 'definition', 'description']
    description: >-
      A free-text description of an entity or attribute.
    slot_uri: rdfs:comment

  knowledge_level:
    range: KnowledgeLevelEnum
    description: >-
        The level of knowledge that supports an edge or node.  This is a general
        categorization of the type of evidence that supports a statement, and is
        not intended to be a comprehensive description of the evidence.  For
        example, a statement may be supported by a single publication, but that
        publication may contain multiple types of evidence, such as a
        computational prediction and a manual curation.  In this case, the
        knowledge level would be "curated", and the evidence would be described
        in more detail in the evidence graph.


  agent_type:
    range: AgentTypeEnum
    description: >-
        The type of agent that supports an edge or node.  This is a general
        categorization of the type of agent that supports a statement, and is
        not intended to be a comprehensive description of the agent.  For
        example, a statement may be supported by a single publication, but that
        publication may contain multiple types of evidence, such as a
        computational prediction and a manual curation.  In this case, the
        agent type would be "publication", and the evidence would be described
        in more detail in the evidence graph.

enums:
  InformationResourceStatusEnum:
    description: >-
        The status of the infores identifier
    permissible_values:
      released:
      deprecated:
      draft:
      modified:

  KnowledgeLevelEnum:
    description: >-
        The level of knowledge that supports an edge or node.  This is a general
        categorization of the type of evidence that supports a statement, and is
        not intended to be a comprehensive description of the evidence.  For
        example, a statement may be supported by a single publication, but that
        publication may contain multiple types of evidence, such as a
        computational prediction and a manual curation.  In this case, the
        knowledge level would be "curated", and the evidence would be described
        in more detail in the evidence graph.
    permissible_values:
      knowledge_assertion:
        description: >-
          Knowledge asserted by a human expert, based on their interpretation of data or published study results
      statistical_association:
        description: >-
          Statistical associations calculated between variables in a clinical or omics dataset, by an automated 
          analysis pipeline
      prediction:
        description: >-
          Predictions generated computationally through inference over less direct forms of evidence (without human 
          intervention or review)
      observation:
        description: >-
          Edge reports a phenomenon that was reported/observed to have occurred (and possibly some quantification, 
          e.g. how many times, at what frequency)
      not_provided:
        description: >-
          The knowledge level/type fora statement is not provided, typically because it cannot be determined from 
          available information.
      logical_entailment:
        description: >-
          a statement reporting a conclusion that follows logically from premises, which are typically well-established 
          facts or knowledge assertions. (e.g. fingernail part of finger, finger part of hand → fingernail part of
          hand)). Logical entailments are based on dedictive inference, and generally have a high degree of confidence
          when based on sound premises and inference logic.
      mixed:
        description: >-
          A statement that is supported by a mix of different types of evidence, such as a combination of manual 
          curation and computational prediction. This is a catch-all category for statements that do not fit cleanly 
          into one of the other categories.
      other:
        description: >-
          A knowledge level that does not fit into any of the other categories. This is a catch-all category for 
          knowledge levels that are not covered by the other categories.

  AgentTypeEnum:
    description: >-
      The type of agent that supports an edge or node.  This is a general
      categorization of the type of agent that supports a statement, and is
      not intended to be a comprehensive description of the agent.  For
      example, a statement may be supported by a single publication, but that
      publication may contain multiple types of evidence, such as a
      computational prediction and a manual curation.  In this case, the
      agent type would be "publication", and the evidence would be described
      in more detail in the evidence graph.
    comments: >-
      Note that this property indicates the type of agent who produced a final statement of knowledge, 
      which is often different from the agent or agents who produced information used as evidence to support 
      the generation of this knowledge. For example, if a human curator concludes that a particular gene variant 
      causes a medical condition - based on their interpretation of information produced by computational modeling 
      tools, automated statistical analyses, and robotic laboratory assay systems - the agent type for this statement 
      is "manual_agent" despite all of the evidence being created by automated agents. But if any of these systems is 
      programmed to generate knowledge statements directly and without human assistance, the statement would be 
      attributed to an "automated_agent".
    permissible_values:
      manual_agent:
        description: >-
          a human agent, such as a curator or expert
      not_provided:
        description: >-
          agent type is not provided or known
      automated_agent:
        description: >-
          An automated agent, typically a software program or tool, is responsible for generating the knowledge 
          expressed in the Edge. Human contribution to the knowledge creation process ends with the definition and 
          coding of algorithms or analysis pipelines that get executed by the automated agent.
      data_analysis_pipeline:
        is_a: automated_agent
        description: >-
          An automated agent that executes an analysis workflow over data and reports results in an Edge. These 
          typically report statistical associations/correlations between variables in the input data.
      computational_model:
        is_a: automated_agent
        description: >-
          An automated agent that generates knowledge (typically predictions) based on rules/logic explicitly 
          encoded in an algorithm (e.g. heuristic models, supervised classifiers), or learned from patterns 
          observed in data (e.g. ML models, unsupervised classifiers).
      text_mining_agent:
        is_a: automated_agent
        description: >-
          An automated agent that uses Natural Language Processing to recognize concepts and/or relationships in text,
          and generates Edges relating these concepts with formally encoded semantics.
      image_processing_agent:
        is_a: automated_agent
        description: >-
          An automated agent that processes images to recognize features and/or relationships in images, and generates 
          Edges relating these features with formally encoded semantics.
      manual_validation_of_automated_agent:
        description: >-
          A human agent reviews and validates/approves the veracity of knowledge that is initially generated by an 
          automated agent.
