Echange et publication de données 1 C H A P I T R E " V A L I D A T I O N D ' U N D O C U M E N T X M L ( S E C O N D E P A R T I E ) : X M L S C H E M A " VIRGINIE G O A S D O U É - T H I O N, U N I V. P A R I S D A U P H I N E DTD!! Sous forme d'une grammaire simple rapide à écrire p.e. CDATA : String? Integer? Date? peu expressive <!ELEMENT NEWSPAPER (ARTICLE+)> <!ELEMENT ARTICLE (AUTHOR+,HEADLINE, BYLINE, LEAD, BODY, NOTES*)> <!ELEMENT HEADLINE (#PCDATA)> <!ELEMENT AUTHOR(#PCDATA)> <!ELEMENT BYLINE (#PCDATA)> <!ELEMENT LEAD (#PCDATA)> <!ELEMENT BODY (#PCDATA)> <!ELEMENT NOTES (#PCDATA)> 2 <!ATTLIST ARTICLE EDITOR CDATA #IMPLIED> <!ATTLIST ARTICLE DATE CDATA #IMPLIED> <!ATTLIST ARTICLE EDITION CDATA #IMPLIED> exemple inspiré de w3schools XML Schema 3 XML Schema 4!! Formalisme d'expression de schéma plus évolué que les DTD.! moins simple et moins rapide à écrire qu'une DTD.!! Utilise la syntaxe XML!! Recommandé par le W3C DTD!"#$#%#&'()*+,(-+*.(/0*1.(2,345)6.(7*489:(!"#$#%#&'(+*(-;<=>?'?9:(!"#$#%#&'(/0*1(-;<=>?'?9:(!"#$#%#&'(2,345)6(-;<=>?'?9:(!"#$#%#&'(7*48(-;<=>?'?9:( XML Schema!@ABAC2,13(@1D)AB@AEF2++GBHHIIIJIKJ*06HLMMNH O%$PC2,13F:(!@AB,D,1,)+()31,EF)*+,F:Q(( QQQ(!@ABA,RS,)C,:( QQQQQ(!@AB,D,1,)+()31,EF+*F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF/0*1F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF2,345)6F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF7*48F(+8G,EF@ABA+05)6FH:( QQQ(!H@ABA,RS,)C,:( Q(!H@ABC*1GD,@'8G,:(!H@ABAC2,13:(
XML Schema!@ABAC2,13(@1D)AB@AEF2++GBHHIIIJIKJ*06HLMMNHO%$PC2,13F:(!@AB,D,1,)+()31,EF)*+,F:Q(( QQQ(!@ABA,RS,)C,:( QQQQQ(!@AB,D,1,)+()31,EF+*F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF/0*1F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF2,345)6F(+8G,EF@ABA+05)6FH:( QQQQQ(!@AB,D,1,)+()31,EF7*48F(+8G,EF@ABA+05)6FH:( QQQ(!H@ABA,RS,)C,:( Q(!H@ABC*1GD,@'8G,:(!H@ABAC2,13:( 5 Les élements : types!@ab,d,1,)+()31,ef/50a+)31,f(+8g,ef@aba+05)6fh:(!/50a+)31,:( (?D3)(!H/50A+)31,:( Peut être plus précis en rajoutant des options 6 Type peut être "null" "Compte " Recomm. W3C >,S@(A+8D,A(4,(+8G,A(B( Les élements : types!! '8G,A(A51GD,A(B(A5(*)(T,S+(RS,(DUVDV1,)+(TV05/53)+(D,(+8G,(),(C*)+5,)),( RSUS),(T3D,S0(,+(G3A(4U3++057S+(!5)+,0)3+5*)3D<05C,(:KWX.YZ!5)+,0)3+5*)3D<05C,(:(!! '8G,A(C*1GD,@,A(B(A5(*)(T,S+(RS,(DUVDV1,)+(TV05/53)+(D,(+8G,(A*5+(C*1G*AV( 4,(A*SA[VDV1,)+-A9(*S\(C*)+5,)),(4,A(3++057S+A( "!!5)+,0)3+5*)3D<05C,(CS00,)C8EF4*D30AF:KWX.YZ!H5)+,0)3+5*)3D<05C,:( "!!5)+,0)3+5*)3D<05C,(CS00,)C8EF#]^F(T3DS,EFKWX.YZFH:( "!!5)+,0)3+5*)3D<05C,:( ( ((((!CS00,)C8:#]^!CS00,)C8:( ( ((((!T3DS,:KWX.YZ!T3DS,:( ( ((!H_)+,0)3+5*)3D<05C,:( "!!5)+,0)3+5*)3D<05C,(43+,EFLMM`[MX[NLF:( ( ((((!CS00,)C8:#]^!CS00,)C8:( ( ((((!T3DS,:KWX.YZ!T3DS,:( ( ((!H_)+,0)3+5*)3D<05C,:( \(45Aa*)C+5*)()*)(,@CDSA5T, 7 Types simples!@ab,d,1,)+()31,ef/50a+)31,f(+8g,ef@aba+05)6fh:( Quelques types possibles : Type Description Commentaire string chaîne de caractères chaîne de caractères boolean booléen 'true' 'false' '1' '0' decimal décimal (\+ -)?([0-9]+(\.[0-9]*)? \.[0-9]+) integer (dérivé de decimal) entier 8 types dérivés tels que long, non PositiveInterger, nonnegativeinteger float flottant (\+ -)?([0-9]+(\.[0-9]*)? \.[0-9]+)([Ee](\ + -)?[0-9]+)? (\+ -)?INF NaN time Exemple : 2000-12-12+13:00 Et bien d'autres
Les types pré-définis types pré-définis Types simples : dérivation 10 types primitifs On peut aller plus loin qu'un simple type! définition de types dérivés à partir de types pré-définis. types dérivés pré-définis Dérivation. Restriction Liste Union Issu de la doc W3C A partir de constraining facets posant des conditions sur les valeurs. 11 A partir de constraining facets posant des conditions sur les valeurs.. 12 Dérivation par restriction :!@ABA51GD,'8G,()31,EU*),[2S)40,4[*0[D,AAU:( ((!@AB0,A+05C+5*)(73A,EU@AB5)+,6,0U:( ((((!@AB13@_)CDSA5T,(T3DS,EUNMMUH:( constraining facet. Autres possibles pour le type integer : totaldigits fractiondigits pattern whitespace enumeration maxexclusive mininclusive minexclusive Dérivation par restriction :!@ABA51GD,'8G,()31,EU=*4,b300,U:( ((((!@AB0,A+05C+5*)(73A,EU@ABA+05)6U:( ((((((!@ABG3++,0)(T3DS,EUc4dKe[f?[ghdLeUH:( (( constraining facet.
Constraining ou Non-fundamental : contraint l'espace des valeurs du type!! length!! minlength!! maxlength!! pattern!! enumeration!! whitespace!! maxinclusive!! maxexclusive!! minexclusive!! mininclusive!! totaldigits 13!! Constraining facet lenght!@aba51gd,'8g,()31,eug0*4sc+=*4,u:( (((!@AB0,A+05C+5*)(73A,EU@ABA+05)6U:( (((((!@ABD,)6+2(T3DS,EUiU(H:( ( 14!! Constraining facet minlenght et maxlenght 15!! Constraining facet pattern 16!@ABA51GD,'8G,()31,EU)*)[,1G+8[A+05)6U:( ((!@AB0,A+05C+5*)(73A,EU@ABA+05)6U:( ((((!@AB15)$,)6+2(T3DS,EUNUH:(!@ABA51GD,'8G,()31,EU/*01[5)GS+U:( ((!@AB0,A+05C+5*)(73A,EU@ABA+05)6U:( ((((!@AB13@$,)6+2(T3DS,EUXMUH:( ((!@ABH0,A+05C+5*):(!@ABA51GD,'8G,()31,EU7,++,0[SA[j5GC*4,U:( ((!@AB0,A+05C+5*)(73A,EU@ABA+05)6U:( ((((!@ABG3++,0)(T3DS,EUfM[`hdXe-[fM[`hdWe9kUH:(
!! Constraining facet enumeration 17!! Constraining facet whitespace 18!@ABA51GD,'8G,()31,EU2*D5438AU:( (!@AB0,A+05C+5*)(73A,EU@AB6%*)+2>38U:( ((((((((!@AB,)S1,03+5*)(T3DS,EU[[MN[MNU:(!H@AB,)S1,03+5*):( ((((((((!@AB,)S1,03+5*)(T3DS,EU[[MZ[MWU:(!H@AB,)S1,03+5*):( ((((((((!@AB,)S1,03+5*)(T3DS,EU[[NL[LXU:(!H@AB,)S1,03+5*):( (!H@AB0,A+05C+5*):(!@ABA51GD,'8G,()31,EU+*l,)U:( ((((!@AB0,A+05C+5*)(73A,EU@AB)*013D5j,4P+05)6U:( ((((((!@ABI25+,PG3C,(T3DS,EU@ABC*DD3GA,UH:( (( Indication pour le processeur qui traitera les éléments! pas vraiment du "schéma"!! Constraining facet maxeclusive 19!! Constraining facet mininclusive 20!@ABA51GD,'8G,()31,EUD,AA[+23)[*),[2S)40,4[3)4[*),U:( ((!@AB0,A+05C+5*)(73A,EU@AB5)+,6,0U:( ((((!@AB13@#@CDSA5T,(T3DS,EUNMNUH:( "la valeur max est 101 exclus"!@aba51gd,'8g,()31,eu*),[2s)40,4[*0[1*0,u:( ((!@AB0,A+05C+5*)(73A,EU@AB5)+,6,0U:( ((((!@AB15)_)CDSA5T,(T3DS,EUNMMUH:( "la valeur min est 100 inclus"
!! Constraining facet totaldigit!@aba51gd,'8g,()31,euc,da5sab*48',1gu:( ((!@AB0,A+05C+5*)(73A,EU@AB4,C513DU:( ((((!@AB+*+3D>565+A(T3DS,EUWUH:( ((((!@AB/03C+5*)>565+A(T3DS,EUNUH:( ((((!@AB15)_)CDSA5T,(T3DS,EUKYJWUH:( ((((!@AB13@_)CDSA5T,(T3DS,EUWMJXUH:( 21 Types simples : dérivation par liste!@aba51gd,'8g,()31,eud5a+m/nd*3+u:( ((!@ABD5A+(5+,1'8G,EU@AB/D*3+UH:( Exemples de Constraining facets applicables :!! length!! maxlength!! minlength 22 Types simples : dérivation par union <xsd:attribute name="size"> <xsd:simpletype> <xsd:union> <xsd:simpletype> <xsd:restriction base="xsd:positiveinteger"> <xsd:mininclusive value="8"/> <xsd:maxinclusive value="72"/> </xsd:restriction> </xsd:simpletype> <xsd:simpletype> <xsd:restriction base="xsd:nmtoken"> <xsd:enumeration value="small"/> <xsd:enumeration value="medium"/> <xsd:enumeration value="large"/> </xsd:restriction> </xsd:simpletype> </xsd:union> </xsd:simpletype> </xsd:attribute> 23 taille de fonte exprimée en entiers en small/medium/large <p> <font size='large'>a header</font> </p> <p> <font size='12'>this is a test</font> </p> Types complexes : quand? 24 Quand passer en type complexe? Quand pas un type simpe c.-à-d. quand on veut qu'un élément vérifiant le type : "! contienne au moins un attribut ou (non exclusif) "! soit composé de sous-éléments Exemples (non exhaustif) :!5)+,0)3+5*)3D<05C,(CS00,)C8EF4*D30AF:KWX.YZ!H5)+,0)3+5*)3D<05C,: (!5)+,0)3+5*)3D<05C,:( ( (!CS00,)C8:#]^!CS00,)C8:( ( (!T3DS,:KWX.YZ!T3DS,:( (!H_)+,0)3+5*)3D<05C,:(
Types complexes : 2 notations équivalentes Types complexes : plusieurs cas!@ab,d,1,)+()31,ef_)+,0)3+5*)3d<05c,f:( ( (!@ABC*1GD,@'8G,:( ( (o( ( (!H@ABC*1GD,@'8G,:( 25!@AB,D,1,)+()31,EF_)+,0)3+5*)3D<05C,F( +8G,Epq5G05C,'8G,qq(H:(!@ABC*1GD,@'8G,()31,Epq5G05C,'8G,qq:( (o(!h@abc*1gd,@'8g,:( 2 principaux cas de figure!! simple content : le contenu de l'élément vérifiant le type est une valeur (pas de sous éléments) + au moins un attribut.!5)+,0)3+5*)3d<05c,(cs00,)c8ef4*d30af:kwx.yz!h5)+,0)3+5*)3d<05c,:!! complex content : l'élément vérifiant le type est vide ou contient un ou plusieurs sous-élément(s) + éventuellement des attributs (!5)+,0)3+5*)3D<05C,:( ( (!CS00,)C8:#]^!CS00,)C8:( ( (!T3DS,:KWX.YZ!T3DS,:( (!H_)+,0)3+5*)3D<05C,:( 26 Plus "intuitif" Plus clair (plus propre) si schéma compliqué p.e. type utilisé à plusieurs endroits dans le schéma Types complexes : simple content 27 Simple content : l'élément vérifiant le type contient une valeur + au moins un attribut!5)+,0)3+5*)3d<05c,(cs00,)c8ef4*d30af:kwx.yz!h5)+,0)3+5*)3d<05c,:(!@ab,d,1,)+()31,ef5)+,0)3+5*)3d<05c,f:( ((((!@ABA51GD,=*)+,)+:( ((((((!@AB,@+,)A5*)(73A,EF@AB4,C513DF:( ((((((((!@AB3++057S+,()31,EFCS00,)C8F(+8G,EF@ABA+05)6FH:( ((((((!H@AB,@+,)A5*):( ((((!H@ABA51GD,=*)+,)+:( ((!H@ABC*1GD,@'8G,:( Complexe content : l'élément vérifiant le type est vide ou contient un ou plusieurs sous-élément(s) + éventuellement des attributs Exemples :!5)+,0)3+5*)3D<05C,(43+,EFLMM`[MX[NLF(T3DS,EFKWX.YZFH:(!5)+,0)3+5*)3D<05C,(43+,EFLMM`[MX[NLF:( ( (!CS00,)C8:#]^!CS00,)C8:( Que des attributs ( (!T3DS,:KWX.YZ!T3DS,:(!H_)+,0)3+5*)3D<05C,:( sous-éléments et attributs 28 Exemple W3C
29 Complexe content : : l'élément vérifiant le type est vide ou contient un ou plusieurs sous-élément(s) + éventuellement des attributs Que des attributs :!@AB,D,1,)+()31,EF5)+,0)3+5*)3D<05C,F:( ((((!@ABC*1GD,@=*)+,)+:( ((((((!@AB0,A+05C+5*)(73A,EF@AB3)8'8G,F:( ((((((((!@AB3++057S+,()31,EFCS00,)C8F(+8G,EF@ABA+05)6FH:( ((((((((!@AB3++057S+,()31,EFT3DS,F(+8G,EF@AB4,C513DFH:( (((( ((((!H@ABC*1GD,@=*)+,)+:( ((!H@ABC*1GD,@'8G,:( Heureusement! Raccourcis d'écriture Que des attributs :!@AB,D,1,)+()31,EF5)+,0)3+5*)3D<05C,F:( ((((!@ABC*1GD,@=*)+,)+:( ((((((!@AB0,A+05C+5*)(73A,EF@AB3)8'8G,F:( ((((((((!@AB3++057S+,()31,EFCS00,)C8F(+8G,EF@ABA+05)6FH:( ((((((((!@AB3++057S+,()31,EFT3DS,F(+8G,EF@AB4,C513DFH:( (((( ((((!H@ABC*1GD,@=*)+,)+:( ((!H@ABC*1GD,@'8G,:( 30 youpi! Heureusement! Raccourcis d'écriture Que des attributs :!@AB,D,1,)+()31,EF5)+,0)3+5*)3D<05C,F:( ((((!@AB3++057S+,()31,EFCS00,)C8F(+8G,EF@ABA+05)6FH:( ((((!@AB3++057S+,()31,EFT3DS,F(+8G,EF@AB4,C513DFH:( ((!H@ABC*1GD,@'8G,:( 31 youpi! 32 Complexe content : : l'élément vérifiant le type est vide ou contient un ou plusieurs sous-élément(s) + éventuellement des attributs Exemples :!5)+,0)3+5*)3D<05C,(CS00,)C8EF#]^F(T3DS,EFKWX.YZFH:( Que des attributs!5)+,0)3+5*)3d<05c,(43+,eflmm`[mx[nlf:( ( (!CS00,)C8:#]^!CS00,)C8:( ( (!T3DS,:KWX.YZ!T3DS,:(!H_)+,0)3+5*)3D<05C,:( Sous-éléments et attributs
Sous-éléments et attributs ("directement" en raccourcis d'écriture) :!@ABC*1GD,@'8G,()31,EF_)+,0)3+5*)3D<05C,F:( ((!@ABA,RS,)C,:( (((!@AB,D,1,)+()31,EFCS00,)C8F(+8G,EF@ABA+05)6FH:( (((!@AB,D,1,)+()31,EFT3DS,F(+8G,EF@AB4,C513DFH:( ((!H@ABA,RS,)C,:( ((!@AB3++057S+,()31,EF43+,F(+8G,EF@AB43+,FH:( (!H@ABC*1GD,@'8G,:( 33 type simples ici mais aurait pu être des appels à des types complexes définis précédemment 34 Et maintenant, une grammaire plus complète des complex content ("directement" en raccourcis d'écriture) :!! Complex content "! Sans sous élément, un complex content définit des attributs "! <xs:attribute name= n" type="xs:t" use= u" /> #! n est le nom de l attribut #! t est le type XML schema de l attribut! ENTITY, ID, IDREF(S), string, restriction de string #! u définit la nécessité de l attribut! u!{optional,required} et u=optional par défaut Cours F. Goasdoué!! Complex content "! Avec sous-éléments et éventuellement des attributs "! On peut avoir #! Une séquence (sequence) de sous-éléments dans l'ordre de la définition #! Exactement un choix (choice) de sous-éléments #! Un ensemble (all) de souséléments dans n'importe quel ordre #! Suivi d attributs 35!@AB3DD:( (!@AB,D,1,)+(0,/EFC3+AFH:( (!@AB,D,1,)+(0,/EF4*6AFH:(!H@AB3DD:(!@ABA,RS,)C,:( (!@ABC2*5C,:( ((!@AB,D,1,)+()31,EFD,/+F(+8G,EFG*A'8G,FH:( ((!@AB,D,1,)+()31,EF0562+F(+8G,EFG*A'8G,FH:( (!H@ABC2*5C,:( (!@AB,D,1,)+()31,EF*05,)+3+5*)F(( ((((((((((((((((((((((+8G,EF@ABA+05)6FH:(!H@ABA,RS,)C,:(!@AB3++057S+,()31,EF43+,F(+8G,EF@AB43+,FH:(!@AB3++057S+,()31,EF50,/F(+8G,EF50,/'8G,FH:(!@AB,D,1,)+()31,EFD570308F(+8G,EFD57+8G,F(H:(!@ABC*1GD,@'8G,()31,EFD57+8G,F:( (!@ABC2*5C,(15)mCCS0AEFMF(13@mCCS0AEFS)7*S)4,4F:( ( (!@AB,D,1,)+()31,EF4*CS1,)+F(+8G,EF4*C+8G,F(H:( ( (!@AB,D,1,)+()31,EFGS7D5A2,0F(+8G,EFGS7+8G,F(H:( (!H@ABC2*5C,:(!H@ABC*1GD,@'8G,:( 36!@ABC*1GD,@'8G,()31,EF4*C+8G,F:( (!@ABA,RS,)C,:( ( (!@AB,D,1,)+()31,EF_Pb&F(((+8G,EF@ABA+05)6F(15)mCCS0AEFMF(13@mCCS0AEFNFH:( ( (!@AB,D,1,)+()31,EF3S+2*0F(+8G,EF@ABA+05)6F(15)mCCS0AEFNF(13@mCCS0AEFS)7*S)4,4FH:( ( (!@AB,D,1,)+()31,EF+5+D,F((((((+8G,EF@ABA+05)6F(15)mCCS0AEFNF(13@mCCS0AEFNFH:( ( (!@AB,D,1,)+()31,EF43+,F(((((+8G,EF@AB43+,F(((15)mCCS0AEFMF(13@mCCS0AEFNFH: ( (( (!H@ABA,RS,)C,:( (!@AB3++057S+,()31,EFC3DD)S17,0F(+8G,EF@AB_>F(SA,EF0,RS50,4F(H:( (!@AB3++057S+,()31,EFD3)6S36,F(+8G,EF@ABA+05)6F(SA,EF*G+5*)3DF(H:( (!@AB3++057S+,()31,EFA+3+SAF(+8G,EFA+3+8G,F(4,/3SD+EF3T,036,F(H:( (!@AB3++057S+,()31,EFGS7D5A2,478F(+8G,EF@AB_>^#nF(SA,EF*G+5*)3DF(H:( (!@AB3++057S+,()31,EF0,D3+,4F(+8G,EF@AB_>^#nPF(SA,EF*G+5*)3DF(H:(!H@ABC*1GD,@'8G,:( Cours F. Goasdoué Cours F. Goasdoué
Conclusion 37 ID, IDREF 38 Quel type contenu de type complexe? Contenu de l'élément Texte Vide ou souséléments Attribut Type Contenu Sans Simple pas un type complexe Avec Complexe simple content Sans Avec Complexe complex content!! Complex content "! Sans sous élément, un complex content définit des attributs "! <xs:attribute name= n" type="xs:t" use= u" /> #! n est le nom de l attribut #! t est le type XML schema de l attribut! ENTITY, ID, IDREF(S), string, restriction de string #! u définit la nécessité de l attribut! u!{optional,required} et u=optional par défaut Cours F. Goasdoué!@AB,D,1,)+()31,EFD570308F(+8G,EFD57+8G,F(H:(!@ABC*1GD,@'8G,()31,EFD57+8G,F:( (!@ABC2*5C,(15)mCCS0AEFMF(13@mCCS0AEFS)7*S)4,4F:( ( (!@AB,D,1,)+()31,EF4*CS1,)+F(+8G,EF4*C+8G,F(H:( ( (!@AB,D,1,)+()31,EFGS7D5A2,0F(+8G,EFGS7+8G,F(H:( (!H@ABC2*5C,:(!H@ABC*1GD,@'8G,:( 39!@ABC*1GD,@'8G,()31,EF4*C+8G,F:( (!@ABA,RS,)C,:( ( (!@AB,D,1,)+()31,EF_Pb&F(((+8G,EF@ABA+05)6F(15)mCCS0AEFMF(13@mCCS0AEFNFH:( ( (!@AB,D,1,)+()31,EF3S+2*0F(+8G,EF@ABA+05)6F(15)mCCS0AEFNF(13@mCCS0AEFS)7*S)4,4FH:( ( (!@AB,D,1,)+()31,EF+5+D,F((((((+8G,EF@ABA+05)6F(15)mCCS0AEFNF(13@mCCS0AEFNFH:( ( (!@AB,D,1,)+()31,EF43+,F(((((+8G,EF@AB43+,F(((15)mCCS0AEFMF(13@mCCS0AEFNFH: ( (( (!H@ABA,RS,)C,:( (!@AB3++057S+,()31,EFC3DD)S17,0F(+8G,EF@AB_>F(SA,EF0,RS50,4F(H:( (!@AB3++057S+,()31,EFD3)6S36,F(+8G,EF@ABA+05)6F(SA,EF*G+5*)3DF(H:( (!@AB3++057S+,()31,EFA+3+SAF(+8G,EFA+3+8G,F(4,/3SD+EF3T,036,F(H:( (!@AB3++057S+,()31,EFGS7D5A2,478F(+8G,EF@AB_>^#nF(SA,EF*G+5*)3DF(H:( (!@AB3++057S+,()31,EF0,D3+,4F(+8G,EF@AB_>^#nPF(SA,EF*G+5*)3DF(H:(!H@ABC*1GD,@'8G,:( TD 40 XML Schema Cours F. Goasdoué
41 Bibliographie!! E.Rusty Harold, W Scott Means : XML in a nutshell, third edition. O'Reilly, 2001.!! Recommandation WML Schema W3C : http:// www.w3.org/standards/techs/xmlschema#w3c_all