Come generare e gestire un DOI con Python

Il Digital Object Identifier (DOI) è un identificatore persistente usato per identificare contenuti digitali in modo univoco. In questo articolo vedremo come generare, registrare e gestire un DOI usando Python, simulando le principali operazioni tramite API come quelle fornite da DataCite o Crossref.

1. Cos'è un DOI

Un DOI è una stringa alfanumerica assegnata a un oggetto digitale, come un articolo scientifico o un dataset. Esempio di DOI: 10.1234/abcd.5678. I DOI sono gestiti da organizzazioni come DataCite e Crossref.

2. Requisiti

Per interagire con le API DOI, avrai bisogno di:

  • Un account con un provider DOI (es. DataCite o Crossref)
  • Le credenziali API
  • Il modulo requests installato in Python

3. Installazione delle dipendenze

pip install requests

4. Creazione e registrazione di un DOI (esempio con DataCite)

Ecco un esempio di come registrare un DOI con le API di DataCite.

import requests
from requests.auth import HTTPBasicAuth

# Credenziali DataCite (sostituire con le proprie)
USERNAME = "username"
PASSWORD = "password"

# DOI da registrare
doi = "10.1234/demo.doi.001"
metadata = {
    "data": {
        "type": "dois",
        "attributes": {
            "doi": doi,
            "event": "publish",
            "url": "https://example.org/resource/001",
            "titles": [{"title": "Titolo della Risorsa"}],
            "creators": [{"name": "Cognome, Nome"}],
            "publisher": "Il Mio Archivio",
            "publicationYear": "2025",
            "types": {"resourceTypeGeneral": "Dataset"},
            "schemaVersion": "http://datacite.org/schema/kernel-4"
        }
    }
}

# Richiesta POST per registrare il DOI
response = requests.post(
    "https://api.test.datacite.org/dois",
    json=metadata,
    auth=HTTPBasicAuth(USERNAME, PASSWORD),
    headers={"Content-Type": "application/vnd.api+json"}
)

print(response.status_code)
print(response.json())

5. Aggiornare un DOI

Per aggiornare l'URL o altri metadati associati a un DOI già registrato:

doi = "10.1234/demo.doi.001"
update = {
    "data": {
        "type": "dois",
        "id": doi,
        "attributes": {
            "url": "https://example.org/resource/001-updated"
        }
    }
}

response = requests.put(
    f"https://api.test.datacite.org/dois/{doi}",
    json=update,
    auth=HTTPBasicAuth(USERNAME, PASSWORD),
    headers={"Content-Type": "application/vnd.api+json"}
)

print(response.status_code)
print(response.json())

Considerazioni Finali

La gestione dei DOI richiede l'interazione con API ufficiali e la conformità a schemi standard. Python e le API REST offrono un modo efficiente per automatizzare la registrazione e l'aggiornamento dei DOI in ambienti accademici e istituzionali.

Per un utilizzo in produzione, assicurati di usare l'endpoint live delle API DataCite (https://api.datacite.org) e di gestire le eccezioni nelle richieste HTTP.

Torna su