Technologies du Web et bonnes pratiques


0. Web et W3C
0.1. Généralités
0.2. Historique
0.3. Classification de buts et technologies
0.4. Bonnes pratiques vis à vis des buts
1. Identification
1.1. Quelques définitions générales
1.2. Types de choses identifiées par un URI
1.3. Bonnes pratiques pour distinguer différents types de choses
1.4. Types d'URIs
1.5. Caractères dans les URIs
2. Interaction
3. Caractères
4. Contenu (structuration, ...)
5. Présentation
6. Exercices

Note: ce document est en HTML mais se navigue avec les flèches, comme un Powerpoint.
Pour plus de détails, voir le "help?" ci-dessous.

0.1. Web et W3C - Généralités

Internet: le méta-réseau (alias, "la réunion" ou "l'interconnection") des réseaux de communication et donc, en d'autres termes, l'ensemble de leurs supports physiques et logiciels de communications

Systèmes d'informations sur Internet: le WWW, le courrier électronique, la messagerie instantanée, Usenet, ... ; ces systèmes utilisent différent protocoles de communication

WWW [World Wide Web] ("(Le )Web", "La Toile (Mondiale)"): (système hypermédia sur l')ensemble des documents accessibles via internet (et souvent reliés par des hyperliens)

Web profond/invisible: partie du Web non indexée et donc introuvable avec les moteurs de recherche généralistes -> 99% du Web

World Wide Web Consortium (W3C; www.w3.org): comité international développant les standards de WWW -> www.w3.org est une source d'informations inportante ; des traductions en français de documents importants sont à
http://www.w3.org/2003/03/Translations/byLanguage?language=fr

Client Web: logiciel (typiquement un navigateur) qui envoie à un serveur Web une requête d'accés à de l'information, typiquement, une requête HTTP (Hypertext transfer Protocol), le protocole de transfert de fichiers le plus important du Web

Serveur Web: logiciel qui, lorsqu'il reçoit une requête Web d'un client Web - typiquement, une requête HTTP avec un identificateur de fichier et des paramètres - renvoie au client Web le contenu du fichier ou bien exécute le fichier avec les paramètres fournis et renvoie les résultats de ce programme

0.2. Web et W3C - Historique

1945: Vannevar Bush décrit Memex, un bureau électromécanique futuriste

années 1960: NLS (oNLine System), 1er système hypertexte, conçu par Douglas Engelbart ; études pour l'armée US de ARPANET, réseau non centralisé avec transmission par paquets, pouvoir maintenir les télécommunications en cas d'attaque

fin 1969: ARPANET contient 4 noeuds dont un au Stanford Research Institute (SRI) où travaillait Douglas Engelbart

années 1970: protocoles TCP, IP, UDP

1987: Apple publie HyperCard

1989-1993: conception initiale des technologies du Web (URLs, langage de description hypertexte HTML, navigateurs Web Nexus/Erwise/ViolaWWW, feuilles de style, protocole de transfert de fichiers HTTP, serveur HTTP "NCSA HTTPd") par Tim Berners-Lee et Robert Cailliau au CERN ; ouverture de internet au traffic commercial
en tant que système hypertexte, le Web était (et, plus ou moins, reste) un système très simple (e.g., pas de lien inverse, pas/peu de typage) mais, grâce aux URIs et à HTTP, il marche à l'échelle d'internet

1993: une équipe du NCSA (National Center for Supercomputing Applications) créé le navigateur HTML "NCSA Mosaic" et le serveur HTTP "NCSA HTTPd"; 623; 130 sites Web en juin

1994: une bonne partie de cette équipe créé la Netscape Communications Corporation, le NCSA créé le navigateur Netscape et le serveur HTTP Apache; 2738 sites en juin

1995: Microsoft lance MSN (initialement comme concurrent du Web) et le navigateur Internet Explorer; 23 500 sites en juin

0.2. Web et W3C - Historique (suite)

1998: HTML 4.0., XML 1.0; CSS level 2, DOM level 1, WAP level 1; début du moteur de recherche Google et du navigateur Mozilla; plus de 2 millions de sites en mars

2001: XHTML; Wikipedia; 70 millions de sites en août;
essor du "Web 2.0": mot "fourre-tout", et enfin passé de mode, désignant
- les technologies liées à la construction de pages Web dynamiques (générables automatiquement), e.g., le DOM (Document Object Model) et Ajax (Asynchronous Javascript and XML), et
- la participation des internautes à la construction et indexation de documents Web via des sites/systèmes collaboratifs tels que les wikis, les blogs, les réseaux sociaux, les folksonomies et les systèmes de sciences citoyennes

2009: Unicode 5.2 (1ère version en 1991); navigateurs Internet Explorer 8, Mozilla Firefox 3.5, Safari 4, Opera 10 et Google Chrome 1.0; 216 millions de sites en février;
essor du "Web 3.0": mot "fourre-tout" désignant les futures applications, combinaisons et évolutions des technologies récentes et en particulier celles liées
- au Web Sémantique,
- à la mobilité, l'universalité et l'accessibilité: internet des objets, indépendance vis à vis des supports matériels et des systèmes d'exploitation, ...
- au graphisme vectoriel (e.g., SVG qui est en fait maintenant une ancienne technologie) et aux formulaires XForms

0.3. Web et W3C - Classification de buts et technologies

Buts: mobilité (et donc inter-operabilité), universalité (et donc internationalisation), accessibilité (e.g., par les mal/non-voyants). Pour cela, le W3C recommande des technologies et des "bonnes pratiques" (page suivante). Un bon principe élémentaire suivi par le W3C (à part avec HTML): séparer les descriptions du contenu, de la présentation et des interactions. Un très mauvais principe suivi par le W3C (surtout avec HTML): ignorer les mots-clé inconnus, et donc ne pas générer d'erreurs pour ceux-ci.

Il existe des dizaines de technologies de base, dont beaucoup ont été standardisées par le W3C.
Voici deux catégorisations utiles pour s'y retrouver.

  1. Web Design and Applications (HTML+CSS, scripting+Ajax, graphics)
  2. Web Architecture
  3. Semantic Web
  4. XML Technology
  5. Web of Services
  6. Web of Devices
  7. Authoring Tools and Browsers (Amaya, ...)
  1. Identification: URIs (Uniform Resource Identifiers), ...
  2. Interaction:
    - coté client (navigateur): menus (XFORM), langages (Javascript, AJAX), ...
    - coté serveur: serveur (Apache, ...), langages (PHP, ASP, Java servlets, ...), ...
    - transmission client/serveur: HTTP, HTTPS, XMLHttpRequest, services Web (SOAP, WSDL, UDDI, ...), ...
  3. Caractères (encodage, ...): WEBFONTS, UNICODE, ...
  4. Contenu (structuration, ...): espace de noms, entêtes, notations de description (HTML, XML, ...), modèles de description (DOM, RDF, ontologies, règles, logiques, ...), modèles/notation d'accés (XML Path, SPARQL, ...) contrôle de qualité et sécurisation (signatures, encryption, ...)
  5. Présentation: feuille de styles (CSS, XSLT, ...), graphiques (SVG, ...), ...

0.4. Web et W3C - Bonnes pratiques vis à vis des buts

En résumé, et plus généralement, prenez en compte les possibilités, limites et problèmes des différents éléments techniques (réseaux, langages, agents, ...) et des utilisateurs (vision, mémoire, compréhension, ...).

Utilisez les validateurs automatiques du W3C pour au moins vérifier la syntaxe et la structure de vos documents. Voir aussi l'interface Web de HTML Tidy (et la home page de HTML Tidy).

Par ailleurs, le code source de chaque page doit être lisible (pour le "View/Transform Source effect") et, plus généralement, des bonnes pratiques de programmation doivent être respectées.

1.1. Identification - Quelques définitions

Identificateur universel (identifiant exclusif universel): symbôle permettant d'identifier une ressource de manière unique dans le monde

UUID [Universally Unique Identifier], alias GUIDs [Globally Unique IDentifier]: identificateur universel codé sur 128 bits selon la norme ISO/IEC 9834-8:2008, e.g., une adresse MAC

URI [Uniform Resource Identifier]: identificateur universel appartenant à une classe d'IDs reconnue par la IANA (Internet Assigned Numbers Authority) ; les UUIDs ne sont pas des URIs mais, comme noté plus loin, peuvent être réutilisés pour créer des URIs

1.1. Identification - Quelques définitions générales (suite)

Chose [thing], alias objet (au sens des approches orientées objet): tout ce à quoi il est possible de penser ou référer, i.e., une situation (action ou état) ou bien une entité (tout ce qui n'est pas une situation); un objet peut être concrèt (voiture, personne, ...) ou abstrait (type de voitures, attribut, ...); un ensemble d'objets est un objet

Resource Web [Web resource]: objet "identifié par" un URI

"Ressource Web sur le Web", alias "Elément de document Web (ED) ou Représentation Web: (instance de) document Web ou partie de document Web ayant un URI

"Ressource Web hors du Web": resource décrite par le Web mais qui n'est pas sur le Web, e.g., une voiture, une action, le contenu (pas la "représentation Web") d'une image ou d'une oeuvre littéraire

"Tout objet devrait pouvoir avoir un URI" (Tim Berners-Lee, ex-directeur du W3C, concepteur initial du Web) afin de pouvoir être référencé et décrit. C'est le principe le plus important du Web. Malgrè cela, le W3C a créé et recommandé un usage systématique du standard XML, un format de description de données basé sur la structure d'arbre et donc ne demandant pas de rendre explicite (et ainsi référençables) les relations entre les objets. Vers la fin des années 1990, devant l'accumulation fort prévisible des problèmes d'inter-opérabilité dûs au caractère arbitraire des représentations de données en XML (il n'y a en effet pas de manière non arbitraire de choisir qu'un noeud A doit être "dans" un noeud B), le W3C a créé et recommendé l'usage de RDF, un modèle de description de données basé sur une structure de graphes. Toutefois, le W3C lui a donné une notation basée sur XML, ce qui a créé de nombreux problèmes que le W3C a maintenant enfin reconnus mais sans se résoudre à abandonner XML comme notation privilégiée.

1.2. Identification - Types de choses identifiées par un URI

Un URI identifie un objet mais la syntaxe (actuelle) d'un URI ne spécifie pas le type d'objet identifié/référé, parmi les 4 types suivants. La syntaxe actuelle des langages (de description) standards du Web n'offre pas non plus de mot clé (ou autre sucre syntaxique) pour spécifier ces 4 types. Ceci créé de nombreux problèmes notamment pour le "Web Sémantique" (sous-ensemble des informations du Web dont le sens a été au moins partiellement défini dans des formats standards).

Type Exemple en Français (langage de description ambigüe) Distinction syntaxique
potentielle
Concept Le http://x.org/destin est un concept.
http://www.phmartin.info est un enseignant-chercheur.
CONCEPT(http://x.org/destin)
@(http://x.org/destin)
Elément
de document
http://x.org/destin est un document sur le destin.
http://x.org/destin est la "home page" de Ph. Martin.
GET(http://x.org/destin)
*(http://x.org/destin)
Emplacement
sur le Web
http://x.org/destin est l'adresse d'un document sur le destin. &(http://x.org/destin)
http://x.org/destin
Nom (chaine
de caractères)
http://x.org/destin contient 3 '/'. "http://x.org/destin"
'http://x.org/destin'

1.3. Identification - Bonnes pratiques pour distinguer différents types de choses

La convention suivante, adoptée par le W3C le 18 juin 2005 permet de distinguer entre un URI qui réfère à un document et un URI qui réfère à une resource qui n'est pas un document:
- si une ressource HTTP répond à une requête GET [avec l'URI en paramètre] avec une réponse 2xxx [e.g., 200 OK, c'est le cas normal], alors la ressource identifiée par l'URI est une ressource d'information [un document informel ou bien un document formel tel un document RDF];
- si une ressource HTTP répond à une requête GET avec [le code] 303 [qui permet de specifier une redirection vers un autre document], alors la ressource identifiée par l'URI peut être n'importe quelle resource [et donc, en pratique, un concept dont la redirection permit de fournir une représentation (un document)];
- si une ressource HTTP répond à une requête GET avec une réponse 4xx ([qui veut dire] erreur), alors la nature de la ressource est inconnue.

C'est tout ce que le W3C propose. Actuellement, pour chaque nouvel concept auquel il veut référer (e.g., une voiture qu'il doit vendre), un fournisseur d'informations consciencieux doit/devrait donc
1) créer trois documents: un pour le concept, un pour sa représentation sémantique "pour agents logiciels" (typiquement, avec la notation RDF/XML) et un pour sa représentation "pour agents humains" (typiquement, en HTML ou XML),
2) mettre chacun de ces documents dans des répertoires/espaces différents: un pour les concepts (e.g., http://concept.x.org/), un pour les représentations sémantique (e.g., http://semantic_doc.x.org/) et un pour les représentations textuelle/multimédia (e.g., http://html_doc.x.org/),
3) lier les trois documents par des liens sémantiques et hypertextes, et
4) indiquer à son serveur Web que l'accés à un document dans le répertoire des concepts doit être répondu par une redirection qui permet à un agent logiciel ou humain de choisir entre la représentation "pour agents logiciels" ou "pour agents humains".

Il est clair que l'adoption de cette approche est rarissime et ne peut socialement "passer à l'échelle". De manière plus générale, devant l'absence de conventions proposées actuellement par le W3C dans le domaine du Web Sémantique, de nos jours c'est aux programmeurs d'outils consciencieux d'inventer des conventions ou des mots clés pour distinguer les types d'objets, puis aux fournisseurs d'informations consciencieux de les utiliser. Toutefois, ces solutions étant ad-hoc, elles ne peuvent mener qu'à des inter-opérabilités locales [business to business], non à une inter-opérabilité globale.

Outre les 4 types d'objets précédents, de nombreux autres types de description de données devraient (en théorie) également être rendus standards, e.g., ceux de Berners-Lee pour préciser les relations entre différentes représentations d'un (même) objet générique. http://www.w3.org/DesignIssues/ est le site Web où Berners-Lee liste les choses qui ont été faites ou qui devraient être faites pour rendre le Web plus inter-opérable et donc utile.

1.4. Identification - Types d'URIs

Un URI est relatif ou absolu, et est un URN ou un URL.

URL [Uniform Resource Locator]: URI qui n'est pas un URN, et donc correspondant à un "emplacement sur le Web"

URN [Uniform Resource Name]: URI correspondant à un (ensemble de) attributs de la ressource identifiée et/ou permettant de tester si deux ressources sont identiques sans avoir à accéder aux ressources (un URN reste donc valide même si la "ressource Web sur le Web" identifiée n'existe plus) ;
l'allocation des URNs doit dont être gérée par une "autorité reconnue" et être conforme à la syntaxe de "l'espace de noms URN" utilisé et donc aussi, comme pour tous les URIs, suivant la syntaxe définie pour le "schéma URI" utilisé

Schema URI: l'un des schémas reconnus par la IANA ; il y a actuellement plus de 60 "schéma URIs" reconnus par la IANA, e.g., http, ftp, telnet, mailto et urn ;
pour les URNs, il y a plus de 40 "espaces de noms URN" reconnus par la IANA, e.g., isbn, issn, mpeg et uuid (les UUIDs peuvent ainsi être réutilisés pour créer des URNs)

Exemples d'URIs: ftp://ftp.is.co.za/rfc/rfc1808.txt , mailto:mduerst@ifi.unizh.ch ,
news:comp.infosystems.www.servers.unix , telnet://melvyl.ucop.edu/ , http://www.math.uio.no

Syntaxe générale de tous les URIs: scheme ":" scheme-specific-part

Syntaxe générale de la plupart des URIs:
scheme ":" ("//" authority) ("/" path_segments)+ query? ("#" fragment_identifier)?

1.5. Identification - Caractères dans les URIs

Caractères autorisés dans un URI : ceux "réservés" et ceux "non réservés"

Caractères réservés d'un URI: ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

Caractères non réservés d'un URI: alphanum | "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

Ensemble étendu des caractères non réservés d'un URI: les milliers de caractères de Unicode en se basant généralement sur le codage UTF-8, directement ou par une traduction ASCII via l'utilisation d'un Punycode ou d'une référence numérique de caractère.

IRI [International Resource Identifier]: URI utilisant les "l'ensemble étendu des caractères non réservés" suivant le standard relatif aux IRIs, e.g.,
http://www.blåbærgrød.dk/blåbærgrød.html (forme directe) ou
http://www.xn--blbrgrd-fxak7p.dk/bl%E5b%E6rgr%F8d.html (forme avec punycodes et référenceshexadécimales de caractères)
Pour plus de détails, voir
- http://fr.wikipedia.org/wiki/Internationalized_Resource_Identifier
- http://fr.wikipedia.org/wiki/Nom_de_domaine_internationalisé

2. Interaction

3. Caractères

4. Contenu (structuration, ...)

Taille minimale d'un fichier contenant la chaine de caractères "Hello World!":
28 caractères en HTML, 4915 caractères en PDF, 11274 caractères en postscript et 19456 caractères en MS Word.

5. Présentation

6. Exercices