Identificazione di Risorse nel Semantic Web

Transcript

Identificazione di Risorse nel Semantic Web
IDENTIFICAZIONE DI RISORSE NEL SEMANTIC WEB
Versione 0.1 - 6/4/2006
Di Daniele Alessandrelli
[email protected]
SEMEDIA
Semantic Web and Multimedia Group
http://semedia.deit.univpm.it
I linguaggi del Semantic Web come RDF e OWL necessitano di un mezzo per identificare in modo
univoco le risorse oggetto di informazione: tale mezzo sono gli URI. In questo tutorial si
approfondisce il concetto di URI spiegandone il significato e descrivendone brevemente la sintassi
generica. Saranno inoltre presentati e descritti alcuni “tipi” di URI largamente utilizzati nel
Semantic Web.
1.URI
URI è l'acronimo di Uniform Resource Identifier, la cui traduzione letterale è identificatore
uniforme di risorsa.
Con il termine identificatore si indica un qualcosa che permette di distinguere un particolare oggetto
(l'oggetto identificato appunto) da tutti gli altri all'interno di un determinato insieme. Tale insieme
può anche essere l'insieme contenente tutti i possibili oggetti, nel qual caso si dice che
l'identificatore ha scope globale. È importante sottolineare che gli URI, in quanto identificatori, non
devono necessariamente fornire accesso all'oggetto identificato.
Con l'aggettivo uniforme ci si riferisce alla proprietà di uniformità degli URI. Tale proprietà
fornisce diversi benefici. Essa permette di usare nello stesso contesto differenti tipi di URI, anche
nel caso in cui i meccanismi per accedere alle risorse identificare siano diversi tra loro. Permette,
inoltre, un'interpretazione uniforme tra i vari tipi di URI della semantica associata a certe
convenzioni sintattiche. Garantisce la possibilità di introdurre un nuovo tipo di URI senza interferire
con il modo in cui gli identificatori esistenti sono utilizzati. Permette, infine, il riutilizzo degli
identificatori in contesti diversi da quello in cui sono stati creati premettendo a nuove applicazioni o
protocolli di sfruttare un insieme preesistente di identificatori ampio e largamente utilizzato.
1
La definizione di URI non pone vincoli su cosa possa essere una risorsa; il termine risorsa è usato in
senso generale per indicare qualunque cosa possa essere identificata da un URI. Si possono
catalogare le risorse in tre diversi tipi:
•
quelle accessibili in rete, come documenti elettronici, immagini, servizi, ecc.
•
quelle non accessibili in rete, come gli esseri umani, le società, i libri, ecc.
•
i concetti astratti che non esistono fisicamente, come ad esempio il concetto di “autore”.
1.1 Relazione con URL e URN
Un URI può essere classificato o come un indirizzo (URL) o come un nome (URN) o come
entrambi.
Un URL (Uniform Resource Locator) è un particolare tipo di URI che, oltre ad identificare una
risorsa, fornisce un metodo per localizzarla specificando il suo principale metodo di accesso. Per
esempio l'URL http://www.w3c.org/ identifica l'homepage del W3C e al tempo stesso indica che
una rappresentazione di tale risorsa (il codice HTML dell'homepage) può essere ottenuta tramite il
protocollo HTTP dall'host chiamato www.w3c.org .
Un URN (Uniform Resource Name) è un URI che identifica una risorsa per mezzo di un nome
appartenente ad un particolare namespace. Un URN può essere usato per riferirsi ad una risorsa
senza indicare dove essa si trovi o come sia possibile ottenerne una rappresentazione
(dereferenziarla). Ad esempio l'URN urn:isbn:0-06-251586-1 è un URI che permette di riferirsi
ad un particolare libro senza indicare dove e come sia possibile recuperarne una copia.
1.2 Sintassi
Un URI è in pratica una stringa avente la seguente sintassi [1]:
URI = scheme “:” scheme-specific-part
Ogni URI comincia con la parte scheme contenente il nome di un URI scheme. Un URI scheme è
una schema che definisce le specifiche per assegnare identificatori all'interno di tale schema. Le
specifiche di ciascuno schema definiscono la sintassi e la semantica degli identificatori che usano
tale schema. La parte scheme è seguita dai “:” e dalla parte scheme-specific la cui struttura è,
appunto, definita dall'URI scheme usato.
La sintassi è dunque organizzata in modo gerarchico, con i vari componenti disposti in ordine
decrescente di significato da sinistra a destra. Per alcuni URI scheme la visibilità di tale gerarchia è
limitata allo schema stesso: tutto ciò che segue i due punti (che delimitano lo schema) è considerato
opaco per il processamento dell'URI. Altri schemi rendono invece la gerarchia esplicita e visibile
permettendo l'uso di algoritmi generici di suddivisione dell'URI nei suoi componenti.
La sintassi generica usa i caratteri slash “/”, punto interrogativo “?” e cancelletto “#” per delimitare
2
tali componenti, che sono, oltre allo scheme, l'authority, il path, il query ed il fragment.
La sintassi generica di un URI è dunque la seguente:
URI = scheme “:” [ “//” authority ] path [ “?” query ] [ “#” fragment ]
1.2.1 Scheme
Il significato di tale elemento è già stato visto. Per quanto riguarda la sua sintassi va invece detto
che esso è case-insensitive, ma la forma canonica è in minuscolo e dunque è raccomandato che
applicazioni che generano URI usino scheme scritti in minuscolo.
1.2.2 Authority
Molti URI scheme includono un elemento gerarchico (opzionale) che identifica un naming
authority al quale è delegato il controllo del namespace definito dal resto dell'URI.
Il componente authority è delimitato da uno slash “/”, un punto interrogativo “?”, dal cancelletto
“#” o dalla fine dell'URI.
1.2.3 Path
Il componente path (obbligatorio) contiene dei dati, generalmente organizzati in forma gerarchica,
che insieme ai dati contenuti nel componente query permettono di identificare una risorsa
all'interno dello scope dell'URI scheme e del naming authority (se presente). Il componente path è
terminato dal primo punto interrogativo “?” o cancelletto “#” o dalla fine dell'URI. Il componente
path, sebbene obbligatorio, può essere vuoto, ma solo se il componente authority non lo è.
1.2.4 Query
Il componente query (opzionale) contiene dati non gerarchici che, assieme a quelli del componente
path permettono di identificare una risorsa all'interno dello scope dell'URI scheme e del naming
authority (se presente). L'inizio del componente query è indicato dal primo punto interrogativo “?”
mentre la fine è indicata dal primo cancelletto “#” o dalla fine dell'URI.
1.2.5 Fragment Identifier
Il componente fragmet (opzionale) permette un'identificazione indiretta di una risorsa secondaria
per mezzo del riferimento alla risorsa primaria (identificata dell'URI privato del fragment) e di
ulteriori dati identificativi. La risorsa secondaria può essere una porzione o un sottogruppo di quella
primaria o può essere un'altra risorsa definita o descritta dalla risorsa primaria.
1.3 URI nel Semantic Web
Gli URI svolgono un ruolo fondamentale nel Semantic Web (non a caso si trovano nel primo strato
3
della “semantic cake”1). Permettono infatti di identificare in modo univoco e globale una risorsa di
cui vogliamo parlare. L'RDF si basa sull'ipotesi che due risorse aventi lo stesso URI 2 siano la stessa
risorsa, ovvero che un URI identifichi una ed una sola risorsa. Dunque le triple relative ad uno
stesso URI, ma contenute in documenti diversi possono essere aggregate. Viene eliminata
l'ambiguità del linguaggio comune in cui una stessa parola o uno stesso nome possono essere usati
per indicare due concetti diversi.
Storicamente gli URI nascono per identificare risorse web [2]; per tali risorse esistono dunque dei
ben noti metodi per associarvi URI. Con la nascita del Semantic Web, il loro uso è stato esteso a
tutte le risorse, ciò pone però il problema di come assegnare URI a risorse fisiche o concettuali.
Qual è l'URI di un'automobile? E quella di persona? E quella del concetto di pace?
Tale problema è stato risolto principalmente in due modi: estendendo l'uso di URI scheme già
esistenti e creando nuovi URI scheme utilizzabili per qualunque risorsa.
2.Uso di URI con schema http
L'URI scheme http [3] è probabilmente lo schema più noto ed utilizzato nel Web attuale. Fu ideato
per identificare risorse web accessibili tramite il protocollo HTTP (HyperText Transfer Protocol).
Gli URI http hanno la seguente sintassi (che rispetta quella generica precedentemente descritta):
http URI = “http://” host [ port ] [ “/” path ] [ “?” query ] [ “#” fragment ]
Come si può vedere il ruolo dell'elemento authority della sintassi generica è svolto dall'elemento
host; esso identifica un particolare computer per mezzo o del suo IP o più frequentemente del suo
nome. Per computer connessi ad Internet tale nome è composto dal loro hostname e da un nome di
dominio. Questi ultimi sono assegnati in modo centralizzato da apposite organizzazioni che
garantiscono che ogni nome di dominio sia assegnato ad un'unica entità (persona, società,
organizzazione, ecc.). Dunque chi possiede un nome di dominio può creare URI http
semplicemente scegliendo il path che ritiene opportuno per la risorsa che vuole identificare. A
seguito di questa facilità nel creare URI, della sua ampia diffusione e della iniziale mancanza di
URI scheme adatti per qualunque risorsa, lo schema http è stato ed è tuttora usato nel Semantic
Web per identificare, non solo risorse web accessibili tramite HTTP, ma anche risorse fisiche e
concetti. Ad esempio il proprietario del dominio example.org potrebbe usare l'URI
http://www.example.org/mycat per identificare il proprio gatto. Egli potrebbe inoltre collocare a
tale URL un documento elettronico (testo in linguaggio naturale, immagine, ecc.) che descriva la
risorsa identificata, in questo caso il suo gatto. Questo metodo è ampiamente usato nel Semantic
Web, in quanto permette di capire quale sia la risorsa identificata da un determinato URI
1 http://www.w3.org/2000/Talks/1206-xml2k-tbl/slide10-0.html
2 L'RDF considera due URI lo stesso URI solamente se sono uguali carattere per carattere.
4
semplicemente dereferenziandolo.
L'uso dello schema http presenta dunque vari vantaggi, tuttavia esso soffre di un problema di
notevole rilevanza, quello dell'URI crisis [4] [5].
2.1 URI Crisis
L'URI crisis si manifesta quando usiamo un URI del tipo http per identificare delle risorse fisiche o
dei concetti. In questo caso infatti l'URI può essere anche utilizzato per identificare il documento
che si trova all'URL corrispondente. Abbiamo dunque un URI che può identificare due risorse.
Questo problema può essere risolto in due modi, o attraverso l'uso del fragment identifier o tramite
un'apposita configurazione del server web che risponde alla richiesta di GET causata dal tentativo
di dereferenziare l'URI.
2.2 Uso del fragment identifier
Una semplice soluzione al problema dell'URI crisis consiste nell'aggiungere all'URL della pagina
che descrive la risorsa fisica o il concetto, un fragment identifier vuoto. L'URI dell'esempio
precedente, usato dal proprietario di example.org per identificare il proprio gatto, diventerebbe
dunque http://www.example.org/mycat#. Dereferenziando tale URI si ottiene comunque la
descrizione della risorsa identificata, pur avendo due URI diversi, uno per la risorsa ed uno per il
documento che la descrive.
Nel caso si abbiano più risorse da identificare, invece di creare un documento descrittivo per
ognuna di esse, si potrebbero aggregare in un unico documento le diverse descrizioni ed usare come
URI per le risorse l'URL del documento seguito da un fragment identifier contenente il nome della
risorsa. Ad esempio supponendo che il proprietario di example.org abbia due gatti, Tom e
Silvestro, egli potrebbe identificarli usando gli URI http://www.example.org/mycats#Tom e
http://www.example.org/mycats#Silvestro
e
potrebbe
collocare
all'URL
http://www.example.org/mycats una loro foto o un altro documento che li descrive.
2.3 Provare a dereferenziare l'URI
Per quanto riguarda gli URI http privi di fragment identifier il TAG (Technical Architecture Group)
ha stabilito che per determinare il tipo di risorsa da essi identificata, bisogna provare a
dereferenziare l'URI, eseguendo un richiesta di GET per esso, e verificare quale status code viene
restituito dal web server [6] :
•
se si ottiene un codice 2xx allora la risorsa identificata è una risorsa web
•
se si ottiene un codice 303 (See Other) allora la risorsa identificata può essere qualunque tipo
di risorsa
5
•
se si ottiene un codice 4xx (Error) allora la natura della risorsa è sconosciuta
Di conseguenza per utilizzare un URI http privo di fragment identifier per identificare una risorsa
reale si deve configurare il proprio web server in modo tale che risponda ad una richiesta di GET
per quell'URI con un redirect su un altro URL al quale si può collocare una descrizione della risorsa
identificata.
2.3.1 PURL
In alternativa alla suddetta configurazione del proprio server web, si può utilizzare il servizio
PURL3 [7] messo a disposizione dall'Online Computer Library Center. PURL sta per Persistent
Uniform Resource Locator; si tratta essenzialmente di un URL che invece di puntare direttamente
ad un risorsa sul Web punta ad un sistema di risoluzione intermedio. Il sistema di risoluzione PURL
associa il PURL con l'effettivo URL della risorsa e restituisce tale URL al client che esegue una
richiesta di GET sul PURL. Questo avviene tramite un HTTP redirect.
3.URN – Uniform Resource Names
Il concetto di URN è già stato introdotto, ora si vedrà più in dettaglio quali sono i requisiti che un
URI deve rispettare per poter essere considerato un URN.
Lo scopo di un URN è quello di fornire un identificatore globalmente univoco e persistente usato
per riconoscere una risorsa ed eventualmente accedere alle sue caratteristiche o accedere alla risorsa
stessa.
Sebbene sia stato definito un URI scheme specifico per la creazione di URN, lo schema urn, anche
URI che utilizzano un altro schema posso essere classificati come URN, è infatti sufficiente che essi
rispettino i seguenti requisiti funzionali [8]:
•
Scope globale: un URN è un nome con scope globale che non implica una collocazione. Ha lo
stesso significato ovunque.
•
Univocità globale: lo stesso URN non sarà mai assegnato a due diverse risorse.
•
Persistenza: la vita di un URN è permanente. Ovvero sarà globalmente univoco per sempre e
può essere usato come identificativo di una risorsa per un periodo maggiore della vita stessa
della risorsa o della naming authority coinvolta nella sua assegnazione.
•
Scalabilità: gli URN possono essere assegnati a risorse che saranno plausibilmente disponibili
per migliaia di anni.
•
Supporto di sistemi di nomenclatura legacy: lo schema deve supportare sistemi di
nomenclatura già esistenti purché essi rispettino gli altri requisiti qui descritti.
•
Estensibilità: ogni schema per URN deve permettere future estensioni.
3 http://www.purl.org/
6
•
Indipendenza: è compito esclusivo dell'autorità che genera il nome determinare le condizioni
sotto le quali generare un nome.
•
Risoluzione: un URN non impedirà la risoluzione (trasformazione in URL). In particolare per
URN che hanno un corrispondente URL deve esistere un meccanismo per ottenerlo.
Lo schema urn permette di creare URI utilizzando nomi appartenenti a particolari namespace che
rispettano i requisiti suddetti. La sintassi di un URI con schema urn è la seguente:
URN = "urn:" NID ":" NSS
l'elemento NID (namespace identifier) identifica un particolare namespace, mentre l'elemento NSS
(namespace specific) contiene una stringa che permette di identificare in modo univoco una risorsa
all'interno del namespace considerato.
Esempi di URN sono i seguenti:
•
urn:isbn:0451450523
•
urn:ietf:rfc:3187
•
urn:oid:2.16.840
3.1 duri e tdb
duri e tdb [9] sono due urn namespace che permettono di creare in modo agevole degli URN per
identificare documenti e risorse fisiche o concetti.
La sintassi del namespace duri è la seguente:
DURI = "urn:duri:" date ":" encoded-URI
dove date è un stringa di numeri corrispondente ad una data, mentre encoded-URI è un URI
assoluto in cui tutti i caratteri, esclusi quelli appartenenti alla sintassi urn, sono stati escapati.
Il significato di un duri è la risorsa che era identificata dall'encoded-URI (decodificato) nell'istante
di tempo identificato dalla data. Per esempio l'URI urn:duri:2001:http://www.ietf.org è un
identificatore persistente del documento identificato da http://www.ietf.org all'inizio dell'anno
2001.
La sintassi del namespace tdb è analoga:
TDB = "urn:tdb:" date ":" "encoded-URI"
Il significato di un tdb (thing described by) è la risorsa descritta dal documento identificato
dall'encoded-URI nella data date. Il namespace tdb permette di identificare entità, concetti,
astrazioni o altre risorse che non sono esse stesse accessibili in rete, ma che in una certa data sono
state
descritte
da
una
risorsa
accessibile
in
rete.
Ad
esempio
l'URI
urn:tdb:2001:http://www.ietf.org identifica l'organizzazione Internet Engineering Task Force così
come era descritta dalla propria homepage all'inizio del 2001.
7
3.1.1 Risoluzione di duri e tdb
Non esiste un server che permetta un'accurata risoluzione di URN duri e tdb. Un duri può essere
“risolvibile” nel senso che è possibile accedere alla risorsa identificata dall'encoded-URI nella data
specificata tramite una cache o un qualche servizio di archivio Internet (come ad esempio
http://www.archive.org ). Un tdb è risolvibile nel senso che, se il corrispondente duri è risolvibile, è
possibile accedere al risultato di tale risoluzione ed interpretarlo.
Se non è possibile accedere a nessuna forma di archivio, si può cercare di risolvere l'encoded-URI
ottenendo il documento attualmente identificato. Ciò permette di ottenere un'approssimazione della
risoluzione del duri (o del tdb) la cui affidabilità dipende dal tempo trascorso dalla data indicata e
quella in cui avviene la risoluzione dell'encoded-URI.
4.TAG URI
I tag URI (URI con schema tag) [10] sono progettati per essere univoci nel tempo e nello spazio.
Essi si distinguono da molti degli altri tipi di URI per il fatto di non avere un meccanismo di
risoluzione autoritativo. Un tag URI può essere usato soltanto come identificatore.
I tag URI rispettano i seguenti requisiti:
•
Sono univoci nel tempo e nello spazio e ve ne è una disponibilità praticamente inesauribile.
•
È pratico per gli esseri umani crearli, leggerli, scriverli, ricordarli, ecc.
•
Non è richiesta una registrazione centralizzata, almeno per i possessori di domini o indirizzi
email; il “costo” per creare ciascun nuovo tag URI è irrisorio.
•
Sono indipendenti da qualsiasi particolare schema di risoluzione.
4.1 Sintassi
La sintassi di un tag URI è la seguente:
TAG URI = “tag:” taggingEntity “:” specific [ “#” fragment ]
Il componente taggingEntity definisce il namespace; la sua sintassi è la seguente:
authorityName “,” date
Il sotto-componente authorotyName può essere o un nome di dominio o un indirizzo email di
proprietà del creatore del tag URI. Il sotto-componente date è una data espressa nella forma
YYYY-MM-DD; date del tipo YYYY-MM-01 possono assere abbreviate nella forma YYYY-MM
ovvero indicando solo l'anno ed il mese, analogamente date del tipo YYYY-01-01 possono essere
abbreviate nella forma YYYY ovvero indicando semplicemente l'anno. La data specifica, secondo il
calendario gregoriano, un particolare giorno in cui l'authorityName era assegnato al creatore del
tag URI.
8
La coppia authorityName e date permette di identificare in modo univoco l'entità che crea il tag
URI; questo poiché in un determinato istante un dominio o un indirizzo email possono essere
assegnati ad una sola persona. Il solo authorityName non è sufficiente poiché un dominio o un
indirizzo email possono, nel tempo, cambiare proprietario.
La parte specific è la parte dipendente dal namespace: in pratica è una stringa, formata dai caratteri
permessi in un URI, scelta dal creatore dell'URI. È raccomandato che la parte specifica sia userfriendly.
I tag URI possono opzionalmente terminare con un fragment identifier.
Come detto il creatore del tag URI può scegliere liberamente la parte successiva al taggingEntity
(parte specific e fragment), tuttavia deve garantire la sua univocità. Se tale vincolo è rispettato il
tag URI generato sarà univoco (grazie al fatto che il taggingEntity, per come deve essere costruito,
è sempre univoco).
Esempi di tag URI sono i seguenti:
•
tag:[email protected],2001:web/externalHome
•
tag:[email protected],2004-05:Sandro
•
tag:my-ids.com,2001-09-15:TimKindberg:presentations:UBath2004-05-19
•
tag:blogger.com,1999:blog-555
•
tag:yaml.org,2002:int
5.Identificazione tramite valore di una IFP
Una IFP (Inverse Functional Property) è una proprietà i cui singoli valori possono essere riferiti al
massimo ad una risorsa, ovvero non possono esistere due soggetti diversi che abbiano, per tale
proprietà, lo stesso valore.
Come conseguenza di ciò si ha che in ogni statement avente come predicato tale proprietà, il
soggetto è univocamente determinato dall'oggetto (valore della proprietà). La coppia IFP e oggetto
può dunque essere usata per identificare il soggetto, sostituendo il compito svolto da un URI.
Questa soluzione viene spesso usata in RDF per quelle risorse per le quali non esiste un URI
standard o per le quali risulta difficile o troppo oneroso crearne una. Un esempio di applicazione
che utilizza tale metodo è il progetto FOAF.
5.1 Il progetto Friend of a Friend (FOAF)
Il progetto FOAF4 (Friend of a Friend) [11] si prefigge l'obiettivo di creare un Web in cui le pagine
che descrivono delle persone e i collegamenti tra esse e ciò che fanno o creano siano interpretabili
dalle macchine.
4 http://www.foaf-project.org/
9
FOAF è sostanzialmente un vocabolario RDF. Il suo uso tipico è simile a quello dell'RSS: il
proprietario di un sito crea uno o più file FOAF sul proprio web server e rende noti gli URL di tali
file cosicché appositi agenti software possano usare l'informazione in essi contenuta. Così come la
creazione di una pagina web, anche la creazione di dati FOAF è decentralizzata e sotto il controllo
dell'autore. Un esempio di applicazione che utilizza questi file è un archivio in cui i membri di una
comunità conservano i propri dati. Tuttavia, come con l'RSS, il progetto FOAF diviene molto
interessante quando i dati sono aggregati e possono essere esaminati e messi in relazione tra loro.
Il progetto FOAF ha dovuto affrontare il problema di creare un identificatore che permettesse di
riferirsi in modo univoco ad una persona. Questo problema viene risolto nei sistemi chiusi
assegnando ad ogni persona un identificatore specifico per quella determinata applicazione.
Tuttavia nel caso di FOAF si è in un sistema aperto in cui si vuole usare lo stesso identificatore per
servizi diversi, dunque la questione è più complicata. Una possibile soluzione sarebbe stata quella di
ricorrere ad un sistema centralizzato per controllare l'assegnazione delle identità, qualcosa di simile
a Microsoft Passport. Tuttavia un sistema centralizzato è rischioso per numerosi motivi, non ultimo
il fatto di affidare ad una terza parte il controllo sui propri accessi ai vari servizi e sui propri dati
personali.
Per FOAF fu quindi ideata una strategia di assegnazione dei nomi decentralizzata. Tale strategia si
basa sul presupposto che un indirizzo email è assegnato ad un'unica persona. Dunque un indirizzo
email potrebbe essere usato per identificarne il proprietario; tuttavia usare l'URI dell'indirizzo email
per riferirsi al proprietario è concettualmente sbagliato poiché si otterrebbe un URI che identifica
due risorse: l'indirizzo email e la persona. Inoltre una persona potrebbe avere più indirizzi email
ognuno utilizzato per un particolare scopo.
L'idea di usare un indirizzo email per identificare una persona rimane comunque valida. Invece di
usare l'URI dell'indirizzo email come identificatore per il proprietario si può semplicemente
assumere che tutte le descrizioni di una persona che includono l'affermazione “l'indirizzo email di
questa persona è [email protected]” si riferiscano allo stesso individuo.
FOAF funziona esattamente in questo modo. Al fine di combinare l'informazione relativa ad una
particolare persona si assume dunque che un indirizzo email sia una inverse-functional property,
ovvero che un indirizzo email abbia un solo proprietario.
10
RIFERIMENTI
[1]
T. BERNERS-LEE, R. FIELDING, L. MASINTER, “RFC 3986 - Uniform Resource
Identifier (URI): Generic Syntax”, Network Working Group, 2005
[2]
WIKIPEDIA, “Uniform Resource Identifier”,
http://en.wikipedia.org/wiki/Uniform_Resource_Identifier, 2006
[3]
R. FIELDING, J. GETTYS, J. MOGUL, H. FRYSTYK, L. MASINTER, P. LEACH, T.
BERNERS-LEE, “RFC 2616 - Hypertext Transfer Protocol – HTTP/1.1”, Network
Working Group, 1999
[4]
T. BERNERS-LEE, “What do HTTP URIs Identify?”,
http://www.w3.org/DesignIssues/HTTP-URI, 2002
[5]
D. Booth, “Four Uses of a URL: Name, Concept, Web Location and Document Instance”,
http://www.w3.org/2002/11/dbooth-names/dbooth-names_clean.htm, 2003
[6]
TAG, “httpRange-14: What is the range of the HTTP dereference function?”,
http://www.w3.org/2001/tag/issues.html#httpRange-14, 2005
[7]
K. SHAFER, S. WEIBEL, E. JUL, J. FAUSEY, “Introduction to Persistent Uniform
Resource Locators”, http://purl.oclc.org/docs/inet96.html
[8]
K. SOLLINS, L. MASINTER, “RFC 1737 - Functional Requirements for Uniform
Resource Names”, Network Working Group, 1994
[9]
L. MASINTER, “"duri" and "tdb" URN namespaces based on dated URIs”,
http://larry.masinter.net/duri.html, 2004
[10]
T. KINDBERG, S. HAWKE, “RFC 4151 - The 'tag' URI Scheme”, Network Working
Group, 2005
[11]
E. DUMBILL, “Finding friends with XML and RDF”,
http://www-128.ibm.com/developerworks/xml/library/x-foaf.html, 2002
11