XML.


Le langage XML



Soit une liste des cours AF400( en HTML)

<h3>Liste des cours AF400 (&copy; Volubis)</h3>
<ul>
<li>&pound;C01.120 <em>(module &pound;cursuspgm)</em> ESPACE ADRESSABLE UNIQUE</li>
<li>&pound;C01.130 <em>(module &pound;cursuspgm)</em> INIT OS/400 (notion d'objet, biblioth&egrave;que)</li>
<li>etc...</li>
</ul>

ce qui s'affiche :

Liste des cours AF400 (© Volubis)

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 :


Ce que XML va rendre possible. XML va permettre :

Structure d'une DTD :

<!  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 :

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 :

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

Copyright © 1995,2012 VOLUBIS