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 & (respectivement < / > / ' /"). Pour indiquer une valeur d'attribut contenant des guillemets, alors qu'elle est délimitée par des guillemets, on utilise la notation ". 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 '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 & ou un autre de ces caractères par son code ASCII, ici &. 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'un film dont le titre est "Igitur". </para> </abstract> </articleinfo> <section id="intro"> <title>Introduction</title> <para> Cet article esquisse le scénario d'un film, limité à un long plan séquence, tourné à l'aide d'un steadycam <footnoteref linkend="toto"/><footnote><para>Le steadycam est un dispositif de stabilisation d'une caméra portée généralement devant soi</para></footnote>. </para> </section> <section> <title>Plus qu'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'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. </para> <para> 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é ? " <emphasis>Beauté misérable, matières agitées par le vent du temps</emphasis> ". 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. </para> <para> 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. </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'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'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