XML : principes et architectures

Transcription

XML : principes et architectures
XML : principes et architectures
Introduction
La numérisation des textes est souvent perçue comme une évolution naturelle (éventuellement
catastrophique) alors qu’elle modifie de façon radicale production et utilisation du livre. Le
passage au texte inscrit par l’intermédiaire d’un code informatique, balisé et indexé est un
changement dont l’importance peut se comparer à celui qui s’est opéré avec l’apparition du
papier et de l’imprimerie. L'imprimerie, catalyseur culturel des débuts de la modernité, a donné
accès à des documents de référence stables et identifiables sans ambiguïtés1. L'utilisation
industrielle du caractère mobile a entraîné la standardisation du balisage : la typographie2.
Aujourd'hui, les technologies de l’information modifient en profondeur notre relation à l’écrit et au
savoir, nos pratiques intellectuelles, mais aussi l’articulation entre espaces privé et public, entre
individu et collectivité.
Le document structuré est un point nodal de la société postindustrielle. Codé, balisé, indexé,
inscrit sur la “ surface ” scalaire et éclatée des codes informatiques, le texte numérisé devient
virtuel et seule l’action d’une machine permet de l’actualiser. La bataille intense qui se profile
concerne les productions culturelles mais aussi tous les genres de documents. Microsoft, la
firme la plus riche du monde se trouve au cœur d’une bataille touchant à tout ce qui a un rapport
avec la valorisation d’entités immatérielles et poursuit sa stratégie de solutions propriétaires
autour de son système d’exploitation, mettant en permanence en danger l’interopérabilité des
systèmes. IBM, l’ancienne puissance dominante de la mécanographie puis de l’informatique,
concentre efforts et moyens (ils sont gigantesques, après la cession de la production de PC)
vers les services à destination des professionnels solvables (le fameux B2B), IBM propose déjà
des outils compilant les informations disponibles sur le net dans le cadre du projet
“ Webfountain ”3. Google (à l’aide des sommes considérables que lui a rapporté son entrée en
bourse) ne se contente plus d’offrir le moteur de recherche dominant mais indexe les fonds de
grandes bibliothèques universitaires dans le cadre d’un modèle orienté vers le grand public et
financé par la publicité.
Les technologies dites intelligentes de traitement du texte vont, à très brève échéance,
influencer massivement les activités exploitants toutes formes de documentation (partage de
documents et/ou de corpus dans des collèges plus ou moins structurés, constitution de
vocabulaires communs, élaboration collective de documents, syndication des contenus et mise
en place de consensus entre chercheurs de disciplines différentes, balisage savant de
documents, compilation de corpus toujours plus importants par des machines de plus en plus
sophistiquées). Ces technologies ne sont pas une simple prothèse proposée au chercheur, au
créateur, au développeur dans les domaines scientifique, culturel et industriel mais s’inscrivent
dans une logique d’appareillage de leur travail. Devenues un ensemble technique structurant
très sophistiqué, les nouvelles technologie de l'information et de la communication (NTIC)
représentent ce qu’il y a de plus prégnant dans la société postmoderne.
Aujourd’hui, c'est le texte lui-même, son contenu et non sa seule apparence qui est l'objet de
manipulations mécanisées. C'est une transformation potentiellement comparable à l'émergence
de l'écriture. L’enjeu fondamental de ce que prépare Google au travers de la mise en ligne de
millions de textes, ce n’est pas leur mise à disposition des humains de façon directe, mais plutôt
leur traitement par une multitudes de machines qui vont les compiler, les analyser, de façon à en
extraire le sous ensemble réputé pertinent par rapport à l'objet de la recherche. Le texte n’est
plus alors transmis par le maître ou un érudit voire acquis par une lecture laborieuse mais
1
2
3
SIMONDON Gilbert, Du mode d'existence des objets techniques, Paris, éd. Aubier, 1958, Réédition augmentée : préface
de HART (John), postface de DEFORGE (Yves), 1989.
EISENSTEIN Elizabeth L., La révolution de l'imprimé dans l'Europe des premiers temps modernes, Paris, éd. La
Découverte, 1991.
FEBVRE Lucien et MARTIN Henri-Jean, L'apparition du livre, Paris, éd. Albin Michel, coll. L’évolution de l’Humanité, 1950.
WILD Adolf, La typographie de la Bible de Gutenberg, in Cahiers Gutenberg n° 22.
http://www.almaden.ibm.com/Webfountain/
2
compilé par une machine qui fournit à l'usager les quelques centaines ou milliers de pages
nécessaires à alimenter sa réflexion.
XML (eXtensible Markup Language - ou langage de balisage extensible) est un métalangage
standard permettant de marquer, de manière arborescente, la structure de documents textes
donnant ainsi les moyens de partager des données et de l'information entre ordinateurs et entre
logiciels de la façon la moins ambiguë possible. L'utilisation de XML permet entre autre aussi
d'échanger des informations entre diverses applications, de générer des documents (HTML par
exemple) ayant différents aspect selon l'utilisateur final ou dialoguer avec des bases de
données. Technologie de base, XML fournit un ensemble de règles pour la création de
vocabulaires qui structurent à la fois les documents et les données. Pour être exploitable, ces
vocabulaires sont définis par des Document Type Definitions (DTD) qui représentent le versant
sémantique de XML. En effet, s'il offre des règles de syntaxe très claires, XML n'impose aucune
contrainte sémantique sur la signification des documents. Les schémas XML sont utilisés
ensuite comme méthode autorisant la composition de vocabulaires XML.
Des données XML partagées entre ordinateurs ou entre logiciels via HTTP améliorent les
services Web. Le W3C4 a publié, en février 2004, deux technologies clés du Web sémantique :
d'une part, la spécification révisée du modèle et syntaxe du cadre de description des ressources
(Resource Description Framework - RDF) et, d'autre part, le langage des ontologies Web (Web
Ontology Language - OWL). Ces standards du Web fournissent un cadre de travail pour la
gestion des ressources, l'intégration, le partage et la réutilisation des données sur le Web.
Différents types d'utilisateurs peuvent partager les mêmes informations, sans nécessairement
partager les mêmes logiciels. Le déploiement de ces standards dans des produits et services à
caractère commercial fait du Web sémantique une technologie pratique5. On voit apparaître :
• des applications de création de contenu, permettant à l'auteur de connecter les
métadonnées (sujet, créateur, emplacement, langue, copyright, etc.) avec des
documents existants ou à créer, améliorant ainsi les fonctions de recherche,
• des outils de gestion de contenu permettant, notamment pour des sites Web
volumineux de bénéficier d'une gestion dynamique,
• des logiciels aidant à mettre en place des applications intégrant, au sein d'une
entreprise, les données et des modèles souples de publication,
• de multiples applications provenant de différentes sources favorisant la réutilisation de
données, en y ajoutant des moyens de mise en évidence et de partage d'archives et
différents modes de syndication de contenus comme OAI pour les archives et RSS
pour les contenus plus mouvants6.
Rappels généraux sur les procédures de normalisation informatique
L'ordinateur a une histoire
L’ordinateur est le produit d’une histoire complexe. Il n’a pas plus d’inventeur que la roue ou le
tour de potier. La prise en compte des processus qui ont conduit aux machines actuelles permet
de saisir ce qui ressort de l’essence de ces machines et ce qui ressort des idiosyncrasies dues
aux conjonctures de leur histoire concrète.
Les premiers automates mécaniques, les mécanismes créés par Archytas de Tarente, Philon de
Byzance ou Héron d’Alexandrie, datent de l'antiquité grecque. Au Moyen Age, les astrologues et
devins arabes font usage de la « zaï’rjat al ‘alam », sorte de machine à penser les événements.
4
5
6
Le Consortium World Wide Web (W3C) a été créé pour mener le Web à son plein potentiel en développant des protocoles
communs qui facilitent son évolution et assurent son interopérabilité. Pour plus d'informations consulter l'adresse :
http://www.w3.org/.
XML connaît une expansion beaucoup plus rapide que son ancêtre SGML, beaucoup plus complexe à mettre en œuvre.
Un marquage XML nommé RSS, le plus souvent abrégé en "Really Simple Syndication" (Syndication vraiment simple),
mais qui signifiait à l'origine "Rich Site Summary" (Sommaire de site enrichi) est utilisé de façon croissante pour syndiquer
des listes d'URL représentant des nouvelles tirées de sites Web d'information. Il s'agit d'une méthode de description
présentant de façon synthétique le contenu d'un site, et le plus souvent de ses actualités. L'outil de publication dynamique
utilisé pour alimenter un site Web génère automatiquement un fichier RSS, qui contient la description des actualités
récemment publiées. Ce fichier respecte l'une des deux syntaxes décrites par les standards RDF ou XML, selon la version
de RSS utilisée.
3
Gerbert d’Aurillac, Raymond Lulle et d’autres furent les importateurs de ces arts divinatoires en
Europe. L’idée de construire la pensée de manière déductive et presque mathématique, par un
système combinatoire, exercera une forte attraction sur des philosophes comme Leibniz. Dès la
fin du XIIIe siècle l'horlogerie se développe. L’horloge mécanique se substitue à dieu ou au
cosmos comme souverain ayant le pouvoir de dire le temps. L’horlogerie permettra la
mécanisation du calcul. Les composants du calcul mécanique existent dès le XVIIe siècle, ceux
du calcul électromécanique dès 1830. La réalisation d’un circuit bistable, le « flip-flop », autorise
le calcul électronique dès les années 1920.
Une technique moderne est toujours la conjonction d’un besoin social et d’un ensemble de
sciences et de techniques. Les besoins ont concerné la comptabilité et le classement des
marchands et des banquiers, la constitution de fichiers administratifs, et enfin les calculs des
savants au service des militaires. Les acquis scientifiques sont la numération de position munie
du zéro, le développement de la logique formelle et la mathématisation de la logique (Leibniz,
Boole, Frege), la naissance de l’algorithmique (Turing, Post, Church). En parallèle, il y a les
inventions techniques de savants (comme Pascal7 ou Leibniz) ou d’artisans (comme Vaucanson
ou Jacquard). L’ancêtre direct de la machine à écrire, le « literary piano » avec le fameux
QWERTY, date de 1867. La caisse enregistreuse (Patterson NCR) avec son petit rouleau de
papier, ses touches, ses chiffres affichables, véritable amorce système de traitement des
transactions, l'additionneuse imprimante (Burroughs), la « machine à recenser » (la tabulatrice
d'Hollerith) : tous ces systèmes apparaissent à la fin du 19ème siècle.
On admet que l'informatique est née, au cours de la deuxième guerre mondiale, avec la notion
de programme préenregistré due à von Neumann. A l’issue de la guerre, la première génération
d’ordinateurs donne aux physiciens les moyens de calculs nécessaires à la poursuite de leurs
recherches. En 1953, l’IBM 702 est la première machine commercialisée. Cette génération
d'ordinateurs se programme en langage machine. La deuxième génération voit l’apparition des
transistors et des premiers langages dits évolués, c’est-à-dire des langages intermédiaires entre
un langage formel et une langue naturelle (en général l’anglais)8. La troisième génération se
caractérise par l'utilisation de circuits intégrés et par un système d'exploitation gérant l’activité de
la machine, le partage des ressources entre de nombreux utilisateurs et l'ensemble des
périphériques d'entrée sortie. Les IBM 360 et 370 sont les grosses machines typiques de cette
génération. Les mini-ordinateurs, Unix9, la souris et les fenêtres multiples, la machine Alto et son
interface graphique préfigurent la génération suivante.
L’invention du microprocesseur débouche sur la création de micro-ordinateurs dont s’empare
une génération de jeunes autodidactes fanatiques maniant avec talent le langage d’assemblage,
mais aussi le fer à souder. L’Apple 2 sera l’archétype de ces machines. Viennent ensuite l'Atari
et surtout de l'Amiga, un ordinateur dont le système d'exploitation permettait de créer des petites
œuvres multimédias associant images et sons codés de façon à n’occuper qu’un minimum
d'espace sur des disques alors mille fois plus petits qu’aujourd’hui. Le P.C. d’IBM a rapidement
trouvé un marché comme outil professionnel. Sur le plan technique, cette machine est marquée
par un refus radical d’innover et des solutions rustiques, voire obsolètes. A la surprise de tous
les spécialistes, IBM choisit, pour des raisons financières, le plus médiocre des systèmes
d’exploitation alors disponible : MS-DOS. Le succès s’est construit sur l’image de marque de
"Big Blue" et sur l’ouverture de la machine qui convenait parfaitement aux jeunes hackers. Les
grosses entreprises du complexe militaro-industriel ont créé ces technologies sans en mesurer
7
8
9
En 1642 Pascal invente une calculatrice mécanique, la « pascaline ».
FORTRAN pour le calcul scientifique, COBOL pour la gestion et LISP pour les traitements symboliques. On peut relever
que FORTRAN et COBOL, qui n’ont aucune prétention à traiter le langage naturel, sont des constructions empiriques, alors
que LISP, qui peut y prétendre, a un solide fondement formel, le « Lambda calcul ».
Unix propose de nombreux outils de manipulation des textes. Par exemple, un filtre est un utilitaire conçu pour accepter
des données d'un seul fichier d'entrée, les traiter et envoyer les résultats à un seul fichier de sortie. On emploie un tube
pour transmettre directement la sortie standard d'une commande à une autre. Cela permet de connecter en séquence
n'importe quel nombre de fonctions pour former ce que l'on appelle un pipeline. L'utilitaire tee permet de conserver un fichier
intermédiaire en vue d'un traitement ultérieur. La commande sort permet de trier un fichier. Le processeur de texte awk est
une commande très puissante, c'est un langage de programmation a elle tout seule qui permet une recherche de chaînes
et l'exécution d'actions sur les lignes sélectionnées. Elle est utile pour récupérer de l'information, générer des rapports,
transformer des données entre autres. Une grande partie de la syntaxe a été empruntée au langage c. Un programme awk
possède la structure suivante: critère de sélection d'une chaîne {action}, quand il n'y a pas de critère c'est que l'action
s'applique à toutes les lignes du fichier.
4
vraiment les enjeux. Elles allaient déstabiliser leur puissance. Qui, il y a 25 ans, a vu que ce
succès serait celui de Microsoft et de l'approche « grand public » ?
Des machines interactives et conviviales, mais qui changent de nature
Pour élargir la clientèle potentielle, il fallait rendre les machines plus conviviales, c’est-à-dire plus
proche de la culture de la clientèle visée. Une bataille commerciale intense s'est déroulée, dans
les années 80, pour conquérir le poste de travail de la secrétaire et, plus largement, des
employés de bureau, marché sans commune mesure avec celui détenu alors par les ordinateurs
et micro-ordinateurs « scientifiques ». La bataille opposait, jusqu’au sein de sociétés comme
IBM, les systèmes de traitement de texte, évolutions plus ou moins radicales des machines à
écrire, à des systèmes dérivant des ordinateurs. A la fin des années 70, pour conquérir le
marché de la bureautique, et ne pas rebuter des employés de bureaux, très éloignés des
problèmes de l’édition et du balisage, les systèmes de traitements de texte ont adopté le fameux
paradigme “wysiwyg” (what you see is what you get), cachant à l’utilisateur des structures par
ailleurs médiocres. En parallèle se développent des systèmes, parlant le langage du typographe,
orientés vers l’édition de documents plus complexes (livres, journaux, magazines) dans lesquels
la saisie de textes n’est que marginale car ils informatisent la composition et l’élaboration de
maquettes. L’interface devait être conviviale pour l’employé de bureau. Le paradigme du bureau,
apparu à la fin des années 70 (la machine Alto chez Xerox) a été commercialisé par Apple (la
machine Lisa) dans les années 80 et a contaminé toute l’informatique. Cette standardisation
culturelle a commencé par une série de procès au nom de la propriété intellectuelle (Apple
contre Hewlett-Packard par exemple) et s’est poursuivie par une victoire écrasante de Microsoft
et de son Windows. Ce paradigme, justifié pour un ordinateur de bureau contenant quelques
dizaines de mégaoctets de données, est devenu naturel, une sorte d’immanence, comme si
l’employé de bureau était le parfait archétype de l’homme contemporain10. Face à un quasimonopole, renforcé par le poids d’outils comme le navigateur Internet Explorer, la suite de
bureautique Office, l’outil multimédia Windows Media Player, il ne reste guère que la
communauté du logiciel libre.
Jusqu’aux années 70, il était naturel de mettre en avant le caractère binaire et fortement adossé
à la logique mathématique des machines. A chaque génération, on faisait table rase, et
l’espérance de vie d’un morceau de code ne dépassait guère 10 ans. Les machines étaient peu
conviviales mais simples, un individu ou un petit nombre d’individus pouvaient prétendre les
connaître complètement. Les utilisateurs, un petit nombre d’initiés, pouvaient, à condition de
respecter les règles du jeu - pratiquement celles de la logique booléenne - presque tout
bidouiller.
La convivialité des machines ou ce que l’on nomme convivialité a un prix. Les programmes
deviennent de plus en plus lourds. Dans les années 80, une barrière de complexité a été
franchie. Des théoriciens ont annoncé (avec des arguments fondés) l’effondrement prochain des
programmes sous le poids de leur propre complexité. Le problème s’est résolu par le passage à
une gestion « évolutionniste » de la complexité. Tout nouveau système tend à enrober le ou les
systèmes précédents. La complexité augmente beaucoup plus vite que les fonctionnalités du
logiciel, mais cette évolution est masquée par l’accroissement énorme des performances du
matériel. La connaissance complète de la machine n’est plus à la portée même d’un large
collectif d’individus. La logique formelle est d’un piètre recours lorsqu'un ordinateur personnel
« plante ». On a quitté un univers logiciste pour un monde qui peut évoquer le comportement du
vivant (par exemple, les conséquences du passage à l’an 2000 n’étaient pas entièrement
prévisibles). On en arrive à ce que j’appelle le paradigme du chien : « Si votre comportement est
adéquat, adéquat ne se confondant pas avec rationnel, vous obtiendrez de votre
chien/ordinateur en gros ce que vous en attendez. Sinon … » Une certaine connaissance de la
psychologie du chien est indispensable, mais la connaissance des circuits de synapses du
chien, n’est ni possible, ni pertinente pour diriger son éducation.
10
Les notions de bureau et de fichiers hiérarchisés se sont imposées dans le monde de l'informatique, c'est un fait mais il
n'était pas inéluctable. Ted Nelson fondateur de Xanadu est un des grands critiques de cette approche.
http://www.xanadu.com.au/ted/
5
La structure des ordinateurs
Un ordinateur est un système formel automatique interprété, une machine à manipuler des
symboles. Il est capable d'exécuter rapidement des calculs et des opérations logiques
complexes et peut manipuler rapidement des grandes masses de données. Dans une
architecture classique (von Neumann), un ordinateur se compose fondamentalement d'un
processeur, de mémoires et d'un bus de données. Le processeur exécute en séquence les
instructions stockées en mémoire, c’est à dire des opérations arithmétiques ou logiques sur des
données elles aussi stockées en mémoire. Il transfère le commandement à une nouvelle section
du programme en indiquant le nouvel emplacement mémoire à partir duquel le programme doit
identifier et exécuter la prochaine instruction. Il déclenche les opérations de transfert de la
mémoire principale vers les périphériques. Instructions et autres données stockées en mémoire
sont accessibles au processeur et à certains périphériques d'une manière plus ou moins rigide.
Les données et les signaux de contrôle circulent entre la mémoire, le processeur et la périphérie,
empruntant un chemin physique que l'on appelle bus. Les ordinateurs modernes peuvent avoir
de multiples processeurs, mémoires et bus, qui coopèrent pour leur donner une plus grande
puissance de traitement.
Bus rapide
Contrôleur
et cache
instructions
Cache
données
Mémoire
Système
Unité centrale
et gestion de
la mémoire
Bus banalisé
Figure 1 : architecture d’un ordinateur
Au cœur de cette architecture il y a une mémoire accessible en mode relatif (ce qui impose
l'organisation de la mémoire selon un principe régulier) et en mode absolu (la position dans la
mémoire est désignée par un code unique). La mémoire, mais aussi ses adresses, sont donc
organisées en mots. Une machine de von Neumann joue sur des ensembles de marques codant
des données, des instructions et des adresses. La mémoire principale de la machine contient
non seulement des marques sur lesquelles on agit (les données initiales, les valeurs
intermédiaires et les résultats), mais aussi les programmes et sous-programmes que la machine
exécute. Une telle machine a la capacité de lire écrire et utiliser des adresses.
Pour faciliter la rédaction de programmes, on a créé des langages évolués qui sont des
machines virtuelles. On a ensuite allégé la charge des programmeurs et amélioré la portabilité
des programmes en éloignant les applications de l'architecture concrète des machines par le
recours à un système d'exploitation.
D'un point de vue purement formel, il s'agit bien d'un jeu sur des marques codées. Un code
binaire est rapidement illisible par des humains. Pour que ces codes puissent être écrits et lus
par eux, même dans les niveaux les plus bas de la machine, on recourt à des représentations
mnémoniques des marques. Or, pour des raisons historiques ces représentations exploitent
exclusivement ou presque l'alphabet latin et même un alphabet latin réduit, sans signe
6
diacritique, car l'anglais (langue native de tous les systèmes informatiques commercialisés) n'en
n'utilise pas.
Les nombres sont l'objet de codages différents selon qu'ils sont considérés comme des chaînes
de caractère ou comme des nombres traités par le processeur arithmétique. Ce sont les
codages des adresses et des nombres qui permettent de caractériser les machines 16, 32 ou 64
bits.
L’ordinateur est une machine construite selon une architecture résultant de choix situés dans
une histoire. Aujourd’hui, ces machines traitent, par l’intermédiaire de programmes prédéfinis,
des données organisées en fichiers. Séparé des procédures qui connaissent ses structures et
peuvent les examiner, un fichier n’est qu’une suite arbitraire de bits. Tout fichier doit donc être lié
à une ou des procédures aptes à le lire et/ou à l’écrire. C’est là que se noue la question de
l’interopérabilité.
Système d’exploitation
Décodage
clavier
Codage
caractère
Matériel
Application
Editeur de texte
Décodage
caractère
Police
d’affichage
Figure 2 : affichage d’un caractère
Le simple affichage d'un caractère résultant de la pression d'une touche du clavier implique une
requête d'interruption générée par le clavier, le décodage du scancode11 du caractère, sa mise
en mémoire, la lecture de cette mémoire par le processus d'affichage et le recours à une police
de caractères. Cela met en œuvre : le matériel (clavier, processeur, mémoire, écran), le système
d'exploitation et une application (éditeur, traitement de texte, etc.) avec tous les problèmes que
cela implique du point de vue de l'interopérabilité.
Le problème de l'interopérabilité
L'absence de standard et de norme pose des problèmes de plusieurs ordres : la récupération
des données, mais aussi des programmes d'une génération d'ordinateur à l'autre et d'une famille
d'ordinateur à l'autre c'est le problème de la portabilité d'une part, et d'autre part la possibilité de
travailler sur le même ensemble de données avec différentes application sur une même machine
puis sur un ensemble hétérogène de machine c'est le problème de l'interopérabilité, c'est à dire
de la capacité de deux systèmes à dialoguer et à interagir. L’interopérabilité technique permet à
des systèmes de communiquer grâce à des protocoles et langages similaires ou pour lesquels il
existe une procédure d’équivalence. L’interopérabilité sémantique est possible lorsque les
métadonnées sont similaires ou comprennent des liens d’équivalences car elles représentent les
mêmes concepts. L’interopérabilité syntaxique suppose que les métadonnées ont une syntaxe
similaire ou qu’une procédure d’équivalence existe.
Jusqu'en 1964, IBM commercialisait 17 types de processeurs différents, éparpillés en sept
séries incompatibles entre elles. En 1964, IBM annonce la création d'une seule famille
11
Si l'allure générale des claviers est relativement standardisée (96 touches ou moins), la position de chaque lettre ou signe
dépend de normes nationales (qwerty, azerty, ...). C'est le système d'exploitation qui normalement gère la norme du clavier
bien qu'il soit possible de trouver des traitements de texte assurant eux-mêmes cette fonction.
7
d'ordinateurs, (le système 360) composée de cinq processeurs absolument compatibles entre
eux, d'une famille de périphériques, tous exploitables avec n'importe lequel des processeurs. Le
concept de « générations » d'ordinateurs (un coup de pub d'IBM) était né. Des ordinateurs d'une
même firme, de puissances variées devenaient compatibles entre-eux. Dans les années 60, les
ordinateurs ont été reliés à des machines dérivées du télex, les téléimprimeurs (ou teletype
(TTY)) qui pouvaient communiquer avec eux, de façon bidirectionnelle, à la vitesse de deux
caractères par seconde. C’est ce mode de communication, limité à l’échange de chaînes de
caractères non accentués, que l’on a nommé, mode interactif en opposition au mode traitement
par lots. En dehors d'IBM12, le codage ASCII se généralise, en particulier au niveau des
périphériques d'entrée / sortie. La norme ASCCI est complétée par des standards de fait comme
le TTY ou le terminal VT10013 de DEC.
C'est à la portabilité que s'attache la normalisation des langages de programmation. Cela ne
suffit pas à régler le problème car, avec le développement des environnements, les appels des
programmes à des fonctions du système d'exploitation sont de plus en nombreux, ce qui pose
la question de la compatibilité des systèmes d'exploitation. La génération suivante de normes
touchera les systèmes d'exploitation (Posix de l'IEE pour la famille Unix) et les systèmes
graphiques (GKS, STEP, etc...). Les normes restent faibles, les standards de fait dominent, ainsi
que les « sur ensembles de sous ensembles de normes ». En bref, si elles sont atténuées, les
difficultés restent la règle, en dehors des monopoles de fait.
La tour de Babel informatique est intolérable dès le début des années 80. Le département
américain de la défense (DOD) doit impérativement rendre interopérables ses systèmes
informatiques ; les grandes compagnies veulent rompre leur dépendance de géants comme
IBM ; les grandes écoles comme le MIT constatent la confiscation des ordinateurs par une
minorité d’utilisateurs. Tous sont confrontés au développement sauvage de l’informatique
personnelle qui concurrence les féodalités installées. Les réseaux « clients / serveurs » et
l’interface « Xwindows » sont la réponse proposée par le MIT, avec le soutien du DOD et des
plus gros fabricants d’ordinateurs (IBM, DEC, etc.). Lors de la conférence « Siggraph » de 1986,
qui devait être la grande messe d’« Xwindows », Bill Gates est venu affirmer que l’interface
utilisateur du futur serait un produit Microsoft. Cette déclaration a fait ricaner l’écrasante majorité
du public présent. Les spécialistes de l’informatique avaient, pour les produits de Microsoft, la
même estime que la critique littéraire pour les romans de G. de Villier.
En quelques décennies, les nouvelles technologies on fait muter l'archivage de supports,
spécifiques à l’écrit à l’image et au son, stables, peu volumineux et directement accessibles à
des milliards de données banalisées, éminemment volatiles et tributaires de machines pour les
lire. Avec le numérique, l’image devient texte, de trace ou empreinte, elle devient compte rendu,
son lien à un référent réel facultatif14. Le code est décomposé jusqu’à un niveau où il ne porte
plus aucun ancrage signifiant dans le réel, il n’est que conventions. Les activités humaines se
traduisent par un texte codant les procédures d’actualisation d’objets virtuels. Le code lui-même
s’inscrit sur une « surface » à la fois banalisée et éclatée car dispersée dans un ensemble de
systèmes informatiques. Les interdépendances croissantes tendent à étendre la surface
d’inscription au réseau mondial des ordinateurs. Dans ce monde, la conservation de l’information
ne dépend plus des supports mais de la pérennité des codes. Empiriquement, dans les
conditions présentes, tout ensemble de données stocké hors ligne pendant plus de 2 ou 3 ans
peut être considéré comme perdu, d’où le rôle central de standards et normes. L’usage des
archives change, de patrimoine elles deviennent matière première valorisée de productions
futures. Les fonds se transforment pour devenir de gigantesques bases de données dont le
contenu est totalement indexé de façon à devenir la base de productions nouvelles. L’étude des
conditions de spécification puis de normalisation de cet espace commun est une des clefs
fondamentales pour comprendre le devenir des NTIC. La convergence des médias techniques
12
13
14
Le monde IBM restait un monde à part, ordinateurs et périphériques IBM utilisaient des codes qui leur étaient propres. Cela
a ouvert la porte à une stratégie des responsables informatiques qui ne souhaitaient pas quitter IBM : changer
alternativement l'unité centrale et la périphérie ce qui interdisait de facto tout changement de fournisseur.
Terme que l'on retrouve, ainsi que TTY quand on se promène dans les couches profondes de Linux comme par exemple
xterm.
PORCHET Michel, La production industrielle de l’image, critique de l’image de synthèse, Paris, Esthétiques L’Harmattan
2002.
8
sur une seule technologie, un code binaire dont support et localisation se délitent, les nécessités
d’intercompatibilité et d’interopérabilité imposent standardisation et normalisation. Les normes
émergentes sont probablement l’expression la plus claire des besoins futurs des industries
culturelles. Les NTIC touchent l’image et le son (la famille MPEG vise la réutilisation de
séquences, le partage de cette réutilisation et la rétribution de toute utilisation). La globalisation
de l’écriture (Unicode, ISO/IEC10646), le modèle de l’information structurée (SGML, TEI, HTML,
XML, HyTime, ISO-10744-1992) sont sources d’une modification radicale du rapport aux
productions culturelles.
Les machines en réseau
L'internet est un réseau de réseaux, totalement morcelé et décentralisé, interconnectant des
réseaux mis en place par les fournisseurs de services ou les grandes organisations disposant de
leur propre infrastructure. A la fin des années 60, en pleine paranoïa de la guerre froide, le
Ministère américain de la Défense (DOD) voulait, sur tout le territoire américain, un réseau de
transmission d'informations capable de se maintenir même en cas d'attaque nucléaire. Cela
explique la topologie à centres multiples, l'extrême découpage des données en paquets
indépendants suivant chacun leur propre trajet, qui rendent l’internet si insaisissable et si
anonyme. L’internet n’est pas aussi récent qu’on le croit souvent. Le courrier électronique est né
en 1975, les forums d'échange (newsgroups) en 1979, le système des noms de domaines est
mis en place en 1984, la première conférence sur l'interopérabilité TCP/IP15 se tient en 1987. Au
début des années 1990, apparaissent les outils de navigation d’origine universitaire, "WAIS" et
"Gopher", ainsi qu’au CERN, le "World Wide Web" conçu par Tim Berners-Lee pour aider les
physiciens des hautes énergies à collaborer à travers l'Europe.
Sur l'internet, idées, recherches, prototypages, services, applications et usages s'entremêlent,
accélérant la mise au point des produits et leur adoption par les utilisateurs. Les mécanismes de
diffusion de nouvelles applications ont été mis en place dès l'origine et font partie de la culture
du réseau. Le paradigme du développement de l'internet (que les pionniers ont décrit par la
devise : "rough consensus and running code") favorise l'innovation par rapport à la préservation
des positions acquises. Le financement fédéral américain a permis la naissance puis le
déploiement de l'internet dans les milieux académiques, créant une première infrastructure et,
surtout, une génération de compétences. Le développement et l'usage de logiciels libres ont
présidé à la mise au point puis au déploiement de nouvelles applications sur l'internet. C’est en
1991 seulement que la National Science Foundation (NFS) lève les restrictions sur l'utilisation
commerciale de l'internet. Le Web connaît un développement explosif. Le secteur marchand
s’empare de l’internet. Les filières de la communication comprennent trois étages de mieux en
mieux intégrés : les contenus / les réseaux pour les transports / le matériel, mais avec une
hégémonie croissante du premier terme.
Le W3C tente de dépasser les problèmes induits par la croissance du Web en proposant le Web
sémantique dont le but proclamé est la transformation de la masse ingérable des pages du Web
en une gigantesque base de données, où tout est écrit en langage structuré recourant à des
métadonnées. Les premiers résultats de ce travail sont le langage XML et RDF (Resource
Description Framework qui permet de définir des métadonnées)16.
L'irruption du grand public
Le Web a fait de l'ordinateur un produit grand public, changeant ainsi de façon radicale les
conditions de la normalisation et de la standardisation. L’internet est devenu un véritable média,
destiné à ce public, proposant informations, programmes audiovisuels et services, permettant
d’acheter et de communiquer en ligne. La garantie d’une utilisation sécurisée est devenue
indispensable, notamment eu égard au contenu accessible.
15
16
Le protocole de communication TCP/IP (Transfert Control Protocol / Internet Protocol) permet aux ordinateurs du monde
entier, du moment qu'ils sont connectés, d'échanger des données.
Les métadonnées dont il est question ici, sont certes des données à propos de données mais, il faut souligner le caractère
très “ administratif ” de celles qui sont retenues pour décrire de façon explicite et standardisées des informations
concernant auteurs et éditeurs d’un document, histoire du document et appartenance d’un texte à telle ou telle partie d’un
document (titres, corps du texte, notes, index, etc.), …
9
Habituellement, on décrit l'histoire des ordinateurs en termes de générations de systèmes. Il
serait intéressant de croiser cette histoire avec celle des utilisateurs des machines. Devenus
produits industriels, les ordinateurs ont, dans un premier temps, été pris en charge par des
équipes professionnelles (les services informatiques) toutes puissantes, les utilisateurs finaux
n'avaient qu'à se plier aux procédures mises en place (c'était typiquement la culture des gros
systèmes IBM). Les difficultés de portage justifiaient un renforcement permanent de services
informatiques tout prêt donc à les considérer comme immanentes. Face à cela, physiciens et
ingénieurs ont voulu avoir la maîtrise de leurs moyens de calculs. Contre les services
informatiques des universités et des grandes entreprises, ils se sont précipités sur les miniordinateurs. Les machines de DEC ont été les plus marquantes de cette autonomie17. Cette
population voulait bénéficier des performances de la dernière génération de machines mais sans
passer son temps à porter programmes et données. Elle a poussé à la standardisation, sans
forcément exiger le recours à des normes. L'irruption du grand public et son incompétence a
considérablement renforcé normes et monopoles de fait.
A propos de l'Open source
Le développement et l'usage de logiciels libres ont présidé à la mise au point puis au
déploiement de nouvelles applications sur l'internet. C’est dans le monde, largement diffusés
dans l’université, d’Unix qu’est né le concept de logiciel libre (GNU18, Linux19, …). L’émergence
de l’internet et la documentation largement diffusée ont permis de décentraliser au maximum la
production du code. La capacité offerte à tous de lire les programmes sources a mis en avant
l’élégance du code. On a assisté alors à l’émergence d’une grande “ micro créativité ”, mais qui
n’a pas, au moins à ce jour, débouché sur la création de concepts nouveaux. Sur ce plan, Linux
doit encore bien plus que l’essentiel aux créateurs d’Unix. Cette logique, qui se poursuit
d’ailleurs dans les applications, évite les phases coûteuses de définition fonctionnelle des
applications et d’élaboration de la documentation « utilisateur ». Ce n'est pas ici le lieu de
développer une description du monde de l'Open source. Pour plus d'informations on peut se
référer au site de l’Open source20 et sur les licences on peut consulter le « Guide de choix et
d'usage des licences de logiciels libres pour les administrations21 ». Sans reprendre en détail la
définition d'"Open source" par l'Open Source Initiative (OSI), il est possible de de dire qu’un
logiciel est Open source22 si son code source est :
• disponible,
• modifiable,
• redistribuable.
Les logiciels Open source sont de grande qualité. Ils sont plus stables et respectent les
standards. C'est pourquoi certains des plus grands éditeurs (Sun, IBM, Microsoft, HP,…)
s’appuient sur de tels logiciels pour développer leur gamme de produits. Ces avantages ont
cependant un prix, la documentation associée aux projets Open source est souvent très
succincte et il est parfois difficile pour un débutant d'installer ces logiciels et de les utiliser. C’est
pourquoi le marché de l’Open source n’existe qu’avec l'appui de sociétés de services permettant
de faciliter l’utilisation de ces logiciels. La taille de la communauté est telle que seuls les projets
les plus valides techniquement survivent, les autres sont mis en sommeil, disparaissent ou
fusionnent.
Le code source des logiciels Open source étant disponible, un développeur peut comprendre
leur fonctionnement, corriger des bogues, ou encore procéder à des évolutions. Si ces
évolutions ne sont pas acceptées par le mainteneur du projet, il est possible de créer un projet
concurrent, un genre d'embranchement que l'on nomme fork. Chaque développeur de la
17
18
19
20
21
22
Unix est né sur ces machines, la notion de terminal banalisé (suppression du pupitre de contrôle) aussi.
http://www.gnu.org/
http://www.linux-france.org/
http://www.opensource.org
http://www.atica.pm.gouv.fr/pages/documents/fiche.php?id=1450&id_chapitre=8&id_theme=55&letype=0
On utilisera également le terme logiciel libre comme synonyme, bien que les deux termes ne soient pas forcément toujours
équivalents.
10
communauté décide alors de participer à l'un ou l'autre ou aux 2 projets à la fois. L’histoire de
l’Open source montre que les forks sont très rares.
Le point commun de la plupart des projets Open source est la portabilité :
• Java est un langage portable, ce qui permet de faire disparaître le coût du portage d’une
application d’un OS à un autre.
• Linux est un système « portable » qui permet de limiter les coûts de portage d’une application
native d’une plate-forme à une autre.
• XML assure la portabilité des données
• les services Web assurent un accès portable aux applications
L’offre logicielle XML en Open source est dense. Le site de Robin Cover donne une vision
générale de l’application d’XML23. Deux autres liens donnent respectivement l’utilisation d’XML
dans des applications d’administration électronique et dans le domaine de l’enseignement24 :
XML, point de convergence de différentes problématiques
Gestion documentaire, documentation industrielle et nomenclatures
La documentation industrielle (en avionique, dans l’armement, mais aussi en informatique)
atteint souvent des volumes énormes. Ces documents sont souvent structurés à partir de
nomenclatures qui concernent aussi bien les produits physiques que les documents les
décrivant. La nomenclature d'une machine est la liste des pièces, ou ensembles de pièces, qui
la composent. Chaque pièce ou ensemble, du commerce ou non, est désignée par son numéro
catalogue ou par le numéro du document qui le décrit, son nom, éventuellement d'autres
informations telles que la quantité, la matière, le traitement thermique, etc. Les nomenclatures
interviennent dans toutes les activités de l'entreprise elles permettent de structurer les
documents produits dans l'étude. Leur forme de base est celle de listes organisées selon
différents critères (liste de pièces du commerce, de rechange, d'usine,..). La modularisation du
produit (ensembles et sous-ensembles) leur donne une structure arborescente, l'existence de
variantes peut faire apparaître des boucles et la structure n'est plus un arbre. C'est en fin de
projet (archivage) que les nomenclatures systématiques sont établies. Ce travail, très ennuyeux
doit être automatisé au maximum. Elles sont initialement établies par le bureau d'étude mais leur
vision et leurs structures externes peuvent dépendre fortement du contexte dans lequel on les
traite.
La forme de base des nomenclatures est celle de listes organisées selon différents critères.
• La nomenclature générale est la liste des plans généraux (schémas hydrauliques,
électriques...) et des ensembles de l'étude. Ces plans et ensembles sont désignés par
le numéro d'inventaire du document qui les décrit et par leur nom.
• La nomenclature correspondant à un dessin d'ensemble est la liste des pièces
(pouvant être des ensembles ou des sous-ensembles) qui composent l'ensemble
concerné.
• La liste des pièces du commerce.
• La liste des pièces d'usure.
• La liste des pièces de rechange ...
Ce genre d’approche est à la base des systèmes de gestion de la documentation technique,
systèmes qui ont joué un rôle important dans le développement de SGML et des différentes
normes qui en sont la descendance. Le regroupement des expertises des bibliothécaires et des
documentalistes industriels est rendu inévitable par la fusion des technologies utilisées. Le fait
qu’il se place sous l'égide du JTC1 (Joint Technical Committee n° 1 (ISO, CEI)) est source
d’interrogations justifiées.
23
24
http://xml.coverpages.org/xmlApplications.html
http://xml.coverpages.org/gov-apps.html et http://xml.coverpages.org/acadapps.html .
Autre site à consulter, en anglais, les logiciels XML : http://freshmeat.net/articles/view/484/
11
Les métadonnées, SGML et ses descendances
Le terme « meta » vient du grec et dénote quelque chose de nature plus élevée ou plus
fondamentale. Les métadonnées sont des données à propos d'autres données décrivant une
ressource d'information25. Elles peuvent répondre à de nombreux objectifs : identification d'une
ressource évaluation de pertinence et garder la trace des caractéristiques d'une ressource
(entretien ou d'utilisation à long terme). Une notice contenant des métadonnées est constituée
d'un ensemble d'attributs, ou éléments, nécessaires pour décrire la ressource en question.
L'association de métadonnées descriptives standardisées avec des objets en réseau offre un
potentiel d'amélioration substantiel des possibilités de découverte de ressources : en permettant
des recherches basées sur des champs (auteur, titre, …), en permettant l'indexation d'objets
non-textuels et en permettant l'accès à un contenu de substitution, ce qui est différent de l'accès
au contenu de la ressource elle-même. Par exemple, un système commun de métadonnées
dans les bibliothèques - le catalogue de bibliothèque - contient un ensemble de notices de
métadonnées comprenant des éléments spécifiques pour décrire un livre ou tout autre document
que l'on trouve en bibliothèque: auteur, titre, date de création ou de publication, sujet et cote,
permettant de le retrouver sur les tablettes.
Le lien entre une notice de métadonnées et la ressource qu'elle décrit peut être fait de deux
façons :
• les éléments peuvent être contenus dans une notice séparée du document, comme
c'est le cas pour une notice dans un catalogue de bibliothèque
• les métadonnées peuvent être intégrées dans la ressource elle-même
Les données de catalogage imprimées au verso des pages titres; ou l'en-tête (Header) d'un
texte électronique sont des exemples de métadonnées intégrées et transportées avec la
ressource. Les standards usuels de métadonnées, y compris le Dublin Core, ne prescrivent ni
l'un ni l'autre des types de liens; la décision doit être prise en tenant compte des caractéristiques
et des besoins de chaque implantation particulière.
La surabondance d'information, résultant de vastes quantités de données numériques non
différenciées disponibles en ligne, explique cet intérêt soudain pour les métadonnées.
Quiconque a déjà tenté de trouver de l'information en ligne en utilisant un des nombreux et
populaires moteurs de recherche du Web a probablement vécu la frustration d'obtenir des
centaines, si ce n'est des milliers, de résultats sans grande possibilité de raffiner ou de faire une
recherche plus précise. L'adoption à grande échelle de normes descriptives et de nouvelles
pratiques pour les ressources électroniques va améliorer la possibilité de trouver des ressources
pertinentes dans Internet :
« L'association de métadonnées descriptives standardisées avec des objets en réseau
offre un potentiel d'amélioration substantiel des possibilités de découverte de ressources:
en permettant des recherches basées sur des champs (e.g., auteur, titre), en permettant
l'indexation d'objets non-textuels et en permettant l'accès à un contenu de substitution,
ce qui est différent de l'accès au contenu de la ressource elle même »26
Conçu dans les années 60, 70, le Standard Generalized Markup Language (SGML ISO
8879:1986) est un métalangage utilisé pour définir des langages de balises et orienté vers la
gestion documentaires (en particulier les besoins de l'avionique, des systèmes d'armes et de
informatique. Un langage de balise utilisant SGML a un vocabulaire spécifique (labels des
éléments et attributs) et une syntaxe déclarée (grammaire définissant les hiérarchies, etc...).
SGML a donné naissance à XML. En fonction des perspectives et exigences, les différences
entre SGML et XML sont mineures ou immenses. SGML est plus adaptable, plus flexible et plus
puissant mais c'est au prix de difficultés considérables d'implémentation, qui ont
considérablement freiné son développement. L'intérêt s'est massivement fixé sur XML.
25
26
On parle ici de ressource d'information plutôt que de document car les métadonnées peuvent décrire des ensembles plus
petits qu'un document, par exemple, des images, ou des fichiers sonores, à l'intérieur d'un document
S. Weibel, and C. Lagoze: An element set to support resource discovery. International Journal on Digital Libraries 1 1997.
12
Introduction à la syntaxe XML
En XML, il n'existe pas de balise prédéfinie, elles sont définies en mettant l'accent sur la
signification des données. Les fichiers XML peuvent être très simples. La comparaison d'un
fichier XML avec des fichiers textes structurés par des tabulations, lisibles et interprétables par
l'homme ainsi que faciles à importer dans des traitements de texte, des bases de données et
des tableurs est pertinente. Une fois importés, leur structure simple rend leur contenu facile à
manipuler. Les textes tabulés sont indépendants des systèmes d'exploitation (à condition de
surmonter le problème des différences entre les retour-chariots des machines Windows, Mac ou
Unix). Prenons l'exemple :
Cours
Programmation 1
Introduction à C++
Standards graphiques
La famille MPEG
Enseignant
Dupond
Dubois
Durand
Dupont
Durée (modules)
12
12
9
15
Certificat
Non
Non
Oui
Oui
La signification de chacune des valeurs délimitée n'est pas explicitée. Par exemple, il n'est
évident que la première ligne donne la signification des termes de la colonne que si la forme
« tableau » fait partie de la culture du lecteur. De plus un simple changement de police peut
détruire la structure apparente.
Cours
Enseignant Durée (modules)
Programmation 1
Dupond
Non
Introduction à C++
Dubois
Non
Standards graphiques Durand
Oui
La famille MPEG
Dupont
Indexation de l'imageDutreil
Oui
Certificat
12
12
9
15
Oui
9
De plus, les fichiers délimités par des tabulations peuvent seulement représenter une structure
de données simple, une structure de données analogue à un simple canevas de lignes et de
colonnes. Il n'y a aucun moyen simple, standardisé, de représenter les données de façon
hiérarchisée en format XML . Le tableau précédent devient :
<?xml version="1.0" encoding="ISO-8859"?>
<formation>
<cours type="initiation">
<intitulé>Programmation 1</intitulé>
<enseignant >Dupond</enseignant >
<durée>12</durée>
<certificat>Non</certificat>
</cours>
<cours type="initiation">
<intitulé>Introduction à C++</intitulé>
<enseignant >Dubois</enseignant >
<durée>12</durée>
<certificat>Non</certificat>
</cours>
<cours type="professionnalisant">
<intitulé>Standards graphiques</intitulé>
<enseignant >Durand</enseignant >
<durée>9</durée>
<certificat>Oui</certificat>
13
</cours>
<cours type="professionnalisant">
<intitulé>La famille MPEG</intitulé>
<enseignant >Dupont</enseignant >
<durée>15</durée>
<certificat>Oui</certificat>
</cours>
<cours type="professionnalisant">
<intitulé>Indexation de l'image</intitulé>
<enseignant >Dutreil </enseignant >
<durée>9</durée>
<certificat>Non</certificat>
</cours>
</formation>
Ce document XML est bien-formé, il a une seule racine (formation), 5 éléments (cours), 1 attribut
associé à <cours> (type) et la balise cours a 4 éléments (cours, enseignant, durée, certificat). Les
documents XML commencent par une ligne &?xml (...)> qui précise la version d'XML utilisée
grâce à l'attribut obligatoire version. Elle permet également de préciser le type d'encodage utilisé
(ici l'UTF827). Il faut relever que, faute d'une DTD, le fichier ci-dessus n'est pas encore
exploitable. Un fichier XML représente syntaxiquement un arbre, l'arbre correspondant à ce
fichier est le suivant :
Formation
Progr1
Initiation
Index Image
Non
12
Dupond
9
Dutreil
profession
Oui
Intro C++
MPEG
Initiation
Dubois
12
Non
profession
Dupont
15
Oui
St.Graph
profession
Durand
9
Oui
Figure 3 : un graphe arborescent
Un document XML bien-formé est un document XML qui respecte certaines règles simples :
• le documents XML a un et un seul élément racine,
• les noms des éléments sont sensibles à la casse,
• les éléments doivent être fermés,
• les éléments doivent être correctement emboîtés,
27
On trouve souvent l'ISO-8859-, par défaut, l'encodage est supposé être de l'unicode UTF-8. Il faut noter que le choix de
l'encodage est important. Si une unification de tous les composants du logiciel (système, compilateurs, éditeurs,
affichages, en unicode est souhaitable, elle n'est pas forcément facile à mettre en place. Je persiste à n'utiliser que les
lettres minuscules de l'ASCII de base et les chiffres dans les noms de fichiers et je continue a remplacer une espace par
''_''.
14
les attributs d'éléments doivent têtre entre guillemets
• il n'y a que cinq entités définies par défaut (<, >, &, ", et ')
•
Les caractères < et & ne peuvent être utilisés tels quels ni au sein d'un texte ni même en tant
que valeur d'un attribut. Pour afficher le caractère & (respectivement < / > / ‘ / ") tapez &amp;
(respectivement &lt; / &gt; / &apos; /&quot;). Pour indiquer une valeur d'attribut contenant des
guillemets, alors qu'elle est délimitée par des guillemets, on utilise la notation &quot;. Il en est de
même pour une valeur d'attribut contenant des apostrophes et délimitée par des apostrophes,
on utilise alors la notation &apos;28.
Les noms des balises doivent commencer par une lettre ou "_", les autres caractères peuvent
être des chiffres, des lettres, "_", "." ou "-", ils ne doivent pas commencer par XML. Par
convention, les balises sont en minuscules. Quand un élément est vide, les balises peuvent être
simplifiées <balise></balise> est identique à <balise/>
Les valeurs des attributs doivent être précisées soit entre guillemets " soit entre apostrophes '.
Une valeur précisée entre apostrophes peut contenir des guillemets, une valeur précisée entre
guillemets peut contenir des apostrophes.
Il est aussi possible de préciser à l'analyseur XML de ne pas interpréter une partie du texte en
précédant cette partie de <![CDATA[ et en fermant la balise par ]]>.
Il est possible d'inclure des commentaires dans un document XML. Le début de la section de
commentaire est précisée par <!-- et la fin par --> Un bloc de commentaire ne peut contenir --
Gérer l'affichage d'XML avec les feuilles de style
Le fichier XML décrit précédemment ne définit pas comment sera affiché ce plan de formation.
En associant un fichier XML à une feuille de style en cascade (Cascading Style Sheets – CSS),
il est possible, pour un navigateur, d'afficher le contenu du document XML sous une forme
esthétiquement satisfaisante.
Les CSS se composent de trois parties : la mise en page, la typographie, et la couleur. Les
fichiers CSS sont constitués de « sélecteurs » et « déclarations ». Chaque sélecteur dans un
fichier CSS correspond à un élément dans un fichier XML. Le sélecteur est ensuite constitué de
déclarations - des paires standardisées : nom/valeur - qui indiquent la façon dont le contenu des
éléments XML doit être affiché. Chaque nom est séparé de la valeur par le signe deux-points (:),
les paires de noms/valeurs sont séparées les unes des autres par un point virgule (;), et toutes
les déclarations associées à un sélecteur sont regroupées dans des accolades ({}).Seules
certaines paires sont décrites ci-dessous, une liste complète est définie dans la description de
CSS par le W3C29.
• display: cette propriété est utilisée pour spécifier si un élément doit ou non être affiché;
et si oui, comment (mais cela de façon très générale seulement). Les principales
valeurs pour display sont : inline, block, list-item, ou none. Inline est la valeur par défaut.
Attribuer la valeur block crée un retour à la ligne après le contenu de l'élément. La
valeur list-item est similaire à block, sauf qu'elle met légèrement le texte en retrait.
• margin: cette propriété est utilisée pour indiquer la taille de l'espace blanc qui entoure
les blocs de texte. Les valeurs peuvent être des pourcentages (%), des pixels (px), ou
des conventions typographiques traditionnelles telles que l'unité em30. Quand on
donne une valeur à la propriété margin, elle s'applique simultanément aux marges
droite, gauche, haut et bas. Il est possible de spécifier différentes marges en utilisant
les propriétés margin-top, margin-bottom, margin-left, et margin-right.
28
29
30
Il est possible, mais pas souhaitable, de remplacer &amp; ou un autre de ces caractères par son code ASCII, ici &#38;.
http://www.w3.org/Styles/CSS/
e consortium W3 recommande l'utilisation de "em". L'unité "em" (taille de "M") correspond à l'unité employée en
typographie "Geviert". "em" est une unité en relation avec la taille de police propre à l'élément. C'est à dire que pour une
hauteur de police de 12 points, 1 em équivaut à 12 pt. Ou, dit d'une autre façon, 1 em = la taille police réglée par défaut du
navigateur. "em" est, comparable aux définitions en pourcentage (par exemple: font-size:120%), une unité relative.
L'utilisation de "em" dans les mentions de feuilles de style est très intéressante, car le visiteur a le contrôle total sur la taille
de la police affichée.
15
text-indent: comme la propriété margin, cette propriété accepte pour valeurs les
pourcentages, les pixels, ou les unités typographiques. Cette propriété est utilisée
pour définir la façon dont certaines lignes doivent être mises en retrait dans des blocs
de texte.
• text-align: dont les valeurs courantes sont right, left, center, et justify sont utilisées pour
aligner le texte à l'intérieur d'un bloc de texte.
• list-style: les listes à puces sont d'usage courant dans la présentation typographique
d'aujourd'hui. Pour créer une liste, on utilise d'abord le sélecteur display: list-item pour
la liste en tant que telle, puis quelque chose comme disc, circle, square, ou decimal pour
la valeur list-style.
• font-family: associé à un sélecteur permet de décrire dans quelle police de caractère
doit être affichée le XML. Parmi les valeurs, on trouve les noms des polices ainsi qu'un
certain nombre de familles de polices génériques telles que serif ou sans-serif. Les
noms de familles de polices qui contiennent plus d'un mot doivent être placés entre
guillemets simples.
• font-size: les tailles des polices peuvent être indiquées avec des dimensions exactes
en points tout autant qu'avec des tailles relatives telles que small, x-small, ou large.
• font-style: les valeurs habituelles pour le style de police sont normal ou italic; elles
indiquent la façon dont le texte s'affiche.
• font-weight: est utilisé pour indiquer si le texte doit être rendu en gras ou non. Les
valeurs habituelles sont normal et bold.
Le tableau décrit précédemment, peut être affiché proprement à l'aide d'une feuille de style.
Chaque élément du fichier catalogue a un sélecteur correspondant dans la feuille de style. Il faut
ajouter, au début du catalogue, un appel à la feuille de style
<?xml-stylesheet type="text/css" href="catalogue_formation.css" ?>
•
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href='catalogue_formation.css' type='text/css'?>
<formation>
<cours type="initiation">
......
</cours>
</formation>
Il suffit de joindre au fichier xml la feuille de style, ici le fichier catalogue_formation.css,
formation { display: block; }
cours {display: block; }
intitulé {display: inline; }
enseignant {display: inline; }
durée {display: inline; }
certificat {display: inline; }
pour qu'un navigateur affiche le contenu suivant :
Programmation 1
Introduction à C++
Standards graphiques
La famille MPEG
Indexation de l'image
Dupond
Dubois
Durand
Dupont
Dutreil
12 Non
12 Non
9 Oui
15 Oui
9 Non
L'affichage n'est pas très lisible, il peut être amélioré en modifiant la feuille de style ou en
transformant le fichier XML en faisant appel à XSLT.
Transformer XML avec XSLT
(eXtensible Stylesheet Language Transformation)
XSL (eXtensible StyleSheet Language) est lui-même défini avec le formalisme XML, cela signifie
qu'une feuille de style XSL est un document XML bien formé. XSL est un langage de
16
programmation déclaratif1 complet, avec des paramètres, des processus conditionnels, et des
appels de fonctions. XSL possède deux composantes :
•
le langage de transformation des données (eXtensible Stylesheet Transformation XSLT) permet de transformer la structure des éléments XML.
Un document XML peut être représenté comme une structure arborescente. Ainsi
XSLT permet de transformer les documents XML à l'aide de feuilles de style contenant
des règles règles de gabarit.
Le processeur XSLT (composant logiciel chargé de la transformation) crée un
structure logique arborescente (on parle d'arbre source) à partir du document XML et
lui fait subir des transformations selon les règles contenues dans la feuille XSL pour
produire un arbre résultat représentant, par exemple, la structure d'un document
HTML. Les composants de l'arbre résultat sont appelés objets de flux.
Chaque règle définit des traitements à effectuer sur un élément (nœud ou feuille) de
l'arbre source. On appelle patterns (en français motifs, parfois « éléments cibles ») les
éléments de l'arbre source. L'arbre source peut être entièrement remodelé et filtré. Il
est aussi possible d'ajouter du contenu à l'arbre résultat, si bien que celui-ci peut être
radicalement différent de l'arbre source.
XSLT apparaît sous la forme d'un fichier XML, chacune des commandes est un
élément XML et les commandes sont qualifiées à l'aide d'attributs XML. Les
processeurs XSLT disponibles sont : Saxon + Xerces et Xalan (implémentations
Java), xsltproc (application binaire) qui utilise diverses bibliothèques en C, Sablotron
(application binaire) qui utilise les bibliothèques C++.
•
le langage de formattage des données (XSL/FO), c'est-à-dire un langage permettant
de définir la mise en page (affichage de texte ou de graphiques) de ce qui a été créé
par XSLT.
Une fois l'arbre source créé, XSL/FO permet de formatter le résultat, c'est-à-dire
d'interpréter l'arbre résultat, ou plus exactement les objets de flux le composant en
leur appliquant des objets de mise en forme afin d'en faire une représentation visuelle
(papier, écran, ...). XSL est inspiré de DSSSL2 (Document Style Semantics and
Specification Language) dont il reprend beaucoup de fonctionnalités. DSSSL est un
sur-ensemble des CSS. XSL/FO permet de retraiter un document XML afin d'en
modifier totalement la structure pour générer des documents utilisant différentes
représentations (PostScript, HTML, Tex, RTF, ...)
Structure d'un document XSL et association d'une feuille XSL à un document XML
Un document XSL étant un document XML, il faut commencer par préciser la version de XSLT
que l'on utilise en mettant la valeur "1.0" à l'attribut version de la racine ainsi que le codage
commence :
<?xml version="1.0" encoding="ISO-8859-1"?>
Toute feuille de style XSL est comprise entre les balises <xsl:stylesheet ...> et </xsl:stylesheet>. La
balise xsl:stylesheet encapsule des balises xsl:template définissant les transformations à faire
subir à certains éléments du document XML. On précise ensuite quelle sortie on veut obtenir
pour la transformation31. Pour afficher un document en format HTML, il suffit d'indiquer pour
31
Par exemple, pour obtenir du XHTML, on utilise xsl:output avec les attributs
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
17
chaque élément un équivalent HTML. Par exemple, pour que TOTO soit affiché comme avec tt
en HTML, on écrit:
<xsl:template match="TOTO">
<tt><xsl:apply-templates/></tt>
</xsl:template>
Une feuille de style XSL (enregistré dans un fichier dont l'extension est .xsl) peut être liée à un
document XML (de telle manière à ce que le document XML utilise la feuille XSL) en insérant la
balise suivante au début du document XML :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="fichier.xsl" type="text/xsl"?>
Les template rules (règles de gabarit)
Les template rules sont des balises XSL permettant de définir des opérations à réaliser sur
certains éléments du document XML utilisant la page XSL, c'est-à-dire généralement de
transformer un tag XML en au moins un tag HTML (généralement plusieurs).
L'attribut "match" de la balise <xsl:template> permet de définir (grâce à la notation XPath32) le ou
les éléments du document XML sur lesquels s'applique la transformation.
Tableau 1 : principaux patterns
Pattern
Exemple
Signification
Nom
Nom[0]
toto
toto[0]
Sélectionne les éléments par leur nom
Sélectionne le premier élément ayant un nom donné (toto[0]
sélectionne le premier élément rencontré ayant le nom 'toto')
Sélectionne le dernier élément ayant un nom donné
Indique une alternative (un nœud OU bien l'autre (ou les deux))
utilisé seul: Définit l'élément de plus haut niveau de l'arborescence
(appelé root ou racine en français) ainsi que (de façon implicite) tous
ses éléments fils.
utilisé entre deux éléments: décrit la localisation d'un élément dans
son arborescence (comme pour l'arborescence des répertoires sur
un disque - /usr/bin/toto)
Motif "joker" désignant n'importe quel élément
Indique tous les descendants d'un nœud
Caractérise le nœud courant
Désigne le nœud parent. Permet de remonter d'un niveau dans
l'arborescence hiérarchique
Indique un attribut caractéristique (@nom décrit l'attribut value). La
notation @* désigne tous les attributs d'un élément
Désigne le contenu d'un élément (le texte contenu entre ses balises)
Sélectionne l'élément dont l'identifiant (la valeur de l'attribut ID) est
celui spécifié en paramètre
Nom[end()]
toto[end()]
|
Gauche|Milieu
/ ou Arbre/Feuille /
*
//
.
..
*
//personne
.
..
@
@nom
text()
ID()
text()
ID('a2546')
La transformation peut être réalisée
32
encoding="ISO-8859-1" indent="yes" method="xml".
La notation Xpath permet de définir des patterns, c'est-à-dire des chaînes de caractères permettant de repérer un nœud
dans le document XML. XPath est un langage pour adresser des parties de documents XML, conçu pour être utilisé à la
fois par XSLT et Xpointer. L'objectif premier de XPath est de définir la manière d'adresser des parties d'un document
[XML]. En vue de pourvoir à cet objectif premier, cette spécification fournit également les moyens pour traiter des chaînes
de caractères, des nombres et des booléens. XPath utilise une syntaxe compacte et non-XML pour faciliter son utilisation
dans des URI et des attributs de balises XML. XPath agit sur les structures abstraites et logiques d'un document XML,
plutôt que sur sa syntaxe apparente. Le nom XPath vient de l'utilisation d'une écriture de type « chemins d'accès », comme
les URL, pour se déplacer à l'intérieur de la structure hiérarchique d'un document XML. En plus de l'adressage des
données, XPath est également conçu pour avoir un sous-ensemble naturel de règles de comparaison (pour tester si un
nœud correspond à une forme) ; cette utilisation de XPath est décrite dans XSLT. XPath représente les documents XML
comme un arbre de nœuds. Il y a plusieurs types de nœuds, parmi lesquels les nœuds d'éléments, d'attributs et de texte.
XPath fournit un mécanisme pour associer une valeur de type chaîne de caractères à chaque type de nœud. Certains ont
également un nom. XPath supporte complètement les espaces de nom XML . Ainsi, le nom d'un nœud est une paire
composée d'une partie locale et d'un espace de noms URI pouvant être nul; elle est appelée nom expansé.
18
soit par ajout de texte,
• soit en définissant des éléments de transformation, c'est-à-dire des éléments
permettant de définir des règles de transformation à appliquer aux éléments
sélectionnés par l'attribut « match »
Pour donner une idée des possibilités de XSLT, le catalogue de formation vu dans les chapitres
précédentsva être formaté de façon à ce qu'il s'affiche comme un tableau HTML. La première
étape consiste à définir le cadre de la transformation proposée.
•
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="/">
<html>
<head><title>Catalogue de formations</title></head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
xslt_01.xsl
Remarques:
1. La première ligne précise la version d'XML et l'encodage utilisés.
2. La racine du fichier, imposée, doit être <xsl:stylesheet> (ou son alias <xsl:transform>) et
doit préciser la version d'XSLT utilisée, ici une définition du w3c donnée par son url.
3. Le type de fichier de sortie33, ici HTML, ainsi que l'encodage sont définis
4. Le premier tag <xsl:template> permet d'appliquer une transformation à l'ensemble du
document (la valeur "/" de l'attribut match indique l'élément racine du document XML).
L'élément <xsl:apply-templates/> indique le traitement de tous les enfants directs de la
racine. La balise <xsl:template match="cours" > permet d'aller traiter les éléments de
type cours. Un élément du genre <xsl:value-of select="enseignant"/> permettrait de
récupérer les valeurs de la balise enseignant.
La deuxième étape consiste à rajouter la balise <xsl:apply-templates> au milieu des balises body
pour indiquer au parser34 que c'est à cet endroit que doivent s'appliquer les transformations de la
balise formation.
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" />
<xsl:template match="/">
<html>
<head><title>Catalogue de formations </title></head>
<body>
<xsl:apply-templates select="formation"/>
</body>
</html>
</xsl:template>
<xsl:template match="formation">
<table border="1">
<tr>
<th>Cours</th><th>Enseignant</th>
<th>Durée (modules)</th><th>Certificat</th>
</tr>
<xsl:apply-templates select="cours"/>
</table>
</xsl:template>
33
34
Trois types de fichiers sont reconnus par la référence w3c donnée : text, xml ou html.
Nous reviendrons plus loin sur cette notion.
19
<xsl:template match="cours">
</xsl:template>
</xsl:stylesheet>
Remarques:
1. La balise formation est modifiée de façon à décrire l'en tête du tableau ; la
transformation des balises cours est demandée la fin du tableau est décrite.
2. La balise cours reste vide à ce stade.
L'ultime étape consiste à afficher le contenu d'une balise XML.
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" />
<xsl:template match="/">
<html>
<head><title>Catalogue de formations </title></head>
<body>
<xsl:apply-templates select="formation"/>
</body>
</html>
</xsl:template>
<xsl:template match="formation">
<table border="1">
<tr><th>Cours</th><th>Enseignant</th>
<th>Durée (modules)</th><th>Certificat</th></tr>
<xsl:apply-templates select="cours"/>
</table>
</xsl:template>
<xsl:template match="cours">
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="intitulé">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="enseignant">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="durée">
<td><xsl:value-of select="."/></td>
</xsl:template>
<xsl:template match="certificat">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
Remarques:
1. chacun des cours doit s'afficher sur une nouvelle ligne, c'est pourquoi la balise
<xsl:apply-templates> est entre les balises <tr>
2. Il n'y a pas d'attribut select car on veut appliquer toutes les transformations.
3. Le contenu de chacune des balises <intitulé, enseignant, durée et certificat> doit être
entre les balises HTML <td>. On utilise la balise XSL <xsl:value-of> pour afficher les
valeurs respectives.
Il est possible de construire une version plus courte donnant un résultat identique.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/2001/XMLSchema">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<html>
20
<head><title>Catalogue de formations</title></head>
<body>
<xsl:apply-templates select="formation"/>
</body>
</html>
</xsl:template>
<xsl:template match="formation">
<table border="1">
<tr><th>Cours</th><th>Enseignant</th>
<th>Durée (modules)</th><th>Certificat</th></tr>
<xsl:apply-templates select="cours"/>
</table>
</xsl:template>
<xsl:template match="cours">
<table border="1">
<tr><td><xsl:value-of select="intitulé"/></td><td><xsl:value-of select="enseignant"/></td><td><xsl:value-of
select="durée"/></td><td><xsl:value-of select="certificat"/></td></tr>
</table>
</xsl:template>
</xsl:stylesheet>
Remarques:
1. Les attributs 'select' des balises xsl:apply-templates ont été supprimés
2. Tout comme les balises <xsl:template match="intitulé">,
<xsl:template match="enseignant">,<xsl:template match="durée"> et
<xsl:template match="certificat">
Les balises peuvent être mise dans un ordre quelconque. L'attribut 'select' fonctionne un peu
comme les arborescences des répertoires. La balise peut aussi être trouvée en remontant dans
l'arborescence.
Le fichier transformé s'affiche de la façon suivante :
La récupération d'un attribut
Pour récupérer un attribut, on le fait précéder d'un @. Pour récupérer un hypothétique attribut
toto de la balise formation dans la balise cours, on écrit './../@toto' dans l'attribut select. C'est le
langage XPath qui est utilisé35.
35
http://www.toutestfacile.com/phpinit.php?tef_site=xml&chap=langage0
21
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/2001/XMLSchema">
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/2001/XMLSchema">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html>
<head><title>Catalogue de formations </title></head>
<body>
<xsl:apply-templates select="formation"/>
</body>
</html>
</xsl:template>
<xsl:template match="formation">
<table border="1">
<tr><th>Cours</th><th>Enseignant</th>
<th>Durée (modules)</th><th>Certificat</th></tr>
<xsl:apply-templates select="cours"/>
</table>
</xsl:template>
<xsl:template match="cours">
<tr>
<td><xsl:value-of select="@type"/>:<xsl:value-of select="intitulé"/></td>
<td><xsl:value-of select="enseignant"/></td><td><xsl:value-of select="durée"/></td>
<td><xsl:value-of select="certificat"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Les éléments de transformation
Les éléments de transformations permettent de sélectionner et effectuer des opérations sur les
éléments du document XML. Leur syntaxe est la suivante, le / indiquant que la balise ne
possède pas de balise fermante.
<xsl:nom [attributs]/>
Tableau 2 : liste des éléments de transformation :
Elément
Utilité
xsl:apply-imports Importe une feuille de style importée
xsl:apply-templates Indique au processeur XSL de traiter les éléments enfants directs en leur appliquant les
template rules définies dans la feuille XSL. L'attribut select permet de spécifier certains
éléments enfants auxquels la transformation doit être appliquée
xsl:attribute-set
Permet de créer un attribut à associer à un élément
xsl:attribute-set
Permet de nommer une liste d'attributs, pouvant être appliqués à un élément particulier
xsl:template
Permet de charger un canevas (template) grâce à son nom.
xsl:choose
Structure conditionnelle de type "case" (utilisé en combinaison avec xsl:when et/ou
xsl:otherwise)
xsl:comment
Crée un commentaire dans l'arbre résultat
xsl:copy
Copie le nœud courant dans l'arbre résultat
xsl:copy-of
Copie le nœud sélectionné par le modèle dans l'arbre résultat
xsl:decimal-format Déclare un format de nombre décimal
xsl:element
Permet de créer un élément avec le nom spécifié
xsl:for-each
Permet d'appliquer un canevas à chaque nœud correspondant au modèle
xsl:if
Permet d'effectuer un test conditionnel sur le modèle indiqué
xsl:apply-templates
L'élément apply-templates utilisé au sein de la balise <xsl:template/> permet d'appliquer la règle
de transformation contenu dans la balise template. Il permet uniquement d'appliquer les
modifications l'entourant, sans insérer de contenu supplémentaire.
22
Soit le document XML suivant :
<voiture>
<marque>Volkswagen</marque>
<immatriculation>9999 ZZ 99</immatriculation>
<modele>Golf Match</modele>
<couleur>Bleu clair</couleur>
</voiture>
et la feuille XSL associée :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"result-ns="">
<xsl:template match="voiture">
<Auto>
<xsl:apply-templates/>
</Auto>
</xsl:template >
</xsl:stylesheet>
Cette feuille XSL donne le résultat suivant :
<Auto></Auto>
xsl:value-of
Pour insérer le contenu des éléments sélectionnés par la règle de gabarit (template rule), il suffit
d'utiliser l'élément value-of, qui permet d'insérer le contenu de la balise sélectionnée.
En reprenant le même document XML, il est possible de définir la feuille de style XSL suivante :
<xsl:template match="voiture">
<table border="1">
<tr><th>Voiture</th></tr>
<tr><xsl:apply-templates/></tr>
</table>
</xsl:template >
<xsl:template match="marque">
<td><xsl:value-of/></td>
</xsl:template >
<xsl:template match="immatriculation">
<td><xsl:value-of/></td>
</xsl:template >
Cette feuille de style donnera le résultat suivant :
<table border="1">
<tr><th>Voiture</th></tr>
<td>Volkswagen</td>
<td>9999 ZZ 99</td>
</table>
xsl:apply-imports
L'élément apply-imports utilisé au sein de la balise <xsl:template/> permet d'appliquer les règles
de transformation importées dans la feuille XSL par l'intermédiaire de la balise <?xsl:import?>.
Par exemple, dans la feuille XSL suivante, la feuille import.xsl est importée grâce à l'élément
<?xsl:import?>,
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"result-ns="">
<xsl:import href="import.xsl"/>
<xsl:template match="voiture">
<Effet>
<xsl:apply-imports/>
23
</Effet>
</xsl:template >
</xsl:stylesheet>
Voici la feuille de style importée :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"result-ns="">
<xsl:template match="voiture">
<EffetImporte>
<xsl:apply-imports/>
</EffetImporte>
</xsl:template >
</xsl:stylesheet>
xsl:for-each
Les règles de gabarit permettent grâce à l'élément <xsl:template> de sélectionner les éléments
sur lesquels on désire effectuer une transformation. Grâce à l'élément <xsl:for-each>, il est
possible de sélectionner des éléments enfants et de leur appliquer une règle de transformation.
La sélection des éléments enfant se fait à l'aide de l'attribut select de la balise <xsl:for-each>,
utilisant les patterns XSL au même titre que l'élément <xsl:template>.
<xsl:template match="">
<EffetImporte>
<xsl:apply-imports/>
</EffetImporte>
</xsl:template >
</xsl:stylesheet>
Les Document Type Definitions (DTD), définir des vocabulaires XML
Pour qu'un document XML puisse être partagé certaines règles doivent être respectées et il faut
communiquer le vocabulaire utilisé par le document. C'est la partie sémantique de XML
contenue dans les Document Type Definition (DTD). Une DTD décrit de manière stricte la
structure du fichier XML. Des outils permettent alors vérifier qu'un fichier XML est « valide » pour
une DTD donnée.
Une DTD peut être définie à l'intérieur d'un document XML mais, dans la mesure où elle sera
utilisée par plusieurs documents, elle est plus couramment placée dans un fichier à part. Dans
ce cas, la déclaration DOCTYPE comprend un lien vers le fichier dans lequel les éléments XML
sont décrits. Pour définir une DTD externe, il suffit d'écrire <!DOCTYPE racine SYSTEM
"nomdufichier.dtd"> juste après <?xml version="1.0" ?> où racine est le nom de la balise racine de
l'arbre XML.
• Les définitions peuvent inclure les noms d'autres éléments. Chaque élément est
qualifié par un symbole, placé juste après son nom, indiquant le nombre de fois qu'il
peut être utilisé dans un document XML :
1. pas de symbole veut dire 1 et 1 seul élément
2. + veut dire 1 ou plusieurs éléments
3. * veut dire 0 ou plusieurs éléments
4. ? veut dire 0 ou 1 élément
• #PCDATA [parsed character data] est utilisé pour dénoter un contenu qui ne contient
que du texte, sans marquage.
• Dans une séquence (liste des éléments) : la virgule (,) est utilisée pour spécifier l'ordre
attendu des éléments dans le fichier, les parenthèses (())36 pour grouper des
éléments, la barre verticale (|) pour indiquer une relation booléenne d'union entre les
36
En composant les différents connecteurs, il faut veiller à ne pas définir une grammaire ambiguë par exemple
((nom,prenom)|(nom,surnom)) n'est pas correct, il est préférable d'écrire (nom,(prenom|surnom)).
24
éléments, on peut autoriser plusieurs éléments répétés, par exemple
(adresse,téléphone)* ce qui permet de créer des couples (adresse,téléphone).
Les attributs (déclarés par ATTLIST) possèdent différents contrôles:
1. CDATA pour une chaîne quelconque de caractères.
2. ID pour un nom unique dans le document (identifiant).
3. IDREF pour un identifiant du document (création d'un lien dans le document).
4. ENTITY entité externe.
5. ENTITIES liste d'ENTITY séparées par des espaces.
6. NMTOKEN pour un mot sans espace.
7. NMTOKENS pour une liste de NMTOKEN séparés par des espaces.
Les valeurs des attributs peuvent être précisées par la DTD.
1. #REQUIRED signifie que la valeur doit-être donnée dans le document
2. #IMPLIED signifie que s'il n'y a pas de valeur dans le document, c'est à l'application de
donner la sienne par défaut
3. #FIXED signifie que la valeur doit être celle de la DTD
4. une valeur par défaut que prend l'attribut si aucune valeur n'est donnée dans le fichier
XML (indiquée entre guillemets)
La DTD est le point clé de l'interopérabilité du monde XML. Si la nature des fichiers XML, qui
sont des fichiers textes, donc lisibles par tous, permet d'écrire (grâce à XLST) toutes sortes de
filtres et donc de garantir une certaine portabilité, même à partir de DTD « exotiques », tout cela
représente un travail long et coûteux. La bonne pratique consiste donc à n'écrire que tout à fait
exceptionnellement sa propre DTD. Avant de passer un temps, nécessairement long37, à la
définition de sa propre DTD, il faut regarder de prêt ce qui existe du point de vue des normes,
des standards, des communautés d'usagers... Il est probable que quelque chose d'approchant
existe déjà et est accessible sur le Web. La modification de DTD existantes doit elle aussi être
envisagée avec prudence, car elle est le germe d'évolutions divergentes. Là la bonne pratique
est de s'incrire dans la communauté des gens élaborant la DTD source de façon à contribuer à
son évolution dans une direction conforme à ses propres besoins. En bref : le monde XML
donne les moyens de l'interopérabilité mais ne la crée pas de façon automatique. L'exemple du
mini catalogue de formation présenté est typique de cela. Le passage à XML doit facilité
indexation, recherche et affichage, pour de futurs usagers. Il est donc impératif de se rapprocher
de normes et standards en voie d'élaboration, par exemple dans les domaines de l'e-learning et
de l'enseignement à distance38.
L'exemple « formation peut être repris en ajoutant l'appel à une DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE formation SYSTEM "formation.dtd">
<?xml-stylesheet href="catalogue_formation_3.xsl" type="text/xsl"?>
<formation>
<cours type="initiation">
......
......
</cours>
</formation>
Voici ce que pourrait-être sa DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT formation (cours*)>
<!ELEMENT cours (intitulé,enseignant+,durée, certificat)>
<!ATTLIST cours type (initiation | professionnalisant) "professionnalisant">
<!ELEMENT intitulé (#PCDATA)>
<!ELEMENT enseignant (#PCDATA)>
37
38
Ecrire sa propre DTD est tout à fait comparable au développement de toute autre application informatique, il faut consulter
les usagers, rédiger et valider des spécifications, développer le code, le tester puis le maintenir.
Par exemple au travers des travaux de l’ISO-IEC-JTC1-SC36 SC 36 WG1 (terminologie) et Wg4 (gestion des métadonnées)
25
<!ELEMENT durée (#PCDATA)>
<!ELEMENT certificat (#PCDATA)>
Remarques:
1. Pour chacun des éléments, on définit sa composition par <!ELEMENT nom_element
(structure)>.
2. L'élément racine du fichier est <formation>
3. Pour chacun des attributs, on définti sa composition par <!ELEMENT nom_attribut
(structure)>
4. L'attribut type est, ici, défini comme étant un choix imposé entre « initiation », et
« professionnalisant », par défaut on met professionnalisant.
5. cours* signifie que dans un élément formation on peut trouver 0 ou plusieurs éléments
de type cours.
6. Intitulé, enseignant+, durée, certificat signifie que dans un élément cours on doit
trouver une élément Intitulé, un ou plusieurs élément(s) enseignant, un élément durée
et un élément certificat, dans cet ordre.
7. Intitulé, enseignant+, durée, certificat sont des éléments qui peuvent contenir du texte,
sans balisage ni marquage, les contenus #PCDATA sont dits contenus mixtes
8. Deux autres types pour les éléments existent, EMPTY et ANY, EMPTY signifie que
l'élément est vide (comme <br> en HTML), ANY indique que l'élément peut comporter
tout autre élément déclaré dans la DTD.
Les procédures en XML vérifications syntaxiques et
sémantiques
Editeurs génériques paramétrés (Emacs, Xemacs))
Xemacs est probablement l'éditeur générique le plus puissant actuellement disponible. C'est un
successeur de GNU Emacs39. Extrêmement paramétrable, Xemacs permet d'éditer des
programmes en c, c++, java, d'éditer du code html pour confectionner des pages Web ou de
produire des documents Tex ou Latex40.
En ce qui concerne Emacs proprement proprement dit, la dernière version pour Windows
95/98/ME/NT/XP et 2000 peut être obtenue auprès de la GNU Fundation41. Sous Windows, GNU
Emacs est une usine à gaz qui cohabite assez mal avec l'environnement. La colorisation du
code xml est parfaite, le module TeX ayant beaucoup de maturité. En revanche, ce même
module, conçu pour supporter la distribution latex de linux, est inexploitable sous Windows, à
moins d'éditer les fichiers LISP du module pour coder les chemins ce que l'on ne peut qualifier
de convivial.
39
40
41
L'éditeur Emacs (edit macros) est un éditeur orienté commande qui a ses fanatiques et ses détracteurs. Les fanatiques
sont le plus souvent des développeurs qui éditent beaucoup de codes et l'ont paramétré à leur sauce. Les détracteurs ont
traduit son sigle par « emacs make any computer slow » ou encore « escape meta alt control shift ».
En 2003 TEX a eu 25 ans. Donald E. Knuth n’avait certainement pas espéré une telle longévité pour sun logiciel qui vit et
se développe encore. Reconnu dans tous les pays pour la composition des mathématiques et les qualités typographiques
des textes obtenus, il est aussi apprécié pour son adaptation à toutes les langues de la planète. Les idées de son inventeur
développeur, la minutie de sa conception, la qualité de la programmation et son adaptabilité ont permis développements
par des passionnés souvent regroupés dans des associations. Il a ainsi traversé les années s’adaptant aux évolutions
techniques. LaTeX, en simplifiant l’utilisation de Tex, en a permis une « prise en main » rapide. Son statut de logiciel libre
l'a mis à l’abri des objectifs de rentabilité .du monde économique. Tex conserve une très forte implantation dans marché
mondial de l’édition scientifique, estimé à quinze milliards de dollars (dont 40% pour le seul Elsevier). Le format ConTEXt
permet d’utiliser conjointement des techniques TEX et XML
TEX Heritage: http://www.tug.org/tug2003/heritage/
Le Groupe francophone des Utilisateurs de TeX a pour but de promouvoir l'utilisation de TeX dans les pays francophones
et d'offrir à ses adhérents un ensemble de services aidant à la connaissance et à l'utilisation de TeX et de son
environnement. http://www.gutenberg.eu.org/ . Le serveur d’archives de gutenberg est accessible `al’url :
ftp://ftp.gutenberg.eu.org/pub/GUTenberg
The latest version of Emacs : http://www.gnu.org/software/emacs/windows/
FAQ For Windows 95/98/ME/NT/XP and 2000: http://www.gnu.org/software/emacs/windows/faq2.html#where-source
Un site francophone est consacré à Emacs : http://emacsfr.etud-orleans.fr/
26
Le choix d'un membre de la famille Emacs se justifie si le travail à accomplir est important en
volume et justifie l'investissement dans l'apprentissage et la configuration, si un support local
existe et si la tradition Unix est localement forte. Pour des travaux limités et dans
l'environnement Windows ce choix ne paraît pas justifié. Xemacs peut être téléchargé depuis le
site donné en référence.42
Intégration de gcc et xemacs pour MS-Windows
Installation de gcc
L'exécutable du compilateur gcc est supposé installé dans le répertoire C:\Program
Files\MinGW\bin, sinon il faut adapter en conséquence les instructions suivantes. Le fichier
AUTOEXEC.BAT, se trouvant à la racine du disque principal doit être édité en joutant, à la fin de
la ligne commençant par set PATH= ou bien par PATH=, sans espace, le texte (en n'oubliant
pas le point à la fin) : ;c:\gcc\bin;.
Si le fichier AUTOEXEC.BAT ne contenait pas une telle ligne, il faut simplement la créer : set
PATH=C:\Program Files\MinGW\bin;.
Il faut ensuite cherchez si AUTOEXEC.BAT contient une ligne commençant par set HOME=, si
ce n'est pas le cas la créé en y indiquant le répertoire personnel. Ceci fait, il faut redémarer la
machine après avoir sauvé le fichier AUTOEXEC.BAT.
Installation de XEmacs
Une fois XEmacs installé, le fichier ".emacs" doit être sauvé en cliquant sur le lien .emacs. Ce
fichier doit être dans le répertoire personnel (celui qui correspond à la variable HOME). Il
contient les initialisations nécessaires pour avoir un environnement semblable à celui que l'on
trouve sur les stations. Windows95/98 risque d'empêcher de sauver ce fichier sous le nom .
emacs que ce soit au moment du chargement dans votre browser ou bien dans le gestionnaire
de fichiers. Pour résoudre ce problème il suffit de télélecharger le fichier sous un autre nom, par
exemple emacs.el. On ouvre ensuite ce fichier dans XEmacs et on utilise l'option "Save As..." du
menu "File" en indiquant comme nom .emacs précédé du chemin du répertoire personnel.
Après avoir quitté XEmacs on le relance. On édite ensuite un fichier ~/hello.c (le signe ~ désigne
le répertoire personnel défini par la variable HOME). Le bouton Compile de la barre d'outils.
XEmacs devrait proposer une ligne de compilation ressemblant à: gcc -g -Wall -o hello.exe
hello.c. Si ce n'est pas le cas (il propose make -k à la place), c'est que le fichier .emacs n'a pas
été trouvé. La cause la plus probable est que ce fichier n'a pas été copié dans le répertoire
correspondant à la variable HOME du fichier AUTOEXEC.BAT ou bien que cette variable HOME
n'est pas correcte. Il faut vérifier le fichier AUTOEXEC.BAT, et la présence du fichier .emacs
puis rebooter. Si XEmacs indique que gcc n'a pas été trouvé, c'est que la variable PATH dans le
fichier AUTOEXEC.BAT ne contient pas le répertoire où gcc est installé.
Si la compilation s'est bien passée, un fichier hello.exe a été généré. Dans une fenêtre MS-DOS,
on se déplace dans le répertoire où se trouve ce fichier au moyen de la commande cd, et on
vérifie que le programme hello.exe se trouve bien là au moyen de la commande dir. Le
programme peut être exécuté en tapant hello, hello.exe ou bien \hello.exe
(X)Emacs l’Editeur Ultime pour XML sous Linux ?43
XSLT-process est un rajout pour GNU Emacs/XEmacs qui le transforme en éditeur puissant
XSLT. Avec ce addon il est possible de :
• exécuter un processeur de XSLT sur la mémoire tampon d’Emacs en cours d'édition,
et visualiser les résultats dans une autre mémoire tampon d’Emacs ou dans un
browser,
• exécuter un processeur de XSLT pour la mise au point et la vue de ce qui se produit
pendant la transformation de XSLT,
42
43
Http://gnuwin.epfl.ch/app/xemacs/fr
http://www.linuxfrench.net/article.php3?id_article=434
27
placer des points d’arrêt, faire du pas à pas dans une feuille de style,
• visualiser des variables globales et locales et beaucoup plus ...
•
Mais XSLT-process n’est pas un addon d’Emacs pour éditer des fichiers de XML ou XSLT. Il est
indispensable pour qui veulent se lancer dans XML. psgml est un "module" XEmacs pour faire
du SGML et XML. Le module psgml est normalement compris dans une installation complète, il
se charge automatiquement pour les fichiers *.xml .
Editeurs spécialisés (genre Jaxe)
Logiciel libre et gratuit,multi-plateforme (Mac, Unix, Windows ou autre), par l'utilisation d'une
version 1.3 ou +44 de Java ), adapté aux documents XML narratifs et structurés Jaxe 2.145
s'articule autour de menus contextuels et de trois panneaux :
1. panneau affichant le document sous forme d'arbre
2. panneau d'insertion des éléments autorisés
3. panneau des attributs de l'élément courant
Figure 4 : l'éditeur Jaxe
Jaxe 2.1 est configurable avec un schéma XML et un fichier de description des menus
d'insertion des éléments. Un affichage HTML peut être obtenu avec une feuille de style XSLT.
Des exemples de fichiers de configuration pour XHTML strict46, Docbook simplifié, et un schéma
pour des cours en ligne sont aussi proposés. Il est possible d'afficher le code source du fichier
44
45
46
Pour tester la version de java de votre système, vous pouvez taper "java -version" sous la ligne de commande.
http://jaxe.sourceforge.net/Jaxe.html
Pour être informé des nouvelles versions de Jaxe :
http://sourceforge.net/account/login.php?return_to=%2Fproject%2Ffilemodule_monitor.php%3Ffilemodule_id%3D51070
Aide : http://sourceforge.net/forum/forum.php?forum_id=184274
Forum : http://sourceforge.net/forum/forum.php?forum_id=184273
Un aperçu HTML peut être créé si une feuille de style a été créée pour le langage utilisé. L'aperçu est généré avec le menu
Fenêtre HTML. Il est affiché avec Jaxe, mais pas forcément très bien si CSS est utilisé (Java Swing ne sait afficher pour
l'instant que du HTML 3 !). Il peut donc être nécessaire d'ouvrir le fichier HTML avec un navigateur, défini dans les
préférences de Jaxe.
28
XML tel qu'il sera enregistré, avec le menu Source XML. La fenêtre qui s'affiche alors n'est pas
éditable pour éviter des problèmes de mise à jour. Jaxe permet d'éviter de créer des fichiers
XML invalides. Si on doit préparer un fichier qui n'est pas encore valide (parce-qu'un élément
obligatoire n'a pas encore été ajouté, auquel cas l'élément parent doit s'afficher en orange, ce
qui indique le problème mais ne le résout pas), ou si l'on ouvre un fichier créé autrement qu'avec
Jaxe et qui n'est pas validé, on peut lancer une validation, qui est effectuée avec Xerces à partir
du schéma XML. Cela se fait avec le menu Validation. La liste des erreurs s'affiche, et un clic sur
une erreur permet de la situer dans le code source du fichier.
L'administrateur Jaxe peut l'utiliser pour définir un fichier de configuration pour un langage XML
donné. L'utilisateur final travaillera avec les fichiers de configuration définis par l'administrateur.
Les développeurs peuvent aussi ajouter des composants Swing (le nouveau paradigme GUI de
Java) pour les éléments, et utiliser Jaxe à l'intérieur d'autres applications.
La description formelle d'un langage XML comprend les noms des éléments du langage, les
imbrications possibles entre les éléments, l'ordre autorisé des éléments, et leurs attributs (les
attributs étant optionnels ou obligatoires). Jaxe facilite la création des documents XML en
utilisant les règles du langage pour proposer des éléments à insérer là où c'est possible. Cela
permet de créer des documents valides (c'est à dire se conformant aux règles du langage)
beaucoup plus facilement qu'avec un simple éditeur de texte. En plus des fichiers décrivant les
langages XML (les schémas), Jaxe utilise des fichiers de configuration qui définissent la barre
de menus et la façon d'afficher les éléments du langage. Ces fichiers se trouvent dans le
répertoire config, et leur nom se termine en _Jaxe_cfg.xml.
Jaxe peut être lancé à partir d'une icône du bureau utilisé (Mac OS, Windows, Gnome, ...) ou à
partir des commandes run.bat sous Windows et run.sh sous Unix.
Une fois Jaxe lancé, la première chose à faire est de vérifier que le langage XML utilisé par
défaut est bien celui que l'on veut utiliser. Il suffit pour cela de regarder les menus: la barre de
menus des éléments se trouve en-dessous de la barre des menus de Jaxe (qui est en haut de
l'écran sur MacOS). Si le langage n'est pas le bon, il faut choisir un fichier de configuration avec
le menu « Ouvrir la configuration... ». Quand un fichier XML déjà créé est ouvert, il utilise
automatiquement le fichier de configuration correspondant à son langage (s'il existe).
A l'ouverture d'un fichier de configuration, Jaxe prépare un nouveau document, et insère
automatiquement l'élément racine. La barre des menus, utilisée pour insérer des éléments,
correspond aux éléments du langage. L'alternative est d'utiliser le panneau d'insertion, qui
apparaît à gauche de la zone d'affichage du document XML. Il liste les éléments qui peuvent
être insérés dans le texte à l'endroit où se trouve le curseur. Il est possible d'insérer un élément
autour d'un texte ou d'un ensemble d'éléments déjà entrés. Il suffit de sélectionner cet
ensemble, et d'insérer le nouvel élément selon le standard du bureau choisi. Pour supprimer un
élément, il suffit de mettre le curseur après l'une des balises (ou un autre élément graphique si
l'élément n'est pas affiché avec des balises de début et de fin) et d'utiliser la touche
d'effacement. Attention, cela supprime l'élément et tout ce qu'il y a dedans ! Le menu « annuler
permet de corriger en cas de catastrophe.
Jaxe inclut Jazzy, un correcteur orthographique et possède un petit éditeur d'équations. Ce
dernier se divise en deux zone : celle du bas, où on tape l'équation sous forme de texte, et celle
du haut, où s'affiche au fur et à mesure la représentation graphique de l'équation47.
Certains éléments peuvent ou doivent avoir des attributs. L'insertion d'un nouvel élément avec
des attributs provoque l'affichage d'un dialogue permettant de choisir leurs valeurs. Pour les
changer plus tard, il suffit de cliquer sur l'une des balises, ou de mettre le curseur à l'intérieur de
l'élément et de regarder le panneau Attributs. Les attributs optionnels ont leur nom en vert, alors
que les attributs obligatoires s'affichent en rouge.
47
La syntaxe de l'éditeur est détaillé dans http://jaxe.sourceforge.net/equations/syntaxe.html.
29
Fichiers de config de Jaxe
Les fichiers de config de Jaxe permettent de spécifier les menus à afficher pour un langage XML
donné, ainsi que le schéma XML à utiliser pour la validation et le(s) fichier(s) XSL à utiliser pour
l'aperçu HTML. Ils se trouvent dans le répertoire config, et leurs noms se terminent en
"_Jaxe_cfg.xml". Un schéma Relax NG, peut être transformé en schéma XML W3C avec
Trang48. Voilà la liste des éléments utilisés dans les fichiers de config : JAXECFG /
DESCRIPTION / CONFIG / FICHIERXSL / PARAMETRE / FICHIERSCHEMA / RACINE /
ESPACE / ENCODAGE / DOCTYPE / MENU / FONCTION / BALISE.
Tableau 3 : liste des paramètres possibles des attributs de BALISE
type
nom du paramètre
description
division
titreAtt
attribut pour le titre
zone
titreAtt
attribut pour le titre
tableau
trTag
élément pour une ligne
tableau
tdTag
élément pour une cellule
tableau
thTag
élément pour une cellule d'entête
liste
typeListe
type de liste (POINTS|NUMEROS)
style
style
GRAS|ITALIQUE|EXPOSANT|INDICE|SOULIGNE
string
police
police de caractères
string
taille
taille de caractères
fichier
srcAtt
attribut avec le nom du fichier
plugin
classe
classe Java dérivée de JaxeElement
item
image1
première image de pastille
item
image2
deuxième image de pastille
equation
srcAtt
attribut avec le nom de l'image
equation
texteAtt
attribut avec le texte de l'équation
Créer un langage XML et son éditeur en 5 minutes
L'éditeur Jaxe va être utilisé pour créer un fichier de configuration pour Jaxe lui-même incluant la
définition des menus et du langage XML, ainsi qu'un exemple de feuille de style XSLT,
permettant de créer puis d'afficher le fichier dont est extrait le texte ci-dessous49.
Les fichiers de configuration se situent dans le dossier config de Jaxe, et leur nom se termine en
_Jaxe_cfg.xml. Ils peuvent être créés à l'aide du fichier de configuration des fichiers de
configuration, JAXECFG_Jaxe_cfg.xml. Une fois lancé Jaxe, choisir le menu « Ouvrir la
configuration... », et sélectionner JAXECFG_Jaxe_cfg.xml.
On définit ensuite l'élément racine du langage, DOCUMENTATION. Chaque nouveau document
intégrera cet élément dès le départ.
JAXECFG>
RACINE>
BALISE 'DOCUMENTATION'>
<BALISE
<RACINE
<JAXECFG
On définit ensuite les menus d'insertion des éléments. Pour le langage de documentation de
l'exercice, on utilisera les menus « Organisation », « Liste » et « Texte ».
48
49
Pour le langage Relax NG et le transformateur Trang voir http://relaxng.org.
http://jaxe.sourceforge.net/en_cinq_minutes.html. L'affichage des balises à la façon de Jaxe indique que l'édition se fait à
l'aide ce cet éditeur.
30
MENU 'Organisation'>
<MENU 'Organisation'
MENU 'Liste'>
<MENU 'Liste'
MENU 'Texte'>
<MENU 'Texte'
Les éléments du langage peuvent être définis à l'aide d'un schéma XML, ou avec une syntaxe
très simplifiée. On utilisera ici la syntaxe très simplifiée, qui se contente de définir les éléments,
leurs attributs et les sous-éléments. Le fichier de configuration de Jaxe permet en même temps
de décider de la façon dont Jaxe va afficher les éléments.
Commençons par l'élément TITRE. On pourra le trouver par exemple sous l'élément racine,
DOCUMENTATION. Comme on l'insérera avec le menu « Organisation », on va le définir ici. On
choisi les attributs nom='TITRE', titre='Titre' (qui sera utilisé pour le menu), et type='string' (Jaxe
l'affichera comme une simple chaîne de caractères). On ajoute ensuite TITRE comme
SOUSBALISE sous DOCUMENTATION, avec l'attribut nom='TITRE'.
Comme on veut avoir du texte dans les titres, on ajoute cette information avec l'élément TEXTE
dans la définition de l'élément.
RACINE>
BALISE 'DOCUMENTATION'>
SOUSBALISE 'TITRE'
<BALISE
<RACINE
MENU 'Organisation'>
BALISE 'TITRE'>
TEXTE
<BALISE 'TITRE'
<MENU 'Organisation'
Des attributs type très utilisés sont division (qui affiche un élément sous la forme de deux
grandes barres horizontales dans le texte), zone (affiche un élément en sautant aussi des lignes,
mais en prenant moins de place) et string (affiche aussi l'élément avec ELEMENT> et
<ELEMENT, mais sans sauter de ligne). Il est possible de rendre l'édition dans Jaxe plus
agréable en spécifiant par exemple des styles. Pour un titre, on aimerais avoir un affichage en
gras, ce qui s'obtient avec un paramètre. Il suffit d'ajouter PARAMETRE sous BALISE 'TITRE',
avec les attributs nom='style' et valeur='GRAS'. La liste complète des paramètres possibles est
donnée dans la documentation sur la syntaxe.
BALISE 'TITRE'>
PARAMETRE 'style'
TEXTE
<BALISE 'TITRE'
Plutôt que de remettre plusieurs fois les mêmes SOUSBALISE, on peut les grouper en
ensembles et utiliser ensuite SOUSBALISE ensemble='nomensemble' à chaque fois que l'on
veut mettre un ensemble de SOUSBALISE. Par exemple, on veut ici utiliser les éléments
EMPHASE, CODE et LIEN dans le texte. Il suffit de créer un ensemble sous JAXECFG, et
ensuite d'utiliser à chaque fois que l'on utiliser du texte avec tous ces éléments SOUSBALISE
ensemble='texte' au lieu d'utiliser simplement TEXTE.
ENSEMBLE 'texte'>
TEXTE
SOUSBALISE 'EMPHASE'
SOUSBALISE 'CODE'
SOUSBALISE 'LIEN'
<ENSEMBLE 'texte'
Le fichier de configuration complet: devient ainsi.
<?xml version="1.0" encoding="ISO-8859-1" ?>
31
<JAXECFG>
<FICHIERXSL nom="DOC.xsl" />
<RACINE>
<BALISE nom="DOCUMENTATION" titre="Documentation" type="division">
<SOUSBALISE nom="TITRE" />
<SOUSBALISE nom="SECTION" />
</BALISE>
</RACINE>
<MENU titre="Organisation">
<BALISE nom="TITRE" titre="Titre" type="string">
<PARAMETRE nom="style" valeur="GRAS" />
<TEXTE />
</BALISE>
<BALISE nom="SECTION" titre="Section" type="division">
<SOUSBALISE nom="TITRE" />
<SOUSBALISE nom="PARAGRAPHE" />
<SOUSBALISE nom="EXEMPLE" />
<SOUSBALISE nom="LISTE" />
</BALISE>
<BALISE commande="p" nom="PARAGRAPHE" titre="Paragraphe" type="zone">
<SOUSBALISE nom="TITRE" />
<SOUSBALISE ensemble="texte" />
</BALISE>
<BALISE nom="EXEMPLE" titre="Exemple" type="zone">
<PARAMETRE nom="police" valeur="Monospaced" />
<TEXTE />
<SOUSBALISE nom="ESPACE" />
</BALISE>
</MENU>
<MENU titre="Liste">
<BALISE nom="LISTE" titre="Liste" type="liste">
<SOUSBALISE nom="EL" />
</BALISE>
<BALISE nom="EL" titre="Elément de liste" type="item">
<SOUSBALISE ensemble="texte" />
</BALISE>
</MENU>
<MENU titre="Texte">
<BALISE nom="EMPHASE" titre="Emphase" type="string">
<PARAMETRE nom="style" valeur="ITALIQUE" />
<TEXTE />
</BALISE>
<BALISE nom="CODE" titre="Code" type="string">
<PARAMETRE nom="police" valeur="Monospaced" />
<TEXTE />
</BALISE>
<BALISE nom="ESPACE" titre="Espace" type="vide" />
<BALISE nom="LIEN" titre="Lien" type="string">
<ATTRIBUT nom="href" presence="obligatoire" />
<TEXTE />
</BALISE>
</MENU>
<ENSEMBLE nom="texte">
<TEXTE />
<SOUSBALISE nom="EMPHASE" />
<SOUSBALISE nom="CODE" />
<SOUSBALISE nom="LIEN" />
</ENSEMBLE>
</JAXECFG>
Le même exemple peut être l'objet d'un fichier de schéma XML séparé du fichier de
configuration Jaxe :
32
<?xml version="1.0" encoding="ISO-8859-1" ?>
<JAXECFG>
<DESCRIPTION>Exemple de documentation utilisant un schéma WXS</DESCRIPTION>
<FICHIERXSL nom="DOC.xsl" />
<FICHIERSCHEMA nom="DOC2.xsd" />
<RACINE>
<BALISE nom="DOCUMENTATION" titre="Documentation" type="division" />
</RACINE>
<MENU titre="Organisation">
<BALISE nom="TITRE" titre="Titre" type="string">
<PARAMETRE nom="style" valeur="GRAS" />
</BALISE>
<BALISE nom="SECTION" titre="Section" type="division" />
<BALISE commande="p" nom="PARAGRAPHE" titre="Paragraphe" type="zone" />
<BALISE nom="EXEMPLE" titre="Exemple" type="zone">
<PARAMETRE nom="police" valeur="Monospaced" />
</BALISE>
</MENU>
<MENU titre="Liste">
<BALISE nom="LISTE" titre="Liste" type="liste" />
<BALISE nom="EL" titre="Elément de liste" type="item" />
</MENU>
<MENU titre="Texte">
<BALISE nom="EMPHASE" titre="Emphase" type="string">
<PARAMETRE nom="style" valeur="ITALIQUE" />
</BALISE>
<BALISE nom="CODE" titre="Code" type="string">
<PARAMETRE nom="police" valeur="Monospaced" />
</BALISE>
<BALISE nom="ESPACE" titre="Espace" type="vide" />
<BALISE nom="LIEN" titre="Lien" type="string">
<ATTRIBUT nom="href" presence="obligatoire" />
<PARAMETRE nom="titreAtt" valeur="href" />
</BALISE>
</MENU>
</JAXECFG>
Le fichier produit par Jaxe est le suivant :
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <xs:schema xml:lang="fr" xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="DOCUMENTATION">
- <xs:complexType>
- <xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" ref="TITRE" />
<xs:element maxOccurs="unbounded" minOccurs="1" ref="SECTION" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TITRE" type="xs:string" />
- <xs:element name="SECTION">
- <xs:complexType>
- <xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" ref="TITRE" />
- <xs:choice maxOccurs="unbounded" minOccurs="1">
<xs:element ref="PARAGRAPHE" />
<xs:element ref="EXEMPLE" />
<xs:element ref="LISTE" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="PARAGRAPHE">
33
- <xs:complexType mixed="true">
- <xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="TITRE" />
<xs:group ref="texte" />
</xs:choice>
</xs:complexType>
</xs:element>
- <xs:element name="EXEMPLE">
- <xs:complexType mixed="true">
- <xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element ref="ESPACE" />
</xs:choice>
</xs:complexType>
</xs:element>
- <xs:element name="LISTE">
- <xs:complexType>
- <xs:sequence maxOccurs="unbounded" minOccurs="1">
<xs:element ref="EL" />
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="EL">
- <xs:complexType mixed="true">
- <xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:group ref="texte" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="EMPHASE" type="xs:string" />
<xs:element name="CODE" type="xs:string" />
<xs:element name="ESPACE" />
- <xs:element name="LIEN">
- <xs:complexType mixed="true">
<xs:attribute name="href" type="xs:string" />
</xs:complexType>
</xs:element>
- <xs:group name="texte">
- <xs:choice>
<xs:element ref="EMPHASE" />
<xs:element ref="CODE" />
<xs:element ref="LIEN" />
</xs:choice>
</xs:group>
</xs:schema>
Il ne reste plus qu'à définir un affichage pour les documents créés avec ce nouveau langage
XML. Jaxe utilise pour cela des feuilles de style XSLT qui transforment les documents XML en
HTML. On crée un document XSLT en choisissant le menu « Ouvrir la configuration » et en
choisissant XSLT_fr_Jaxe_cfg.xml. Les fichiers XSLT mélangent plusieurs langages XML dans
un document. On voit donc ici des menus pour XSLT et des menus pour XHTML.
Une fois créé, le fichier XSL doit être indiqué au début du fichier de configuration. Il doit être
placé dans le dossier config de Jaxe.
JAXECFG>
FICHIERXSL 'DOC.xsl'>
<FICHIERXSL 'DOC.xsl'
Finalement, il ne reste plus qu'à choisir le menu « Ouvrir la documentation... » et choisir notre
fichier de configuration, DOC_Jaxe_cfg.xml, pour créer un nouveau document avec.
34
Analyse syntaxique : les parseurs
Extraction / découpage des données (parsing)
Le parsing est la procédure qui permet d'extraire des données pour les découper dans des
morceaux d'information interprétables et manipulables. Le programme qui fait le parsing, nommé
parseur, peut être assimilé à un outil d'analyse syntaxique. C'est d'ailleurs le sens premier du
terme anglais parser. Dans le contexte XML un analyseur syntaxique est destiné à récupérer les
informations contenues dans les balises d'un document. Les informations sont distinguées en
fonction de leur contenu et de leur situation dans le document (balise de début, balise de fin,
etc.). Le parseur XML peut analyser et valider un fichier XML en s’appuyant sur les définitions
contenues dans un schéma XML ou une DTD.
Il existe deux types de parseurs :
• les parseurs validant vérifient que le document est conforme à une DTD,
• les parseurs non validant vérifient le caractère bien formé (well-formedness) du
document soit l'ordre d'ouverture et de fermeture des balises.
Deux familles de parseur XML ont été développé :
• le modèle événementiel (event-based model) comme SAX (Simple API for XML) qui
parcourt séquenciellement un fichier pour détecter et traiter localement des balises
• le modèle par compilation ou basé arbre (tree-based model) comme DOM (Document
Object Model), qui examine, traite et transforme l'ensemble de l'arborescence.
le choix de l’une ou de l’autre dépendant de critères techniques qui ne peuvent être développé
dans ce cours50 Les interfaces SAX et DOM sont très bien standardisées pour Java ce qui est
une garantie d’indépendance vis-à-vis des solutions développées en C/C++ notamment.
Parmi les parseur xml citons : xerces dom (Open source, appartenant au projet Apache) / xerces
sax / crimson dom (Open source, intégré au jdk 1.4) / dom4j / exml / xpp / intégré dotnet,
msxml / aelfred. On peut ajouter une catégorie supplémentaire de parseurs, les Pull parseurs
qui permettent de traiter de manière efficace des flux XML dont la grammaire est connue et dont
le contenu des documents respectant cette grammaire est sans surprise. xmlpull.org a pour
objectif la définition d'une Application Programming Interface (API) commune pour les parseurs
de type "pull"51.
L'écriture d'un petit parseur en php
A titre d'exemple, le traitement va porté sur des documents XML à la mode : les fichiers RSS.
On parle de « syndication de contenu »52 pour désigner la possibilité de republier sur un site
Web - en principe de façon automatisée - du contenu provenant d'un autre site Web. Depuis
l'origine du Web ou presque, de nombreux procédés ont vu le jour pour permettre cette
syndication. Dans les dernières années, un ou plutôt plusieurs format(s) se sont imposés pour
assurer la syndication de contenu, regroupés sous le terme "RSS". RSS n'est pas une norme et
fait même l'objet d'une véritable bataille de standards53. Si RSS est particulièrement bien adapté
aux sites d'actualités, donc aux Weblogs, il peut également être utilisé dans d'autres cadres.
50
51
52
53
http://www.commentcamarche.com/xml/xmlintro.php3
http://xmlfr.org/documentations/
http://www-rocq.inria.fr/~abitebou/Master-SSD/DOCS/XSL/XSLT_1.pdf
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/33-role.pdf
http://www.xmlpull.org/
L'article de Elliotte Rusty est une très bonne introduction aux parseurs de type pull.
http://www.xml.com/lpt/a/2002/08/14/xmlpull.html
Pour limplémentation d'un pull parser : http://www.extreme.indiana.edu/xgws/xsoap/xpp/
La spécification qui vise à standardiser au niveau java les pull parseurs est hébergée par le Java Community Process
(JCP). http://jcp.org/jsr/detail/173.jsp
Source : Cyril Fiévet et Marc-Olivier Peyer
http://www.pointblog.com/abc/rss_et_syndication_1.htm
C'est par abus de langage, que l'on parle de « fichier RSS », mais il existe en réalité plusieurs types de flux RSS,
correspondant à des formats différents : RSS 0.91 RSS 0.92 RSS 2.0 (« fichier RSS » est souvent de type "rss.xml"), RSS
1.0 Le « fichier RSS » est souvent de type "rss.rdf", Atom en passe de devenir un standard reconnu par l'Internet
Engineering Task Force (IETF).
35
RSS signifiait initialement "Rich Site Summary" (Sommaire de site enrichi) mais l'acronyme est
souvent interprété comme "Really Simple Syndication" (une Syndication vraiment simple).
RSS est un moyen de décrire un contenu Web, à l'aide de balises spécifiques. Le principe de
fonctionnement de RSS est très simple : un fichier texte est généré par un site Web ou un blog.
Ce fichier comporte des "tags", qui caractérisent le contenu et sont décodés par des logiciels
conçus à cet effet : un « agrégateur » ou « lecteur RSS ». Ce qu'on appelle « flux » ou « fil »
RSS est donc un simple fichier texte, comprenant du contenu (en général une succession
d'actualités) et des balises délimitant les champs de ce contenu (titres, dates, auteurs). En
quelque sorte, c'est un « résumé propre », formaté dans une syntaxe précise, de ce qu'il y a de
nouveau sur un site Web. Ce fichier est le plus souvent généré automatiquement, au fur et à
mesure de la publication de nouvelles actualités, de sorte qu'il n'existe qu'un fichier RSS pour un
site Web ou blog donné. Iil est possible de générer plusieurs fils RSS, un par rubrique du site
par exemple, mais le principe reste le même. L'utilisateur qui veut ensuite tirer parti de ce
contenu, c'est-à-dire le syndiquer sur son propre site ou simplement consulter le fil d'actualités
correspondant, n'a plus qu'à récupérer ce fichier RSS, accessible par une URL unique.
Un parseur, écrit à l'aide du langage de scripts php54, va parcourir, ligne par ligne, un document,
le fichier rss disponible à l'adresse http://linuxfr.org/backend.rss. et « s'arrêter » lorsqu'il
rencontre une balise « ouvrante » (entre < et >), une balise « fermante » (entre </ et >) ou du
texte entre deux balises. A l' occurrence de l'un de ces cas, le parseur appelle la fonction définie
afin d'effectuer le traitement nécessaire.
La première étape consiste donc à lire le document ligne par ligne comme le permet le script
suivant, ouvert et fermé par les balises <?php, respectivement ?>. La variable $fichier se voit
assigné l'URL du fichier à lire, l'ouverture du fichier est commandée par $fp à laquelle on
assigne la fonction fopen(nom_fichier, r,w). Un saut conditionnel permet d'afficher un message
d'erreur en cas d'impossibilité d'ouverture du fichier. Enfin une boucle while lit, ligne par ligne le
fichier. La commande echo, affiche la ligne (ici en format html). Le symbole // désigne une ligne
de commentaire.
<?php
$fichier = "http://linuxfr.org/backend.rss";
// Ouverture du fichier désigné par la variable $fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Affichage "brut" de la ligne convertie en HTML
echo htmlEntities($ligneXML)."<br />";
}
fclose($fp);
?>
L'application de ce script entraîne l'affichage du document correspondant à l'URL désignée par
la variable $fichier :
<?xml version="1.0" encoding="iso-8859-15" ?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
"http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
<title>DLFP - Dépêches</title>
54
Le but ici n'est pas de s'initier à php, mais seulement d'examiner les mécanismes mis en œuvre par un parseur.
Concernant php, se référer à : http://www.phpfrance.com/documentation.php ou http://www.php.net/manual/fr/ Pour pouvoir
tester les scripts décrits ci-dessous, il faut installer PHP (www.php.net php-4_X_X-win32.zip), mais également un serveur
web pour accéder aux scripts PHP via un navigateur. L'utilisation du serveur web Apache (www.apache.org
apache_1_3_X_win32.exe (dossier binaries/win32)) , leader du marché, rapide, fiable et gratuit est proposée. Apache et
PHP peuvent être installés automatiquement en utilisant un utilitaire qui installe et configure tout ce dont on a besoin ou
manuellement, en suivant les étapes décrites dans le tutorial :http://www.phpfrance.com/tutoriaux/
36
<link>http://linuxfr.org/news/</link>
<description>LinuxFr</description>
<language>fr</language>
<item>
<title>Déplacement des RSS</title>
<link>http://linuxfr.org/forums/13/3440.html</link>
<description>Ce flux RSS a été déplacé.
La version RSS 0.91 se trouve maintenant sur http://linuxfr.org/backend/news/rss091.rss et une version en RSS 2.0 se
trouve sur http://linuxfr.org/backend/news/rss20.rss
</description>
</item>
</channel>
</rss>
Pour créer le parseur; php dispose de la fonction xml_parser_create() (PHP 3 >= 3.0.6, PHP 4,
PHP 5) crée un analyseur XML et retourne une référence sur cet analyseur pour qu'il puisse être
utilisé ultérieurement par d'autres fonctions XML. Le paramètre optionnel encoding spécifie le
jeu de caractères d'encodage pour l'entrée/sortie dans PHP 4. Depuis PHP 5, ce jeu de
caractères est automatiquement détecté, et donc, le paramètre encoding ne spécifie plus que la
sortie. En PHP 4, le jeu de caractères de sortie par défaut est le même que celui d'entrée. Si
une chaîne vide est passée, le parseur tente d'identifier quel jeu de caractère a été utilisé pour
encoder le document en regardant les 3 ou 4 octets du haut. En PHP 5.0.0 et PHP 5.0.1, le jeu
de caractères d'entrée par défaut est ISO-8859-1, tandis qu'en PHP 5.0.2 et suivant, il vaut UTF8. Les jeux de caractères supportés sont ISO-8859-1, UTF-8 et US-ASCII. . A la fin du script, les
ressources allouées par ce « parseur » devront être restituées par un appel à xml_parser_free().
Lorsque le parseur rencontre du texte (compris entre deux balise), il appelle une fonction, créée
au préalable et lui passe deux paramètres : l'identifiant du parseur et le texte rencontré. Il faut
bien entendu indiquer au parseur le nom de la fonction à appeler : c'est le rôle de la fonction
xml_set_character_data_handler(), qui réclame deux paramètres : l'identifiant du « parseur » et
le nom de la fonction chargée de traiter le texte. L'analyse proprement dite du fichier, fait appel
(ligne après ligne) à la fonction xml_parse() avec trois paramètres : l'identifiant du parseur, la
ligne à parser et un booléen (TRUE ou FALSE) indiquant s'il s'agit de la dernière ligne du fichier
ou non. xml_set_character_data_handler (PHP 3 >= 3.0.6, PHP 4, PHP 5) affecte les
gestionnaires de texte littéral, les gestionnaires de début et de fin de l'analyseur XML parser.
handler est une chaîne qui contient le nom d'une fonction qui existe lorsque xml_parse() est
appelé pour créer parser. La fonction handler doit accepter deux paramètres : handler ( resource
parser, string data ). Le premier paramètre, parser, est une référence sur l'analyseur XML qui
appelle cette fonction. Le second paramètre, data, contient les caractères sous la forme d'une
chaîne. xml_set_character_data_handler() retourne TRUE si le gestionnaire est actif, et FALSE
sinon, ou si parser n'est pas un analyseur.
<?php
$fichier = "http://linuxfr.org/backend.rss";
// Fonction particulière de traitement du texte appelée par le parseur
function fonctionTexte($parseur, $texte)
{
// Afficher le texte brut accompagné d'un simple retour à la ligne
echo $texte."<br/>";
}
// Création du parseur XML
$parseurXML = xml_parser_create();
// Nom de la fonction a appeler lorsque du texte est rencontré
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
37
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Analyse de la ligne (feof($fp) retourne TRUE s'il s'agit de la dernière ligne du fichier).
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
?>
L'utilisation de ce script filtre les balises et retourne, ligne par ligne, la texte situé entre celles-ci.
DLFP - Dépêches
http://linuxfr.org/news/
LinuxFr
fr
Déplacement des RSS
http://linuxfr.org/forums/13/3440.html
Ce flux RSS a été déplacé.
La version RSS 0.91 se trouve maintenant sur http://linuxfr.org/backend/news/rss091.rss et une version en RSS 2.0 se
trouve sur http://linuxfr.org/backend/news/rss20.rss
Seuls les textes des balises <title> des blocs <item> et le texte des balises <link> doivent être
récupérés. De plus le but n'est pas d'afficher ces résultats mais de les proposer sous forme de
liens hypertextes. Une telle sélection implique la détection par le parseur des balises ouvrantes
(et éventuellement fermantes). Une fonction chargée de traiter le cas des balises ouvrantes,
dotée de trois paramètres (l'identifiant du parseur, le nom de la balise ouvrante rencontrée et le
tableau des attributs de la balise) doit être déclarée auprès du parseur à l'aide de la fonction
xml_set_element_handler(). La fonction en charge des balises fermantes est appelée avec deux
paramètres: l'identifiant du parseur et le nom de la balise fermante rencontrée. (qui attend 3
paramètres : l'identifiant du parseur, le nom de la fonction traitant les balises ouvrantes et le nom
de la fonction traitant les balises fermantes). xml_set_element_handler() affecte les
gestionnaires de début et de fin de l'analyseur XML parser. start_element_handler et
end_element_handler sont des chaînes qui contiennent les noms de fonctions qui existent
lorsque xml_parse() est appelé pour créer parser. La fonction start_element_handler doit
accepter trois paramètres: start_element_handler ( resource parser, string name, array attribs ).
Le premier paramètre, parser, est une référence sur l'analyseur XML qui appelle cette fonction.
Le deuxième paramètre, name, contient le nom de l'élément qui a provoqué l'appel du
gestionnaire. Si l'analyseur gère la casse, cet élément sera en majuscule. Le troisième
paramètre, attribs, contient un tableau associatif avec les attributs de l'éléments (s'il en existe).
Les clés de ce tableau seront les noms des attributs, et les valeurs seront les valeurs
correspondantes des attributs. Les noms des attributs seront mis en majuscule si l'analyseur
gère la casse. Les valeurs des attributs seront intouchées. L'ordre original des attributs peut être
retrouvé en passant en revue le tableau attribs, avec la fonction each(). La première clé sera la
première clé du tableau. La fonction endelementhandler doit accepter deux paramètres:
end_element_handler ( resource parser, string name ). Le premier paramètre, parser, est une
référence sur l'analyseur XML qui appelle cette fonction. Le second paramètre, name, contient le
nom de l'élément qui a provoqué l'appel du gestionnaire. Si l'analyseur gère la casse, cet
élément sera en majuscule. Si un gestionnaire reçoit une chaîne vide, ou FALSE, c'est qu'il est
en train d'être désactivé. xml_set_element_handler() retourne TRUE si le gestionnaire est actif,
et FALSE sinon, ou si parser n'est pas un analyseur.
Le script peut être complété de la manière suivante :
<?php
$fichier = "http://linuxfr.org/backend.rss";
// Traitement des balises ouvrantes
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
// Mémoriser le nom de la balise pour en tenir compte dans la fonction "fonctionTexte"
38
global $derniereBaliseRencontree;
$derniereBaliseRencontree = $nomBalise;
}
// Traitement des balises fermantes
function fonctionBaliseFermante($parseur, $nomBalise)
{
// Oubli de la dernière balise rencontrée
global $derniereBaliseRencontree;
$derniereBaliseRencontree = "";
}
// Fonction particulière de traitement du texte appelée par le parseur
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
// Selon les cas: afficher le texte ou proposer un lien. Par défaut les noms des balises sont mis en majuscules
switch ($derniereBaliseRencontree) {
case "TITLE":
echo $texte;
break;
case "LINK":
echo ":<a href=\"$texte\">L'article complet</a><br />";
break;
}
}
// Création du parseur XML
$parseurXML = xml_parser_create();
// Nom des fonctions à appeler lorsque des balises sont rencontrées
xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
, "fonctionBaliseFermante");
// Nom de la fonction a appeler lorsque du texte est rencontré
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Analyse de la ligne feof($fp) retourne TRUE s'il s'agit de la dernière ligne du fichier.
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
?>
Ce qui donne, les liens étant affichés avec la mention : L'article complet
DLFP – Dépêches : L'article complet
Déplacement des RSS : L'article complet
39
La solution est proche. Pour distinguer le lien vers le site des liens vers les articles et mettre les
liens directement sur les titres plutôt qu'à coté, il faut mémoriser les informations avant de les
afficher et savoir quand les afficher. L lien associé à un article n'est connu qu'après en avoir eu
le titre ce qui interdit d'afficher les éléments au fur et à mesure pour créer des liens du type <a
href="lien">titre</a>. Le script complet devient alors :
<?php
$fichier = "http://linuxfr.org/backend.rss";
// Traitement des balises ouvrantes
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
// Mémoriser le nom de la balise pour en tenir compte dans la fonction "fonctionTexte"
global $derniereBaliseRencontree;
$derniereBaliseRencontree = $nomBalise;
}
// Traitement des balises fermantes
function fonctionBaliseFermante($parseur, $nomBalise)
{
global $derniereBaliseRencontree;
global $titre;
global $lien;
switch ($nomBalise) {
case "CHANNEL" :
// Quitter le bloc channel, afficher le titre de
// la liste d'articles
echo "<center><b>Les dernières nouvelles issues de ".
"<a href=\"$lien\">$titre</a></b></center>";
// Oubli de titre et lien
$titre = "";
$lien = "";
break;
case "ITEM" :
// Quitter un bloc item, afficher le titre de l'article
echo "- <a href=\"$lien\">$titre</a><br />";
// Oubli de titre et lien
$titre = "";
$lien = "";
break;
}
// Oubli de la dernière balise rencontrée
$derniereBaliseRencontree = "";
}
// Fonction particulière de traitement du texte appelée par le parseur
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
global $titre;
global $lien;
// Le texte ou lien n'est pas affiché directement mais seulement après avoir rencontré la balise fermante
// et ainsi avoir tous les élements avant l'affichage. Par défaut les noms des balises sont mis en majuscules
switch ($derniereBaliseRencontree) {
case "TITLE":
$titre = $texte;
break;
40
case "LINK":
$lien = $texte;
break;
}
}
// Création du parseur XML
$parseurXML = xml_parser_create();
// Nom des fonctions à appeler lorsque des balises sont rencontrées
xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
, "fonctionBaliseFermante");
// Nom de la fonction a appeler lorsque du texte est rencontré
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Analyse de la ligne feof($fp) retourne TRUE s'il s'agit de la dernière ligne du fichier.
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
?>
Ce qui donne
- Déplacement des RSS
Les dernières nouvelles issues de
Le modèle événementiel (SAX)
Le parseur SAX55 permet d'interfacer des programmes devant accéder au contenu d'un
document XML en fournissant, au travers d'un API, une séquence d'événements issus des
objets rencontrés dans le fichier. SAX met en place des triggers qui se déclenchent sur certaines
balises du fichier XML, qui correspondent à des événements du type : début d'élément, attribut,
fin d'élément. SAX est basé sur un modèle événementiel, cela signifie que SAX permet de
déclencher des événements au cours de l'analyse du document XML. Une application utilisant
SAX implémente généralement des gestionnaires d'événements, lui permettant d'effectuer des
opérations selon le type d'élément rencontré. SAX lit séquentiellement le fichier XML et retourne
au programme chaque élément du document. C'est rapide, efficace et très peu gourmand en
mémoire56. L'application SAX doit donc être conçue pour traiter les informations de la même
façon que le parseur : de manière séquentielle. Il est donc adapté aux applications qui extraient
de l'information d'un document ou se contentent d'ajouts, suppressions ou modifications de
quelques éléments, plutôt qu'aux programmes modifiant la structure des données. De telles
opérations sont généralement plus facile à implanter avec un parseur DOM.SAX est surtout
utilisée pour l'extraction et l'écriture des données du ficher XML dans un autre format (vers des
pages HTML par exemple).
La première version de SAX (stabilisée en mai 1998) restait encore limitée sur certains aspects.
L'extension SAX 2.0 (mai 2000) supporte les namespaces, les filtres de chaînes, le
positionnement et interrogation des paramètres sur le parsing. L'API SAX définit les quatre
interfaces suivantes :
55
56
http://www.saxproject.org/
SAX ne garde pas les balises et les labels rencontrées, ne résout pas les références contenues dans le fichier, ...
41
1) ContentHandler possèdant des méthodes renvoyant des événements relatifs au
document :
• startDocument() renvoyant un événement lié à l'ouverture du document
• startElement() renvoyant un événement lié à la rencontre d'un nouvel élément
• characters() renvoyant les caractères rencontrés
• endElement() renvoyant un événement lié à la fin d'un élément
• endDocument() renvoyant un événement lié à la fermeture du document
2) ErrorHandler possédant des méthodes renvoyant des événements relatifs aux erreurs
ou aux avertissements
3) DTDHandler renvoie des événements relatifs à la lecture de la DTD du document XML
4) EntityResolver permet de renvoyer une URL lorsqu'une URI est rencontrée
Avantages :
peu gourmand en mémoire (surtout pour les très gros documents)
• rapide
• représentation libre des documents
•
Inconvénients :
un élément retourné par le parseur n'a parfois pas assez de sens pour pouvoir être
traité tout-de-suite.
• souvent, les données doivent être stockées dans des structures (piles ou vecteurs)
pour un usage ultérieur
• la méthode "characters()" ne retourne pas forcément tous les caractères d'un élément
en une seule fois
Soit le document XML suivant :
•
<personne>
< nom>Porchet</nom>
< prenom>Michel</prenom>
< /personne>
Une interface événementielle telle que l'API SAX permet de créer des événements à partir de la
lecture du document ci-dessus. Les événements générés seront :
start document
start element: personne
start element: nom
characters: Porchet
end element: nom
start element: prenom
characters: Michel
end element: prenom
end element: personne
end document
Ainsi une application basée sur SAX peut gérer uniquement les éléments dont elle a besoin sans
avoir à construire en mémoire une structure contenant l'intégralité du document.
Fonctionnement :
1) ouverture du fichier à analyser
2) lecture d'une partie significative du fichier
3) si cette partie pose un problème (document mal formé ou non valide), appel d'une
méthode du ErrorHandler est une référence à une entité (&truc;), appel d'une méthode
du EntityResolver est un composant de la DTD, appel d'une méthode du DTDHandler
est une balise, du texte, etc., appel d'une méthode du ContentHandler si le document
n'est pas terminé, retour en 2
42
Modèle par compilation ou basé arbre (DOM)
DOM (Document Object Model)57 est une spécification du W3C définissant la structure d'un
document sous forme d'une hiérarchie d'objets, afin de simplifier l'accès aux éléments
constitutifs du document. Plus exactement DOM est un langage normalisé d'interface (API),
indépendant de toute plateforme et de tout langage, permettant à une application de parcourir la
structure du document et d'agir dynamiquement sur celui-ci. Ainsi Javascript et ECMAScript
utilisent DOM pour naviguer au sein du document HTML, ce qui leur permet par exemple de
pouvoir récupérer le contenu d'un formulaire, le modifier, ...
DOM se divise en deux spécifications :
• La spécification DOM level 1 (DOM niveau 1) se séparant en deux catégories
• Core DOM level 1: La spécification pour les documents en général (dont XML)
• HTML DOM level 1: La spécification retenant uniquement les méthodes
applicables à HTML
• La spécification DOM level 2 ajoutant de nouvelles fonctionnalités comme la prise en
compte des feuilles de style CSS dans la hiérarchie d'objets.
Les analyseurs utilisant l'interface DOM souffrent du fait que cette API impose de construire en
mémoire un arbre contenant l'intégralité des éléments du document quelle que soit l'application.
Ainsi pour de gros documents, DOM devient insuffisant, son utilisation lente et mal commode.
Pour cette raison, la norme DOM est généralement peu respectée et chaque éditeur
l'implémente selon ses besoins, ce qui provoque l'apparition de nombreux parseurs utilisant des
interfaces propriétaires...
Un environnement de travail XML
Un environnement de travail XML suppose trois grands groupes :
• des outils d'édition de documents XML
• une chaîne de traitement des données XML
• un environnement de développement d'outils XML.
Les outils d'édition de documents
Les éditeurs XML
L’éditeur XML universel reste à inventer. Les bons éditeurs ne sont pas WISIWIG, en partie pour
des raisons de principe, l'apparence du document n'est pas l'essentiel dans le monde XML. En
plus de Jaxe, vu dans ce cours il faut citer, dans le domaine Open source, PSGML pour Emacs
et Xemacs. Leur utilisation est rédhibitoire à la plupart des utilisateurs habitués aux éditeurs de
type traitement de texte. D’autres produits existent mais ne sont pas Open source tels que
Xmetal58 de softquad, ou oXygen59. Certains éditeurs sont intégrés aux navigateurs, offrant ainsi
une certaine flexibilité dans le déploiement de solutions car l’éditeur n’est pas installé en local.
Dans cette catégorie on notera Midas (Mozilla 1.3), ActiveX XML Editor (navigateur IE 5.5+) et
les applets Swing.
La suite bureautique OpenOffice
Dans l’appropriation de l’outil bureautique, des exigences de productivité et la relative facilitée
d’utilisation des macros ont conduit certains utilisateurs à développer de véritables applications
sur leur poste de travail60. Ce fut déjà l’un des constats lors du recensement des applications
« importantes » pour le passage à l’an 2000 et aucune raison ne s’oppose aujourd’hui à ce que
57
58
59
60
http://www.w3.org/DOM/
http://www.xmetal.com/index.x
http://www.oxygenxml.com/
http://www.zdnet.fr/telecharger/windows/fiche/0,39021313,39093945s,00.htm
Le développement de macros par les utilisateurs finaux n'est efficace qu'à court terme, cachées et difficiles à documenter,
elles vont à l'encontre de toute standardisation. Au-delà des développements privés on peut citer le travail fait par
l'université de Lyon 2 sur le dépôt électronique des thèses en exploitant les possibilités des macros word. Si là l'effort de
standardisation est indéniable, il n'en reste pas moins qu'un tel standard reste captif de Microsoft.
43
ces pratiques, et par conséquent leurs effets pervers, perdurent. La suite OpenOffice a pour
particularité de permettre l’enregistrement des documents au format XML. Le constat précédent
renforce la cohérence de la démarche OpenOffice qui, outre la séparation de la présentation et
des contenus, privilégie stratégiquement également la séparation des traitements par
l’application bureautique. Le développement de langage de macro instruction rend l’utilisateur
captif du produit.
Il est possible d'utiliser la suite OpenOffice si l’usager s’astreint à utiliser les styles permettant de
faciliter la transformation XSLT du document XML natif généré. La politique de déploiement de
la suite bureautique Open office au sein des organismes doit s’accompagner d’une démarche
visant à favoriser une séparation nette du traitement d'une part et de la suite bureautique
d'autre part. La démarche du groupe de travail du consortium OASIS61, dans les choix
d’architectures applicatives, vise à spécifier des formats de documents fondés sur le format XML
généré par la suite OpenOffice. L’outil bureautique devient donc l’interface standard avec les
différentes applications de service en ligne.
Tex et LaTex
On peut citer, pour mémoire, les outils TeX et LaTeX très utilisés dans l'édition scientifique,
souvent en compagnie de Emacs qui peuvent parfaitement être utilisés dans un contexte XML.
Une chaîne de traitement des données XML
Une chaîne de traitement est présentée ci-dessous62. Les différents modules de la chaîne de
sont : les parseurs, l'agrégateur, le transformateur, le sérialiseur le serveur et finalement le
navigateur.
Figure 5 : un environnement de travail XML
Les parseurs
Les parseurs ont été vus au chapitre précédent.
L'agrégateur
La syndication consiste à mettre à disposition un flux et l'agrégation consiste à lire un ou
plusieurs flux de syndication provenant de source différentes. Les mécanismes de syndication
peuvent varier beaucoup en fonction du contexte. L'émetteur de textes peut lui-même mettre à
jour les données qu'il créée sur une base partagée, des protocoles du genre OAI peuvent être
utilisés pour des fonds n'évoluant que lentement, enfin des échanges en quasi temps réel sont
61
62
http://www.oasis-open.org/committees/office/
Inspiré par www.adae.gouv.fr/upload/documents/xml.rtf
44
permis en recourant à des flux et à un agrégateur RSS indépendant du web (programme client
ou client mail avancé tel que Mozilla ThunderMail par exemple). Les agrégateurs de nouvelles
RSS sont des applications bureau ou Web utilisées pour récupérer et afficher les fils RSS de
différentes sources de nouvelles. Parmi les exemples d'agrégateurs de nouvelles RSS, on
trouve NewzCrawler, NewsGator et AmphetaDesk. L'agrégateur de nouvelles doit être capable
de traiter les trois versions les plus répandues du format RSS (versions 0.91, 1.0 et 2.0).
L'agrégateur de nouvelles doit utiliser un navigateur Web intégré, afin de permettre l'affichage
de contenu complexe et la navigation vers des pages Web liées à partir d'éléments RSS.
Les transformateurs XSLT
Les transformateurs XSLT sont disponibles sous forme d’API. On peut citer l’API
java.xml.transform qui permet d’utiliser n’importe ainsi que les transformateurs Saxon et XALAN.
Les sérialiseurs
Le sérialiseur permet de transformer du XML vers un autre format. Les transformations les plus
courantes sont XHTML vers du HTML pour une publication Web, XML vers du PDF avec par
exemple FOP de Apache. Dans le domaine de la bureautique on identifie les données issues de
tableurs tels que Gnumeric vers un format Excel. Dans ce domaine il est possible de recourir à
la suite OpenOffice.
Le serveur Web
Un serveur Web XML est la dernière brique du pipeline XML ; dans cette catégorie on retiendra
principalement le serveur TOMCAT/Cocon d’Apache et le serveur Enhydra de Lutris.
Les navigateurs XML
Un navigateur XML doit permettre d'afficher un document XML quelconque de la manière la plus
transparente qui soit pour l’utilisateur. La tendance actuelle est d’avoir des navigateurs qui soient
en mesure d’afficher du XHTML et d’effectuer les transformations XSLT (comme par exemple
les navigateurs en Open source Mozilla.
Les environnements de développement
Une plateforme de développement est une catégorie particulière d’outils que l’on destine en
général à la maîtrise d’ouvrage et la maîtrise d’œuvre d’applications. Elle permet, quelle que soit
la phase du projet, de faciliter le travail d’équipe en s’appuyant sur des outils parfaitement
intégrés et adaptés aux besoins de chacun. Le développement de services repose sur
l’intégration de nombreux éléments complexes et hétérogènes et nécessite le travail d’équipes
souvent dispersées. Les outils de travail collaboratifs permettent de faciliter cette intégration.
La communication entre la maîtrise d’ouvrage et la maîtrise d’œuvre peut être formalisée de
différentes manières. Les recommandations actuelles, notamment si l’on se réfère au cadre
commun d’interopérabilité, sont de privilégier la représentation à partir d’UML63. Une plateforme
de développement d’application doit donc offrir des modules qui prennent en compte ce type de
représentation et de modélisation des systèmes d’information. Par ailleurs, la généralisation
d’XML dans les applications et les briques de services en cours de développement nécessite un
environnement facilitant sont intégration.
Il existe des environnements de développement d’application intégré (IDE - Integrated
Development Environment) en 0pen source comme NetBeans. Seule la plate forme Eclipse,
initialement développée par IBM, sera abordée. Elle est aujourd’hui dans le domaine de l’Open
source sous licence CPL.
63
Né de la fusion des méthodes objet dominantes (OMT, Booch et OOSE), puis normalisé par l'OMG en 1997, UML est
devenu un standard incontournable. UML n'est pas à l'origine des concepts objet, mais il en en donne une définition plus
formelle et apporte la dimension méthodologique qui faisait défaut à l'approche objet.
http://uml.free.fr/
45
Les langages de programmation
Traditionnellement, l’association java et XML est retenue dans la majorité des projets.
Néanmoins Perl et Python offrent des outils et sont suffisants pour la plupart des besoins et l'on
utilise aussi C ou C++.
La plate forme ECLIPSE64
Eclipse est une plate-forme java Open source dédiée au développement d'outils. Elle supporte
déjà de nombreux outils de développement de haut niveau : un IDE complet Java (JDT) et
C/C++ (CDT), un environnement de création de plug-in (PDE) et un ensemble de frameworks de
fondations qui garantissent une bonne interopérabilité des plugins, etc. La plate-forme est
facilement étendue par de multiples plugs-ins astucieusement intégrés.
Le projet Technologies d'Eclipse est consacré aux nouvelles initiatives à long terme de
développement sur la plate-forme Eclipse. D'abord stabilisées avec des builds anciens de la
plate-forme, ces implémentations pourront ensuite rejoindre une version officielle d'Eclipse. Ce
projet héberge déjà les initiatives pour l'intégration poussée de la programmation orientée
Aspect (AspectJ Development Tools Project) et également Stellation, un projet pour intégrer un
tout nouveau système de gestion de configuration. Ces projets sont souvent initiés par la
contribution d'un des membres du consortium Eclipse. Quand une nouvelle fonctionnalité devient
compliquée à implémenter sur Eclipse et réclame un nombre conséquent de plug-ins, et quand
de plus elle forme un tout cohérent par elle-même, il convient de démarrer un projet Eclipse
Tools. C'est déjà le cas pour l'environnement de développement C/C++ (C/C++ Development
Tools ou CDT) et également des framework pour le développement d'applications graphiques
basées sur la bibliothèque SWT : Graphical Editor Framework.
Quelques vocabulaires XML spécifiques
XHTML
XHTML est une implémentation XML de HTML. Certaines DTD XHTML très strictes interdisent
les balises de style et les tableaux, d'autres plus souples n'encouragent pas ce type de balises
(l'usage des tableaux pour la mise en page est découragé, il faut plutôt, utiliser les éléments div
et span, combinés avec un fichier CSS, pour positionner des blocs de texte sur l'écran). La
spécification CSS peut résider dans un fichier extérieur, avec un lien dans l'en-tête du document
XHTML, ou être directement spécifiée à l'intérieur de chaque élément XHTML grâce à l'attribut
style. Les documents XHTML requièrent une déclaration DOCTYPE au début du fichier qui
annonce quelle version de XHTML est respectée dans le document.
• Le document doit avoir un et un seul élément html.
• Tous les éléments sont en bas de casse
• Les éléments vides tels que hr et br doivent être fermés comme suit: <hr /> et <br />
• Les attributs doivent être entre guillements, comme dans <img src="logo.gif"/>
• Les éléments doivent s'emboîter correctement
• Les caractères <, >, et & doivent être codés en tant qu'entités
XHTML a quatre attributs « communs » à n'importe quel élément XHTML :
1. id - utilisé pour identifier une position unique dans un fichier
2. title - utilisé pour attribuer une étiquette lisible (par l'homme) à un élément
3. style - qui est utilisé pour des informations du type CSS
4. class - utilisé pour attribuer une étiquette à un élément, en général pour les feuilles de style
CSS
64
http://www.eclipse.org/
46
Un exemple de page Web peut être créé à l'aide de l'éditeur Jaxe. La figure 4 page XXX montre
l'éditeur Jaxe en cours d'édition d'un fichier xhtml à partir du document texte « Igitur ». Le code
source xml produit est le suivant :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html lang="" xml:lang="" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Igitur : un projet de film</title>
<link href=""home.css"" rel=""stylesheet"" type=""text/css"" />
</head>
<body>
<div class="menu">
<h3 class="label">Liens</h3>
<a href="http://www.mshparisnord.org/" title="Production">MSH Paris nord</a>
<br />
<a href="http://membres.lycos.fr/mirra/Mallarmabsolu.html" title="Réflexions sur l'information">Mallarmé : Verbe et
Quête de l'Absolu</a>
<br />
<a href="www.adpf.asso.fr/adpf-publi/folio/mallarme/biblio07.html" title="Accueil Infomotions">Thèse de Jean Pierre Richard : "L'UNIVERS IMAGINAIRE DE MALLARMÉ"</a>
<br />
</div>
<div class="content">
<h1>Igitur : un projet de film</h1>
<p>Ceci est une page de description d'un projet de film qui illustre l'usage de XHTML version 1.0.</p>
<p>On est emmené par le mouvement très lent du steadycam, pris par un rythme qui permet aux choses de s'installer
et rend possible un regard attentif aux moindres choses. On découvre la scène de loin puis on s'approche jusqu'à
effleurer les peaux des personnages.Le rythme est continu, le plus fluide possible, Les personnages occupent une place
fixe dans la pièce, seul le " steadycameur " se déplace.</p>
<p>Le lieu est un château délabré, tentures arrachées, défraîchies, restes d?une splendeur passée qui s'ouvre
aujourd?hui à une autre dimension de sa beauté? " Beauté misérable, matières agitées par le vent du temps ". Les
pièces sont vides. Le " steadycameur " chemine dans cinq pièces accolées les unes aux autres et toutes au même
niveau. La chambre d'Igitur est architecturalement neutre (sol sombre, murs clairs unis), c'est une chambre
quelconque, un lieu insituable, spatialement ni temporellement.</p>
<p>Igitur a les cheveux très courts, peut-être même tondus, ce qui renforce l'androgynie du personnage et permet
d'évoquer la dureté de certains précédents que la mémoire collective véhicule. Ce trait " brut " est compensé par la
douceur du visage, presque enfantin, de l'actrice qui incarne Igitur. Igitur porte des lentilles de contact afin de créer
des yeux qui ressemblent à des trous noirs (pupilles et iris confondues). Ceci crée un sentiment d'étrangeté, comme
l'impression que quelque chose qui dépasse l'humain.</p>
<hr />
<p class=""footer"">
Auteur: Michel Porchet
<a href="mailto:[email protected]">
[email protected]</a>
<br />Date: 3-05-2005<br />URL:
<a href="./home.html">./home.html/</a>
</p>
</div>
</body>
</html>
Et la page Web produite par la transformation en html de ce code aura l'allure suivante :
47
Figure 6 : exemple de page xhtml, le texte est complété par des liens vers divers sources.
Le Web sémantique, le Dublin Core et RDF
Les objectifs du Dublin Core
La norme de métadonnées du Dublin Core65 est un ensemble d'éléments pour décrire une
grande variété de ressources en réseau. Elle comprend 15 éléments dont la sémantique a été
établie par un consensus international de professionnels de diverses disciplines telles que la
bibliothéconomie, l'informatique, le balisage de textes, la communauté muséologique et d'autres
domaines connexes. Chaque élément est optionnel et peut être répété et possède un ensemble
limité de qualificatifs, des attributs qui peuvent être utilisés afin de raffiner davantage (et non pas
étendre) la signification de l'élément. L'Initiative de métadonnées du Dublin Core définit des
façons normalisées de « qualifier » les éléments au moyen de différents types de qualificatifs.
Un registre de qualificatifs conformes aux « meilleures pratiques » du DCMI est en cours de
construction. Le Dublin Core a pour objectif de concilier les caractéristiques suivantes :
• Simplicité de création et de gestion
• Sémantique communément comprise
• Envergure internationale
• Extensibilité
65
Page d'accueil officielle du Dublin Core : http://dublincore.org
Guide d'utilisation du Dublin Core http://www.bibl.ulaval.ca/DublinCore/usageguide-20000716fr.htm
http://dublincore.org/documents/usageguide/
48
Si le Web a été conçu, au départ, pour permettre à des intelligences humaines de lire des
documents, accessibles par des hyper-liens, la démultiplication de l'information disponible
nécessite aujourd'hui d'autres types d'accès, basés sur des automatismes. C'est dans ce cadre
que l'on voit fleurir bon nombre de moteurs de recherche sur l'internet et beaucoup de
technologies comme celles des « agents »66. RDF permet de rendre plus « intelligente »
l'information nécessaire à ces moteurs de recherche et, plus généralement, nécessaire à tout
outil informatique analysant de façon automatisée des pages Web. Pour ce faire, RDF propose
d'associer à toute ressource du Web un ensemble de descripteurs qui caractérisent au mieux
cette ressource : on parle alors de métadonnées (en anglais, metadata).
Du métalangage de définition de métadonnées, il est nécessaire de dériver des langages de
définition de corpus homogènes de métadonnées. C'est la fonction d'un métalangage de
définition de modèles, souvent appelés « vocabulaires ». Ces vocabulaires RDF (qui relèvent
plutôt de l'ordre de la syntaxe) seront spécifiques à une profession, une communauté données.
Une application pourra, par simple analyse des types de données définies dans le modèle,
connaître un certain nombre de sémantiques applicables aux métadonnées liées à ce modèle.
Décrire est une activité bien connue. Les bibliothécaires, les archivistes pratiquent la description
depuis bien longtemps. Par ailleurs, HTML lui-même, dans ses versions récentes, propose un
certain nombre de possibilités de description dans les entêtes de document (éléments meta
contenus dans élément head). RDF se propose alors de définir un cadre (framework) de définition
de métadonnées, sans se pronnoncer plus en avant sur la nature des métadonnées elle-mêmes.
Introduction à RDF67
Cette section décrit le modèle et la syntaxe de RDF68, ainsi que RDFS, le langage de schéma de
RDF. L’objectif de cette description est de permettre l’utilisation de RDF et RDFS afin d’exprimer
un modèle de métadonnées propre à une organisation tout en bénéficiant des propriétés
générales de RDF. RDF est un des modèles de base et de syntaxe sur laquelle le Web
sémantique se construit avec l’ajout de couches (layers) au-dessus de RDF comme OIL69
(Ontology Inference Layer) et DAML70 (DARPA Agent Markup Language). Ces deux
spécifications sont maintenant regroupées au W3C sous l'acronyme OWL 71.
Les métadonnées de la DCMI (Dublin Core Metadata Initiative) sont exprimées de manière
normative avec la syntaxe RDF. Lorsque les métadonnées d’un document sont exprimées en
RDF en concordance avec la DCMI, elles font référence à l’espace de nom (domaine nominal ou
« namespace » en anglais) des schémas RDF des métadonnées de Dublin Core. Conjointement
avec RDF, l’initiative Dublin Core vise à résoudre les problèmes d’ambiguïté sur la dénomination
des ressources, et parmi elle surtout celles des propriétés. Ceux qui veulent coopérer en
échangeant de l’information ont là les moyens de le faire efficacement en résolvant les
problèmes classiques auxquels ils peuvent être confrontés.
66
67
68
69
70
71
Les agents sont des composants logiciels capables d'être autonomes, de communiquer et d'apprendre.
Cf p.e. http://www.decisionnel.net/agentintelligent
Extrait de Les systèmes de gestion de contenu : description, classification et évaluation Philippe Lahaye,
http://perso.wanadoo.fr/philippe.lahaye/memoire_cms.htm
RDF Vocabulary Description Language 1.0: RDF Schema : http://www.w3.org/TR/rdf-schema/ Resource Description
Framework (RDF) Model and Syntax Specification: http://www.w3.org/TR/REC-rdf-syntax
OIL, initialement développées par la Communauté Européenne, est utilisé pour définir des ontologies
DAML, initialement développées par la DARPA, ajoute un petit nombre de caractéristiques au schéma RDF afin de rendre
plus facile la définition de nouveaux langages permettant la communication entre agents intelligents.
Le concept d'ontologie existe depuis très longtemps, notamment en philosophie. Il est aujourd'hui associé à la définition
d'un vocabulaire compréhensible par des machines. Une ontologie définit les termes utilisés pour décrire et représenter un
champ d'expertise. Les ontologies sont utilisées par les personnes, les bases de données, et les applications qui ont
besoin de partager des informations relatives à un domaine bien spécifique. Les ontologies associent les concepts de base
d'un domaine précis et les relations entre ces concepts, tout cela d'une manière compréhensible par les machines. Elles
encodent la connaissance d'un domaine particulier ainsi que les connaissances qui recouvrent d'autres domaines, ce qui
permet de rendre les connaissances réutilisables.
L'acronyme de "Web Ontology Language" serait "WOL", mais le Groupe de Travail a souhaité utiliser OWL(HIBOU). OWL
est un langage d'ontologies Web utilisant à la fois les URIs pour nommer, et la fonctionnalité fournie par RDF pour créer
des liens. Le Groupe de Travail Web Ontology du W3C a produit six documents OWL.
http://www.w3.org/2001/sw/WebOnt/
49
Les métadonnées en RDF peuvent être localisées en différents endroits. Elles peuvent être
imbriquées à l’intérieur d’un document lui-même (bloc de commentaire d’un fichier informatique
ou à l’intérieur d’une balise <meta> de l’entête d’un fichier html) ou peuvent se situer sur une
ressource externe (un autre document ou encore une base de donnée). Elles peuvent être
distribuées comme RSS – RDF Site Summary72 ou centralisées dans un référentiel du genre
d’un répertoire UDDI – Universal Description, Discovery and Integration73.
Les vocabulaires RDF permettent de mieux contrôler les métadonnées au regard de leur modèle
en définissant des ressources par des propriétés. C'est par l'agrégation de ces ensembles de
définitions que seront définies des collections.
Principes
Tout ce qui est exprimé avec RDF est appelé une ressource. La construction de base en RDF
est le triplet {propriété, ressource, valeur}. Une propriété est un aspect spécifique, une
caractéristique, un attribut ou une relation utilisé pour décrire une ressource. Chaque propriété a
une signification spécifique, des valeurs autorisées, des types de ressources qu’elle peut décrire
et des relations avec d’autres propriétés. La ressource est toute entité d’information pouvant être
référencée en un bloc, par un nom symbolique (literal) ou un identificateur. L’identificateur est
obligatoirement un URI. Une ressource spécifique associée à une propriété et sa valeur
correspondante est une expression ou déclaration (statement) RDF. Ces trois parties
(ressource, propriété, valeur) sont appelées respectivement sujet, prédicat et objet. Une
assertion RDF peut être représentée par un graphe étiqueté orienté, système formel aux
propriétés mathématiques bien définies sur lequel est basé RDF. Le langage de balisage XML
est utilisé pour le spécifier. On parle ainsi parfois de RDF / XML car d’autres formalismes
peuvent être finalement retenus. Nous ne nous étendrons pas sur les deux syntaxes possibles
de RDF : la syntaxe sérielle et la syntaxe abrégée ou encore simplifiée.
Figure 7 : déclaration RDF de base
Ainsi, il est possible de décrire, avec RDF, des phrases du type : « http://www.mutu-xml.org est
créé par le projet MUTU-XML » : http://www.mutu-xml.org est la ressource ; « est créé » est une
propriété dont la valeur est « MUTU-XML ».
Avec la syntaxe XML, la déclaration précédente pourra s'écrire :
<rdf:RDFxmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:description about="http://www.mutu-xml.org">
<créateur>projet MUTU-XML</créateur>
</rdf:description>
</rdf:RDF>
Un outil automatisé comprendra alors que l'on est en train de parler d'une ressource avec un
propriété de type « créateur » dont la valeur de propriété est « projet MUTU-XML ». Que veut
dire la propriété « créateur » ? C'est à ce niveau que doivent intervenir les vocabulaires et
syntaxes spécialisés. RDF laisse aux personnes définissant leurs métadonnées le choix du (des)
vocabulaire(s) utilisé(s). Il serait, par exemple, possible de définir plusieurs propriétés
« créateur » : une compatible avec le Dublin Core et, d'autres compatibles avec des modèles
privés, recensant les créateurs dans des bases de données ad hoc. Le fragment s'écrirait alors :
72
73
Voir http://w3.org/rdf
Voir http://uddi.org
50
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/metadata/dublin_core#"
xmlns:mutu="http://www.mutu-xml.org/modèles/meta">
<rdf:description about="http://www.mutu-xml.org">
<dc:creator>projet MUTU-XML</dc:creator>
<mutu:créateur nom-en-base="MUTU-XML"/>
</rdf:description>
</rdf:RDF>
Pour aller plus loin, RDF définit un certain nombre d'autres constructeurs, permettant
d'assembler des métadonnées entre elles :
• les conteneurs (container) permettent d'assembler des valeurs propriétés entre elles.
Cet assemblage peut définir un ensemble simple (bag), une séquence ordonnée
(sequence) ou encore une alternative de valeurs (alternative) ;
• l'identification de ressource peut désigner, comme dans l'exemple précédent, une URI.
Elle peut aussi désigner un objet RDF défini dans le même document, voire un
conteneur ;
• pour préciser les déclarations, RDF définit les propriétés suivantes :
 sujet : ce dont on parle, souvent une URI,
 prédicat : comment on en parle, selon un vocabulaire défini dans une URI,
 objet : la valeur de la propriété,
 type : typage de la ressource selon le vocabulaire RDF ;
• il est possible de faire des déclarations sur des déclarations. Par exemple, pour dire
des choses de type : « Mr Dupont a dit que Mutu-XML est le créateur de
http://www.mutu-xml.org ».
RDF décrit des ressources ainsi que l'association, entre elles74. L’objet d’une déclaration (i.e. la
valeur de la propriété associée à une ressource) peut être une autre déclaration RDF (réification)
ou un littéral, c’est à dire ou une ressource (spécifiée par un URI), ou une chaîne de caractères
simple (ou encore un autre type de donnée primaire défini par W3C XML Schema). En langage
RDF, un littéral (« literal ») peut avoir un contenu XML bien formé mais qui n’est plus pris en
compte par un processeur (ou encore un analyseur syntaxique) RDF.
Illustrons cela tout de suite avec un exemple utilisant les métadonnées de la DCMI .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/metadata/dublin_core#">
<rdf:Description about="http://www.dlib.org"
dc:Title="D-Lib Program - Research in Digital Libraries"
dc:Description="The D-Lib program supports the community of people with research interests
in digital libraries and electronic publishing."
dc:Publisher="Corporation For National Research Initiatives"
dc:Date="1995-01-07"/>
</rdf:RDF>
L’élément racine rdf:RDF permet à un processeur RDF de repérer le début d’un bloc de
déclaration RDF. L’utilisation des domaines nominaux (déclarations « xmlns ») permet d’utiliser
deux schémas RDF différents. Concrètement un seul est utilisé ici : celui du Dublin Core, l’autre
déclaration d'espace de noms, celui de RDF, étant obligatoire pour toute utilisation de RDF. La
notion d'espace de noms permet d'étendre les schémas de métadonnées sans avoir à en
recréer un nouveau, reprenant l’ancien. De plus, la déclaration des espaces de noms permet
74
De façon plus généraliste, c'est aussi l'objet de XLink. Ne serait-il pas alors intéressant d'utiliser cette recommandation et
de construire « dessus »RDF (en utilisant un métavocabulaire particulier pour définir des rôles spécifiques, au sens
XLink) ? Définir RDF sur la base de XLink aurait un avantage de méthode. En effet, si RDF se définit selon un ensemble
d'éléments de son espace de noms, au sens XML du terme, XLink choisit la méthode consistant à faire porter à des
éléments d'un modèle propriétaire des attributs spécifiques de son espace de noms. Ceci a l'intérêt de ne pas obliger lorsque des modèles pré-existent - à les reconcevoir, pour le seul besoin de définition de métadonnées. Ceci a aussi
l'avantage de ne pas surcharger des modèles et des écritures de modèles par des informations et des structures
redondantes. Ceci présente enfin l'avantage de proposer une méthode basée sur le typage de sa propre information plutôt
que de s'adapter à un modèle externe.
51
ensuite d’utiliser le préfixe abrégé de substitution pour référencer les propriétés décrites (c’est à
dire par exemple dc:publisher au lieu de http://purl.org/metadata/dublin_core#publisher, la première
forme étant bien plus lisible).
La déclaration <rdf:Description about="http://www.dlib.org"> est de la déclaration type en RDF
des propriétés (c’est à dire des métadonnées) de la ressource dans laquelle seront placées les
valeurs. La ressource est mentionnée dans l’attribut rdf:about de l’élément <description>. La
propriété et sa valeur sont déclarées ici comme attribut XML, soit dc:Title="D-Lib Program Research in Digital Libraries" pour le titre de la ressource. Une fois les déclarations préliminaires
faites pour un document RDF, il est possible de rencontrer des exemples basiques d’assertion
comme celui ci :
<rdf:Description about="http://www.w3.org/Home/Lassila">
<dc:Creator>Ora Lassila</s:Creator>
</rdf:Description>
Il sera l’expression du triplet :
• Sujet (Resource) : http://www.w3.org/Home/Lassila
• Prédicat (Property) : Creator
• Objet (literal) : "Ora Lassila"
L’élément <description> peut contenir plusieurs attributs. Nous avons l’attribut rdf:about, mais il
existe aussi les attributs rdf:ID (pour pouvoir donner un identifiant à une déclaration RDF) ,
rdf:type (pour pouvoir donner un type prédéfini dans un schéma à une ressource). De plus, les
éléments <description> peuvent être emboîtés (nested).
Différentes formes de valeurs peuvent être données à une propriété : une chaîne de caractères
littérale, une URI qui fait référence à une ressource, un fragment XML bien formé, mais aussi
une ressource anonyme avec ses propres propriétés, une ressource typée avec ses propriétés
propres en plus de son URI.
RDF permet aussi l’utilisation de containers de ressource : collection (<rdf:bag>), séquence
(<rdf:seq>) ou alternative (<rdf:alt>). L’utilisation de l’attribut rdf:aboutEach dans l’élément
<description> permet ensuite d’affecter des propriétés avec la même valeur à un ensemble de
ressources. L’utilisation de l’attribut bagID dans un élément <description> permet lui de réifier les
propriétés contenues dans la déclaration RDF. L’exemple suivant permet de comprendre cette
dernière caractéristique du langage RDF.
<rdf :RDF>
<rdf:Description rdf:about="http://www.epolitix.com/Articles/000005a4787.htm"bagID="classement">
<dc:Subject rdf:resource="http://iptc.org/SubjectCode#10101011" />
<dc:Subject rdf:resource="http://iptc.org/SubjectCode#10101012" />
<dc:Subject rdf:resource="http://iptc.org/SubjectCode#10101013" />
</rdf:Description>
<rdf:Description aboutEach="classement">
<dc:Creator>Craig Hoy</dc:Creator>
</rdf:Description>
</rdf:RDF>
Dans cet exemple, il est dit en fait que Craig Hoy est l’auteur du classement de l’article référencé
par son URL ("000005a4787.htm") dans les trois catégories (code 11, 12 et 13 définis par
l’organisation IPTC). L’utilisation de l’attribut bagID permet de faire la description qui nous
intéresse de façon « classique », ici la catégorisation d’un article, puis son utilisation dans la
deuxième description permet de faire une déclaration à propos de cette première déclaration :
c’est Craig Hoy qui est l’auteur de chacun de ces classements de l’article dans les catégories
susmentionnées.
RDFS, les schémas RDF
Les déclarations RDF définissent des relations entre des objets (nœud d’un graphe) qui
appartiennent à un univers sémantique. A chacun de ces univers sémantiques correspond un
domaine nominal, identifié par un préfixe particulier. Un tel domaine, pour lesquels sont définies
52
des propriétés spécifiques et des catégories conceptuelles, est appelé un schéma. Tout
utilisateur a la possibilité de créer un nouveau schéma, de modifier, et notamment d’enrichir et
d’affiner un schéma existant, de créer ce faisant un nouveau schéma personnalisé, et d’utiliser
un schéma pour décrire les propriétés d’objets ayant une existence dans ce schéma.
RDFS (pour « RDF Schema ») offre les moyens de définir un modèle (ou bien encore un
schéma) de métadonnées qui permet de :
• donner du sens aux propriétés associées à une ressource ;
• formuler des contraintes sur les valeurs associées à une propriété afin de lui assurer
aussi une signification.
Par exemple, si l’on a une propriété qui représente un auteur, on peut exiger que les valeurs de
cette propriété soient une référence à une personne (et non pas une voiture ou une maison). On
peut aussi vouloir restreindre quelles sont les propriétés s’appliquant à une ressource. Cela n’a
probablement aucun sens d’autoriser l'application d'une propriété « date de naissance » à un
morceau de musique.
Une propriété est spécifiée dans un schéma RDFS en déclarant une URI qui identifie la
ressource qui représente la propriété et où le type rdf:type de la ressource est rdf:property. Nous
donnons ci-dessous un exemple extrait du schéma des métadonnées de Dublin Core qui définit
le public (“audience“) comme étant une propriété RDF mais aussi comme étant une instance de
la classe element du schéma de Dublin Core.
<rdf:Property rdf:about="http://purl.org/dc/terms/audience">
<dc:type rdf:resource="http://dublincore.org/usage/documents/principles/#element"/>
</rdf:Property>
Pour indiquer qu’une propriété peut prendre seulement certaines valeurs, on utilise le prédicat
(la propriété) rdfs:range.
Par exemple, pour exprimer qu’un créateur ne peut avoir que des ressources de type Personne
(person) pour valeur, on a l’exemple suivant.
<rdf:property rdf:about=”http://purl.org/dc/elements/1.1/creator”>
<rdfs:range rdf:resource=”http://www.schema.org/TR/rdf-schema#Person>
</rdf:property>
Si l’on veut indiquer que les valeurs que peut prendre le type Personne (Person) sont
uniquement des chaînes de caractères littérales, on rajoutera la ligne suivante à l’exemple
précédent.
<rdfs:range rdf:resource=”http://www.w3.org/2000/01/rdf-schema#Literal">
On obtiendra la déclaration suivante :
<rdf:property rdf:about=”http://purl.org/dc/elements/1.1/creator”>
<rdfs:range rdf:resource=”http://www.schema.org/TR/rdf-schema#Person>
<rdfs:range rdf:resource=”http://www.w3.org/2000/01/rdf-schema#Literal">
</rdf:property>
La propriété rdfs:domain est utilisée pour indiquer quel type de ressource peut être associé avec
le sujet (la ressource) d’une propriété particulière. Dans l’exemple suivant, on précise qu’une
date de naissance ne s’applique qu’à une ressource de type personne tout en rappelant que la
valeur possible d’une date de naissance est un littéral.
<rdf:property rdf:about=”http://www.schema.org/TR/rdf-schema#birthDay”>
<rdfs:domain rdf:resource=”http://www.schema.org/TR/rdf-schema#person>
<rdfs:range rdf:resource=”http://www.w3.org/2000/01/rdf-schema#Literal">
</rdf:property>
Une ressource déclarée avec RDF peut être typée en utilisant l’attribut rdf:type dans l’élément
<description> et de ce fait ajouter de l’information à propos de la ressource. Par exemple, pour
pouvoir considérer la ressource Personne comme une classe, il faut la déclarer ainsi dans un
schéma RDF avec rdfs:class :
<rdf:Description rdf:about=”http://www.schema.org/TR/rdf-schema#Person”>
<rdf:type resource=”http://www.w3.org/2000/01/rdf-schema#Class">
</rdf:Description>
53
Cela peut aussi s’écrire de la manière suivante :
<rdfs:Class rdf:about=”http://www.schema.org/TR/rdf-schema#Person” />
On peut sous-classer des types de ressources, par exemple la classe Personne en fonction d’un
métier. Ainsi la classe Compositeur (de musique) et la classe Réalisateur sont des sous-classes
de la classe Créateur qui elle-même peut être une sous-classe de la classe Personne. On
utilisera pour cela la propriété rdfs:subClassOf.
La date de naissance qui s’applique à John Smith (une personne) est bien une valeur littérale.
John Smith est par ailleurs le créateur de la ressource dont le titre est « Utilisation des
métadonnées dans notre organisation ».
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/metadata/dublin_core#"
xmlns:s="http://www.schema.org/TR/rdf-schema#">
<rdf:Description about="http://www.ourorg.net/metadatause.html">
<dc:title>Utilisation des métadonnées dans notre organisation</dc:title>
<dc:Creator>
<rdf:Description about="http://www.ourorg.net/member/JohnSmith">
<rdf:type rdf:resource=”http://www.schema.org/TR/rdf-schema#Person” />
<s:birthDay>1954-06-23</s:birthday>
</rdf:Description>
</dc:Creator>
</rdf:RDF>
D’autres éléments du schéma RDFS existent : rdfs:Label, rdfs:comment, rdfs:seeAlso,
rdfs:isDefinedBy. Leur description est reprise dans les tableaux des pages suivantes.
Un exemple issu du schéma RDFS des métadonnées de Dublin Core reprend ces éléments.
<rdf:Property rdf:about="http://purl.org/dc/terms/educationLevel">
<rdfs:label xml:lang="en-US">Audience Education Level</rdfs:label>
<rdfs:comment xml:lang="en-US">
A general statement describing the education or training context.
Alternatively, a more specific statement of the location of the audience in terms of its progression
through an education or training context.
</rdfs:comment>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/terms/"/>
<rdfs:subPropertyOf rdf:resource="http://purl.org/dc/terms/audience"/>
</rdf:Property>
De même, le schéma RDFS définit et déclare les éléments de RDF. Par exemple, l’attribut
ressource est définit comme une classe.
<rdfs:class rdf:ID=”Ressource” />
Mais cela dépasse le propos de cette modeste introduction qui est de voir comment un schéma
de métadonnées peut être créé afin de constituer un vocabulaire de métadonnées spécifiques
de documents propres à une organisation et non pas d’étendre le modèle de schéma RDFS,
comme peuvent le faire DAML ou OIL.
Récapitulatif du vocabulaire utilisé dans RDF
Ci-dessous sont présentés deux tableaux qui donnent une vue générale du vocabulaire de RDF,
reliant le vocabulaire originellement défini dans la spécification de la syntaxe et du modèle RDF
avec les classes et les propriétés qui ont leur origine dans le schéma RDF.
Tableau 4 : Classes RDF
Nom de la classe
Commentaire
rdfs:Resource
La classe Resource, tout
rdfs:Literal
La classe des valeurs littérales, cad des chaînes caractères et les entiers.
rdf:XMLLiteral
La classe des valeurs littérales permises par XM
54
Nom de la classe
Commentaire
rdfs:Class
La classe des classes.
rdf:Property
La classe des propriétés RDF
rdfs:Datatype
La classe des types de données RDF
rdf:Statement
La classe des déclarations RDF.
rdf:Bag
La classe des containers non ordonnés
rdf:Seq
La classe des containers ordonnés.
rdf:Alt
La classe des containers d’alternatives.
rdfs:Container
La super classe des containers.
rdfs:ContainerMembershipProperty
La classe des propriétés des membres des containers , rdf:_1, rdf:_2, ...,
dont tous sont des sous-propriétés de ‘member’
rdf:List
La classe des listes RDF
Tableau 5 : Propriétés RDF
Nom de la propriétés Commentaire
rdf:type
Le sujet (la ressource) est une instance d’une
classe
rdfs:subClassOf
Le sujet est une sous-classe d’une classe.
rdfs:subPropertyOf
Le sujet est une sous-propriétés d’une propriété
rdfs:domain
Le domaine des ressources s’appliquant à une
ressource. (A domain of the subject property.)
rdfs:range
Le domaine des ressources s’appliquant à une
propriété. (A range of the subject property.)
rdfs:label
Le nom lisible par un humain du sujet (la
ressource).
rdfs:comment
Une description du sujet (ressource).
rdfs:member
Un membre de la ressource. (A member of the
subject resource.)
rdf:first
Le premier article d’une liste RDF de sujet. (The
first item in the subject RDF list.)
rdf:rest
Le reste des articles d’une liste RDF de sujet
après le premier article. (The rest of the subject
RDF list after the first item.)
rdfs:seeAlso
Information complémentaire sur le sujet
rdfs:isDefinedBy
La definition du sujet.
rdf:value
Propriété idiomatique utilisée pour déclarer des
valeurs structurées (i.e. typées).
rdf:subject
Le sujet d’une déclaration (statement) RDF
rdf:predicate
Le prédicat d’une déclaration(statement) RDF
rdf:object
L’objet d’une déclaration (statement) RDF
domain
rdfs:Resource
range
rdfs:Class
rdfs:Class
rdf:Property
rdf:Property
rdfs:Class
rdf:Property
rdfs:Class
rdf:Property
rdfs:Class
rdfs:Resource
rdfs:Literal
rdfs:Resource
rdfs:Resource
rdfs:Literal
rdfs:Resource
rdf:List
rdfs:Resource
rdf:List
rdf:List
rdfs:Resource
rdfs:Resource
rdfs:Resource
rdfs:Resource
rdfs:Resource
rdfs:Resource
rdf:Statement
rdf:Statement
rdf:Statement
rdfs:Resource
rdf:Property
rdfs:Resource
En addition à ces classes et propriétés, RDF utilise aussi les propriétés nommées rdf:_1, rdf:_2,
rdf:_3... etc., chacune d’elle étant une sous-propriétés de rdfs:member et une instance de la
classe rdfs:ContainerMembershipProperty. Il y a aussi une instance de la classe rdf:List appelée
rdf:nil qui est une liste rdf:List vide.
Exemple d’extension de Schéma RDFS et de son utilisation
L’exemple ci-dessous déclare principalement une métadonnées supplémentaire (le type de
QCM) spécifique aux QCM de l’entreprise MCQ.
<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/"
55
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:mcq="http://www.mcq.com/rdf-schema#>
<rdf:Description rdf:about="http://www.mcq.com/rdf-schema">
<dc:title xml:lang="fr-FR">
Le domaine nominal et le contenu du schéma de métadonnées RDF de l'entreprise MCQ.
</dc:title>
<dc:publisher xml:lang="fr-FR">MCQ</dc:publisher>
<dc:description xml:lang="fr-FR">
Les métadonnées MCQ s'adossent sur celle définies par le groupe de Dublin Core.
Toutefois, certaines métadonnées sont spécifiques à nos applications de QCM
</dc:description>
<dc:language xml:lang="fr-FR">Français</dc:language>
<dcterms:issued>2003-07-11</dcterms:issued>
<dcterms:modified>2003-10-24</dcterms:modified>
</rdf:Description>
<rdf:Property rdf:about="http://www.mcq.com/rdf-schema#typeDeQCM">
<rdfs:label xml:lang="fr-FR">Type de QCM</rdfs:label>
<dc:description xml:lang="fr-FR">
Les QCM ont plusieurs formes : réponse vraie unique (bouton radio), réponse vraie multiple
(cases à cocher), avec une grille d'évaluation associée à la note obtenue ou non
</dc:description>
<rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1.1/type"/>
<rdfs:range rdf:resource="http://purl.org/dc/dcmitype/Text>
<dcterms:issued>2003-07-11</dcterms:issued>
<dcterms:modified>2003-10-24</dcterms:modified>
</rdf:property>
<dcterms:SubjectScheme rdf:about="http://www.mcq.com/rdf-schema#classement">
<rdfs:label xml:lang="fr-FR">Catégorie</rdfs:label>
<rdfs:comment xml:lang="fr-FR">
Système de classification de la documentation interne de MCQ
</rdfs:comment>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dc:source rdf:resource="http://www.mcq.com/specifications"/>
<dcterms:issued>2003-07-11</dcterms:issued>
<dcterms:modified>2003-10-24</dcterms:modified>
<dc:type rdf:resource="http://dublincore.org/usage/documents/principles/#encoding-scheme"/>
</dcterms:SubjectScheme>
</rdf:RDF>
En se fondant sur ce schéma, on peut écrire le fichier RDF suivant :
<?xml version='1.0' encoding='ISO-8859-1'?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/""
xmlns:mcq="http://www.mcq.com/rdf-schema#">
<rdf:Description rdf:about="http://www.mcq.com/QCM/qcm139746.xml">
<dc:creator>Formateur informatique personnelle</dc:creator>
<dc:subject><mcq:classement>6130</mcq:classement></dc:subject>
<dc:contributor>Responsable pole formation</dc:contributor>
<dc:title>Le hardware du PC</dc:title>
<dc:language>fr-FR</dc:language>
<dc:type>text</dc:type>
<mcq:typeDeQCM>bouton radio simple<mcq:typeDeQCM>
<dc:description>
QCM simple de dix questions portant sur le hardware du PC
</dc:description>
<dc:date>20011217</dc:date>
<dc:publisher>MCQ</dc:publisher>
<dc:rights>copyrights MCQ</dc:rights>
<dc:format>text/application</dc:format>
</rdf:Description>
</rdf:RDF>
56
Retour au Dublin Core75
Le Dublin Core peut être représenté suivant différentes syntaxes (HTML, RDF/XML). Le HTML
fournit un format facilement compréhensible pour démontrer les concepts sous-jacents du Dublin
Core car il possède deux balises, à placer à l'intérieur de la section HEAD du document HTML,
pouvant être utilisées pour capturer des métadonnées : <META> et <LINK>. Les programmes
d'indexation capables d'interpréter les notices comportant des métadonnées débutent leur
analyse après la balise"<HEAD>" et la terminent avant la balise "</HEAD>". Pour des
applications plus complexes, utilisant des qualificatifs, on pourra trouver que l'utilisation du
RDF/XML est plus pertinente. Lorsque l'on considère la syntaxe appropriée, il est important de
noter que les concepts Dublin Core sont applicables également à presque tous les formats de
fichiers, en autant que la métadonnée soit dans une forme qui soit propice à une interprétation à
la fois par des moteurs de recherche et par des humains.
Métadonnées autonomes : Cet exemple décrit une photographie dans un autre fichier dont la
localisation est donnée par une adresse URL. Voici le fichier complet de la notice :
<META NAME="DC.Title" CONTENT="Kita Yama (Japon)">
<META NAME="DC.Creator" CONTENT="Kertesz, Andre">
<META NAME="DC.Date" CONTENT="1968">
<META NAME="DC.Type" CONTENT="image">
<META NAME="DC.Format" CONTENT="image/gif">
<META NAME="DC.Identifier"
CONTENT="http://foo.bar.zaf/kertesz/kyama">
Métadonnées contenues dans une ressource : Ce document est un court poème exprimé en
HTML.
<HTML>
<HEAD>
<TITLE>Song of the Open Road</TITLE>
<META NAME="DC.Title" CONTENT="Song of the Open Road">
<META NAME="DC.Creator" CONTENT="Nash, Ogden">
<META NAME="DC.Type" CONTENT="text">
<META NAME="DC.Date" CONTENT="1939">
<META NAME="DC.Format" CONTENT="text/html">
<META NAME="DC.Identifier"
CONTENT="http://www.poetry.com/nash/open.html">
</HEAD>
<BODY>
<PRE>
I think that I shall never see
A billboard lovely as a tree.
Indeed, unless the billboards fall
I'll never see a tree at all.
</PRE>
</BODY>
</HTML>
Parties d'éléments, syntaxe et vocabulaire contrôlé
Chaque élément est optionnel et répétable. Les éléments de métadonnées peuvent apparaître
dans n'importe quel ordre. On peut vouloir préserver l'ordre d'apparition de plusieurs
occurrences du même élément, toutefois cet ordonnancement ne sera pas automatiquement
conservé dans tous les environnements (RDF permet l'ordonnancement mais pas le HTML.
75
Initiative de métadonnées du Dublin Core. Page d'accueil Dublin Core : http://dublincore.org
Guide d'utilisation du Dublin Core, créateur: Diane Hillmann (traduction : Guy Teasdale)
http://www.bibl.ulaval.ca/DublinCore/usageguide-20000716fr.htm
57
Des termes décrivant le contenu de quelques éléments peuvent être sélectionnés à partir d'un
« vocabulaire contrôlé » (un ensemble limité de termes soigneusement définis et utilisés de
façon cohérente). Un tel vocabulaire contrôlé nécessite d'un organe administratif pour réviser,
mettre à jour et disséminer ce vocabulaire. La façon la plus efficace de faire usage d'un
vocabulaire contrôlé est par l'intermédiaire des qualificatifs (en anglais.)
Par exemple, le "Library of Congress Subject Headings" (LCSH) et le "US National Library of
Medicine Medical Subject Headings" (MeSH) sont des vocabulaires formels, indispensables pour
chercher des collections rigoureusement cataloguées. Toutefois, ces deux vocabulaires
nécessitent un support important de la part de ces organismes. Un autre coût important est
d'avoir à entraîner des chercheurs et des créateurs de métadonnées afin qu'ils comprennent
que lorsqu'ils utilisent le MeSH, par exemple, ils doivent employer "myocardial infarction" au lieu
de l'expression plus familière "heart attack" (NdT ou « crise cardiaque »!).
Les éléments de base (core elements)
Cette section donne la liste de chacun des éléments de base par son nom complet et son
identifiant. Pour chaque élément on donnera une description de référence (tirée du document
RFC) et des directives pour aider à la création du contenu des métadonnées, qu'il soit fait à
partir de rien ou en convertissant une notice existant dans un autre format. Les éléments sont
énumérés dans l'ordre où ils ont été développés mais il y a d'autres façons utiles de les
regrouper.
Tableau 6 : éléments de base
Contenu
Propriété
intellectuelle
Instanciation
Couverture
Description
Type
Relation
Source
Contributeur
Créateur
Éditeur
Droits
Date
Format
Identifiant
Langue
Sujet
Titre
Chaque élément du Dublin Core est défini par les dix attributs suivants, provenant de la
description standard ISO/IEC 11179 pour des éléments de donnée :
1. Nom
- L'étiquette attachée à l'élément de donnée
2. Identifiant
- L'identifiant unique de l'élément de donnée
3. Version
- La version de l'élément
4. Autorité
- L'autorité autorisée à enregistrer l'élément
5. Langue
- La langue dans lequel l'élément est défini
6. Définition
- Une phrase qui définit clairement quelle est la principale nature
de l'élément et à quel concept il correspond
7. Obligation
- Indique si la présence de l'élément est obligatoire ou optionnelle
(C'est à dire s'il contient toujours une valeur ou non)
8. Type
- Indique le type de données qui peut être représenté dans la
valeur de l'elément
9. Occurrence
- Indique une limite éventuelle sur le nombre maximum de fois que
l'élément peut être répété
10.Commentaire
- Une remarque sur l'utilisation de cet élément de donnée
Par chance, six des dix attributs ci-dessus sont communs à tous les éléments du Dublin Core .
Ce sont, avec leur valeur respective:
Version:
Autorité:
Langue:
1.1
Dublin Core Metadata Initiative
en (la définition formelle du DC est en anglais)
58
Obligation: Optionnel
Type:
chaîne de caractère
Occurrence: non limité
Ces attributs font partie intégrante de la définition des éléments. Ils ne seront pas répétés dans
les définitions. Chaque définition du Dublin Core concerne la ressource à décrire. D'après
[RFC2396], une ressource est définie comme « tout ce qui a une identité ». Dans le cas des
metadonnées du Dublin Core, une ressource sera typiquement une source d'information ou un
service, mais la définition peut être appliquée plus largement.
Elément: Titre
Nom :
Identifiant :
Définition :
Commentaire :
titre
title
Le nom donné à la ressource.
Typiquement, un titre sera le nom par lequel la ressource est officiellement connue.
Element: Créateur
Nom :
Identifiant :
Définition :
Commentaire :
créateur
Creator
L'entité principalement responsable de la création du contenu de la ressource.
Exemples de Créateur incluent une personne, une organisation, ou un service.
Typiquement, un nom du Créateur devrait être utilisé pour désigner cette entité.
Elément: Sujet
Nom :
Identifiant :
Définition :
Commentaire :
sujet et mots-clefs
subject
Le sujet du contenu de la ressource.
Typiquement, le sujet sera décrit par un ensemble de mots-clefsou de phrases ou
un code de classification qui précisent le sujet de la ressource. L'utilisation de
vocabulaires contrôlés et de schémas formels de classification est encouragée.
Element: Description
Nom :
Identifiant :
Définition :
Commentaire :
description
description
Une description du contenu de la ressource.
Une Description peut contenir, mais ce n'est pas limitatif: un résumé,
une table des matières, une référence à une représentation graphique du contenu,
ou un texte libre sur le contenu.
Elément: Editeur
Nom :
Identifiant :
Définition :
Commentaire :
éditeur
publisher
L'entité responsable de la diffusion de la ressource, dans sa forme actuelle,
tels, un département universitaire, une entreprise.
Exemples d'Editeurs incluent une personne, une organisation, ou un service.
Typiquement, le nom d'une maison d'édition devrait être utilisé ici.
Elément: Contributeur
Nom :
contributeur
Identifiant :
contributor
Définition :
Une entité qui a contribué à la création du contenu de la ressource.
Commentaire Exemples de Contributeur incluent une personne, une organisation, ou un service.
Typiquement, le nom d'un contributeur devrait être utilisé ici pour désigner l'entité.
Elément: Date
Nom :
date
Identifiant
date
Définition : Une date associée avec un événement dans le cycle de vie de la ressource.
Commentaire : Typiquement, une date sera associée à la création ou à la publication d'une ressource.
Il est fortement recommandé d'encoder la valeur de la date en utilisant le format
59
défini par l'ISO 8601 [W3CDTF] sous la forme AAAA-MM-JJ.
Elément: Type
Nom :
Identifiant :
Définition :
Commentaire :
type de la ressource
type
La nature ou le genre du contenu de la ressource.
Type inclut des termes décrivant des catégories, fonctions ou genres généraux
pour le contenu, ou des niveaux d'agrégation. Il est recommandé de choisir la valeur
du type dans une liste de vocabulaire contrôlé (par exemple, la liste provisoire
de Types du Dublin Core[DCT1]). Pour décrire la matérialisation physique ou digitale
de la ressource, il faut utiliser l'élément Format.
Elément: Format
Nom :
Identifiant :
Définition
Commentaire:
format
format
La matérialisation physique ou digitale de la ressource.
Typiquement, Format peut inclure le media ou les dimensions de la ressource.
Format peut être utilisé pour préciser le logiciel, le matériel ou autre équipement
nécessaire pour afficher ou faire fonctionner la ressource.
Exemples de dimensions incluent la taille et la durée. Il est recommandé de choisir
la valeur du format dans une liste de vocabulaire contrôlé(par exemple, la liste des
types de media définis sur Internet [MIME]).
Elément: Identifiant
Nom :
Identifiant :
Définition :
Commentaire :
identifiant de la ressource
identifier
Une référence non ambiguë à la ressource dans un contexte donné
Il est recommandé d'identifier la ressource par une chaîne de caractère
ou un nombre conforme à un système formel d'identification.
Exemples de systemes formels d'identification incluent le "Uniform Resource Identifier"
(URI) (qui inclut le "Uniform Resource Locator" (URL)), le "Digital Object Identifier"(DOI)
et le "International Standard Book Number"(ISBN).
Element: Source
Nom :
source
Identifiant :
source
Définition :
Une référence à une ressource à partir de laquelle la ressource actuelle a été dérivée.
Commentaire La ressource actuelle peut avoir été dérivée d'une autre ressource source,
en totalité ou en partie. Il est recommandé de reférencer cette source par une chaîne
de caractère ou un nombre conforme à un système formel d'identification.
Elément: Langue
Nom :
Identifiant :
Définition :
Commentaire :
langue
language
La langue du contenu intellectuel de la ressource.
Il est recommandé d'utiliser comme valeur de l'élément Langue celles définies par la
RFC 1766 [RFC1766] qui comprend un code de langage à deux caractères
(venant du standard ISO 639 [ISO639]), éventuellement suivi d'un code à deux lettres
pour le pays (venant du standard ISO 3166 [ISO3166] ou en français [ISO3166]).
Par exemple, 'en' pour l'anglais, 'fr' pour le français, ou 'en-uk' pour l'anglais utilisé au
Royaume-Uni.
Element: Relation
Nom :
Identifiant :
Définition :
Commentaire :
relation
relation
Une référence à une autre ressource qui a un rapport avec cette ressource.
Il est recommandé de référencer cette ressource par une chaîne de caractères
ou un numéro conforme à un système formel d'identification.
60
Element: Couverture
Nom :
Identifiant :
Définition :
Commentaire :
couverture
coverage
La portée ou la couverture spatio-temporelle de la ressource.
La couverture typiquement inclut une position géographique (le nom d'un lieu
ou ses coordonnées), une période de temps (un nom de période, une date,
ou un intervalle de temps) ou une juridiction (telle que le nom d'une entité
administrative). Il est recommandé de choisir la valeur de Couverture dans un
vocabulaire contrôlé (par exemple, un thésaurus de noms géographiques,
comme[TGN]) et, quand cela est approprié, des noms de lieux ou de périodes
plutôt que des identifiants numériques tels que coordonnées ou intervalles de dates.
Elément: Droits
Nom :
Identifiant :
Définition :
Commentaire :
gestion des droits
rights
Information sur les droits sur et au sujet de la ressource.
Typiquement, un élément Droits contiendra un état du droit à gérer une ressource,
ou la reférence à un service fournissant cette information. Ces droits souvent couvrent
les droits de propriété intellectuelle (IPR), Copyright, et divers droits de propriété.
Si l'élément Droits est absent, aucune hypothèse ne peut être faite sur l'état de ces
droits, ou de tout autre, par rapport à la ressource.
Qualificatifs
Actuellement le DCMI reconnaît deux grandes catégories de qualificatifs :
•
Le raffinement d'éléments. Ces qualificatifs permettent de préciser le sens d'un
élément pour qu'il soit plus circonscrit ou plus précis. Un élément raffiné partage le
même sens que l'élément non qualifié mais avec une portée plus restreinte. Un client
qui ne peut interpréter le terme raffinant un élément spécifique devrait être capable
d'ignorer le qualificatif et de traiter la valeur de la métadonnée comme s'il s'agissait
d'un élément non qualifié (plus large). Les définitions des termes de raffinement
d'éléments pour les qualificatifs doivent être publiquement disponibles.
•
Le schéma d'encodage. Ces qualificatifs identifient des schémas qui aident à
l'interprétation de la valeur d'un élément. Ces schémas comprennent des vocabulaires
contrôlés et des notations formelles ou des règles d'interprétation. Une valeur
exprimée en utilisant un schéma d'encodage pourra donc être une expression
sélectionnée à partir d'un vocabulaire contrôlé ou une chaîne de caractères formattée
en accord avec une notation formelle. Si un schéma d'encodage ne peut être
interprété par un client ou un agent, la valeur peut toujours être utile à un lecteur
humain. La description de référence d'un schéma d'encodage utilisé avec des
qualificatifs doit être clairement identifiée et disponible pour usage public.
DocBook
DocBook, DTD créée par l'éditeur O'Reilly et utilisée pour baliser des textes narratifs mais aussi
des documents informatiques. DocBook dispose aussi d'un certain nombre d'éléments comme
les copies d'écran (screenshot), les programmes (programlisting), et les commandes (command).
Les documents de base les plus courants sont book et article. Les documents book peuvent
contenir des choses comme une préface, des chapitres, et des annexes, qui peuvent être
subdivisées en sections contenant des paragraphes, des listes, des figures, des exemples, et
des morceaux de programmes. Les articles sont comme les livres (book), mais ne contiennent
pas de chapitres. La déclaration de type de document (DTD) identifie la version de DocBook
utilisée. Une déclaration pour un article utilisant la version 4.2 de la DTD est :
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
Plusieurs feuilles de style XSLT sont disponibles pour DocBook, elles permettent de transformer
des fichier DocBook en fichiers XHTML, HTML, PDF (en utilisant quelque chose comme le
61
programme FOP et une feuille de style appropriée), en pages man Unix, en fichiers d'aide
Windows, ou en diapositives du type PowerPoint.
Eléments les plus couramment utilisés dans un article DocBook :
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
article - l'élément racine
articleinfo - cet élément balise les métadonnées de l'article
author - cet élément contient les informations concernant le créateur de l'article
firstname - le prénom d'un auteur
surname - le nom d'un auteur
email - une adresse email
pubdate - la date de publication de l'article
abstract - une description de l'article
title - cet élément est souvent utilisé dans l'ensemble du document book ou article,
pour donner un en-tête à des éléments tels que article, book, section, example, figure,
etc.
section - une partie générique d'un livre (book) ou d'un article
para - un paragraphe
command - cet élément est utilisé pour indiquer une commande informatique,
habituellement telle qu'elle est entrée en ligne de commande
figure - généralement utilisé pour une image
graphic - l'endroit prévu pour une image
ulink - une référence de lien hypertexte
programlisting - tout ou partie d'un programme informatique
orderedlist - une liste à lettres
itemizedlist - une liste à puces
listitem - un item dans une liste, à lettres ou à puces
En utilisant certaines des balises ci-dessus, on peut créer l'article DocBook suivant.
<?xml version="1.0" encoding="ISO-8859-1"?>
<article class="journalarticle" id="machin" lang="french" parentbook="-//OASIS//DTD DocBook XML
V4.2//EN" revisionflag="off" status="Public">
<articleinfo id="articleinfo" revisionflag="off">
<author>
<firstname>Michel</firstname>
<surname>Porchet</surname>
</author>
<title>Igitur, un film inspiré de Mallarmé</title>
<date lang="french">Juin 2005 </date>
<abstract>
<para>
Cet article décrit le scénario d&apos;un film dont le titre est &quot;Igitur&quot;.
</para>
</abstract>
</articleinfo>
<section id="intro">
<title>Introduction</title>
<para>
Cet article esquisse le scénario d&apos;un film, limité à un long plan séquence, tourné à
l&apos;aide d&apos;un steadycam <footnoteref linkend="toto"/><footnote><para>Le
steadycam est un dispositif de stabilisation d&apos;une caméra portée généralement devant
soi</para></footnote>.
</para>
</section>
<section>
<title>Plus qu&apos;une belle gueule</title>
<para>
62
On est emmené par le mouvement très lent du steadycam, pris par un rythme qui permet aux
choses de s&apos;installer et rend possible un regard attentif aux moindres choses. On
découvre la scène de loin puis on s&apos;approche jusqu&apos;à effleurer les peaux des
personnages.Le rythme est continu, le plus fluide possible, Les personnages occupent une
place fixe dans la pièce, seul le &quot; steadycameur &quot; se déplace.
</para>
<para>
Le lieu est un château délabré, tentures arrachées, défraîchies, restes d&apos;une splendeur
passée qui s&apos;ouvre aujourd&apos;hui à une autre dimension de sa beauté ?
&quot; <emphasis>Beauté misérable, matières agitées par le vent du
temps</emphasis> &quot;. Les pièces sont vides. Le &quot; steadycameur &quot; chemine
dans cinq pièces accolées les unes aux autres et toutes au même niveau. La chambre
d&apos;Igitur est architecturalement neutre (sol sombre, murs clairs unis), c&apos;est une
chambre quelconque, un lieu insituable, spatialement ni temporellement.
</para>
<para>
Igitur a les cheveux très courts, peut-être même tondus, ce qui renforce l&apos;androgynie
du personnage et permet d&apos;évoquer la dureté de certains précédents que la mémoire
collective véhicule. Ce trait &quot; brut &quot; est compensé par la douceur du visage,
presque enfantin, de l&apos;actrice qui incarne Igitur. Igitur porte des lentilles de contact
afin de créer des yeux qui ressemblent à des trous noirs (pupilles et iris confondues). Ceci
crée un sentiment d&apos;étrangeté, comme l&apos;impression que quelque chose qui
dépasse l&apos;humain.
</para>
<itemizedlist>
<listitem>
<para>Personnage : Igitur, une commédienne androgyne</para>
</listitem>
<listitem>
<para>Lieu : une grosse demeure délabrée ou mieux un château</para>
</listitem>
<listitem>
<para>
Eclairage : le plus gros problème si l&apos;on veut tourner le plan
séquence en continuïté
</para>
</listitem>
<listitem>
<para>Equipe technique : compter 5 personnes</para>
</listitem>
</itemizedlist>
<para>
En ligne de commande, vous pouvez atteindre le calendrier, à jour de la production :
<command>./mycalender.pl</command>
Vous devriez obtenir un résultat en HTML, à lire dans un navigateur Web.
</para>
<para>
Pour plus d&apos;informations sur la prodction voir:
<ulink url="http://mon_site_de_prod.com">http://mon_site_de_prod.com</ulink>
</para>
</section>
</article>
En transformant, à l'aide de Jaxe, ce fichier en fichier HTML on obtient :
63
Figure 8 : « Igitur » en version Docbook
Open Archives Initiative :
un protocole interopérable pour le partage des données76
L'OAI-PMH (Open Archives Initiative’s Protocol for Metadata Harvesting) ou protocole OAI
facilite l’échange de données entre des fournisseurs de données (par exemple des bibliothèques
ou des musées...) et un fournisseur de service (une bibliothèque, un centre de documentation,
un portail thématique ou local désirant rassembler des données). Ce protocole d’échange
permet de créer, d’alimenter et de tenir à jour, par des procédures automatisées, des entrepôts
qui signalent, décrivent et rendent accessibles des documents, sans les dupliquer ni modifier
leur localisation d’origine. Grâce au protocole OAI, une bibliothèque a la possibilité d’offrir une
visibilité accrue de ses documents, notamment ses publications électroniques ou fonds
spécialisés. Réciproquement, en tant que fournisseur de service, une bibliothèque peut réaliser
une base de données ou un portail documentaire dans son domaine de spécialité ou sur un
thème quelconque, en collectant les données descriptives de ressources et documents de tous
types, accessibles sur l’internet dans des entrepôts OAI. Enfin, le protocole OAI permet de faire
communiquer entre elles des bases de données diverses et hétérogènes, et donc de réaliser
des partenariats entre plusieurs établissements que rapprochent leurs collections
(complémentarité des fonds) ou leurs publics (services culturels d’une même collectivité).
Le protocole a été élaboré par l’Open Archive Initiative à l’issue de la Convention de Santa Fe
(1999) pour faciliter la description et la diffusion des métadonnées d’articles scientifiques
disponibles en accès ouvert sur Internet, notamment dans des répertoires de pré-publications. Il
s’est vite révélé très adapté au partage de métadonnées de documents scientifiques ou
culturels, présentes dans des ensembles de ressources homogènes ou hétérogènes, plus ou
moins réparties. Après une phase d’expérimentation, le protocole a atteint, en juin 2002, une
certaine stabilité avec sa version 2, considérée comme la spécification définitive. Le protocole
permet :
76
On trouvera les spécifications complètes du protocole sur le site de l’OAI http://www.openarchives.org, aux adresses
suivantes : http://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm
http://www.openarchives.org/OAI/2.0/guidelines-oai-identifier.htm
64
d’abattre des barrières du « Web invisible » en rendant possible le signalement de
ressources non accessibles aux moteurs de recherche ;
• de faciliter l’interopérabilité des ressources documentaires culturelles, sans duplication
ni déchargement des documents numériques primaires ;
• de mettre à jour simplement et automatiquement des métadonnées collectées et des
liens, en répercutant les dernières modifications des réservoirs sources, sans copier à
nouveau l’intégralité des données ;
• d’encourager l’utilisation d’un format de description assez générique pour les besoins
transdisciplinaires, même les plus simples, sans interdire des spécifications adaptées
à des besoins plus spécialisés ;
• d'intégrer, de ce fait, des ressources d’origine diverses, dans des traditions
descriptives propres, sans empêcher le maintien parallèle de ces traditions pour
d’autres usages.
Le protocole OAI s’appuie sur quelques concepts documentaires simples :
• la ressource : un document-objet décrit, réel ou virtuel ;
• l’item : objet documentaire décrivant une resource et qui contient ou génère des
métadonnées échangeables pour le protocole OAI, à la seule condition qu’un
identifiant unique, construit selon les recommandations de l’Open Archive Initiative,
puisse être attribué à l’item dans la base qui le contient ;
• l’enregistrement (record) : une représentation XML concrète de métadonnées extraites
d’un item dans un format compatible avec le protocole. Plusieurs enregistrements
(formats Dublin Core non qualifié77, BiblioML78, MarcXML ou encore oai_MARC79)
peuvent être produits pour un même item.;
• un lot ou ensemble OAI est un groupe d’items ou éléments définis dans l’entrepôt. Un
item peut appartenir à plusieurs lots. Les lots OAI peuvent être eux-mêmes divisés en
sous-lots.
Le protocole définit le langage par lequel communiquent le fournisseur de données (entrepôt) et
le fournisseur de services (agrégateur), qui rassemble des données collectées par un
moissonneur qui soumet des requêtes XML aux entrepôts en recourant aux protocoles http et
url, universellement répandus, pour une interopérabilité optimale ; les réponses qu'il reçoit sont
également en syntaxe XML. Pour alimenter l'agrégateur, le moissonneur visite plusieurs
entrepôts, qu'il doit interroger massivement une seule fois ou en plusieurs étapes, pour extraire
les enregistrements des items qui l'intéressent. Après la collecte, le moissonneur dépose les
données dans une base que le fournisseur de services rend accessible à ses clients.
L'interrogation de cette base est directe et ne sollicite pas les entrepôts d'origine, la base
retourne en réponse la liste des notices pertinents qui proposent notamment un lien hypertexte
vers le document primaire. En activant ce lien, l'utilisateur arrive sur le site et dans
l'environnement graphique de l’institution productrice, dont le serveur n'est finalement sollicité
que pour la fourniture de ce seul document.
•
Tableau 7 : les requêtes, dites « verbes » ou « commandes »
Identify
vérifie si le service désigné est un répertoire OAI
ListMetadataformats
demande la liste des formats de métadonnées que l’entrepôt est capable de fournir
ListSets
permet d’obtenir la liste des ensembles (par exemple thématiques) formés par le
fournisseur de données
ListIdentifiers
permet d’obtenir la liste des identifiants et des dates de dernière modification des
items disponibles dans la base
GetRecord
collecte l’information d’un item spécifique
ListRecords
récupère en bloc l’ensemble des items d’un répertoire
77
78
79
schéma oai_dc, publié par l’Open Archive Initiative http://www.openarchives.org/OAI/2.0/oai_dc.xsd
http://www.biblioml.org/
http://www.openarchives.org/OAI/1.1/oai_marc.xsd,
65
Ces requêtes permettent de définir les caractéristiques de l’exploitation que chaque
moissonneur fait d’un entrepôt : une fois qu’un entrepôt et son offre documentaire sont identifiés,
il appartient au responsable du moissonneur (ou au moissonneur lui-même, automatiquement,
selon des critères prédéfinis) de choisir les lots ("sets") ou la liste des données à collecter, puis
la fréquence des visites du moissonneur, qui donneront lieu à des collectes ciblées après
chaque mise à jour des données cibles de la collecte.
Au contraire de portails fédérateurs de ressources ou de catalogues collectifs, une base de
donnée constituée par moissons OAI permet au fournisseur de service de rendre accessibles
des données descriptives de documents sans faire peser une lourde charge sur le serveur de
chaque fournisseur de données ; de plus, le temps de réponse au client final dépend du seul
serveur du fournisseur de service. En revanche, les données exploitées par le fournisseur de
service sont le reflet d’un état figé des données collectées, en date du dernier passage du
moissonneur, alors qu’une interrogation simultanée de plusieurs bases permet d’afficher les
données en temps réel. Par conséquent, l’OAI-PMH n’est pas la solution la plus pertinente pour
des entrepôts dont une part importante du contenu est soumis à des modifications très
fréquentes, par exemple quotidiennes (actualités, œuvres vivantes…).
L'entrepôt OAI
Parmis les entrepôts existants, signalons : E-prints80 (Université de Southampton),
Pubmedcentral81, Archimède82 (Université de Laval), Aladin (Accès Libre aux Archives du Dépôt
Institutionnel Numérique) (Maison des Sciences de l’Homme-Alpes), Cyberthèses83 (Université
Lyon-2), Pastel84 (thèses en ligne des grandes écoles de Paris), LACITO85 (Langues et
civilisations de tradition orale CNRS). La Bibliothèque du Congrès a rendu moissonnable une
grande partie de ses collections numériques d’American Memory86. La Bibliothèque nationale de
France a créé un entrepôt accessible aux moissonneurs OAI pour exporter les notices, dans une
version en format Dublin Core, des monographies de sa bibliothèque numérique Gallica87.
Le Dublin Core, directement pris en charge par tous les moissonneurs OAI, est le format le plus
favorable pour les échanges. Il sera par conséquent jugé suffisant pour la plupart des entrepôts
OAI. MARC ou EAD peuvent être mieux adaptés à la description intellectuelle du document.
Pour nombre de projets d’entrepôts OAI, il faudra donc prévoir la conversion de notices
primaires (UNIMARC par exemple) en format Dublin Core, ce qui peut s’envisager de deux
façons :
80
81
82
83
84
85
86
87
88
•
la création manuelle d’une seconde notice en format Dublin Core ;
•
la duplication et la conversion à la volée, par une application logicielle, d’ensembles de
notices vers le format Dublin Core, pour qu’elles puissent être exposées sous cette
forme, cela exige le développement d’une application spécifique à chaque catalogue
et nécessite une étude approfondie88
http://www.eprints.org/
http://www.pubmedcentral.gov/about/oai.html
http://archimede.bibl.ulaval.ca/
http://www.cybertheses.org/cybertheses/cybertheses.html
http://pastel.paristech.org/
http://lacito.vjf.cnrs.fr/archivage/corpus_fr.htm
http://memory.loc.gov/ammem/oamh/
http://gallica.bnf.fr/
http://oai.bnf.fr/oai2
On peut s’inspirer de guides tels que celui de la Bibliothèque du Congrès, MARC to DC Crosswalk
http://www.loc.gov/marc/marc2dc.html
et son équivalent pour le passage de Dublin Core à MARC
http://www.loc.gov/marc/dccross.html
et utiliser des applications libres existantes, par exemple un module de conversion à la volée (depuis MARC 21, en
langage de programmation PERL) disponible sur le site du Comprehensive Perl Archive Network
http://search.cpan.org/~bricas/MARC-Crosswalk-DublinCore-0.01/ (CPAN) ;
Des études se développent aussi pour définir les correspondances de champs entre le Dublin Core et l’EAD (manuel du
logiciel librePLEADE)
http://www.pleade.org/fr/documentation/descriptions/entrepot-oai.html. .
66
Une fois choisis les formats d’exposition, la « couche supplémentaire » comportant ces
spécifications peut être implémentée en suivant, par exemple, le canevas d’OCLC (Online
Computer Library Center), OAICat89, ou en téléchargeant le logiciel Open source Fedora90 de
l’Université Cornell. L’Open Archive Initiative propose un test en ligne91 pour vérifier que les
données sont bien exportables en format Dublin Core. Il est conseillé de s’enregistrer comme
fournisseur de données auprès de l’Open Archive Initiative92 et de contacter les fournisseurs de
service potentiellement intéressés, qu’il s’agisse d’agrégateurs encyclopédiques (comme
OAIster93, le moissonneur du Public Knowledge Project , celui de l’ARC94, Cross Archive
Website de l’Université Old Dominion) ou tout autre fournisseur de service spécialisé. mod_oai,
un module libre pour serveur Apache95, en cours de développement, permettra l’interrogation de
toute base de données d’accès libre, à la seule condition que celle-ci soit exposée en format
Dublin Core.
Le moissonneur OAI
Les moissonneurs OAI sont de plus en plus nombreux à parcourir le Web, notamment ceux des
agrégateurs encyclopédiques institutionnels, dont l’un des plus complets, OAIster (Université du
Michigan)96. La moisson OAI peut aussi servir à constituer de grands répertoires, comme le
projet Michael97 de répertoire européen des fonds culturels numériques. En France, le projet de
Banque numérique du savoir d’Aquitaine (BNSA98) incite ses partenaires à fournir des bases de
données patrimoniales compatibles avec le protocole OAI pour les moissonner et permettre leur
valorisation, via une interface de consultation unique, en cours de développement.
La base XML n'est pas nécessairement nourrie exclusivement par le moissonneur nourrit, elle
peut être alimentée par d’autres moyens, y compris en ressources « locales », et par
intervention humaine. Ainsi, le futur portail SUDOC99 de l’Agence bibliographique de
l’enseignement supérieur (ABES) comportera une base XML alimentée soit par saisie directe,
soit par moisson OAI, soit par des opérations de chargement en série.
Pour implémenter un moissonneur OAI et les fonctionnalités complémentaires utiles, on pourra
s’aider du guide de l’Open Archives Initiative100 et recourir à des kits librement diffusés tel que le
kit d’implémentation de l’Université de l’Illinois101. On trouve aisément en ligne des logiciels
moissonneurs Open source, comme le moissonneur java d’OCLC, OAIHarvester2102, ou dans
des bibliothèques de modules (voir par exemple un module Perl103 complet sur le site du CPAN) ;
et autres outils utiles d’indexation, de conversion de données, d’interface client… Enfin, la
plupart des principales plates-formes de gestion de ressources numériques Open source telles
que DSpace104, permettant de collecter, d’indexer et de diffuser des contenus numériques, sont
compatibles avec le protocole OAI et permettent d’implémenter un moissonneur ou un entrepôt.
Quelques exemples de descripteurs OAI :
<?xml version="1.0" encoding="UTF-8" ?>
<Identify
xmlns="http://www.openarchives.org/OAI/1.0/OAI_Identify"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
http://www.oclc.org/research/software/oai/cat.htm
http://www.fedora.info/
http://re.cs.uct.ac.za/
http://www.openarchives.org/data/registerasprovider.html
http://www.pkp.ubc.ca/harvester/
http://arc.cs.odu.edu/
http://www.modoai.org/
http://oaister.umdl.umich.edu/o/oaister/viewcolls.html
http://www.michael-culture.org/
http://bnsa.aquitaine.fr/
http://www.sudoc.abes.fr/
http://www.openarchives.org/OAI/2.0/guidelines-harvester.htm
http://nergal.grainger.uiuc.edu/ProviderTools/TemplateAReadme.htm
http://www.oclc.org/research/software/oai/harvester2.htm
http://search.cpan.org/~esummers/OAI-Harvester-0.98/lib/Net/OAI/Harvester.pm
http://dspace.org/
67
xsi:schemaLocation="http://www.openarchives.org/OAI/1.0/OAI_Identify
http://www.openarchives.org/OAI/1.0/OAI_Identify.xsd">
<responseDate>2002-02-16T09:40:35-7:00</responseDate>
<requestURL>http://www.infomotions.com/alex/oai/index.php?verb=Identify</requestURL>
<!-- Identify-specific content -->
<repositoryName>Alex Catalogue of Electronic Texts</repositoryName>
<baseURL>http://www.infomotions.com/alex/</baseURL>
<protocolVersion>1.0</protocolVersion>
<adminEmail>[email protected]</adminEmail>
</Identify>
<?xml version="1.0" encoding="UTF-8" ?>
<ListIdentifiers
xmlns="http://www.openarchives.org/OAI/1.0/OAI_ListIdentifiers"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/1.0/OAI_ListIdentifiers
http://www.openarchives.org/OAI/1.0/OAI_ListIdentifiers.xsd">
<responseDate>2002-02-16T10:03:09-7:00</responseDate>
<requestURL>http://www.infomotions.com/alex/oai/index.php?verb=ListIdentifiers</requestURL>
<!-- ListIdentifiers-specific content -->
<identifier>twain-30-44</identifier>
<identifier>twain-adventures-27</identifier>
<identifier>twain-adventures-28</identifier>
<identifier>twain-connecticut-31</identifier>
<identifier>twain-extracts-32</identifier>
</ListIdentifiers>
<?xml version="1.0" encoding="UTF-8" ?>
<ListMetadataFormats
xmlns="http://www.openarchives.org/OAI/1.0/OAI_ListMetadataFormats"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/1.0/OAI_ListMetadataFormats
http://www.openarchives.org/OAI/1.0/OAI_ListMetadataFormats.xsd">
<responseDate>2002-02-16T09:51:49-7:00</responseDate>
<requestURL>http://www.infomotions.com/alex/oai/index.php?verb=ListMetadataFormats</reqestURL>
<!-- ListMetadataFormats-specific content -->
<metadataFormat>
<metadataPrefix>oai_dc</metadataPrefix>
<schema>http://www.openarchives.org/OAI/dc.xsd</schema>
<metadataNamespace>http://purl.org/dc/elements/1.1/</metadataNamespace>
</metadataFormat>
</ListMetadataFormats>
La TEI
Les Recommandations de la TEI - Text Encoding Inititative (TEI) Guidelines105 - s'adressent a
tous ceux qui souhaitent échanger des informations stockées sous forme électronique. Elles
mettent l'accent sur l'échange des données textuelles mais d'autres types de données comme
les images et les sons sont également pris en compte. Les Recommandations fournissent le
moyen de rendre explicites certaines caractéristiques d'un texte, de façon à faciliter le traitement
de ce texte par des programmes informatiques pouvant s'exécuter sur des plate-formes
différentes. Cette tâche d'explicitation est appelée « balisage » ou « codage ». La représentation
d'un texte sur un ordinateur met toujours en œuvre une forme de balisage ou une autre. La TEI
tire son origine d'une part de l'anarchie qui règne dans la communauté scientifique en matière
de format, et d'autre part du nombre croissant de traitements que les chercheurs opèrent sur les
textes sous forme électronique. Les Recommandations de la TEI s'appuient sur SGML pour
définir leurs règles de codage, avec une bascule aujourd’hui vers XML. Les Recommandations
105
http://www.tei-c.org/
et pour la version lite de la TEI, le site, en français http://www.tei-c.org/Lite/teiu5_fr.html
ou encore http://www.gutenberg.eu.org/publications/autres/TEILITE
on peut consulter une version française du TEI, réalisée par François Role, au http://www.uic.edu/orgs/tei/lite/teiu5_fr.html.
68
ont été publiées en mai 1994, après six ans de travaux auxquels ont participé des chercheurs de
toute nationalité et de toute discipline.
Les objectifs généraux de la TEI ont été définis par la résolution finale de la conférence
préparatoire tenue au Vassar College de New York en novembre 1987. Cette résolution connue
sous le nom de « Principes de Poughkeepsie » fut peu à peu précisée à travers une série de
documents de travail. D'après ces documents les Recommandations devaient :
• être suffisamment précises pour représenter les propriétés des textes intéressants
pour les chercheurs ;
• être simples, claires et concrètes ;
• être utilisables facilement par les chercheurs et ne pas nécessiter l'utilisation de
logiciels spécifiques ;
• permetttre une définition rigoureuse des textes en vue de traitements efficaces ;
• être modifiables par l'utilisateur ;
• respecter les normes en vigueur ou sur le point d'être adoptées.
Le monde de la recherche est large et divers. Pour que ces recommandations aient une large
audience, il était important de s'assurer que :
• les descriptions des caractéristiques fondamentales d'un texte puissent être facilement
échangées ;
• les descriptions spécialisées puissent être facilement ajoutées (ou supprimées) d'un
texte ;
• la même caractéristique puissent être encodée en parallèle de plusieurs façons ;
• la richesse du balisage puisse être déterminée par l'utilisateur de la façon la plus
simple possible ;
• une documentation relative au texte et à la façon dont il a été codé soit fournie.
En effectuant un choix parmi les centaines d'éléments définis par la TEI, un ensemble initial
contenant les éléments susceptibles de servir à n'importe quel utilisateur a été identifié (la « TEI
Lite »). Ce sous-ensemble doit :
• comprendre la plupart des éléments qui appartiennent au « core tag set »106 de la TEI ; ;
• permettre de traiter correctement une large gamme de texte, avec un niveau de précision
correspondant aux pratiques courantes des chercheurs ;
• pouvoir être utilisé aussi bien pour produire de nouveaux documents que pour coder des
documents existants ;
• pouvoir fonctionner avec la plupart des logiciels SGML ;
• être dérivé de la DTD TEI complète en utilisant les mécanismes d'extension décrits dans les
Recommandations de la TEI.
Lorsqu'un passage de prose est saisi sur ordinateur par un opérateur naïf, il tente de rester
fidèle à l'aspect du texte imprimé, en retenant les mêmes coupures de ligne que l'original, en
insérant des blancs afin de représenter la disposition des titres originaux et des fins de page, et
ainsi de suite.
106
Ce dernier contient en effet des éléments généraux susceptibles d'être utilisés pour tout type de texte et tout type de
traitement
69
page 1
IGITUR
O
n est emmené par le mouvement très lent du steadycam, pris par un rythme qui permet aux choses de s’installer et rend possible un regard attentif aux moindres choses. On découvre la scène
de loin puis on s’approche jusqu’à effleurer les peaux des personnages. Le rythme est continu, le plus
fluide possible, Les personnages occupent une place fixe dans la pièce, seul le "steadycameur" se
déplace.
L
e lieu est un château délabré, tentures arrachées, défraîchies, restes d’une splendeur passée qui
s’ouvre aujourd’hui à une autre dimension de sa beauté… « Beauté misérable, matières agitées par le
vent du temps ». Les pièces sont vides. Le "steadycameur" chemine dans cinq pièces accolées les unes
aux autres et toutes au même niveau. La chambre d’Igitur est architecturalement neutre (sol sombre,
murs clairs unis), c’est une chambre quelconque, un lieu insituable, spatialement ni temporellement.
I
gitur1 a les cheveux très courts, peut-être même tondus, ce qui renforce l’androgynie du personnage
et permet d’évoquer la dureté de certains précédents que la mémoire collective véhicule. Ce trait
« brut » est compensé par la douceur du visage, presque enfantin, de l’actrice qui incarne Igitur. Igitur
porte des lentilles de contact afin de créer des yeux qui ressemblent à des trous noirs (pupilles et iris
confondues). Ceci crée un sentiment d’étrangeté, comme l’impression que quelque chose qui dépasse
l’humain.
1 Igitur est un personnage tiré de l'œuvre de Mallarmé
Une telle transcription souffre d'un certain nombre de limitations :
• les numéros de page ainsi que les titres courants sont mêlés au texte un logiciel aura
du mal à les démêler ;
• les textes français sont souvent composés avec toute une artillerie de guillemets
divers (ici les guillemets français « et » et ceux anglais "et'' )107
• la conservation des césures de l'original implique que des programmes de recherche
peu élaborés ne trouveront pas les mots coupés ;
• l'emploi de lettres accentuées est résolu si l'on saisit en utilisant un codage comme
ISO 8859-1 (Latin1), par contre on sera quand-même obligé de coder certains
caractères en utilisant des entités SGML, par exemple « œ » ne fait pas partie de ce
codage et devra donc être codé &oelig ;
• les divisions de paragraphe sont marquées uniquement par l'emploi d'espaces blancs,
et des fins de ligne forcées ont été introduites. Par conséquent, tout changement de
taille de police lors de l'impression du texte engendrera des problèmes de mise en
page.
• la typographie française nécessite divers types d'espaces (par exemple avant le pointvirgule on met une espace fine, avant le deux-points une espace justifiante, etc.) ou
de tirets (par exemple « --- ») qu'une saisie simple aurait du mal à distinguer ;
• lettrines, importantes dans certains textes, sont maltraitées par les traitements de
texte, elles sont donc souvent introduites en mode graphique.
Le codage recommandé par la TEI permet d'effectuer les distinctions suivantes :
• les divisions de paragraphe sont marquées de façon explicite ;
107
alors que les textes anglais peuvent provoquer des confusions entre l'apostrophe et le guillemet simple, d'où la difficulté de
déterminer de façon sûre quels passages sont en discours direct
70
les apostrophes sont distinguées des guillemets ;
• les références d'entité sont employées pour les ligatures comme « œ » ;
• les divisions de page ont été marquées par un seul élément <pb> vide ;
• afin de simplifier la recherche et le traitement, la division en lignes de l'original n'a pas
été retenue et des mots coupés par accident typographique en fin de ligne se trouvent
réassemblés sans commentaire108 ;
La décision de se concentrer sur le texte, plutôt que sur la façon dont il a été imprimé dans une
édition spécifique, témoigne d'un problème de codage fondamental : celui de la sélectivité. Un
codage rend explicite seulement celles des caractéristiques du texte qui ont une importance
pour l'encodeur. Il n'est pas difficile d'imaginer comment on pourrait étendre facilement le
codage d'un passage même aussi court que celui-ci. Par exemple :
• des gloses ou des commentaires sous forme de notes de pied de page pourraient être
ajoutés ;
• des pointeurs pourraient être ajoutés afin de lier certaines parties du texte entre elles ;
• des noms propres de divers types pourraient être distingués par rapport au texte
environnant ;
• des données bibliographiques détaillées concernant la provenance du texte ainsi que
son contexte pourraient être fournies dans un en-tête ;
• une analyse linguistique du passage en phrases, clauses, mots, etc. pourrait être
fournie, chaque unité étant associée à des codes de catégorie appropriés ;
• le texte pourrait être segmenté dans des unités de discours ou de narration ;
• l'interprétation ou l'analyse systématique du texte pourraient être incluses dans le
codage, avec des associations ou des alignements potentiellement complexes entre le
texte et l'analyse, ou entre le texte et une ou plusieurs traductions de ce dernier ;
• certains passages dans le texte pourraient être liés à des images ou à du son stockés
sur d'autres supports.
La méthode recommandée par la TEI pour faire tout ceci fournit également maintes possibilités,
dont nous ne citons que quelques exemples :
• l'analyse détaillée des composants de noms ;
• des méta-informations détaillées fournissant des données quant aux origines du texte
et aux sujets qu'il aborde ;
• des informations sur l'historique des impressions, ou des variantes manuscrites telles
qu'elles apparaissent dans une suite de versions particulières du texte.
Pour connaître les recommandations applicables dans ces différents cas, et pour découvrir de
nombreuses autres possibilités, il convient de se reporter au texte complet des
recommandations de la TEI109.
•
Un autre aspect de l'utilisation du français pour la TEI est celui de la francisation des balises et
attributs. La TEI prévoit des mécanismes pour paramétrer le nom des balises et donc, si on
souhaite, concevoir et utiliser des balises en français. Il y a là un compromis entre le confort
d'écriture et de lisibilité pour le créateur du document et l'échangeabilité: Ls textes avec des
balises « localisées » ne peuvent évidemment plus être immédiatement interprétés par d'autres.
À noter que les tentatives pour franciser les langages de programmation (Basic, Pascal, etc.)
n'ont jamais eu de succès, sans doute pour la raison ci-dessus... Mais enfin, avec la TEI c'est
possible si on le souhaite. Le nom anglais des balises dans le codage SGML a été conservédes
exemples.
Tout texte conforme à la TEI comporte
• un en-tête TEI (balisé comme un élément <teiHeader> ,
• la transcription du texte lui-même (balisé comme un élément <text> ).
108
109
Si la division en lignes de l'original avait un intérêt particulier, comme ce pourrait être le cas pour une édition rare, elle
pourrait être notée facilement.
Le site de la TEI est http://www.TEI-C.org
71
L'en-tête TEI contient des informations analogues à celles que l'on trouve sur la page de titre
d'un texte imprimé. Il contient jusqu'à quatre parties :
• une description bibliographique du texte électronique ;
• une description de la manière dont il a été codé ;
• une description non-bibliographique du texte (le « profil » du texte) ;
• un historique de révision.
Un texte TEI peut être unitaire (une œuvre isolée) ou composite (un recueil d'œuvres, comme
une anthologie). Dans un cas comme dans l'autre, le texte peut éventuellement comporter des
pièces liminaires ou des annexes. Entre les deux se trouve le corps du texte qui, dans le cas
d'un texte composite, peut comporter des groupes, chacun contenant encore des groupes ou
des textes. Un document TEI simple comporte, au niveau textuel, les éléments suivants :
<front> : regroupe tous les éléments (en-têtes, page de titre, préfaces, dédicaces, etc.) situés
avant le début du texte lui-même ;
<group> : regroupe plusieurs textes unitaires ou groupes de textes ;
<body> : regroupe le corps entier d'un texte unitaire seul, à l'exclusion de toute pièce liminaire ou
annexe ;
<back> : regroupe toutes les annexes qui suivent le texte principal.
Toutes les notes, qu'elles soient imprimées comme des notes de bas de pages, des annotations
de fin d'ouvrage ou de chapitre, des notes marginales, ou sous une autre forme, devraient être
marquées au moyen du même élément :
<note> : contient une note ou une annotation. Parmi les attributs citons :
<type> : décrit le type de la note ;
<resp> : indique le responsable de l'annotation : l'auteur, le rédacteur, le traducteur, etc. ;
la valeur pourrait être author , editor , etc., ou les initiales de la personne qui a ajouté
l'annotation ;
<place> : indique l'emplacement de l'annotation dans le texte source, des valeurs
possibles sont : inline (sur la ligne), interlinear (interlinéaire), left (gauche), right (droit),
foot (pied de page) et end (fin), valeurs qui indiquent respectivement que les notes
paraissent comme des paragraphes marqués dans le corps du texte, entre les lignes,
dans la marge gauche ou droite, en bas de la page, ou à la fin du chapitre ou du volume ;
<target> (<targetEnd>) : indique le point d'attachement (la fin du passage) d'une note, ou le
début du passage auquel la note est attachée ;
<anchored> : indique si la copie donne l'endroit exact de référence pour la note.
Dans la mesure du possible, le corps d'une note devrait être inséré dans le texte au même
endroit que celui de son identifiant ou marqueur. Ceci peut ne pas être possible, par exemple
dans le cas de notes marginales qu'il peut être difficile d'ancrer à un emplacement exact. Pour la
simplicité, il convient de placer les notes marginales avant le paragraphe (ou autre élément)
correspondant. Les notes peuvent également être placées dans une division séparée du texte
(comme les notes de fin le sont dans des livres imprimés) et liées à la portion pertinente du texte
au moyen de leur attribut target. Si nécessaire, l'attribut n peut être employé pour donner le
numéro ou l'identifiant d'une note. Voir le second exemple L'attribut resp devrait être employé de
façon systématique pour distinguer les notes d'auteur et d'éditeur, si l'œuvre comporte ces deux
sortes de note ; autrement, l'en-tête TEI devrait indiquer leur type.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TEI.2 SYSTEM "http://www.oucs.ox.ac.uk/dtds/tei-oucs.dtd" [ ]>
<TEI.2 lang="fr">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Scénario d'Igitur/title>
<author>Michel Porchet</author>
72
</titleStmt>
<note><resp Michel Porchet /></note
<editionStmt>
<edition>
<date>2005-05-03T14:38:08</date>
</edition>
</editionStmt>
<publicationStmt>
<authority/>msh paris nord th4 fabula méda
<address>
<addrLine>ICI</addrLine>
<email/>[email protected]
<name>Michel Porchet</name>
</address>
</publicationStmt>
<sourceDesc>
<title>Igitur</title>
<author>Mallarmé</author>
<p>selon une version revue par M. Dupond</p>
<p>Written by OpenOffice</p>
</sourceDesc>
</fileDesc>
<profileDesc>
<langUsage default="NO">
<language id="">ISO "fr" </language>
</langUsage>
</profileDesc>
<revisionDesc>
<change>
<date>2005-05-03T14:49:23</date>
<respStmt>
<name>Michel Porchet</name>
</respStmt>
<item>revision</item>
</change>
</revisionDesc>
</teiHeader>
<text>
<body>
<div>
<head>IGITUR</head>
<p>On est emmené par le mouvement très lent du steadycam, pris par un rythme qui permet aux cho- ses de s’installer
et rend possible un regard attentif aux moindres choses. On découvre la scène de loin puis on s’approche jusqu’à
effleurer les peaux des personnages. <lb/>Le rythme est continu, le plus fluide possible, Les personnages occupent
une place fixe dans la pièce, seul le "steadycameur" se déplace.</p>
<p>Le lieu est un château délabré, tentures arrachées, défraîchies, restes d’une splendeur passée qui s’ouvre
aujourd’hui à une autre dimension de sa beauté… « Beauté misérable, matières agitées par le vent du temps ». Les
pièces sont vides.<lb/>Le "steadycameur" chemine dans cinq pièces accolées les unes aux autres et toutes au même
niveau. La chambre d’Igitur est architecturalement neutre (sol sombre, murs clairs unis), c’est une chambre
quelconque, un lieu insituable, spatialement ni temporellement.</p>
<p>Igitur <note><place:foot><p>Igitur est un personnage tiré de l'&oeliguvre de Mallarmé</p></place></note>a les
cheveux très courts, peut-être même tondus, ce qui renforce l’androgynie du personnage et permet d’évoquer la dureté
de certains précédents que la mémoire collective véhicule. Ce trait « brut » est compensé par la douceur du visage,
presque enfantin, de l’actrice qui incarne Igitur. Igitur porte des lentilles de contact afin de créer des yeux qui
ressemblent à des trous noirs (pupilles et iris confondues). Ceci crée un sentiment d’étrangeté, comme l’impression
que quelque chose qui dépasse l’humain.</p>
</div>
</body>
</text>
</TEI.2>
73
Les bases de données documentaires et la gestion des bibliothèques
Le codex, objet parallélépipédique, peut être rangé sur du linéaire de rayonnage, et l’épaisseur
de son dos de reliure permet de rappeler titre, auteur et éditeur. La bibliothèque peut donc être
organisée de façon rationnelle et spatiale. Bibliothécaires et documentalistes, travaillent depuis
de longues années sur les questions de thesaurus, de mots-clefs, d’accès documentaires à
travers différents dispositifs de catalogage et de mise à disposition des documents (rappel des
titres en bout de rayonnage, tiroirs de fiches, fichiers analytiques, microfilms, microfiches, etc.).
Les catalogues ont été informatisés et rendus consultables sur des terminaux locaux puis situés
à distance (On-Line Public Access Catalogues, OPAC (en français : catalogues automatisés en
ligne)110. Un OPAC est un catalogue de bibliothèque accessible en ligne. Cet acronyme ne se
développe qu'en anglais : Online Public Access Catalog. Un substitut français, CIEL, pour
Catalogue Informatisé En ligne a été proposé, mais n'a jamais été adopté par la communauté
des bibliothécaires. Très employé par les bibliothécaires, le terme OPAC est en revanche
quasiment inconnu du public des bibliothèques. Les premiers OPACs étaient en mode caractère
et consultables uniquement à l'intérieur de la bibliothèque. Depuis la fin des années 1990, les
nouveau OPACs ont une interface graphique, respectant le plus souvent les normes et
standards du web. De plus en plus d'OPACS sont consultables sur Internet. L'OPAC est
généralement fourni par le logiciel de gestion de la bibliothèque, appelé Système intégré de
gestion de bibliothèque (SIGB). La norme Z39.50 permet d'interroger simultanément plusieurs
OPACs, via une interface web et d’afficher les données en temps réel. En revanche, le temps de
réponse au client final dépend du serveur le moins performant de l’ensemble des fournisseurs
de données.
Les systèmes se sont ensuite étendus vers des interrogations en langages naturels et l’accès à
des documents par la médiation de l’analyse de leur contenu résumé ou exhaustif. La
bibliothèque mais aussi la librairie et l'édition sont les lieux de pratiques très anciennes de la
normalisation, tant pour l'aspect matériel du document, que pour l'appréhension normalisée des
catalogues et de l'analyse de leur contenu (CT46 de l’ISO). Les réticences de certains
bibliothécaires et documentalistes aux nouveaux paradigmes ne peuvent être réduites à un
simple corporatisme. Ils défendent une tradition littéraire, patrimoniale et savante très marquée
par les notions d’œuvres et d’auteurs. Détenteurs d’un savoir-faire, souvent négligé par les
experts développant les systèmes normalisés, ils sont souvent plus proches des chercheurs que
ces derniers.
Si l’hypertexte a facilité, et quasiment constitué la situation empirique de lecture numérique il
n’en reste pas moins que le présupposé commun de ces systèmes d’écriture et de publication
est bien l’idée que le dispositif auteur peut prévoir et suffit à organiser les futures lectures. Il
existe un logiciel qui est explicitement un logiciel de lecture, c’est le “ navigateur ” (terme
français retenu pour browser qui signifie “ feuilleteur ”). Les navigateurs ont fortement contribué
à identifier, analyser, formaliser, représenter, bref, faire exister sous une forme technique, les
fonctionnalités centrales de l’activité de lecture. Nonobstant le faible développement des
fonctionnalités spécifiques de lecture, le Web fait exister la lecture électronique111.
Quelques SIGB et logiciels de gestion électronique de documents (par exemple Ex-Libris112) ou
outils de recherche pour documents XML (plate-forme SDX113), ainsi que de nombreux outils
libres répertoriés sur le site de l’OAI114 commencent à proposer des services OAI.115
110
111
112
113
114
115
MAREC Jöelle, Les OPACS sont-ils opaques ?, in Bulletin des bibliothèques de France, 1989, n° 1, tome 34.
GIFFARD Alain, Idée de la lecture, idée de la mémoire,
http://alaingiffard.blogs.com/culture/2004/12/memoria_trois_c.html
http://www.cadic.fr
http://adnx.org/sdx/
http://www.openarchives.org/tools/tools.html
Portail CNRS, bibliothèque numérique sur la recherche en Technologies de l'Information et de la Communication:
http://www.tematice.fr
Sciences humaines: http://www.uqac.uquebec.ca/zone30/Classiques_des_sciences_sociales
http://rtp-doc.enssib.fr site participatif du CNRS sur le thème « documents et contenu: création, indexation, navigation ».
Sur les normes: l'ISO (Organisation Internationale de Normalisation): http://www.iso/tc37/sc4