Passa al contenuto principale

1. Introduzione (Introduction)

Questo capitolo introduce i concetti di base degli URI, le considerazioni di progettazione e la notazione sintattica.


Panoramica

Un Uniform Resource Identifier (URI) fornisce un mezzo semplice ed estensibile per identificare una risorsa.

Contesto storico:

  • Derivato da concetti introdotti dall'iniziativa di informazione globale del World Wide Web
  • L'uso di questi identificatori risale al 1990
  • Questo documento rende obsoleto RFC 2396, unendo le specifiche URL e URL relative

Questa specifica:

  • Definisce una sintassi generica unica per tutti gli URI
  • Introduce la sintassi degli indirizzi IPv6
  • Esclude la sintassi specifica dei singoli schemi URI (aggiornata in documenti separati)

1.1. Panoramica degli URI

Caratteristiche degli URI

Le caratteristiche degli URI possono essere riassunte in tre parole: Uniform (Uniforme), Resource (Risorsa), Identifier (Identificatore)

Uniform (Uniforme)

Vantaggi dell'uniformità:

  1. Indipendenza dal contesto: Consente l'uso di diversi tipi di identificatori di risorse nello stesso contesto, anche quando i meccanismi di accesso differiscono

  2. Coerenza semantica: Consente un'interpretazione semantica uniforme delle convenzioni sintattiche comuni tra diversi tipi di identificatori di risorse

  3. Estensibilità: Consente l'introduzione di nuovi tipi di identificatori di risorse senza interferire con gli identificatori esistenti

  4. Riutilizzabilità: Consente il riutilizzo degli identificatori in molti contesti diversi, permettendo a nuove applicazioni o protocolli di sfruttare un insieme preesistente, grande e ampiamente utilizzato di identificatori di risorse

Esempio:

http://example.com/page
ftp://example.com/file
mailto:[email protected]

Tutti usano la stessa struttura sintattica generica

Resource (Risorsa)

Ambito delle risorse: Questa specifica non limita ciò che potrebbe essere una risorsa; il termine "risorsa" è usato in senso generale per qualsiasi cosa che potrebbe essere identificata da un URI.

Esempi familiari:

  • 📄 Documenti elettronici
  • 🖼️ Immagini
  • 📊 Fonti di informazione con scopo coerente (ad esempio, "previsioni del tempo di oggi per Los Angeles")
  • 🔧 Servizi (ad esempio, gateway HTTP-SMS)
  • 📚 Collezioni di altre risorse

Risorse più ampie:

  • 🧑 Esseri umani
  • 🏢 Aziende
  • 📖 Libri rilegati in una biblioteca
  • 🔢 Concetti astratti (operatori matematici, tipi di relazioni, valori numerici)

Punto chiave: Le risorse non sono necessariamente accessibili tramite Internet

Identifier (Identificatore)

Definizione: Un identificatore incarna le informazioni necessarie per distinguere ciò che viene identificato da tutte le altre cose nel suo ambito di identificazione.

Significato di "identificare":

  • Si riferisce allo scopo di distinguere una risorsa da tutte le altre
  • Non considera come tale scopo venga raggiunto (ad esempio, per nome, indirizzo o contesto)
  • Non dovrebbe essere interpretato erroneamente come l'identificatore che definisce o incarna l'identità del contenuto referenziato
  • Non dovrebbe presupporre che i sistemi che utilizzano l'URI accederanno alla risorsa identificata

Definizione di URI: Un URI è un identificatore costituito da una sequenza di caratteri che corrisponde alla regola sintattica denominata <URI> nella Sezione 3.

Natura globale degli URI

Ambito globale: Gli URI hanno un ambito globale e sono interpretati coerentemente indipendentemente dal contesto

Esempio:

http://localhost/

Ha la stessa interpretazione per ogni utente che impiega questo riferimento
Anche se l'interfaccia di rete corrispondente a "localhost" può differire
L'interpretazione è indipendente dall'accesso

Relatività del contesto:

  • Le azioni basate sul riferimento saranno relative al contesto dell'utente finale
  • Le operazioni destinate a riferire cose globalmente uniche devono utilizzare URI che distinguono la risorsa da tutte le altre

URI di contesto locale:

file:///etc/hosts

Usato solo quando il contesto stesso è un aspetto che definisce la risorsa
Ad esempio, manuali di aiuto online che fanno riferimento a file sul file system dell'utente finale

