NIP-73: Identificatori di contenuti esterni
NIP-73 definisce un modo standard per fare riferimento a contenuti esterni all’interno degli eventi Nostr. Usa tag i per l’identificatore stesso e tag k per il tipo di identificatore, così i client possono raggruppare le discussioni attorno allo stesso libro, sito web, episodio di podcast, luogo, hashtag od oggetto blockchain. La specifica attuale è contrassegnata come bozza e opzionale.
Come funziona
Un evento che usa NIP-73 include un tag i con un identificatore esterno normalizzato e un tag k che indica la famiglia dell’identificatore. I client possono interrogare i relay per un singolo soggetto esatto tramite i o per un’intera famiglia tramite k. NIP-73 non aggiunge alcun kind di evento proprio. Sono commenti, recensioni e altri eventi a portare i tag.
Frammento di tag, non un evento completo:
{
"tags": [
["i", "isbn:9780765382030"],
["k", "isbn"]
]
}
Una pagina web inserisce il proprio URL normalizzato in i e imposta k su web. La specifica copre diverse famiglie di identificatori, tra cui:
- URL web normalizzati senza frammento
- ISBN per i libri
- ISAN per i film
- DOI
- geohash e codici ISO 3166 di paesi o suddivisioni
- GUID di feed, episodi ed editori di podcast
- hashtag
- identificatori di transazioni e indirizzi blockchain
Regole di normalizzazione
La corrispondenza dipende da stringhe identiche, quindi la specifica stabilisce un’unica forma scritta per ciascuna famiglia. Esempi tratti dalla specifica:
- i geohash usano
geo:<value>e devono essere in minuscolo - i codici di paesi e suddivisioni usano
iso3166:<code>e devono essere in maiuscolo - gli ISBN omettono i trattini
- i DOI sono in minuscolo
- gli URL web eliminano i frammenti
- gli hash delle transazioni blockchain usano esadecimale minuscolo
La normalizzazione stabilisce come si scrive un singolo identificatore. Non unisce gli alias. Gli ISBN specifici di un’edizione e gli URL che si normalizzano in stringhe diverse restano identificatori separati, quindi la discussione su uno stesso libro o articolo può comunque distribuirsi su più valori i.
Suggerimenti URL
Un tag i può includere un suggerimento URL opzionale come terzo elemento dell’array, ovvero il secondo valore dopo il nome del tag. Un client privo di un renderer personalizzato per quel tipo di identificatore può usare il suggerimento come link di ripiego.
Frammento di tag: ["i", "isbn:9780765382030", "<url-hint>"]
Il suggerimento è scelto dall’autore. Non fa parte dell’identità, non prova alcuna proprietà e non indica un sito canonico.
Fiducia e contesto
Due eventi con lo stesso identificatore finiscono nella stessa conversazione, e l’identificatore condiviso non stabilisce nulla di più. Un evento firmato identifica il proprio autore. Non autentica il libro, il sito o l’editore del podcast a cui fa riferimento, e non mostra chi li controlla.
Il significato di un tag i dipende dall’evento. Nei commenti NIP-22, I/K maiuscoli indicano l’ambito radice e i/k minuscoli indicano il genitore. Questa struttura di thread deriva da NIP-22, e NIP-73 non definisce alcun kind di commento. NIP-39 usa i per le identità esterne nei profili, quindi non tutti i tag i sono soggetti NIP-73.
Anche le asserzioni attendibili di NIP-85 possono avere come destinazione identificatori NIP-73 come libri, siti web, hashtag e luoghi.
Implementazioni
Il file nip73.rs al commit 4c8099a di rust-nostr analizza i prefissi noti trasformandoli in un ExternalContentId tipizzato e converte un eventuale suggerimento in un URL tipizzato. Scrive il terzo elemento del tag solo quando esiste un suggerimento. I suoi test mantengono gli ISBN con i trattini: il parser rimuove il prefisso e memorizza il resto senza applicare la normalizzazione della specifica, quindi il parsing tipizzato non garantisce stringhe canoniche. Esclude gli ID di catena dalla famiglia, mappando ethereum:100:tx:<hash> su ethereum:tx. Quella revisione non ha una variante iso3166 per i paesi.
Il file DisplayExternalId.kt al commit 553f761 di Amethyst indirizza gli identificatori geohash, hashtag e URL verso visualizzazioni dedicate e mostra gli altri tipi supportati come chip di ambito generico. Un URL apre il percorso di thread dell’app dedicato a quella pagina. Con le anteprime disattivate, il rendering normale mostra un semplice chip con il link e non richiede alcuna anteprima. Con le anteprime attivate, il recupero di un’anteprima mancante può contattare il sito di destinazione. Nessuno dei due file mostra come si comporta una versione rilasciata.
Fonti primarie:
- Specifica NIP-73
- PR #2205 - Aggiunge i codici ISO 3166 di paesi e suddivisioni
- rust-nostr nip73.rs al commit 4c8099a
- Amethyst DisplayExternalId.kt al commit 553f761
Menzionato in:
- Newsletter #47: Approfondimento NIP
- Newsletter #45
- Newsletter #43
- Newsletter #37: agosto 2025
- Newsletter #8: Aggiornamenti NIP
- Newsletter #10: Approfondimento NIP-85
- Newsletter #36: Commenti (NIP-22)
- Newsletter #38: Approfondimento NIP
- Newsletter #40: filtri podcast-medium di NIP-73
- Newsletter #42: contenuti esterni di settembre 2024
Vedi anche: