8 - XML Cours XML
Structure en arbre Example de document XML <message> <to>you@yourAddress.com</to> <from>me@myAddress.com</from> <subject>XML Is Really Cool</subject> <text> How many ways is XML cool? Let me count the ways... </text> </message> Présence obligatoire d’un élément racine (qui contient tous les autres)
Structure en arbre Feuille Nom du document Element racine
Elements et Attributs Valeur de l’attribut to Choix lié au design <message to="you@yourAddress.com" from="me@myAddress.com" subject="XML Is Really Cool"> <text> How many ways is XML cool? Let me count the ways... </text> </message> Valeur de l’attribut to Fin de l’element message
Noms Libre avec certaines règles Pas d’espaces, pas d’accents Premier caractère alphabétique … Noms sensibles aux majuscules-minuscules Noms composés avec le caractère - autorisés: exemple: ordre-achat
Noms qualifiés : QName Noms avec préfixe (Qualified Name) exemple: xsd:element, svg:rectangle Ils évitent les collisions de noms (notion d’espace de noms)
Noeuds et feuilles Noeuds Feuilles Le noeud racine message a comme fils 4 noeuds: 3 noeuds de type attributs et de noms: to, from, subject 1 noeud de type élément et de nom text Feuilles Les feuilles de l’arbre correspondent aux valeurs des éléments et des attributs
Eléments vides Notation: < ... /> <message to="you@yourAddress.com" from="me@myAddress.com" subject="XML Is Really Cool"> <flag/> <text> How many ways is XML cool? Let me count the ways... </text> </message>
Commentaires <!-- les commentaires sont ignorés --> <message to="you@yourAddress.com" from="me@myAddress.com" subject="XML Is Really Cool"> <!-- ceci est un commentaire --> <text> How many ways is XML cool? Let me count the ways... </text> </message>
Instructions de traitement <?cible instructions?> Destiné à un programme cible Codage des caractères: ISO-8859-1 ---> latin-1 UTF-8 ---> Unicode <?xml version="1.0" encoding="UTF-8" standalone="yes"?> Les documents XML peuvent contenir des caractères français ( êèé…). Pour que le parser XML les comprenne, il est conseillé de sauver vos documents en Unicode avec un éditeur compréhensif :-)
Substitutions prédéfinies Syntaxe: &substitution; Obligatoires Facultatives > plus grand que & & ampersand < plus petit que " “ guillemets " " "
Pas de blancs entre ces 3 caractères Section CDATA Les caractères d’une section CDATA ne sont pas analysés par le parser <script> <![CDATA[ function matchwo(a,b){ if (a < b && a < 0) then return 1; else return 0 } ]]> </script> Pas de blancs entre ces 3 caractères
Document bien formé Si et seulement si: Structure en arbre respectée + Respect des règles de nommage
XML & la présentation Feuilles de style pour la présentation Langage XSLT de transformation de page: XSLT transforme un document XML vers un document XML, PDF, HTML, TEXTE, … Langage push-pull à base de règles
XML et la programmation Traitement de données locales ou sur réseau Programmation par documents XML spécifiant une composition de composants Binding: génération automatique à partir d’un schéma d’une partie importante de l’application
Langages XML XHTML1.0: Web SVG: Scalable Vector Graphics SMIL: Synchronized Multimedia Integration Language ebXML: Electronic Business with XML ...
Modélisation des données par Schémas XML
Définition Un schéma XML déclare: Un vocabulaire Un ensemble de règles (grammaire) précisant comment utiliser les mots du vocabulaire Un schéma XML sert: De modèle pour la création de documents XML. Ces documents sont appelés documents instances
Validation des données <position> <latitude>32.904237 </latitude> <longitude>73.620290 </longitude> </position> Validité de cette donnée ? La latitude doit être présente et comprise entre -90 et +90 La longitude doit être présente et comprise entre -180 et +180
Validation <position> <latitude>32.904237</latitude> <longitude>73.620290</longitude> </position> Validateur ok! RELAX NG and XML Schema are two examples. In RELAX NG <grammar> and <define> are conceptually a map. In XML Schema Qnames are references. After all, there is a reason why we humans are writing programs by ourselves. -Vérifier que l’on a une latitude et une longitude -Vérifier que la latitude est comprise entre -90 and +90 -Vérifier que la longitude est comprise entre -180 and +180 XML Schema
Schémas Spécification De la structure des documents instance Du type des éléments et attributs Schémas les plus utilisés Relax-NG XML-Schema
Utilisation des schémas XML document Parser Validateur Compilateur Java/c++ . . . Data binding Reduit le temps de dévelopement Tranforme une représentation externe en une représentation interne
temperature Namespace Vocabulaires Les vocabulaires sont associés avec un nom (namespace) XMLSchema Namespace temperature Namespace Schema xmlns targetNamespace temperature element name type min max complexType sequence simpleType restriction forecast_low Specifying code enumeration forecast_high C’est le vocabulaire que XMLSchema vous fournit Pour définir votre nouveau vocabulaire
Schéma XML <?xml version="1.0” encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas/temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas/temperature” elementFormDefault="qualified" > <xsd:element name="temperature" type="Temperature"/> <xsd:complexType name="Temperature"> <xsd:sequence> <xsd:element name="min" type="DegreeRange"/> <xsd:element name="max" type="DegreeRange"/> <xsd:element name="forecast-low" type="DegreeRange"/> <xsd:element name="forecast-high" type="DegreeRange"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="DegreeRange" > <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-70"/> <xsd:maxInclusive value="80"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> Specifying code
Schéma XML <?xml version="1.0” encoding="UTF-8"?> Tous les schémas XML ont schema comme élément racine <?xml version="1.0” encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas/temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas/temperature” elementFormDefault="qualified" > <xsd:element name="temperature" type="Temperature"/> <xsd:complexType name="Temperature"> <xsd:sequence> <xsd:element name="min" type="DegreeRange"/> <xsd:element name="max" type="DegreeRange"/> <xsd:element name="forecast-low" type="DegreeRange"/> <xsd:element name="forecast-high" type="DegreeRange"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="DegreeRange" > <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-70"/> <xsd:maxInclusive value="80"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> les éléments et types utilisés pour construire des schemas - schema - element - complexType - simpleType - sequence - decimal ......... proviennent de l’espace de nom http://…/XMLSchema Specifying code
Schéma XML targetNamespace: dit que les éléments définis par ce schéma - temperature - min - max - forecast_low - forecast_high appartiennent à ce namespace <?xml version="1.0” encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas/temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas/temperature” elementFormDefault="qualified" > <xsd:element name="temperature" type="Temperature"/> <xsd:complexType name="Temperature"> <xsd:sequence> <xsd:element name="min" type="DegreeRange"/> <xsd:element name="max" type="DegreeRange"/> <xsd:element name="forecast-low" type="DegreeRange"/> <xsd:element name="forecast-high" type="DegreeRange"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="DegreeRange" > <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-70"/> <xsd:maxInclusive value="80"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> Specifying code
Schéma XML <?xml version="1.0” encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas/temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas/temperature” elementFormDefault="qualified" > <xsd:element name="temperature" type="Temperature"/> <xsd:complexType name="Temperature"> <xsd:sequence> <xsd:element name="min" type="DegreeRange"/> <xsd:element name="max" type="DegreeRange"/> <xsd:element name="forecast-low" type="DegreeRange"/> <xsd:element name="forecast-high" type="DegreeRange"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="DegreeRange" > <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-70"/> <xsd:maxInclusive value="80"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> Le namespace par défaut est: http://schemas/temperature qui est le targetNamespace ! Specifying code
QName <?xml version="1.0” encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas/temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas/temperature” elementFormDefault="qualified" > … Specifying code C’est une directive pour tous les documents instance se conformant à ce schéma: tous les éléments utilisés par le document instance qui étaient déclarés dans ce schéma doivent être namespace qualified (préfixés).
XMLSchema- instance XMLSchema-instance définit des attributs pour une utilisation directe dans les documents XML. Ces attributs se trouvent dans un espace de noms différent qui a pour nom: http://www.w3.org/2001/XMLSchema-instance Le préfixe habituel est de cet espace de nom est xsi: Exemple: <root .... xmlns:xsi=''http://www.w3.org/2001/XMLSchema-instance'' xsi:schemaLocation=''http://schemas.xmlsoap.org/wsdl/ file:/tp/xschemas/wsdl.xsd'' >
Référence au schéma utilisé Langage temperature Exemple de document instance <?xml version="1.0"?> <temperature xmlns="http://schemas/temperature" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas/temperature temperature.xsd"> <min>-4.1</min> <max>12.7<max> <forecast_low>-6.0</forecast_low> <forecast_high>8.0</forecast_high> </temperature> Specifying code Référence au schéma utilisé
Validation multiple Valide que temperature.xml XMLSchema.xsd temperature.xml temperature.xsd Valide que temperature.xml est conforme aux règles du schéma temperature.xsd Valide que le schéma est conforme aux règles du schéma des schémas
Cardinalité des éléments
ELément optionnel l’élément bb est optionnel <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="aa"> <xsd:complexType name="AaType"> <xsd:sequence > <xsd:element name="bb"B minOccurs="0"maxOccurs="1"Btype="xsd:string"/> <xsd:element name="cc" Ctype="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> l’élément bb est optionnel Par défaut: minOccurs= maxOccurs="1"
unbounded signifie “autant que l’on veut” Tableau d’éléments <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="aa"> <xsd:complexType name="AaType"> <xsd:sequence > <xsd:element name="bb"B minOccurs="0"maxOccurs="3"Btype="xsd:string"/> <xsd:element name="cc" maxOccurs="unbounded" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> unbounded signifie “autant que l’on veut”
Types prédéfinis Types Primitifs Types Atomiques – "Hello World" – string – boolean – decimal – float – double – time – date … Types Atomiques – "Hello World" – {true, false, 1, 0} – 7.08 – 12.56E3, INF, -INF, NAN – format: hh:mm:ss.sss – format: CCYY-MM-DD …
Types simples de base (XML-Schema)
Types simples ou complexes Utilisez l’élément complexType quand vous voulez définir des éléments fils et/ou des attributs d’un élément Utilisez l’élément simpleType quand vous voulez créer un nouveau type qui soit une spécialisation d’un type simple prédéfini (string, date, décimal, etc)
Types anonymes et nommés <xsd:element name="a" type="Foo"/> <xsd:complexType name=”Foo"> <xsd:sequence> <xsd:element name="b" …/> <xsd:element name="c" …/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="a"> <xsd:complexType> <xsd:sequence> <xsd:element name="b" …/> <xsd:element name="c" …/> </xsd:sequence> </xsd:complexType> </xsd:element> équivalent
UML
UML <<schema>> temperature.xsd http://schemas/temperature <<schema>> temperature.xsd Représentation d’un schéma avec son targetNameSpace
<<schema>> UML http://schemas/temperature temperature <<schema>> temperature.xsd Représentation d’un schéma avec son targetNameSpace et son élément racine
UML (schema) NameSpace racine B F d:int b e:int c:double 1 d:int b racine e:int c:double <xsd:complexType name=”F”> <xsd:sequence> <xsd:element name="b" type="B"/> <xsd:element name="c” type="xsd:double"/> </xsd:sequence> </xsd:complexType <xsd:complexType name=B”> <xsd:sequence> <xsd:element name="d" type="xsd:int"/> <xsd:element name="e” type="xsd:int"/> </xsd:sequence> </xsd:complexType
UML (schema) Types, éléments & attributs <xsd:complexType name="Part"> <xsd:sequence> <xsd:element name="name" type="xsd:string" /> <xsd:element name="price" type="xsd:decimal" /> </xsd:sequence> <xsd:attribute name="partID" type="xsd:token" /> <xsd:attribute name="inStock" type="xsd:positiveInteger" /> </xs:complexType>
Conclusion XML et XML-Schema vont nous permettre de décrire des données complexes Un XML-Schema est un modèle d’une classe de données Un document XML est une instance de ce modèle
TP 4 à faire 3 sujets de TP sur XML, XML Schéma, XSLT sous NetBeans