<?xml version="1.0" ?> <frac> <numerateur>1</numerateur> <denom>x <sup>n</sup></denom> </frac>
<?xml version="1.0" ?> <livre> <auteur>W. Shaekspeare</auteur> <titre>Hamlet </titre> </livre>
<?xml version="1.0" ?> <memo> <de>Président</de> <date>15/05/2006 </date> <message> <b>Rappeler</b> Premier Ministre <em>demain 10h</em> </message> </memo>
<?xml version="1.0"> <memo xml:lang="fr"> <a>D. Vador</a> <de>L. Skywalker</de> <date>20/03/24532</date> <message> <p>Rendez-vous confirmé <em>demain 10h00</em></p> </message> </memo>
<!ELEMENT MEMO (A, DE, DATE, SUJET?, MESSAGE) > <!ATTLIST MEMO SECURITE (public|personnel) 'public' STATUS (provisoire|final) #REQUIRED> <!ELEMENT A (#PCDATA)> <!ELEMENT DE(#PCDATA)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT SUJET (#PCDATA)> <!ELEMENT MESSAGE (P+)> <!ELEMENT P (#PCDATA|EM)*> <!ELEMENT EM (#PCDATA)>
<?xml version="1.0" encoding="ISO-8859-1"
standalone="yes" ?>
<!DOCTYPE ptmess SYSTEM "ptmess.dtd"> <!DOCTYPE ptmess [ <!ELEMENT MEMO (A, DE, DATE, SUJET?, MESSAGE) > ... >
<element> <! [CDATA[ <tag>contenu</tag> ]]> </element>
<tag>contenu</tag>
<html xmlns:html='http://www.w3.org/TR/REC-html40' >
<html:h1>Titre html </html:h1>
<?xml version="1.0"?> <!-- initially, the default namespace is "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- make HTML the default namespace for some commentary --> <p xmlns='urn:w3-org-ns:HTML'> This is a <i>funny</i> book! </p> </notes> </book>
<!ELEMENT CHAPITRE (TITRE, SECTION+) > <!ELEMENT LIVRE (TITRE, (TITRE,CHAPITRE)+, ANNEXE*) >
<!ATTLIST nom-élément nom-attribut type-attribut val-defaut>
<!ELEMENT employe (#PCDATA)> <!ATTLIST employe nom CDATA #REQUIRED nb (1|2|3) '1'>
<!ATTLIST poésie xml:lang NMTOKEN 'fr'> <!ATTLIST poème xml:space (default|preserve) 'preserve'>
<!ATTLIST image href ENTITY #REQUIRED> <!ENTITY maphoto SYSTEM "foto.png"> <image href="&maphoto;" />
<!DOCTYPE test [ <!ENTITY ref "UFR S&T" > ]> <test> <p>&ref;</p> </test>
<!DOCTYPE bouquin [ <!ENTITY chap1 SYSTEM "./chap1.xml"> <!ENTITY chap2 SYSTEM "./chap2.xml"> ]> <bouquin> &chap1; &chap2; </bouquin>
<!ENTITY nom PUBLIC FPI URL>
<!ENTITY rec-XML PUBLIC "-//W3C//DOCUMENT Recommandation open-The recommandation for XML 1.0//EN" "http://www.w3.org/TR/1999/REC-xml-19992312.xml">
<!DOCTYPE TEST [ <!ENTITY monimage SYSTEM "logo.png" NDATA GIF> <!NOTATION GIF SYSTEM "/usr/bin/gimp"> ]>
<!DOCTYPE test [ <!NOTATION vrml SYSTEM "/usr/bin/VRMLViewer"> <!ENTITY labyrinthe SYSTEM "lab.vrml" NDATA vrml> ]> <test> <graph3D loc="labyrinthe" /> </test>
<!ENTITY % origine "Université du Havre"> <!ENTITY % rédacteur "DF - %origine;">
<!ENTITY % nl "numérotée"> <!ENTITY % ol "ordonnée"> <!ELEMENT liste EMPTY> <!ATTLIST liste type (%nl; | %ol;) "%nl;"> <!ENTITY % heading "h1|h2|h3|h4|h5|h6"> <!ELEMENT titre (%heading;)>
<!ENTITY % confidentiel 'INCLUDE'> <!ENTITY % public 'IGNORE'> <![ %confidentiel; [ <!ELEMENT ... ]]> <![ %public; [ <!ELEMENT ...]]>
<!ELEMENT Librairie (Livre)+> <!ELEMENT Livre (Titre, Auteur, Date, ISBN, Editeur)> <!ELEMENT Titre(#PCDATA)> <!ELEMENT Auteur(#PCDATA)> <!ELEMENT Date(#PCDATA)> <!ELEMENT ISBN(#PCDATA)> <!ELEMENT Editeur(#PCDATA)>
<?xml version="1.0"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.librairie.org" xmlns="http://www.librairie.org" elementFormDefault="qualified"> <xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Livre" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Livre"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Titre" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Auteur" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Date" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Editeur" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:schema>
<?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.librairie.org" xmlns="http://www.librairie.org" elementFormDefault="qualified"> ... </xsd:schema>
xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
: les types utilisés pour construire ce schema viennent de ce namespace.targetNamespace="http://www.librairie.org"
: les éléments définis dans ce schema décrivent ce namespace.xmlns="http://www.librairie.org"
: le namespace par défaut.elementFormDefault="qualified"
: tous les documents qui vont répondre à ce schema doivent répondre au namespace défini.<?xml version="1.0" ?> <Librairie xmlns="http://www.librairie.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.librairie.org librairie.xsd"> <Livre> <Titre>Le guide du routard Galactique</Titre> <Auteur>Douglas Adams</Auteur> <Date>1979</Date> <ISBN>0345391802</ISBN> <Editeur>Ballantine Books</Editeur> </Livre> </Libraire>
xmlns="http://www.librairie.org"
: le namespace qui est utilisé par défaut dans le document.
xsi:schemaLocation="http://www.librairie.org librairie.xsd"
: c'est le schema qui valide le document (schemaLocation contient une paire de valeurs : le namespace et le nom du fichier qui contient les définitions de ce namespace).
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
: c'est une instance d'un XMLSchema.
<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element name="Livre" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
minOccurs = 1
et maxOccurs = 1
xsd:complexType
sont ici des types anonymes. Il est possible de faire des types nommés pour les réutiliser avec plusieurs éléments.<?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.librairie.org" xmlns="http://www.librairie.org" elementFormDefault="qualified"> <xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element name="Livre" type="typeLivre" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="typeLivre"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
<xsd:element name="Livre" type="typeLivre" maxOccurs="unbounded"> <xsd:complexType> ... </xsd:complexType> </xsd:element>
gYear
.
<xsd:simpleType name="typeISBN"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType>ou encore
<xsd:simpleType name="typeISBN"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}|\d{1}-\d{3}-\d{5}-\d{1}|\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType>
Type mixte | Type complexe | Type simple | Type vide | |
---|---|---|---|---|
Présence d'un ou plusieurs noeuds d'éléments enfants | oui | oui | non | non |
Présence d'un ou plusieurs noeuds textuels enfants | oui | non | oui | non |
string
a six caractéristiques ou facettes modifiables :
length
: longueur de la chaîne.minLength
: longueur minimale.maxLength
: longueur maximale.pattern
: permet de préciser des caracteristiques grâces à des expressions rationnelles. enumeration
: énumération de valeurs possibles.whitespace
: permet la gestion des espaces.<xsd:simpleType name="RVB"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="bleu"/> <xsd:enumeration value="rouge"/> <xsd:enumeration value="vert"/> </xsd:restriction> </xsd:simpleType > <xsd:simpleType name="temperature"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-90"/> <xsd:maxInclusive value="60"/> </xsd:restriction> </xsd:simpleType>
<xsd:simpleType name="temperatureFrance"> <xsd:restriction base="temperature"> <xsd:minInclusive value="-30" fixed="true"/> <xsd:maxInclusive value="40"/> </xsd:restriction> </xsd:simpleType>
<xsd:simpleType name="temperatureLeHavre"> <xsd:restriction base="temperatureFrance"> <xsd:minInclusive value="-20"/> <xsd:maxInclusive value="40"/> </xsd:restriction> </xsd:simpleType>
<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element name="Livre" type="typeLivreEdite" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="typeLivre"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="typeLivreEdite"> <xsd:ComplexContent> <xsd:extension base="typeLivre"> <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> <xsd:extension> </xsd:complexContent> </xsd:complexType>
<xsd:element name="Librairie"> <xsd:complex Type> <xsd:sequence> <xsd:element name="Livre" type="typeLivreEdite" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="petiteLibrairie"> <xsd:ComplexContent> <xsd:restriction base="Librairie"> <xsd:sequence> <xsd:element name="Livre" type="typeLivreEdite" maxOccurs="1000" /> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType>
<xsd:complexType name="Publication" final="#All">
<xsd:complexType name="Publication" final="restriction">
<xsd:complexType name="Publication" final="extension">
<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Livre" type="typeLivreEdite" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="bouquin" substitutionGroup="Livre" type="typeLivreEdite" maxOccurs="unbounded" />
block
<xsd:element ref="Livre" type="typeLivreEdite" maxOccurs="unbounded" block="substitution"/>
<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element ref="publication" type="typePublication" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="typePublication"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="Date" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:element name="magazine" substitutionGroup="publication" type="typeMagazine" maxOccurs="unbounded" /> <xsd:element name="livre" substitutionGroup="publication" type="typeLivre" maxOccurs="unbounded" /> <xsd:complexType name="typeLivre"> <xsd:complexContent> <xsd:extension base="typePublication"> <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> <xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="typeMagazine"> <xsd:complexContent> <xsd:restriction base="typePublication"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string" minOccurs="0" maxOccurs="0"/> <xsd:element name="Date" type="xsd:string"/> </xsd:sequence> </xsd:restriction/"> </xsd:complexContent> </xsd:complexType>
<xsd:complexType name="typeLivre"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="attributsLivre" /> </xsd:complexType> <xsd:attributeGroup name="attributsLivre"> <xsd:attribute name="categorie" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="policier"/> <xsd:enumeration value="science-fiction"/> <xsd:enumeration value="roman"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="enStock" type="xsd:boolean" default="false"/> <xsd:attribute name="relecteur" type="xsd:string" default=""/> </xsd:attributeGroup>
use
utilise précédemment n'est possible que lors d'une déclaration locale. L'exemple suivant n'est pas valide.
<xsd:complexType name="typeLivre"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> ... </xsd:sequence> <xsd:attributeGroup ref="attributsLivre"> </xsd:complexType> <xsd:attribute name="categorie" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="policier"/> <xsd:enumeration value="science-fiction"/> <xsd:enumeration value="roman"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute>
<xsd:complexType name="typeLivre"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string" /> <xsd:element name="Auteur" type="xsd:string" /> <xsd:element name="Date" type="xsd:string" /> <xsd:element name="ISBN" type="xsd:string" /> <xsd:element name="Editeur" type="xsd:string" /> </xsd:sequence> <xsd:attributeGroup name="attributsLivre"> <xsd:attribute name="categorie" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="policier" /> <xsd:enumeration value="science-fiction" /> <xsd:enumeration value="roman" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="enStock" type="xsd:boolean" default="false" /> <xsd:attribute name="relecteur" type="xsd:string" default="" /> </xsd:attributeGroup> </xsd:complexType>
<note matiere="XML">12</note>
<xsd:element name="note"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="typeNote"> <xsd:attribute name="matiere" type="typeMatiere" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:simpleType name="typeNote"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="20"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="typeMatiere"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="XML"/> <xsd:enumeration value="SGBD"/> </xsd:restriction></xsd:simpleType>
xsd:group
. Attention ! ! !
<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence><xsd:element ref="publication" type="typePublication" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="typePublication"> <xsd:group ref="groupPublication"> </xsd:complexType> <xsd:group name="groupPublication"> <xsd:sequence> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="Date" type="xsd:string"/> </xsd:sequence> </xsd:group>
xsd:choice
:
<xsd:element name="Librairie"> <xsd:complexType> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="Livre" type="xsd:string"/> <xsd:element name="Magazine" type="xsd:string"/> <xsd:element name="BD" type="xsd:string"/> </xsd:choice> </xsd:complexType> </xsd:element>
<!ELEMENT Librairie(Livre|Magazine|BD)*>
xsd:choice
s'utilise comme un élément, il peut donc être utilisé dans un xsd:sequence
xsd:sequence
implique d'avoir un ordre dans la position des éléments. Pour éviter l'ordre utiliser xsd:all
<xsd:complexType name="typeLivre"> <xsd:all> <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:all> </xsd:complexType>
xsd:all
ont obligatoirement maxOccurs=1
et minOccurs=0
ou 1
.
xsd:all
hérite d'un autre type, ce dernier doit obligatoirement avoir un contenu vide.xsd:all
ne peut être utilisé dans un xsd:sequence
, un xsd:choice
ou un autre xsd:all
.xsd:all
ne peut contenir que des éléments, pas xsd:sequence
ni xsd:choice
.<img src="http://www.univ-lehavre.fr/lehabre.png"/>
<xsd:element name="img"> <xsd:complexType> <xsd:attribute name="src" type="xsd:anyURI" use="required"/> </xsd:complexType> </xsd:element>
<?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFromDefault="qualified"> ... </xsd:schema>
schemaLocation
par noNamespaceSchemaLocation
:
<?xml version="1.0" ?> <Librairie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="librairie.xsd"> <Livre> <Titre>Le guide du routard Galactique</Titre> <Auteur>Doug las Adams</Auteur> <Date>1979</ Date> <ISBN>0345391802</ISBN> <Editeur>Ballantine Books</Editeur> </Livre> </Libraire>
<?xml version="1 .0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.librairie.org" xmlns="http://www.librairie.org" elementFromDefault="qualified"> <xsd:include schemaLocation="librairie.xsd"/> <xsd:include schemaLocation="editeur.xsd"/> ... </xsd:schema>
annotation
.<documentation>
permet de mettre des commentaires pour un humain.<appinfo>
met du commentaire pour une machine. Le contenu doit être un document XML bien formaté. <xsd:annotation> <xsd:documentation> Du texte pour les humains. </xsd:documentation> <xsd:appinfo > <assert test="A > B">A est supérieur ou B</assert> </xsd:appinfo> </xsd:annotation>
<xsd:documentation>
source
: contient l'url d'un fichier contenant les informations ;xml:lang
: indique la langue du commentaire.
<xsd:documentation source="http://www.univ-lehavre.fr/docs/" xml:lang="FR"/>
<xsd:appinfo>
(source
)
<xsd:appinfo source="http://ici.bas.fr/enfer.xml"/>
<?xml version="1 .0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.librairie.org" xmlns="http://www.librairie.org" elementFromDefault="qualified"> ici <xsd:element name="Librairie"> ici <xsd:complexType> <xsd:sequence> <xsd:element ref="Livre" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> ici <xsd:element name="Livre"> ici <xsd:sequence > <xsd:element name="Titre" type="xsd:string"/> <xsd:element name="Auteur" type="xsd:string"/> <xsd:element name="Date" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> </xsd:element> ici </xsd:schema>
Les définitions de XMLSchema sont disponibles aux adresses <url>http://www.w3.org/TR/xmlschema-0/</url>, <url>http://www.w3.org/TR/xmlschema-1/</url> et <url>http://www.w3.org/TR/xmlschema-2/</url>.
<xsd:complexType>
et en le positionnant à true
:
<xsd:complexType name="typeTexte" mixed="true"> <xsd:sequence> <xsd:element ref="url" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
false
.<xsd:complexType name="typeTexte" mixed="true"> <xsd:sequence> <xsd:element ref="url" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence > </xsd:complexType> <xsd:complexType name="typeItem" mixed="true"> <xsd:complexContent> <xsd:extension base="typeTexte"> <xsd:sequence> <xsd:element name="liste" type="typeListe" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute name="libelle" type="xsd:string" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType>
<loto> <boule rang="1">19</boule> <boule rang="2">42</boule> <boule rang="3">24</boule> <boule rang="4">10</boule> <boule rang="5">6</boule> <boule rang="6">35</boule> </loto>
<loto>19 42 24 10 6 35</loto>
<xsd:simpleType name="loto"> <xsd:list itemType="xsd:positiveInteger"/> </xsd:simpleType>
<xsd:simpleType name="chiffreloto"> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxInclusive value="49"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="listeloto"> <xsd:list itemType="chiffreloto"/> </xsd:simpleType > <xsd:simpleType name="loto"> <xsd:restriction base="listeloto"> <xsd:length value="6"/> </xsd:restriction> </xsd:simpleType>
typeComplex
;length, minLength, maxLength, enumeration, pattern
.union
permet de faire l'union entre des types simples.
<xsd:simpleType name="chiffreloto"> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxInclusive value="49"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="typeloto"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="premier tirage"/> <xsd:enumeration value="deuxieme tirage"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="loto"> <xsd:union memberTypes="chiffreloto typeloto"/> </xsd:simpleType>
xsd:anyType
. Plusieurs formes sont équivalentes :<xsd:element name="vide" type="xsd:anyType"/> <vide/> <xsd:element name="videAvecAttributs"> <xsd:complexType> <xsd:attribute name="attribut1" type="xsd:string"/> <xsd:attribute name="attribut2" type="xsd:string"/> </xsd:complexType> </xsd:element> <videAvecAttributs attribut1="un" attribut2="deux" />
xsd:complexType
pour définir un élément vide car xsd:complexType
hérite de xsd:anyType
.
xsd:ur-type
, la base de tous les types. Attention : ur-type
ne peut être utilisé, en revanche vous pouvez utiliser xsd:anyType
.nillable
:
<xsd:element name="estpresent" type="xsd:string" nillable="true" /> <estpresent xsi:nil="true"></estpresent>
<?xml version="1 .0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:entrepot="http://scott.univ-lehavre.fr/entrepot" xmlns:atm="http://infodoc.unicaen.fr/OhRAGE" targetNamespace="http://scott.univ-lehavre.fr/~fournier/XML/SRO.XMLSchema/" xmlns="http://scott.univ-lehavre.fr/~fournier/XML/SRO.XMLSchema/" elementFromDefault="qualified"> <xsd:import namespace="http://scott.univ-lehavre.fr/entrepot" schemaLocation="entrepot.xsd"/> <xsd:import namespace="http://infodoc.unicaen.fr/OhRAGE" schemaLocation="atm.xsd"/>
<?xml version="1.0" ?> <slides xmlns="http://scott.univ-lehavre.fr/~fournier/XML/SRO.XMLSchema/" xmlns:entrepot="http://scott.univ-lehavre.fr/entrepot" xmlns:atm="http://infodoc.unicaen.fr/OhRAGE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://scott.univ-lehavre.fr/~fournier/XML/SRO.XMLSchema/slides.xsd"> <entete> <atm:auteur> <atm:prenom>Domininique</atm:prenom> <atm:nom>Fournier</atm:nom> <atm:adresse>B2004, UFR S&T</atm:adresse> <atm:url>http://scott.univ-lehavre.fr/~fournier</</atm:url> <atm:email>Domininique.Fournier@univ-lehavre.fr</atm:email> </atm:auteur> <titre>XML Schema : Intérêts et utilisations</titre> <soustitre>très fortement inspiré des cours de C. Turbout</soustitre> <soustitre>XML Technologies Course</soustitre> <version>1.0</version> <date>vendredi 15 décembre 2006</date> <circonstance>Master Pro SRO</circonstance> <entrepot:resume>Comment passez d'une DTD à un XMLSchéma, des exemples de créations de documents XML valides, l'explication de ce qui est habituellement réalisé par une DTD en XMLSchema. </entrepot:resume> </entete> ...
<xsd:complexType name="typeEntete"> <xsd:sequence> <xsd:element ref="atm:auteur" minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="titre" minOccurs="1" maxOccurs="1"/> <xsd:element name="soustitre" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="version" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="date" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="circonstance" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element ref="entrepot:resume" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType>
any
.
<xsd:complexType name="typeEntete"> <xsd:sequence> <xsd:element ref="atm:auteur" minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="titre" minOccurs="1" maxOccurs="1"/> <xsd:element name="soustitre" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="version" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="date" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="circonstance" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element ref="entrepot:resume" minOccurs="1" maxOccurs="1"/> <xsd:any minOccurs="0"/> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="typeEntete"> <xsd:sequence> <xsd:element ref="atm:auteur" minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="titre" minOccurs="1" maxOccurs="1"/> <xsd:element name="soustitre" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="version" type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:element name="date" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="circonstance" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element ref="entrepot:resume" minOccurs="1" maxOccurs="1"/> <xsd:any minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> <xsd:anyAttribute/> </xsd:complexType>
<anynamespace="##other" />
permet à l'instance de contenir des éléments d'un namespace autre que celui en cours de définition.<anynamespace="http://quelquepart.fr" />
permet l'utilisation d'éléments définis dans un ou plusieurs namespace précisés (il peut y avoir une liste). <anynamespace="##targetNamespace" />
il peut y avoir un élément fourni par le namespace en cours de définition. <anynamespace="##any" />
ajout d'éléments de tout namespace (option par défaut). <anynamespace="##local" />
ajout d'éléments d'un schema n'ayant pas de namespace.<anyAttribute namespace="##other" />
permet à l'instance de contenir des attributs d'un namespace autre que celui en cours de définition.<anyAttribute namespace = "http://quelquepart.fr" />
permet l'utilisation des attributs définis dans un ou plusieurs namespace précisés (il peut y avoir une liste).<anyAttribute namespace="##targetNamespace" />
il peut y avoir un attribut fourni par le namespace en cours de définition.<anyAttribute namespace="##any" />
ajout d'attributs de tout namespace (option par defaut).<anyAttribute namespace="##local" />
ajout d'attributs d'un schema n'ayant pas de namespace.any
, il peut être local ou global, dans un élément ou bien n'importe ou.<xsd:element name="Librairie"> <xsd:complexType> <xsd:sequence> <xsd:element name="Publication" type="typePublication" maxOccurs="unbounded" abstract="true"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="livre" substitutionGroup="Publication" type="typeLivreEdite" maxOccurs="unbounded" /> <xsd:element name="magazine" substitutionGroup="Publication" type="typeMagazine" maxOccurs="unbounded" />
<xsd:unique>
ou <xsd:key>
key
) est définissable sur un attribut, un élément ou une combinaison des deux, elle doit :
minOccurs > 0
) ;nillable="false"
) ;key
implique unique
, mais unique
n'implique pas key
.
<xsd:element name="Librairie"> <xsd:complexType> .... </xsd:complexType> <xsd:key name="index"> <xsd:selector xpath="Livre"/> <xsd:field xpath="ISBN"/> </xsd:key> </xsd:element>
<xsd:key>
<selector>
est utilisée dans l'élément key
pour specifier quels sont les éléments concernés par la clé ;<field>
est utilisée dans l'élément key
pour préciser qu'elle va être l'élément ou l'attribut qui sera la clé ;<field>
peut être utilisée plusieurs fois pour concatener des champs comme par exemple faire une clé du nom et des prénoms d'une personne (par forcement unique mais c'est un exemple ! ! !).<xsd:unique>
unique
s'utilise exactement comme key
. La différence est qu'elle vérifie l'unicité quand les éléments ou attributs sont présents. unique
prend en compte les clés sur des éléments ou attributs optionnels.<xsd:element name="Livre"> <xsd:complexType> <xsd:sequence> <xsd:element name="ISBN" type="xsd:string" minOccurs="0"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence > </xsd:complexType> <xsd:unique name="index"> <xsd:selector xpath="Livre"/> <xsd:field xpath="ISBN"/> </xsd:unique> </xsd:element>
<xsd:keyref>
(1/2)ID
et un IDREF
sont identique, les XMLSchema permettent de vérifier qu'une keyref
reference bien une key
existante :
<?xml version="1 .0" ?> <Librairie xmlns="http://www.librairie.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.librairie.org librairie.xsd"> <Livre> <Titre>Le guide du routard Galactique</Titre> <Auteur>Douglas Adams</Auteur> <Date>1979</Date> <ISBN>0345391802</ISBN> <Editeur>Ballantine Books</Editeur> </Livre> <Enstock> <Exemplaire isbn="0345391802"/> </Enstock> </Libraire>
<xsd:keyref>
(2/2)<xsd:element name="Livre"> <xsd:complexType> <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Editeur" type="xsd:string"/> </xsd:sequence> .... </xsd:complexType> <xsd:key name="index"> <xsd:selector xpath="Livre"/> <xsd:field xpath="ISBN"/> </xsd:key> </xsd:element> <xsd:element name="Enstock"> <xsd:complexType> .... </xsd:complexType> <xsd:keyref name="isbn" refer="index"> <xsd:selector xpath="/Exemplaire"/> <xsd:field xpath="ISBN"/> </xsd:keyref> </xsd:element>
field
dans le keyref
que dans le key
. Ces balises field
doivent apparaître dans le même ordre.child::li[position()=1]
décrit le premier enfant li
du noeud contextuelroot
, element
, text
, attribute
, namespace
, processing-instruction
et comment
child
( /
): parcourt depuis le noeud courant vers les noeuds fils
"child::commande" "commande"
descendant
( ou //
) : un descendant quelconque (toutes générations confondues), descendant-or-self
( ou .//
) : un descendant quelconque ou lui-même, parent
( ou ..
) : le noeud père, ancestor
: un ancêtre quelconque, ancestor-or-self
: un ancêtre quelconque ou lui-même, following-sibling
: la fratrie suivante, preceding-sibling
: la fratrie précédente, following
: oncles et cousins suivants, preceding
: oncles et cousins précédents, attribute
( ou @
), self
( ou .
), namespace
<?xml version="1.0" encoding="ISO-8859-1" ?> <commande numero="312597"> <date>2004/2/3</date> <client id="216A">société Anonyme</client> <article> <numero_piece entrepot="E11">E16-25A</numero_piece> <description>boulon1</description> <quantite>16</quantité> </article> </commande>
"commande[client]"
: identifie tout élément commande enfant du noeud contextuel et possédant au moins un enfant client"commande[@numero]"
: tout élément commande possédant un attribut numéro."commande[client = 'société Anonyme']"
[]
servent de filtres (prédicats)@
notation abrégée de attribute"//commande[client/@id = '216A']"
name()
: pour obtenir le nom du noeud
name(.)
renvoie le nom du noeud contextuelnode()
: renvoie le noeud lui-mêmeprocessing-instruction()
: retourne vrai pour toute processing-instruction, parametre optionnel : cible (ex: php)comment()
: renvoie les commentairesdata()
: renvoie les données associées au noeudtext()
: renvoie le contenue PCDATA d'un noeud<noeuds> <noeud>a</noeud> <noeud>b</noeud> <noeud>c</noeud> </noeuds>
"/noeuds/noeud" "/noeuds/noeud[position()=2]" "/noeuds/noeud[2]" "/noeuds/noeud[position()=last()]" "count(noeud)"
2 + 2
(div
ou idiv
pour la division) (détails)current-time()
//titre[starts-with(.,'La')]
$
(1, 4, 6, 3, 12, 1)
(:
et :)
for $i in 1 to 5
return //auteur[@id=$i]
let $i := 1
let $nbauteurs := /auteurs/auteur[starts-with(nom,'H')]
for
et tous les let
for $nomA in /auteurs/auteur/nom[starts-with(.,'A')]
for $nomprenom in /livre/auteur/nom
where $nomprenom/substring-after(.,' ') = $nomA
return $nomA
for $auteur in /auteurs/auteur
order by $auteur/nom, $auteur/prenom
return $auteur
group by, window, count
(voir w3c)for $aut at $pos in /auteurs/auteur
let $id := xs:int($aut/@id)
where $pos mod 2 = 0
order by $id
return $aut
for $nom in /livre/auteurs/auteur/nom
return <nom> {$nom/substring-after(.," ")} </nom>
<prenom>{$nom/substring-before(.," ")}</prenom>
doc()
est utilisée pour ouvrir un document xml.
doc("commande.xml")
doc("commande.xml")/commande[client = 'société Anonyme']
declare function prefix:function_name($parameter AS datatype)
as returnDatatype
{
(: indtructions ... :)
}
declare function local:prixTTC($prixHT as xs:decimal, $taux as xs:decimal)
as xs:decimal
{
let $prixTTC := $prixHT * (1+$taux)
return $prixTTC
};
<h1>{local:prixTTC(20, .196)}</h1>
else
est obligatoire ! Mais il est possible de renvoyer une séquence vide ()
declare function local:prixTTC($prixHT as xs:decimal, $taux as xs:decimal)
as xs:decimal
{
let $prixTTC := if ($taux > 1) then
$prixHT * ($taux)
else $prixHT * (1+$taux)
return $prixTTC
};
<h1>{local:prixTTC(20, 1.196)} ou {local:prixTTC(20, .196)}</h1>
for $l in .//livre
where some $t in $l//titre/text() satisfies
contains($t, "étoiles")
return <numLivre> {$l/@id}</numLivre>
for $livre in doc("/home/dominique/public_html/Master1/BDA/DocXML/lmsf040.xml")/livre
where every $t in $livre//titre/text() satisfies
contains($t," ")
return {$livre//titre}
for $numero in //tr/td[1]
return element meslivresimpaires{
attribute num {$numero/data()},
element titre {$numero/../td[3]/data()},
element auteur {$numero/../td[2]/data()}
}
<meslivresimpaires num="1">
<titre>Le cerveau solitaire</titre>
<auteur>Jeff, Sutton</auteur>
</meslivresimpaires>
<meslivresimpaires num="3">
<titre>Les mutants</titre>
<auteur>Henry, Kuttner</auteur>
</meslivresimpaires>
...
let $docXQuery :=document("http://www.w3.org/TR/2001/WD-xquery-20010215/") return <toc>filter($docXQuery, $docXQuery//h1 | $docXQuery//h2 </toc>
child::para[position()=1]
para[1]
<?xml version="1.0" encoding="ISO-8859-1" ?> <commande numero="312597"> <date>2004/2/3</date> <client id="216A">société Anonyme</client> <article> <numero_piece entrepot="E11">E16-25A</numero_piece> <description>boulon1</description> <quantite>16</quantité> </article> </commande>
<noeuds> <noeud>a</noeud> <noeud>b</noeud> <noeud>c</noeud> </noeuds>
"/noeuds/noeud" "/noeuds/noeud[position()=2]" "/noeuds/noeud[2]" "/noeuds/noeud[position()=last()]" "count(noeud)"
<footnote xmlns:xlink="http://www/w3/org/XML/XLink/0.9" xlink:type="simple" xlink:href="footnote7.xml">7</footnote>
<!ELEMENT EMPLOYE (#PCDATA)> <!ATTLIST EMPLOYE xmlns:xlink CDATA #FIXED "http://www/w3/org/XML/XLink/0.9" xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:title CDATA #IMPLIED xlink:role CDATA #IMPLIED> <employe xmlns:xlink="http://www/w3/org/XML/XLink/0.9" xlink:href="http://www.fai.com/page.perso" xlink:title="page perso de toto" xlink:role="infos persos"> Toto </employe>