CrossRef DOI Minting

From BITPlan cr Wiki
Jump to navigation Jump to search

Schema

Derived linkml Schema

Doi linkML schema.png

id: https://w3id.org/linkml/examples/personinfo
name: doi_schema
prefixes:
  linkml: https://w3id.org/linkml/
  crossref: https://data.crossref.org/reports/help/schema_doc/5.3.1/crossref5_3_1_xsd.html#
imports:
  - linkml:types
default_range: string
version: 5.3.1

classes:

  Conference:
    attributes:
      papers:
        multivalued: true
        range: Paper
      contributors:
        multivalued: true
        range: Contributor
      proceeding:
        required: true
        any_of:
          - range: Proceeding
          - range: ProceedingInSeries
      event:
        required: true
        range: Event

  Event:
    attributes:
      name:
        range: string
        required: true
      theme:
        range: string
        examples:
          - value: "Knowledge: Creation, Organization and Use"
      acronym:
        range: string
      sponsor:
        range: string
      number:
        range: string
      location:
        range: string
      date:
        range: date


  Proceeding:
    attributes:
      title:
        required: true
        range: string
      subject:
        range: string
      publisher:
        multivalued: true
        required: true
        range: Publisher
      publication_date:
        required: true
        range: date
      isbn:
        range: string
      archive_locations:
        multivalued: true
        range: string
      doi:
      language:
        range: string


  ProceedingInSeries:
    is_a: Proceeding
    attributes:
      volume:
        range: string
        required: true
      series:
        range: Series



  Publisher:
    attributes:
      name:
          required: true
          range: string
      id:
        identifier: true
      place:
          range: string



  Series:
    attributes:
      contributors:
        multivalued: true
        range: Contributor
      title:
        required: true
        range: string
      abstract:
        range: string
      issn:
        required: true
        range:
      coden:
        range: string
      number:
        range: string
      publisher:
        range: Publisher
      archive_locations:
        multivalued: true
        range: string
      doi:
      crossmark:
        range: Crossmark
      fund_ref_program:
      accommodates_deposit_license_program:



  Paper:
    attributes:
      contributors:
        multivalued: true
        range: Contributor
      title:
      publication_date:
        range: date
      pages:
        range: string
      doi:
        required: true
        range: string
      abstract:
        range: string
      publisher:
        range: Publisher
      crossmark:
        range: Crossmark
      fund_ref_program:
      accommodates_deposit_license_program:
      accommodates_deposit_clincal_trials_program:
      relationships:
      scn_policy_refs:
        multivalued: true
      archive_locations:
        multivalued: true
        range: string
      citations:
        multivalued: true
        range: Citation

  Citation:
    attributes:
      issn:
      journal_title:
      author:
        range: string
      volume:
      issue:
      first_page:
      elocation_id:
      cYear:
      doi:
      isbn:
      series_title:
      volume_title:
      edition_number:
      component_number:
      article_title:
      std_designator:
      standards_body:
      unstructured_citation:
      key:
        required: true


  Contributor:
    attributes:
      sequence:
        required: true
        range: SequenceTypes
      role:
        required: true
        range: RoleTypes
      name-style:
        role: NameStyleTypes
      language:
        range: string


  Person:
    is_a: Contributor
    attributes:
      given_name:
        range: string
        pattern: "[^\\d\\?]*[^\\?\\s]+[^\\d]*"
      surname:
        required: true
        range: string
      suffix:
        range: string
      ORCID:
        pattern: "https?://orcid.org/[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[X0-9]{1}"
      affiliations:
        range: Institution
        multivalued: true
      alt_name:

  Organization:
    is_a: Contributor
    attributes:
      name:
        range: string

  Anonymous:
    is_a: Contributor
    attributes:
      affiliations:
        range: Institution



  Institution:
    attributes:
      acronym:
        range: string
        examples:
          - value: RWTH Aachen
      name:
        range: string
        examples:
          - value: Rheinisch-Westfälische Technische Hochschule Aachen
      id:
        identifier: true
        examples:
          - value: wd:Q273263
      place:
        range: string
        examples:
          - value: Aachen, NRW, Germany
      department:
        range: string
        examples:
          - value: i5

  Crossmark:
    attributes:
      version:
      policy:
      domains:

enums:
  SequenceTypes:
    permissible_values:
      first:
      additional:
  RoleTypes:
    permissible_values:
      author:
      editor:
      chair:
      reviewer:
      review-assistant:
      stats-reviewer:
      reviewer-external:
      reader:
      translator:
  NameStyleTypes:
    permissible_values:
      western:
      eastern:
      islensk:
      given-only:

webDeposit


Screenshot 2023-03-23 at 08-19-57 CrossRef - DOI Deposit Form.png

Screenshot 2023-03-23 at 08-20-37 CrossRef - DOI Deposit Form.png


ConfIDent DOI Minting

Philip Strömert: ConfIDent DOI Minting Process

Script, mit dem man DOIs für Confident Events (nicht für Serien) automatisch über DataCite's API machen kann:

Benötigten Metadaten aller Events mit dieser Abfrage als JSON geladen.

Das Script macht dann folgendes:

  1. lädt die manuell heruntergeladene Confident JSON in einen Liste genannt "batch" --> Script#L45
  2. transformiert die in der Liste enthaltenen Event-Metadaten in zwei weitere Listen genannt "to_mint" & "to_update", deren Einträge DataCite Schema konforme Key:Value Paare (ditcionaries) für jeden Event sind. Alles Events die schon ne DOI haben kommen in "to_update", alle ohne DOI in "to_mint".
  3. kreiert für jeden Eventeintrag in der "to_mint" Liste eine DOI mit dem jeweils am Anfang angegebenen Status (default="draft") ODER updated die DOI-Metadata bei DataCite für jeden Eventeintrag in "to_update" mittels der DataCite JSON RESTful API und deren bereits existierender Python Library (https://pypi.org/project/datacite/)

Sollten "falsche" d.h. nicht DataCite Schema konforme Daten an deren API geschickt werden, würde diese meckern und gar nicht erst DOIs updaten oder minten. Ich fange solche Fehlermeldungen von der API nicht im Script ein, weil es quick und dirty sein sollte und weil durch die zuvor generierten Pydantic Datenklassen schon eine Validierung bzgl. des DataCite Schemas automatisch drin ist.