8 - xml cours xml. structure en arbre | example de document xml | | [email protected] |...
TRANSCRIPT
8 -
XML
CoursXML
Structure en arbre| Example de document XML| <message>| <to>[email protected]</to>| <from>[email protected]</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)
Présence obligatoire d’un élément racine (qui contient
tous les autres)
Structure en arbre
Nom du document
Element racine
Feuille
Elements et Attributs
| Choix lié au design
• | <message to="[email protected]"
from="[email protected]" | 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
Le noeud racine message a comme fils 4 noeuds:3 noeuds de type attributs et de noms: to, from, subject1 noeud de type élément et de nom text
Noeuds
FeuillesLes feuilles de l’arbre correspondent aux valeurs des éléments et des attributs
Eléments vides
<message to="[email protected]" from="[email protected]" subject="XML Is Really Cool"><flag/> <text> How many ways is XML cool? Let me
count the ways... </text></message>
Notation: < ... />
Commentaires<!-- les commentaires sont ignorés --><!-- les commentaires sont ignorés -->
<message to="[email protected]" from="[email protected]" 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<?cible instructions?>Destiné à un programme cible
<?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 :-)
Codage des caractères:
ISO-8859-1 ---> latin-1UTF-8 ---> Unicode
Substitutions prédéfinies
Syntaxe: &substitution;Syntaxe: &substitution;
> >plus grand
que
&
& ampersand
Obligatoires Facultatives
< <plus petit
que
"
“ guillemets
"""
Section CDATA
Pas de blancs entre ces 3 caractères
Les caractères d’une section CDATA ne sont pas analysés par le parserLes 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>
Document bien formé
Si et seulement si:
Structure en arbre respectée +Respect des règles de
nommage
XML & 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
Feuilles de style pour la présentationFeuilles de style pour la présentation
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
ebXML: Electronic Business with XML
...
SVG: Scalable Vector Graphics
SMIL: Synchronized Multimedia Integration Language
XHTML1.0: Web
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
<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 des données
Validation
XML Schema
ok!Validateur
<position> <latitude>32.904237</latitude> <longitude>73.620290</longitude></position>
-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
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
| Data binding| Reduit le temps de dévelopement| Tranforme une représentation externe en une
représentation interne
ParserValidateurCompilateur
XMLdocument
Java/c++
. . .
Vocabulaires
C’est le vocabulaire que XMLSchema vous fournitPour définir votre nouveau vocabulaire
Schema
element typename
targetNamespace
simpleTyperestriction
complexType
enumeration
sequence
xmlns
temperature
min max
forecast_low
forecast_high
Les vocabulaires sont associés avec un nom (namespace)
XMLSchema Namespace
temperature Namespace
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>
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>
Tous les schémas XML ont schema comme élément racine
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
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>
targetNamespace: dit que leséléments définis par ce schéma - temperature - min - max - forecast_low - forecast_high appartiennentà ce namespace
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/temperaturequi est le targetNamespace !
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" >…
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 utilisationdirecte 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-instanceLe 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''>
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>
Référence au schéma utilisé
Validation multiple
temperature.xml temperature.xsdXMLSchema.xsd
Valide que temperature.xmlest conforme aux règles du schéma temperature.xsd
Valide que le schéma est conforme aux règlesdu schéma des schémas
Cardinalité des éléments
ELément 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>
Par défaut: minOccurs= maxOccurs="1"
l’élément bb est optionnel
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éfinisTypes Primitifs– string– boolean– decimal– float– double– time– date…
Types Atomiques– "Hello World"– {true, false, 1, 0}– 7.08– 12.56E3, INF, -INF, NAN – 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
Représentation d’un schéma avec son targetNameSpace
UML
<<schema>>temperature.xsd
http://schemas/temperature
Représentation d’un schéma avec son targetNameSpace et son élément racine
temperature
UML (schema) F
c:double
B
d:int
e:int
1b
<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
NameSpace
racine
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