1.1.1. Sintassi generica

Nomi di schema

Ogni URI inizia con un nome di schema (definito nella Sezione 3.1) che fa riferimento a una specifica per l'assegnazione di identificatori all'interno di quello schema.

Sistema di denominazione federato: La sintassi URI è un sistema di denominazione federato ed estensibile in cui le specifiche di ogni schema possono limitare ulteriormente la sintassi e la semantica degli identificatori che utilizzano quello schema.

Elementi generici

Questa specifica definisce quegli elementi della sintassi URI che sono:

  • ✅ Richiesti da tutti gli schemi URI
  • ✅ Comuni a molti schemi URI

Vantaggi:

  1. Analisi indipendente dallo schema: Definisce la sintassi e la semantica necessarie per implementare un meccanismo di analisi dei riferimenti URI indipendente dallo schema
  2. Elaborazione differita: Consente di differire l'elaborazione dipendente dallo schema di un URI fino a quando non è necessaria
  3. Indipendenza dal protocollo: I protocolli e i formati di dati che utilizzano riferimenti URI possono fare riferimento a questa specifica come definizione dell'intervallo di sintassi consentito
  4. Compatibilità futura: Include schemi non ancora definiti

Evoluzione disaccoppiata: Disaccoppia l'evoluzione degli schemi di identificazione dall'evoluzione dei protocolli, formati di dati e implementazioni che utilizzano URI.

Parser generico

Capacità di analisi: Un parser per la sintassi URI generica può analizzare qualsiasi riferimento URI nei suoi componenti principali

Analisi in due fasi:

  1. Analisi generica: Determinare lo schema e i componenti principali
  2. Analisi specifica dello schema: Eseguire ulteriore analisi specifica dello schema sui componenti

Relazione di sovrainsieme: La sintassi URI generica è un sovrainsieme della sintassi di tutti gli schemi URI


1.1.2. Esempi

Esempi di URI

I seguenti esempi di URI illustrano diversi schemi URI e variazioni nei loro componenti sintattici comuni:

ftp://ftp.is.co.za/rfc/rfc1808.txt
  • Schema: ftp
  • Autorità: ftp.is.co.za
  • Percorso: /rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
  • Schema: http
  • Autorità: www.ietf.org
  • Percorso: /rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
  • Schema: ldap
  • Autorità: [2001:db8::7] (indirizzo IPv6)
  • Percorso: /c=GB
  • Query: objectClass?one
news:comp.infosystems.www.servers.unix
  • Schema: news
  • Percorso: comp.infosystems.www.servers.unix
tel:+1-816-555-1212
  • Schema: tel
  • Percorso: +1-816-555-1212
telnet://192.0.2.16:80/
  • Schema: telnet
  • Autorità: 192.0.2.16:80
  • Percorso: /
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
  • Schema: urn
  • Percorso: oasis:names:specification:docbook:dtd:xml:4.1.2

1.1.3. URI, URL e URN

Distinzione concettuale

Classificazione URI: Un URI può essere ulteriormente classificato come locator, nome o entrambi

URL (Uniform Resource Locator)

Definizione: Il sottoinsieme di URI che, oltre a identificare una risorsa, fornisce un mezzo per localizzare la risorsa descrivendo il suo meccanismo di accesso primario (ad esempio, la sua "posizione" di rete)

Caratteristiche:

  • Fornisce metodo di accesso
  • Descrive la posizione di rete
  • Può cambiare se la risorsa si sposta

Esempi:

http://www.example.com/index.html
ftp://ftp.example.com/file.txt

URN (Uniform Resource Name)

Definizione: Storicamente utilizzato per riferirsi agli URI sotto lo schema "urn" [RFC2141], che devono rimanere globalmente unici e persistenti anche quando la risorsa cessa di esistere o diventa non disponibile

Caratteristiche:

  • Identificatore persistente
  • Indipendente dalla posizione
  • Rimane valido anche se la risorsa scompare

Esempi:

urn:isbn:0-486-27557-4
urn:ietf:rfc:3986

Diagramma delle relazioni

        URI (Uniform Resource Identifier)
/ \
URL URN
(Come trovare la risorsa) (Nome persistente)
(Dipendente dalla posizione) (Indipendente dalla posizione)

Uso contemporaneo

Semplificazione terminologica: Attualmente, è meglio considerare i termini "URL" e "URN" come mnemonici all'interno dello spazio URI

