Il DOI (Digital Object Identifier) è un identificativo persistente utilizzato per riferirsi in modo univoco a contenuti digitali, come articoli scientifici, dataset, e pubblicazioni. In questo articolo vedremo come generare, registrare e gestire un DOI usando Java, con riferimento ai servizi di agenzie come DataCite o Crossref.
1. Cos'è un DOI
Un DOI ha la forma generale 10.xxxx/xxxx
e viene assegnato da un'autorità registrante tramite API. Il formato è standardizzato e il DOI diventa risolvibile tramite doi.org.
2. Prerequisiti
- Java 8 o superiore
- Libreria HTTP client (es.
HttpURLConnection
oHttpClient
di Apache) - Accesso a un account con DataCite o Crossref
3. Esempio di richiesta di registrazione DOI
Supponiamo di voler creare un DOI con DataCite via API REST. Il payload deve essere in formato JSON secondo lo schema DataCite.
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class DOICreator {
public static void main(String[] args) throws Exception {
String apiUrl = "https://api.test.datacite.org/dois";
String username = "YOUR_USERNAME";
String password = "YOUR_PASSWORD";
String doiPayload = "{"
+ "\"data\": {"
+ "\"type\": \"dois\","
+ "\"attributes\": {"
+ " \"doi\": \"10.1234/example.doi\","
+ " \"event\": \"publish\","
+ " \"url\": \"https://yourdomain.org/resource/123\","
+ " \"titles\": [{\"title\": \"Esempio di DOI\"}],"
+ " \"creators\": [{\"name\": \"Mario Rossi\"}],"
+ " \"publisher\": \"La Mia Organizzazione\","
+ " \"publicationYear\": 2025"
+ " }"
+ "}}";
URL url = new URL(apiUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
String auth = username + ":" + password;
String encodedAuth = java.util.Base64.getEncoder().encodeToString(auth.getBytes());
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", "Basic " + encodedAuth);
conn.setRequestProperty("Content-Type", "application/vnd.api+json");
try (OutputStream os = conn.getOutputStream()) {
os.write(doiPayload.getBytes(StandardCharsets.UTF_8));
}
int responseCode = conn.getResponseCode();
System.out.println("Response code: " + responseCode);
}
}
4. Aggiornare un DOI
Per aggiornare i metadati di un DOI esistente si utilizza il metodo PUT
verso l'endpoint /dois/{doi}
con un JSON aggiornato.
5. Considerazioni di Sicurezza
- Conservare in modo sicuro le credenziali API
- Utilizzare HTTPS per tutte le chiamate
- Validare i metadati localmente prima dell'invio
Con questo approccio, è possibile integrare la generazione e gestione di DOI nei propri sistemi Java in modo semplice e conforme agli standard internazionali.