
XML.
Le langage XML
Soit une liste des cours AF400( en HTML)
<h3>Liste des cours AF400 (© Volubis)</h3> <ul> <li>£C01.120 <em>(module £cursuspgm)</em> ESPACE ADRESSABLE UNIQUE</li> <li>£C01.130 <em>(module £cursuspgm)</em> INIT OS/400 (notion d'objet, bibliothèque)</li> <li>etc...</li> </ul>
|
ce qui s'affiche :
Liste des cours AF400 (© Volubis)
- £C01.120 (module £cursuspgm) ESPACE
ADRESSABLE UNIQUE
- £C01.130 (module £cursuspgm) INIT OS/400
(notion d'objet, bibliothèque)
- etc...
imaginons maintenant la même liste XML

(voir le fichier complet,
le source du pgm ayant réalisé
cela)
WDSc peut vous aider à éditer du XML.
(sous RDI/RDP, il faut activer la capacité XML par Fenêtre/préférence,
puis choisir Général/capacité et activez XML developer)
Ensuite, créez un projet, (Nouveau/Projet, projet
dans l'option Général)
Ajoutez un fichier XML (clic droit sur le projet/Nouveau/Autres) 
vous pouvez alors l'éditer, (il y a un éditeur XML intégré
à WDSc/RDP)

Voici la manière dont WDSc / RDP, montrent ce fichier :

Les règles du jeu XML
Elles sont extrêmement simples. Les informations doivent
être :
- soit encadrées par des balises ouvrantes(ex. <LIVRE>) et fermantes
(ex. </LIVRE>) (contrairement à HTML où
ses ces dernières n'étaient pas toujours obligatoires).
On parle alors d'éléments. Les éléments
doivent s'imbriquer proprement les uns dans les autres : aucun chevauchement
n'est autorisé. Les éléments vides sont permis,
selon le format <ELEMENTVIDE/>.
- soit incluses à l'intérieur même des balises : on parle
alors d'attributs. Exemple : <LIVRE SUJET="XML">.
Ici l'attribut SUJET de l'élément LIVRE a la valeur "XML" .
En XML, contrairement à HTML, les valeurs des entités doivent toujours
être encadrées par des guillemets (simples ou doubles).
- Soit encore définies sous forme d'entités. Les entités
sont des abréviations. Par ex; si "Extensible Markup Language" est
déclaré comme une entité associée à la
notation "xml"; cette chaîne de caractères pourra être
abrégée en "&xml;" dans tout le fichier XML.
Une entité peut aussi représenter un fichier XML externe tout
entier. (inclusion de fichier XML)
Les caractères < , > , & et " doivent être
remplacés
par les entités < , > , & et "e;dans
les
valeurs
de type texte.
- le document peut enfin contenir
:
- des commentaires sous la forme <!-- le commentaire -->
- des processing instructions (PI) c'est à dire des instructions
destinées à une application particulière sous la forme <?nom-application
instructions-spécifiques?>
par exemple, une "processing instruction" destinées à XML lui même
commence souvent les documents XML.
- <?xml version="1.0" encoding="ISO-8859-1" ?> (version
de XML et jeu de caractères des données, ici "latin-1", c.a.d
le nôtre)
- La DTD (Définition de Type de Document).
La structure arborescente
du document XML (intitulé des balises, imbrications des balises, caractère
obligatoire ou facultatif des balises et de leur ordre de succession) peut
être déclarée formellement dans le corps du document XML
ou dans un fichier séparé.
Cette déclaration s'appelle une Définition de Type de Document
(DTD). Elle s'effectue selon un formalisme particulier défini lui-aussi
dans la spécification XML. En XML cette déclaration est facultative,
ce qui donne une grande souplesse aux développeurs. On n'écrira
donc une DTD que lorsqu'il y aura vraiment intérêt à le
faire (par exemple pour contraindre la saisie/mise à jour du document
XML)
Lorsqu'un document XML possède une DTD associée et la respecte,
on dit qu'il est valide. Lorsqu'il respecte seulement les
règles de la grammaire XML (balises fermées, correctement imbriquées)
on dit qu'il est bien formé.
Ce que XML va rendre possible. XML va permettre :
aux humains :
de saisir (ou mettre à jour) et d'échanger en
une une seule fois un contenu (par ex. notre bibliographie) et un
contenu pur. Autrement dit :
sans se soucier de la présentation ou des traitements futurs ;
sans avoir à saisir des libellés tels que'"auteur",
"année de parution", sans avoir à mettre les titres en
italique — exactement, donc, à la manière dont on
alimenterait une base de données.
Et d'en générer ensuite automatiquement :
de multiples présentations (en tableau, en texte suivi…)
avec éventuellement tris, sélections,
réorganisations, génération automatique de
libellés, tables des matières, index, etc.
et ce sur de multiples médias (écran, papier, terminal
Braille, etc.)
Tout ceci rendu possible par l'indépendance du balisage par
rapport à la présentation.
aux logiciels de comprendre/exploiter au mieux le contenu de ces
pages, rendu désormais explicite par un balisage
spécifique, indépendant de toute application.
La spécification XML ( traduction française) se
trouve à babel.alis.com/web_ml/xml/REC-xml.fr.html
Structure d'une DTD :
- ELEMENT : définition d'un
élément
- le premier argument doit être le nom
de l'élément
- vient ensuite une règle:
- (liste des eléments contenus)
- chaque élément peut être noté
? -> présent 0 ou 1 fois
+ -> présent au moins une fois
* -> présent de 0 à n
fois
- ou bien élément unitaire
- (#CDATA) : donnée élémentaire, mais
pouvant contenir des balises
- (#PCDATA) : donnée élémentaire non
traitées par le parser
- ANY : cet élément peut contenir n'importe
quel donnée
- ATTLIST : défintion des
caractèristiques d'un attribut
- nom de l'élément
- nom de l'attribut
- type d'attribut
- CDATA : donnée caractères (toute forme de
valeurs admises)
- (val1| val2 |val3 | ....) : la valeur doit être une
des valeurs
- ID : identificateur unique (la valeur doit être
unique dans le document XML)
- valeur par défaut
- une valeur particulière
- #REQUIRED : une valeur est obligatoire
- #IMPLIED : la valeur peut rester non
spécifiée
- #FIXED valeur-imposée : la valeur ne
peut être que valeur-imposée
<! DOCTYPE AF400 [
<!ELEMENT COURS (TEXTE,TYPE,SRCFIL?,SRCLIB?,SRCMBR?,CHEMIN?,SUJET,MOT_DIRECTEUR,DATE) > <!ELEMENT TEXTE (#PCDATA) <!ELEMENT TYPE (#PCDATA) > <!ELEMENT SRCFIL (#PCDATA) > <!ELEMENT SRCLIB (#PCDATA) > <!ELEMENT SRCMBR (#PCDATA) > <!ELEMENT CHEMIN (#PCDATA) > <!ELEMENT SUJET (#PCDATA) > <!ELEMENT MODIRECTEUR (MOTCLE1,MOTCLE2?,MOTCLE3?,MOTCLE4?,MOTCLE5?) > <!ELEMENT DATE (#PCDATA) > <!ELEMENT MOTCLE1 (#PCDATA) > <!ELEMENT MOTCLE2 (#PCDATA) > <!ELEMENT MOTCLE3 (#PCDATA) > <!ELEMENT MOTCLE4 (#PCDATA) > <!ELEMENT MOTCLE5 (#PCDATA) >
<!ATTLIST COURS NOM CDATA #REQUIRED> <!ATTLIST COURS MODULE CDATA #REQUIRED> ]>
|
cette partie de code pouvant être placée dans le
fichier XML, entre :
<?xml version="1.0" encoding="ISO-8859-1"?>
et
< AF400 COPYRIGHT="Volubis">
ou bien référencée par :
<!DOCTYPE COURS SYSTEM "http://www.volubis.fr/cours.dtd">
Une alternative à la notion de DTD, plus puissante est la
notion de schéma.
un schéma est lui même un fichier XML (ayant lui même sa
propre DTD) et qui en décrit un autre.
commencons par une partie d'entète
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation xlm:lang="fr"> XML Schema pour la lsite des cours AF400. </xsd:documentation> </xsd:annotation>
|
puis la partie descriptive en elle même:
<xsd:element name="AF400" type="AF400Type"/>
<xsd:complexType name="AF400Type"> <xsd:sequence> <xsd:element name="COURS" type="CoursType" minOccurs="1"/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="CoursType"> <xsd:sequence> <xsd:element name="TEXTE" type="xsd:string"/> <xsd:element name="TYPE" type="xsd:string"/> <xsd:element name="SRCFIL" type="xsd:string"/> <xsd:element name="SRCLIB" type="xsd:string"/> <xsd:element name="SRCMBR" type="xsd:string"/> <xsd:element name="CHEMIN" type="xsd:string"/> <xsd:element name="SUJET" type="xsd:string"/> <xsd:element name="MOT-DIRECTEUR type="MotType"/> <xsd:element name="DATE" type="xsd:string"/> </xsd:sequence> < /xsd:complexType>
<xsd:complexType name="MotType"> <xsd:sequence> <xsd:element name="MOTCLE1 type="xsd:string" minOccurs="1"/> <xsd:element name="MOTCLE2 type="xsd:string"/> <xsd:element name="MOTCLE3 type="xsd:string"/> <xsd:element name="MOTCLE4 type="xsd:string"/> <xsd:element name="MOTCLE5 type="xsd:string"/> </xsd:sequence> < /xsd:complexType>
|
On peut définir un élément (xsd:element) ou un
attribut (xsd:attribut), chacun pouvant faire référence
à un type
(voyez ici la liste des types admis
dans un schéma XML) comme xsd:nonNegativeNumber
ou bien faire référence à un type définit dans le
scéma.
Les types définis peuvent être :
- xsd:complexType (structure)
- xsd:simpleType (donnée élémentaire, mais subissant,
par exemple, des contrôles particuliers)
Si vous devez fusionner des documents XML vous risquez de renconrer des noms
de données en double (Nom du cours et nom du client sont représentés par
l'élément nommé "nom" en XML) on peut alors mettre en place un espace
de nom
Un espace de nom est identifié par un URI (Uniforme Ressouce Indentifier),
les URL sont des URI.
D'ailleurs il est conseillé de commencer vos URI d'espace
de nom par votre URL, mais cela n'a pas besoin de référencé un fichier existant,
par exemple "http://www.volubis.fr/ns/AF400/1.0"
<AF400 xmlns="http://www.volubis/fr/ns/AF400/1.0">
<COURS NOM="£C01.020" MODULE="£CURSUSPGM"> <TEXTE>"ESPACE ADDRESSABLE UNIQUE"</TEXTE> <TYPE>"*TXT"</TYPE> <SRCFIL>"ANIMTXT"</SRCFIL> <SRCLIB>"AF4SRC"</SRCLIB> <SRCMBR>"ANIMTXT"</SRCMBR> <CHEMIN>"</CHEMIN> <SUJET>"AS400"</SUJET> <MOT_DIRECTEUR> <MOTCLE1>EAU</MOTCLE1> <MOTCLE2>DISQUE</MOTCLE2> <MOTCLE3>MEMOIRE</MOTCLE3> <MOTCLE4>AS400</MOTCLE4> <MOTCLE5></MOTCLE5> </MOT_DIRECTEUR> <DATE>"1999-08-10"</DATE> </COURS>
|
ici, tous les éléments appartiennent à l'espace de nom http://www.volubis/fr/ns/AF400/1.0
l'espace de nom peut être précisé au niveau d'un élément auquel cas il ne
s"applique qu'à cet élément et ses enfants (dans
l'exemple MOTECL1,MOTECL2 etc...)
<AF400>
<COURS NOM="£C01.020" MODULE="£CURSUSPGM"> <TEXTE>"ESPACE ADDRESSABLE UNIQUE"</TEXTE> <TYPE>"*TXT"</TYPE> <SRCFIL>"ANIMTXT"</SRCFIL> <SRCLIB>"AF4SRC"</SRCLIB> <SRCMBR>"ANIMTXT"</SRCMBR> <CHEMIN>"</CHEMIN> <SUJET>"AS400"</SUJET> <MOT_DIRECTEUR xmlns="http://www.volubis/fr/ns/AF400/1.0"> <MOTCLE1>EAU</MOTCLE1> <MOTCLE2>DISQUE</MOTCLE2> <MOTCLE3>MEMOIRE</MOTCLE3> <MOTCLE4>AS400</MOTCLE4> <MOTCLE5></MOTCLE5> </MOT_DIRECTEUR> <DATE>"1999-08-10"</DATE> </COURS>
|
Enfin, on peut choisir de préciser élément par élement, l'espace de nom auquel
ce dernier appartient.On va alors privilégier les préfixes :
<AF400 xmlns:af4="http://www.volubis/fr/ns/AF400/1.0">
<af4:COURS NOM="£C01.020" MODULE="£CURSUSPGM"> <af4:TEXTE>"ESPACE ADDRESSABLE UNIQUE"</TEXTE> <af4:TYPE>"*TXT"</TYPE> <af4:SRCFIL>"ANIMTXT"</SRCFIL> <af4:SRCLIB>"AF4SRC"</SRCLIB> <af4:SRCMBR>"ANIMTXT"</SRCMBR> <af4:CHEMIN>"</CHEMIN> <af4:SUJET>"AS400"</SUJET> <af4:MOT_DIRECTEUR> <MOTCLE1>EAU</MOTCLE1> <MOTCLE2>DISQUE</MOTCLE2> <MOTCLE3>MEMOIRE</MOTCLE3> <MOTCLE4>AS400</MOTCLE4> <MOTCLE5></MOTCLE5> </MOT_DIRECTEUR> <af4:DATE>"1999-08-10"</DATE> </COURS>
|
Les langages de présentation (style) : CSS et XSL
Comme il a été dit, la philosophie d'XML consiste
à bien séparer les données/documents (le fichier
XML proprement dit) des traitements/présentations. Un document
donné sera, lors de sa création, balisé uniquement
en fonction de son contenu (sa sémantique) intrinsèque et
indépendamment de sa restitution future (papier, écran,
terminal Braille, synthèse vocale ou autre) — comme
d'ailleurs de tout autre traitement automatique qui pourra lui
être appliqué.
Cette indépendance par rapport aux applications qui vont le
traiter en général, et par rapport à celles
chargées de sa restitution en particulier, va lui
conférer :
- une très grande interopérabilité (le
même document XML va pouvoir être affiché sur le Web
et/ou produit en version papier, alimenter un SGBD, etc.)
- une très grande
durabilité/réutilisabilité (le document ne
deviendra pas obsolète avec l'évolution des techniques
informatiques ; il pourra sans difficulté être
incorporé, en tout ou partie, dans des documents de nature
très différente, être traité par des
applications non prévues, voire non-existantes au
départ...).
En ce qui concerne sa restitution, un deuxième degré
d'indépendance par rapport aux applications pourra être
apporté par l'utilisation du langage de transformation
normalisé XSLT (XSL Transformation) qui va
permettre, si nécessaire, de transformer une DTD (un arbre XML)
"orientée contenu" en une autre DTD (un autre arbre XML)
"orientée restitution" (c'est-à-dire constituée
d"objets formateurs" (formatting objects).
C'est à ce niveau que l'ordre de restitution final sera
établi (par exemple, que la bibliographie sera classée
par ordre alphabétique d'auteurs), que les légendes
seront ajoutées, que seront fabriqués automatiquement les
tables des matières, index alphabétiques, liens
(logiques) de navigation, etc.).
On peut même envisager avec XSLT des transformations en PDF,
à destination des Palms, etc...
Voir la spécification à www.w3.org/TR/WD-xslt
Le langage normalisé de feuille de style XSL
(Extensible Style Language) va permettre ensuite de spécifier
comment un type de document (= une DTD "orientée restitution")
donné va être restitué sur un support donné.
C'est à ce niveau que seront réglés les
problèmes du type "saut de page", notes présentées
en bas de page ou en fin de chapitre, etc., que les liens de navigation
seront fabriqués (hyperliens pour les versions
électroniques, renvoi à un n° de page ou de
paragraphe ou de note pour les versions papier...)
Voir la spécification à www.w3.org/TR/WD-xsl
Une feuille de style XSL est appelée à partir d'un
document XML par une "processing instruction" (PI) comme suit :
<?xml-stylesheet
href="biblio.xsl" type="text/xsl" ?> |
Le langage normalisé de feuille de style CSS (Cascading Style
Sheets) déjà utilisé avec HTML, pourra
également être utilisé concurremment où
à la place de XSL.
Une feuille de style CSS est appelée à partir d'un
document XML par :
<?xml-stylesheet
href="biblio.css" type="text/css" ?> |
Exemple :
Fichier XSL destiné au fichier "liste des cours AF400" :

La partie template représente un
modèle de mise en forme HTML et s'applique à l'ensemble
du document (/)
For-each, s'applique à chaque COURS (dans AF400)
l'attribut NOM sera placé entre <H2>
et </H2>, suivi de l'attribut MODULE.
Toujours sous WDS client, réalisons cette transformation :

Résultat :

XML et IBM i
- Outre le produit RDI-RDP vu plus haut,
- la manipulation de XML est désormais possible en RPG
IV (depuis la V5R40)
- le stockage de flux XML est proposé par un extension à
DB2 : DB2 XML Extender
- et nativement par DB2
depuis la version 7
- Les champs XML peuvent d'ailleurs être indexés par OmniFind
Copyright © 1995,2012 VOLUBIS