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.