Guida pratica:

  • Usare "URI" piuttosto che "URL" o "URN"
  • Tutti gli URL sono URI
  • Tutti gli URN sono URI
  • Ma non tutti gli URI sono URL o URN

1.2. Considerazioni di progettazione

La progettazione degli URI deve bilanciare molteplici obiettivi, a volte contrastanti.

1.2.1. Trascrizione

Obiettivo: Gli URI dovrebbero essere trascrivibili dagli esseri umani utilizzando varie tecniche e supporti

Vincoli:

  • Dovrebbero essere brevi
  • Dovrebbero essere memorabili
  • Dovrebbero essere facili da inserire

Conflitti con altri obiettivi:

Brevità vs Leggibilità
http://x.co/a vs http://example.com/article

Memorabilità vs Unicità globale
http://blog vs http://username.blog.example.com

Considerazioni pratiche:

  • Set di caratteri limitato (ASCII)
  • Sistemi insensibili alle maiuscole/minuscole
  • Gestione dei caratteri speciali

Errori di trascrizione:

Errori comuni:
- Confusione tra 0 (zero) e O (lettera)
- Confusione tra 1 (uno) e l (L minuscola)
- Confusione tra - (trattino) e _ (underscore)

1.2.2. Separazione dell'identificazione dall'interazione

Principio: L'URI identifica una risorsa indipendentemente da come si accede a quella risorsa

Vantaggi:

  1. Persistenza dell'identificazione: Gli identificatori possono rimanere invariati quando i metodi di accesso cambiano
  2. Indipendenza dal protocollo: La stessa risorsa può essere accessibile tramite più metodi
  3. Integrità dei riferimenti: Può fare riferimento a risorse non accessibili

Esempio:

Identificazione: urn:isbn:0-486-27557-4
Accesso 1: http://amazon.com/dp/0486275574
Accesso 2: http://barnesandnoble.com/...
Accesso 3: Biblioteca locale

Usi non di accesso:

  • 📝 Riferimenti a documenti
  • 🏷️ Tag di metadati
  • 🔗 Relazioni di link
  • 📊 Identificazione dei dati

1.2.3. Identificatori gerarchici

Struttura gerarchica: La sintassi URI supporta spazi dei nomi gerarchici

Forma di organizzazione:

http://example.com/products/electronics/phones/model-x
└─Autorità─┘ └────────Gerarchia del percorso─────────┘

Vantaggi:

  1. Gestione delegata: Consente la delega dell'autorità di denominazione
  2. Riferimenti relativi: Supporta riferimenti URI relativi
  3. Organizzazione logica: Riflette l'organizzazione logica delle risorse

Esempio di gerarchia:

/products/
/electronics/
/phones/
/model-x
/model-y
/laptops/
/clothing/

1.3. Notazione sintattica

Questa specifica utilizza la Forma di Backus-Naur Aumentata (ABNF) [RFC2234] per definire le regole sintattiche degli URI.

Fondamenti ABNF

Formato delle regole:

rulename = elements

Elementi di base:

ALPHA    = A-Z / a-z
DIGIT = 0-9
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"

Operatori:

  • / : Alternanza (o)
  • * : Ripetizione (zero o più)
  • [ ] : Opzionale
  • ( ) : Raggruppamento

Esempio:

scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

Interpretazione:
- Inizia con una lettera
- Seguito da zero o più (lettera/cifra/+/-/.)

Riepilogo dei concetti chiave

Tre caratteristiche degli URI

  1. Uniform (Uniforme): Sintassi e semantica coerenti
  2. Resource (Risorsa): Può identificare qualsiasi cosa
  3. Identifier (Identificatore): Capacità di distinguere e identificare

URI vs URL vs URN

ConcettoFocusPersistenzaEsempio
URIIdentificazioneNon garantitaTutti gli URI
URLPosizioneDipendente dalla posizionehttp://example.com/page
URNNomePersistenteurn:isbn:0-486-27557-4

Principi di progettazione

  1. Trascrivibilità: Gli esseri umani possono facilmente inserire e ricordare
  2. Separazione delle preoccupazioni: L'identificazione è indipendente dall'accesso
  3. Gerarchia: Supporta la delega e l'organizzazione

Capitolo successivo: 2. Caratteri (Characters) - Gestione dei caratteri e codifica negli URI