Approfondiamo il significato di alcuni termini spesso tra di loro confusi: URN, URI, URL, DNS, namespace, DNS e domini.
Tutti questi termini hanno in comune l'ambizione di battezzare "qualcosa" nel modo di Internet. Stiamo quindi parlando di "nomi" ovvero di stringhe di caratteri che servono per parlare di qualcosa. Come tutti i nomi, la stessa stringa può assumere un differente significato in funzione del contesto. Ad esempio la stringa "e-artspace.com" in funzione di contesti specifici può essere consiederata: un nome a dominio, un namespace, un URI, un URL.
Nome a dominio e DNS
Un nome a dominio (spesso indicato solo con "dominio") è un nome che viene assegnato da ICANN - Internet Corporation for Assigned Names and Number - sulla base di regole internazionalmente condivise. ICANN assegna i nomi attraverso deleghe gerarchiche, ovvero i nomi sono organizzati in livelli. Il primo livello (TLD - top level domain) è delegato da ICANN a organizzazioni nazionali. Ad esempio il TLD .it è dato in gestione a al Registro Italiano. Colui che ha ricevuto la delega da ICANN su un nome di primo livello - ovvero è autoritativo sul dominio di primo livello - può generare nomi di secondo livello ed eventualmente delegarne la gestione a terzi (persone fisiche o giuridiche) che a loro volta gestiscono i domini di terzo livello e così via.
Ad esempio: www.e-artspace.com è un nome a dominio di terzo livello definito dalla società E-artspace srl. E-Artspace è autoritativa per la gestione del dominio di secondo livello "e-artspace.com" poichè è stata a ciò delegata da un ente responsabile del dominio di primo livello ".com" . L'ente autoritativo per il dominio ".com" a sua volta ha ricevuto la delega direttamente da ICANN.
Il DNS (Domain Name System) è un sistema tecnologico utilizzato per mantenere e gestire le registrazioni dei nomi a dominio. Attraverso il DNS è possibile assegnare ai nomi alcuni attributi(Record), l'utilizzo più comune del DNS è quello di assegnre un indirizzo IP ad un nome. Ecco la prima fonte di confusione: anche se ciò avviene molto frequentemente non è detto che ad un nome a dominio sia associato un IP address. Un nome a dominio è semplicemente un nome che segue una sintassi ben definita, che è assegnato sulla base di regole condivise e che è gestito da un organismo autoritativo ben identificato (persona fisica o giuridica). Un DNS può essere gestito da chiunque e quindi può essere configurato per gestire anche nomi non registrati, per tale ragione i nomi a dominio registrati sulla base delle regole di ICANN devono essere definiti su particolari DNS gestiti consistentemente e tra di loro interoperanti.
Ad esempio, il dominio www.e-artspace.com è definito "fisicamente" in un DNS che, in questo caso, assegna anche un indirizzo IP a questo nome.
Namespace
In generale un namespace è un prefisso che serve ad evitare equivoci permettendo di contestualizzare (i.e. disambiguare) i nomi. Molto spesso infatti un nome assume significati diversi in ragione del contesto in cui è utilizzato, il nostro cervello, collegato alla rete dei sensi, è in grado di disambiguare molto velocemente un nome proprio riconoscendo il concetto di utilizzo. Ecco perchè nelle normali comunicazioni tra esseri umani non occorre ricorrere spesso a questo artificio linguistico: il name space può essere omesso quando il contesto di uso del nome è evidente. Il più noto esempio è il prefisso telefonico, ad esempio nel numero +3903411881023 la porzione +39 può essere considerata come il namespace di tutti i numeri di telefono Italiani, parimenti la stringa +390341 rappresenta il namespace relativo ai numeri di telefono del distretto di Lecco (Italia), se sto parlando o scrivendo a Italiani posso tranquillamente omettere il prefisso +39, così pure posso omettere +390341 se sto comunicando a vole il mio numero al vicino di casa (vedi nota). Lo stesso meccanismo può essere applicato a qualsiasi cosa cui possimo associare un nome per renderlo univoco in un contesto più ampio. E' molto frequente utilizzare come namespace la prima parte di un URI (vedi prossim capitoli). Nella vita di tutti i giorni siamo abituati a dare per scontato il namespace.
Se devo comunicare con una macchina o fare comunicare due macchine, il namespace assume una importanza fondamentale; è infatti davvero molto difficile per una macchina riconoscere il contesto in cui una frase è pronunciata ed è questa uno dei principali problemi che ancora oggi impedisce alle macchine di comprendere e parlare il nostro linguaggio naturale.
Per questa ragione Il concetto di namespace è molto usato nel Software Engineering e presente esplicitamente in linguaggi di programmazione o modellazione. In XML un namespace è una stringa che segue la stessa sintassi di un URI (vedi seguito). XML è talmente diffuso che, spesso tra informatici, quando si parla di namespace ci si riferisce al Namespace XML.
Nota: In generale un namespace è solo un artificio sintattico senza una propria semantica ben definita. Ad esempio l'introduzione della number portability tra numeri telefonici ha distrutto il significato del namespace relativo al distretto telefonico.
URL
Un URL (Uniform Resource Locator) è una sequenza di caratteri che identifica univocamente l'indirizzo di una risorsa informativa nel web, ad esempio una pagina html, documento o un'immagine.
Un URL segue una sintassi originariamente definita in un documento scritto nel 1994 da Tim Berners Lee ed in generale segue la sintassi <schema>:<parte che dipende dallo schema>. La prima parte identifica uno schema sintattico da utilizzarsi nella seconda. Ad esempio le risorse di internet che supportano il protocollo HTTP hanno un url nella forma: http://username:password@host:porta/percorso?querystring#fragment
Le varie parti dell'URL possono essere omesse o dedotte dal contesto di uso. La stessa risorsa può essere indirizzata da URL diversi. Molto spesso host è espresso con un "nome a dominio" a cui è associato un indirizzo IP:
Quando accediamo ad un url attraverso il protocollo richiesto dallo schema, otterremo una "rappresentazione" dello stato della risorsa al momento della richiesta. La stessa risorsa potrebbe infatti essere già cambiata l'istante dopo la nostra richiesta di informazioni. E' un errore comune confondere un URL con la rappresentazione del suo stato ricavata interagendo con la risorsa attraverso un protocollo. Un URL identifica una risorsa internet e ci dice quale protocollo usare (grazie allo schema) per ricavare una rappresentazione del suo stato in un determinato istante temporale.
Il protocollo HTTP, tra l'altro, consente di specificare preferenze per la rappresentazione della risorsa, ovvero il formato preferito (html,xml,rdf,etc.) e la lingua ( italiano, inglese ,etc.). Normalmente tali preferenze sono impostate nei parametri di configurazione del browser.
E' ora importante mettere in evidenza il fatto che un URL serve per identificare la collocazione di un documento in Internet. Quando parliamo di URL ci riferiamo quindi sempre ad una risorsa informativa pubblicata in Internet. Ad esempio: http://www.e-artspace.com/ è l'URL della home page di e-artspace.
URN
Un URN (Uniform Resource Name) è storicamente un nome nel namespace urn: che può essere usato per parlare di una risorsa senza lasciar intendere la sua ubicazione o come ottenerne una rappresentazione. Per esempio l'URN urn:isbn:0-395-36341-1 consente di individuare univocamente un libro mediante il suo codice ( 0-395-36341-1 ) nel namespace dei codici ISBN, ma non suggerisce dove e come possiamo ottenere una copia di tale libro. Anche un URN è soggetto ad una sintassi. Notate come la presenza del namespace urn:isbn: serve per disanbiguare il codice del libro rispetto, ad esempio, ad un numero di telefono.
URI
L' URI (Uniform Resource Identifier) è una sequenza di caratteri che serve per identifcare univocamente una qualsiasi risorsa. L'URI segue una sintassi ben definita, che aggiorna lo standard del 1994 comprendendo sia la sintassi di un URL sia quella di un URN. In altre parole URL e un URN sono sottoinsiemi di URI.
Nella visione contemporanea del web la distinzione tra URI, URN e URL è sempre meno importante. Nellla nuova architettura del Web si parla infatti solo di URI.
Occorre ricordare sempre che una risorsa identificata da un URI, indipendentemente dalla sua sintassi, non deve necessariamente possedere uno stato rappresentabile.
IRI
Infine un IRI (International Resource Identifier) è una forma generale di URI, composta da una sequenza di caratteri appartenenti all'Universal Character Set (Unicode/ISO 10646); ciò significa che apuò contenere caratteri apparteneti a diversi alfabeti e culture. Ad esempio http://www.cittàdicastello.it/ non è un valido URI (la à non è un carattere valido) ma è un IRI valido. Poichè in IRI può essere sempre convertita in URI seguendo delle precise regole la distinzione tra URI e IRI non è poi così importante, almeno da un punto di vista tecnico. Le nuove applicazioni tendono oggi a supportare indifferentemente URI ed IRI.
Deferenziazione e Semantic Web
Nel Semantic Web, ogni concetto relativo a qualsiasi cosa, sia in Internet che nel "mondo reale", deve essere identificato da almeno un IRI.
Nel Semantic Web è considerata buona prassi utilizzare sempre come identificativo un URI deferenziabile. La dereferenziazione è definita come l'atto di trovare una rappresentazione web di una risorsa del modo reale (vedi "Deferencing HTTP URI" e "Cool URIs for the Semantic Web").
La disputa su come riconoscere se un URI identifica locazione di una risorsa informativa (URL) o l'oggetto reale da essa descritta è stata fonte di ampio dibattito. La cosa non è infatti priva di considerazioni filosofiche come ben visualizzato dall'opera di René MagritteCeci n’est pas une pipe.
Recentemente il gruppo di architetture che sovraintende alla evoluzione del web è giunto ad una conclusione che, almeno dal punto di vista del protocollo http, risolve la questione: se il server, a seguito di una richiesta di un URI, ritorna un codice 2xx, l'URI è da considerarsi un URL (ovvero l'indirizzo di una risorsa informativa), se ritorna il codice 303 (See Other) l'URI identifica un concetto astratto, la cui descrizione o rappresentazione è presente URL specificato nell'header "Location:", se infine ritorna un codice 4xx la natura del'IRI è sconosciuta, ad esempio nel caso di un identificatore riferito ad un concetto senza rappresentazione nel web o seplicemente ad un concetto inesistente: purtroppo non si può ulteriormente distinguere tra le ultime due condizioni.
Gli IRI che sono costruiti utilizzando come schema http sono facilmente deferenziabili anche solo agendo sulla configurazione del web server. Ecco perchè gran parte degli IRI solitamente assumono la forma http://<nome a dominio>/<stringa> alimentando ulteriormente la confusione tra URI, IRI e URL.
Ad esempio "http://e-artspace.com/" è un URI che identifica il concetto "E-Artspace" inteso come Legal Entity; in quanto tale non ha una rappresentazione diretta sul web (è infatti una società in "carne e ossa"). Questo URI è però deferenziato nell'URL http://www.e-artspace.com/ che invece è una pagina web, e come tale, ammette una rappresentazione del suo stato nella forma di una pagina html. In altre parole, un server web ben configurato, alla richiesta dell'URI http://e-artspace.com/ deve rispondere con il messaggio 303 e con l'indicazione di un URL che punta a http://www.e-artspace.com/ o ad una qualsiasi altra risorsa informativa che descrive (in toto o in parte ) E-Artspace.
Notate che anche l'URI "http://e-artspace.com/resource/company" identifica lo stesso concetto di "http://e-artspace.com/". La scelta di utilizzare <http://e-artspace.com/> e <http://www.e-artspace.com/> come URI rispettivamente per l'azienda e per la sua home page è del tutto arbitraria. Una scelta altrettanto lecita sarebbe stata quella di usare <urn:IT02869350138> (URI non dereferenziabile) oppure <http://www.e-artspace.com/home/about#BusinessEntity>.
In nessun caso possiamo usare lo stesso URI per indicare sia l'azienda sia la sua homepage perchè si creerebbe un conflitto sulla natura della risorsa. In altre parole lo stesso concetto può essere identificato da più URI ma un URI può identificare solo un concetto.
L'origine della confusione
Le fonti di confusione sono molteplici:
- Namespace, domini, URI, URL, e URN possono essere espresse con sintassi abbreviate, eliminando dalla stringa le porzioni che risultano ovvie in un determinato contesto. Ad esempio se sto guardando la pagina http://www.e-artspace.com/home/ posso indicare l'URL http://www.e-artspace.com/home/images/logo.png seplicemente riferendo "images/logo.png", in XML posso anche definire un URI utilizzando una abbreviazione di pochi caratteri premettendo da qualce parte prima la dichiarazione esplicita di un name space. Ad esempio posso usare istmo:ITService per indicare l'URI <http://ontology.it/itsmo/v1#ITService>.
- In alcuni casi la dichiarazione del namespace può essere del tutto implicita, come ad esempio nei documenti XHTML dove i tag stessi del linguaggio sono identificati da un namespace che può essere anche implicito. Così quando scriviamo il tag h1 in realtà stiamo utilizzando una abbreviazione per l'uri http://www.w3.org/1999/xhtml/h1
- Alcuni programmi deducono trasparentemente le parti mancanti dell'url ricavandole dal contesto. Ad esempio se digito semplicemente "www.e-artspace.com" nella barra di indirizzi di Google Crome, il browser capisce che mi sto riferendo all'URL http://www.e-artspace.com/.
Il fatto che URI ,URL, namespace e domain, possano avere lo stesso aspetto può generare molta confusione. Vediamo alcuni esempi:
se digitiamo nella barra degli indirizzi di un browser http://www.e-artspace.com/ http://e-artspace.com/ e http://www.e-artspace.com/home/ otteniamo sempre stessa pagina informativa di presentazione della azienda, ma il primo indirizzo indica una cosa diversa dagli altri due.
- http://www.e-artspace.com/ è l'URI ufficiale che identifica la home page dell'azienda, ovvero la fonte autorevole da cui partire per leggere informazioni su E-Artspace.
- http://e-artspace.com/ è l'URI che identifica E-Artspace , intesa come Organizzazione. Purtroppo però la stessa stringa indica anche il namespace relativo ai nomi dei concetti definiti da E-artspace. Per capire se ci si sta riferendo ad un URL, ad un URI o ad un Namespace bisogna quindi fare riferimento al contesto: se sto leggendo una pagina web e trovo un link a http://e-artspace.com/ mi sto probabilmente riferendo ad un'altra pagina web. Se in un file XML trovo la stringa xmlns:ea="http://e-artspace.com/" mi sto invece riferendo ad un namespace XML. Se,infine, in un file RDF trovo una proprietà riferita a <http://e-artspace.com/> mi sto riferendo a E-Artspace (inteso come organizzazione).
L'apparente confusione non deve sorprendere molto. In effetti anche in italiano la frase "una vecchia porta la sbarra" dice molto poco, se prima non ho ben identificato il soggetto della frase, chi la pronuncia, dove e quando è pronunciata.
L'intreccio tra simboli,rappresentazioni, logica, grammatica e semantica è daltronde alla base delle più importanti innovazioni dello scorso secolo e ben lungi dall'essere conclusa: Alan Turing e la sua macchina sono il più evidente esempio.
Un imporante e bellissimo libro divulgativo che analizza le implicazioni matematiche tra rappresentazione e semantica è sicuramente Gödel, Escher, Bach: un'eterna ghirlanda brillante di Douglas Hofstadter.
Daltronde la potenza della logica simbolica è stata dimostrata nel 1903 dal libro The Principles of Mathematics di Bertrand Russell .
Questo documento è stato rieditato il 16.2.2014