1. Introduction
Ce chapitre présente les concepts de base des URI, les considérations de conception et la notation syntaxique.
Aperçu
Un Identificateur de Ressource Uniforme (URI) fournit un moyen simple et extensible pour identifier une ressource.
Contexte historique :
- Dérivé des concepts introduits par l'initiative d'information globale du World Wide Web
- L'utilisation de ces identificateurs remonte à 1990
- Ce document rend obsolète la RFC 2396, fusionnant les spécifications URL et URL relatives
Cette spécification :
- Définit une syntaxe générique unique pour tous les URI
- Introduit la syntaxe d'adresse IPv6
- Exclut la syntaxe spécifique des schémas URI individuels (mise à jour dans des documents séparés)
1.1. Vue d'ensemble des URI
Caractéristiques des URI
Les caractéristiques des URI peuvent être résumées par trois mots : Uniform (Uniforme), Resource (Ressource), Identifier (Identificateur)
Uniform (Uniforme)
Avantages de l'uniformité :
-
Indépendance du contexte : Permet d'utiliser différents types d'identificateurs de ressources dans le même contexte, même lorsque les mécanismes d'accès diffèrent
-
Cohérence sémantique : Permet une interprétation sémantique uniforme des conventions syntaxiques communes à travers différents types d'identificateurs de ressources
-
Extensibilité : Permet l'introduction de nouveaux types d'identificateurs de ressources sans interférer avec les identificateurs existants
-
Réutilisabilité : Permet de réutiliser les identificateurs dans de nombreux contextes différents, permettant aux nouvelles applications ou protocoles de tirer parti d'un ensemble préexistant, vaste et largement utilisé d'identificateurs de ressources
Exemple :
http://example.com/page
ftp://example.com/file
mailto:[email protected]
Tous utilisent la même structure syntaxique générique
Resource (Ressource)
Portée des ressources : Cette spécification ne limite pas ce qui pourrait être une ressource ; le terme « ressource » est utilisé dans un sens général pour tout ce qui pourrait être identifié par un URI.
Exemples familiers :
- 📄 Documents électroniques
- 🖼️ Images
- 📊 Sources d'information avec un objectif cohérent (par exemple, « le bulletin météo d'aujourd'hui pour Los Angeles »)
- 🔧 Services (par exemple, passerelle HTTP vers SMS)
- 📚 Collections d'autres ressources
Ressources plus larges :
- 🧑 Êtres humains
- 🏢 Entreprises
- 📖 Livres reliés dans une bibliothèque
- 🔢 Concepts abstraits (opérateurs mathématiques, types de relations, valeurs numériques)
Point clé : Les ressources ne sont pas nécessairement accessibles via Internet
Identifier (Identificateur)
Définition : Un identificateur incarne l'information requise pour distinguer ce qui est identifié de toutes les autres choses dans son périmètre d'identification.
Signification de « identifier » :
- Fait référence au but de distinguer une ressource de toutes les autres
- Ne considère pas comment ce but est accompli (par exemple, par nom, adresse ou contexte)
- Ne doit pas être mal interprété comme l'identificateur définissant ou incarnant l'identité du contenu référencé
- Ne doit pas supposer que les systèmes utilisant l'URI accéderont à la ressource identifiée
Définition d'URI : Un URI est un identificateur consistant en une séquence de caractères correspondant à la règle syntaxique nommée <URI> dans la Section 3.
Nature globale des URI
Portée globale : Les URI ont une portée globale et sont interprétés de manière cohérente quel que soit le contexte
Exemple :
http://localhost/
A la même interprétation pour chaque utilisateur employant cette référence
Même si l'interface réseau correspondant à « localhost » peut différer
L'interprétation est indépendante de l'accès
Relativité du contexte :
- Les actions basées sur la référence seront relatives au contexte de l'utilisateur final
- Les opérations destinées à référencer des choses globalement uniques doivent utiliser des URI qui distinguent la ressource de toutes les autres
URI de contexte local :
file:///etc/hosts
Utilisé uniquement lorsque le contexte lui-même est un aspect définissant la ressource
Par exemple, les manuels d'aide en ligne référençant des fichiers sur le système de fichiers de l'utilisateur final
1.1.1. Syntaxe générique
Noms de schémas
Chaque URI commence par un nom de schéma (défini dans la Section 3.1) qui fait référence à une spécification pour l'attribution d'identificateurs dans ce schéma.
Système de nommage fédéré : La syntaxe URI est un système de nommage fédéré et extensible où les spécifications de chaque schéma peuvent restreindre davantage la syntaxe et la sémantique des identificateurs utilisant ce schéma.
Éléments génériques
Cette spécification définit les éléments de la syntaxe URI qui sont :
- ✅ Requis par tous les schémas URI
- ✅ Communs à de nombreux schémas URI
Avantages :
- Analyse indépendante du schéma : Définit la syntaxe et la sémantique nécessaires pour implémenter une analyse de référence URI indépendante du schéma
- Traitement différé : Permet de différer le traitement dépendant du schéma d'un URI jusqu'à ce qu'il soit nécessaire
- Indépendance du protocole : Les protocoles et formats de données utilisant des références URI peuvent référencer cette spécification comme définissant la plage de syntaxe autorisée
- Compatibilité future : Inclut les schémas non encore définis
Évolution découplée : Découple l'évolution des schémas d'identification de l'évolution des protocoles, formats de données et implémentations utilisant les URI.
Analyseur générique
Capacité d'analyse : Un analyseur pour la syntaxe URI générique peut analyser toute référence URI en ses composants majeurs
Analyse en deux étapes :
- Analyse générique : Déterminer le schéma et les composants majeurs
- Analyse spécifique au schéma : Effectuer une analyse supplémentaire spécifique au schéma sur les composants
Relation de surensemble : La syntaxe URI générique est un surensemble de la syntaxe de tous les schémas URI
1.1.2. Exemples
Exemples d'URI
Les exemples d'URI suivants illustrent plusieurs schémas URI et variations dans leurs composants syntaxiques communs :
ftp://ftp.is.co.za/rfc/rfc1808.txt
- Schéma :
ftp - Autorité :
ftp.is.co.za - Chemin :
/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
- Schéma :
http - Autorité :
www.ietf.org - Chemin :
/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
- Schéma :
ldap - Autorité :
[2001:db8::7](adresse IPv6) - Chemin :
/c=GB - Requête :
objectClass?one
mailto:[email protected]
- Schéma :
mailto - Chemin :
[email protected]
news:comp.infosystems.www.servers.unix
- Schéma :
news - Chemin :
comp.infosystems.www.servers.unix
tel:+1-816-555-1212
- Schéma :
tel - Chemin :
+1-816-555-1212
telnet://192.0.2.16:80/
- Schéma :
telnet - Autorité :
192.0.2.16:80 - Chemin :
/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
- Schéma :
urn - Chemin :
oasis:names:specification:docbook:dtd:xml:4.1.2
1.1.3. URI, URL et URN
Distinction conceptuelle
Classification des URI : Un URI peut être classé comme un localisateur, un nom, ou les deux
URL (Uniform Resource Locator, Localisateur de Ressource Uniforme)
Définition : Le sous-ensemble d'URI qui, en plus d'identifier une ressource, fournit un moyen de localiser la ressource en décrivant son mécanisme d'accès principal (par exemple, son « emplacement » réseau)
Caractéristiques :
- Fournit une méthode d'accès
- Décrit l'emplacement réseau
- Peut changer si la ressource se déplace
Exemples :
http://www.example.com/index.html
ftp://ftp.example.com/file.txt
URN (Uniform Resource Name, Nom de Ressource Uniforme)
Définition : Historiquement utilisé pour faire référence aux URI sous le schéma « urn » [RFC2141], qui doivent rester globalement uniques et persistants même lorsque la ressource cesse d'exister ou devient indisponible
Caractéristiques :
- Identificateur persistant
- Indépendant de l'emplacement
- Reste valide même si la ressource disparaît
Exemples :
urn:isbn:0-486-27557-4
urn:ietf:rfc:3986
Diagramme de relation
URI (Identificateur de Ressource Uniforme)
/ \
URL URN
(Comment trouver la ressource) (Nom persistant)
(Dépendant de l'emplacement) (Indépendant de l'emplacement)
Usage contemporain
Simplification terminologique : Actuellement, il est préférable de considérer les termes « URL » et « URN » comme des mnémoniques dans l'espace URI
Guidance pratique :
- Utiliser « URI » plutôt que « URL » ou « URN »
- Tous les URL sont des URI
- Tous les URN sont des URI
- Mais tous les URI ne sont pas des URL ou des URN
1.2. Considérations de conception
La conception des URI doit équilibrer plusieurs objectifs parfois contradictoires.
1.2.1. Transcription
Objectif : Les URI doivent pouvoir être transcrits par des humains en utilisant diverses techniques et médias
Contraintes :
- Doivent être brefs
- Doivent être mémorisables
- Doivent être faciles à saisir
Conflits avec d'autres objectifs :
Brièveté vs Lisibilité
http://x.co/a vs http://example.com/article
Mémorabilité vs Unicité globale
http://blog vs http://username.blog.example.com
Considérations pratiques :
- Ensemble de caractères limité (ASCII)
- Systèmes insensibles à la casse
- Gestion des caractères spéciaux
Erreurs de transcription :
Erreurs courantes :
- Confusion entre 0 (zéro) et O (lettre)
- Confusion entre 1 (un) et l (L minuscule)
- Confusion entre - (trait d'union) et _ (tiret bas)
1.2.2. Séparation de l'identification et de l'interaction
Principe : L'URI identifie une ressource indépendamment de la manière dont cette ressource est accessible
Avantages :
- Persistance de l'identification : Les identificateurs peuvent rester inchangés lorsque les méthodes d'accès changent
- Indépendance du protocole : La même ressource peut être accessible via plusieurs méthodes
- Intégrité de référence : Peut référencer des ressources inaccessibles
Exemple :
Identification : urn:isbn:0-486-27557-4
Accès 1 : http://amazon.com/dp/0486275574
Accès 2 : http://barnesandnoble.com/...
Accès 3 : Bibliothèque locale
Usages non-accès :
- 📝 Références de documents
- 🏷️ Balises de métadonnées
- 🔗 Relations de liens
- 📊 Identification de données
1.2.3. Identificateurs hiérarchiques
Structure hiérarchique : La syntaxe URI supporte les espaces de noms hiérarchiques
Forme d'organisation :
http://example.com/products/electronics/phones/model-x
└─Autorité─┘ └────────Hiérarchie de chemin────────┘
Avantages :
- Gestion déléguée : Permet la délégation de l'autorité de nommage
- Références relatives : Supporte les références URI relatives
- Organisation logique : Reflète l'organisation logique des ressources
Exemple de hiérarchie :
/products/
/electronics/
/phones/
/model-x
/model-y
/laptops/
/clothing/
1.3. Notation syntaxique
Cette spécification utilise la Forme de Backus-Naur Augmentée (ABNF) [RFC2234] pour définir les règles syntaxiques des URI.
Bases ABNF
Format de règle :
rulename = elements
Éléments de base :
ALPHA = A-Z / a-z
DIGIT = 0-9
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
Opérateurs :
/: Alternance (ou)*: Répétition (zéro ou plus)[ ]: Optionnel( ): Regroupement
Exemple :
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
Interprétation :
- Commence par une lettre
- Suivi de zéro ou plusieurs (lettre/chiffre/+/-/.)
Résumé des concepts clés
Trois caractéristiques des URI
- Uniform (Uniforme) : Syntaxe et sémantique cohérentes
- Resource (Ressource) : Peut identifier n'importe quoi
- Identifier (Identificateur) : Capacité à distinguer et identifier
URI vs URL vs URN
| Concept | Focus | Persistance | Exemple |
|---|---|---|---|
| URI | Identification | Non garantie | Tous les URI |
| URL | Localisation | Dépendant de l'emplacement | http://example.com/page |
| URN | Nom | Persistant | urn:isbn:0-486-27557-4 |
Principes de conception
- Transcriptibilité : Les humains peuvent facilement saisir et mémoriser
- Séparation des préoccupations : L'identification est indépendante de l'accès
- Hiérarchie : Supporte la délégation et l'organisation
Chapitre suivant : 2. Caractères (Characters) - Gestion des caractères et encodage dans les URI