Introduction au langage XML
De : M Martin <martin@parisnanterre.fr> A : Camille Claverie <cclaveri@parisnanterre.fr> ; Cécile Payeur <cpayeur@parisnanterre.fr>
CC : secretariat-infocom@parisnanterre.fr Sujet : Emploi du temps date : 05/02/2021
pièce(s) jointe(s) : emploi-du-temps.xls
Bonjour,
Vous trouverez ci-joint vos emplois du temps pour le second semestre.
Cordialement,
M. Martin
Secrétariat Infocom Bat L - Université Paris Nanterre
Un document XML est un document bien formé ! Il respecte les règles syntaxiques strictes de XML… cf. CM 1.
Un document XML – donc bien formé – peut être valide ! Il respecte une grammaire de document, qui s’exprime à travers une DTD ou un schéma.
Une DTD (Document Type Definition) ou un schéma définit une classe de document XML, c’est-à-dire la liste des éléments et attributs autorisés, ainsi que le contexte dans lequel ils peuvent être appelés.
Il existe plusieurs syntaxes :
La DTD est un héritage de SGML, mais cette technologie est aujourd’hui obsolète :
exemple
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person[
<!ELEMENT person (surname, forename*, birthDate, birthPlace) >
<!ELEMENT surname (#PCDATA) >
<!ELEMENT forename (#PCDATA) >
<!ELEMENT birthDate (#PCDATA) >
<!ATTLIST birthDate when CDATA #REQUIRED >
<!ELEMENT birthPlace (#PCDATA) >
]>
Turing
Alan
Mathison
23 juin 1912
Londre
Another great strength about XML Schemas is that they are written in XML:
- You don't have to learn a new language
- You can use your XML editor to edit your Schema files
- You can use your XML parser to parse your Schema files
- You can manipulate your Schemas with the XML DOM
- You can transform your Schemas with XSLT
- One of the greatest strengths of XML Schemas is the support for data types:
- It is easier to describe document content
- It is easier to define restrictions on data
- It is easier to validate the correctness of data
- It is easier to convert data between different data types
Définissent les contraintes que doit respecter une certaine classe de documents.
Le but d'un schéma est de définir une classe de documents XML. Il permet de décrire les autorisations d'imbrication et l'ordre d'apparition des éléments et de leurs attributs, tout comme une DTD. Mais il permet aussi d'aller au-delà.
Espaces de nom : réutilisation de langage spécialisé et déjà existant.
Contrainte plus fine : les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif.
Un document XML schema est un fichier xml :
<?xml version="1.0" encoding="UTF-8"?>
Les éléments sont déclarés avec la balise <xs:element/>.
Deux attributs de base :
<?xml version="1.0" encoding="UTF-8"?>
Les attributs sont déclarés avec la balise <xs:attribute/>.
Deux attributs de base :
<?xml version="1.0" encoding="UTF-8"?>
Un schéma fournit un type à chaque élément et attribut qu’il déclare.
Harold, Elliotte Rusty et Means, W. Scott. « XML en concentré : manuel de référence »
Deux types sont supportés pour les éléments par XML schema :
Un élément de type simple contient uniquement du texte.
Un élément de type simple ne peut pas posséder d’attributs ou contenir d’autres éléments.
les attributs sont toujours de type simple.
les principaux types simples prédéfinis sont : xs:string, xs:boolean, xs:date, xs:dateTime, xs:integer, xs:anyURI, etc. Liste des types https://www.w3.org/TR/xmlschema-0/#CreatDt
Il est possible de dériver des types simples existants pour en créer d’autres (listes, unions, facettes).
<?xml version="1.0" encoding="UTF-8"?>
Une liste définit un type simple (préexistant ou dérivé) comme une liste de valeur d’un type de données.
N. B. : xs:NMTOKENS, xs:ENTITIES et xs:IDREFS sont déjà des type de liste.
<?xml version="1.0" encoding="UTF-8"?>
L’élément xs:union est utilisé si on souhaite que le contenu d’un élément puisse être issu d’une collection de type de données.
<?xml version="1.0" encoding="UTF-8"?>
Les facettes, ou restrictions, permettent de spécifier des valeurs de manière plus précise. On utilise alors l’élément xs:restriction et l’attribut base, avec lequel on précise le type simple que l’on souhaite restreindre.
Avec les facettes on peut par exemple contraindre la longueur d’une chaîne de caractère, spécifier une liste de valeurs possibles, ou encore imposer un pattern avec des expressions régulières.
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
Pour établir une liste de valeurs possibles, on utilisera l’élément xs:enumeration. Dans l’exemple ci-contre, l’élément elem1 dispose d’un attribut att qui peut prendre comme valeur, exclusivement, valeur1, valeur2 ou valeur3.
<?xml version="1.0" encoding="UTF-8"?>
Pour établir un motif, ou pattern, à l’aide d’une expression régulière on utilisera l’élément xs:pattern. Pour voir quelles facettes sont applicables à chaque type simple voir Simple Types & their Facets.
<?xml version="1.0" encoding="UTF-8"?>
Les types complexes permettent d’introduire des contraintes d'occurrence, des séquences d’éléments, des choix d’éléments, des contenus complexes, etc.
Les types complexes sont définis avec l’élément xs:complexType.
<?xml version="1.0" encoding="UTF-8"?>
Les éléments apparaissent dans l’ordre définit par xs:sequence.
<?xml version="1.0" encoding="UTF-8"?>
Un seul élément parmis plusieurs possibilité : xs:choice.
<?xml version="1.0" encoding="UTF-8"?>
Avec xs:all tous les éléments enfants peuvent être appelés 0 fois (si on utilise l’attribut minOccurs=’0’) ou 1 fois, dans n’importe quel ordre.
À la différence des éléments xs:sequence et xs:choice qui peuvent être imbriqués, xs:all doit être un enfant directe de xs:complexType.
<?xml version="1.0" encoding="UTF-8"?>
Il est possible d’établir des contraintes d’occurrence.
éléments, avec l’utilisation des attributs :
attributs
<?xml version="1.0" encoding="UTF-8"?>
L’attribut @mixed de valeur ‘true’ associé à l’élément xs:complexType indique que l’élément peut contenir des données textuelles et des éléments et/ou des attributs.
<?xml version="1.0" encoding="UTF-8"?>
Dans l’exemple ci-contre, elem1 peut contenir du texte et autant de fois qu’on le souhaite les éléments elem2 et elem3, dans n’importe quel ordre.
<?xml version="1.0" encoding="UTF-8"?>
Dans l’exemple ci-contre, elem1 est un élément de type complexe qui peut contenir une chaîne de caractères pouvant contenir au maximum 10 caractères et un attribut att. Sans la définition d’un type simple simpleType et l’utilisation des éléments simpleContent et extension pour étendre ce type et autoriser l’utilisation d’un attribut att, il n’est pas possible de contrôler le contenu textuel d’un élément de type complexe.
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
Pour faciliter la maintenance du code et le rendre plus lisible, en évitant de multiplier les déclarations similaires (doublons) et les imbrications, il est possible de déclarer des éléments, des attributs, des types complexes et des types simples à un haut niveau.
Cela permet de les définir une seule fois et les appeler lorsque c’est nécessaire.
<?xml version="1.0" encoding="UTF-8"?>
De la même manière, lorsque des attributs peuvent être utilisés avec plusieurs éléments, il est intéressant de déclarer des groupes d’attributs avec l’élément <xs:attributeGroup />.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="schema.xsd" type="application/xml" schematypens="http://www.w3.org/2001/XMLSchema"?>
On place une instruction de traitement <?xml-model ?> dans le prologue du document XML :
Avec un éditeur de texte qui prend (vraiment) en charge XML :
En ligne :
En ligne de commande.