Generare e gestire un DOI con Java

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 o HttpClient 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.

Torna su