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à:
-
Indipendenza dal contesto: Consente l'uso di diversi tipi di identificatori di risorse nello stesso contesto, anche quando i meccanismi di accesso differiscono
-
Coerenza semantica: Consente un'interpretazione semantica uniforme delle convenzioni sintattiche comuni tra diversi tipi di identificatori di risorse
-
Estensibilità: Consente l'introduzione di nuovi tipi di identificatori di risorse senza interferire con gli identificatori esistenti
-
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:
- Analisi indipendente dallo schema: Definisce la sintassi e la semantica necessarie per implementare un meccanismo di analisi dei riferimenti URI indipendente dallo schema
- Elaborazione differita: Consente di differire l'elaborazione dipendente dallo schema di un URI fino a quando non è necessaria
- 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
- 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:
- Analisi generica: Determinare lo schema e i componenti principali
- 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
mailto:[email protected]
- Schema:
mailto - Percorso:
[email protected]
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:
- Persistenza dell'identificazione: Gli identificatori possono rimanere invariati quando i metodi di accesso cambiano
- Indipendenza dal protocollo: La stessa risorsa può essere accessibile tramite più metodi
- 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:
- Gestione delegata: Consente la delega dell'autorità di denominazione
- Riferimenti relativi: Supporta riferimenti URI relativi
- 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
- Uniform (Uniforme): Sintassi e semantica coerenti
- Resource (Risorsa): Può identificare qualsiasi cosa
- Identifier (Identificatore): Capacità di distinguere e identificare
URI vs URL vs URN
| Concetto | Focus | Persistenza | Esempio |
|---|---|---|---|
| URI | Identificazione | Non garantita | Tutti gli URI |
| URL | Posizione | Dipendente dalla posizione | http://example.com/page |
| URN | Nome | Persistente | urn:isbn:0-486-27557-4 |
Principi di progettazione
- Trascrivibilità: Gli esseri umani possono facilmente inserire e ricordare
- Separazione delle preoccupazioni: L'identificazione è indipendente dall'accesso
- Gerarchia: Supporta la delega e l'organizzazione
Capitolo successivo: 2. Caratteri (Characters) - Gestione dei caratteri e codifica negli URI