Il DOI (Digital Object Identifier) è un identificatore persistente utilizzato per identificare in modo univoco contenuti digitali come articoli accademici, dataset o pubblicazioni online. In questo articolo vedremo come generare e gestire un DOI utilizzando PHP.
1. Cos'è un DOI
Un DOI è una stringa alfanumerica unica, come 10.1234/abcd.2025.001
, che punta a una risorsa digitale. È composto da un prefisso assegnato da un'agenzia (come Crossref o DataCite) e un suffisso scelto dal registrante.
2. Prerequisiti
- Un account con un'agenzia DOI (es. Crossref, DataCite)
- Accesso alle loro API
- PHP ≥ 7.0 con supporto per cURL o una libreria HTTP
3. Generare un DOI
In genere, il DOI viene registrato tramite una richiesta HTTP POST verso l'API dell'agenzia. Ecco un esempio semplificato usando cURL in PHP per registrare un DOI con DataCite.
$doi = '10.1234/mydataset.2025.001';
$metadata = [
'@context' => 'https://schema.datacite.org/meta/kernel-4.3/',
'data' => [
'type' => 'dois',
'attributes' => [
'doi' => $doi,
'event' => 'publish',
'creators' => [
['name' => 'Rossi, Mario']
],
'titles' => [
['title' => 'Esempio di Dataset']
],
'publisher' => 'Università Esempio',
'publicationYear' => '2025',
'types' => [
'resourceTypeGeneral' => 'Dataset'
],
'url' => 'https://example.org/dataset/1234'
]
]
];
$ch = curl_init('https://api.test.datacite.org/dois');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/vnd.api+json',
'Authorization: Bearer YOUR_API_TOKEN'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($metadata));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
4. Risolvere un DOI
Per accedere alla risorsa collegata a un DOI, è sufficiente usare l'URL https://doi.org/{DOI}
. Esempio:
$doi = '10.1234/mydataset.2025.001';
$url = 'https://doi.org/' . urlencode($doi);
$headers = get_headers($url, 1);
echo "La risorsa si trova a: " . $headers['Location'];
5. Aggiornare o eliminare un DOI
La maggior parte delle agenzie consente l'aggiornamento del metadata o la disattivazione di un DOI tramite le rispettive API, utilizzando il metodo HTTP PUT o DELETE. Esempio di aggiornamento:
curl_setopt($ch, CURLOPT_URL, 'https://api.test.datacite.org/dois/' . $doi);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updatedMetadata));
Conclusione
Gestire un DOI con PHP è un processo relativamente semplice se si ha accesso alle API di un registrar come DataCite o Crossref. È fondamentale rispettare i formati richiesti e proteggere le credenziali di accesso alle API.