La lecture en ligne est gratuite
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
Télécharger Lire

cours-6-slides

De
45 pages
Modélisation et interopérabilité :Semaine 43, cours 6Benoît Valiron< benoit.valiron@monoidal.net>http://inf356.monoidal.net/ 1Aujourd'hui, validation Relax-NG avancée 2Résumé● ●Appel : Appel : element a { text } attribute a { text }● ●Occurences : Occurences : * + ?●, , Combinaisons : , | & mixedUtilisation de ( et ) pour ● Combinaisons :combinaisons complexes. , , , 3Patterns● Centralisation des définitions● Permet la récursion elt-def = element elt { attribute att { text }, text } element parent { attribute att2 { text }, elt-def } ● La référence peur contenir n'importe quelle combinaison de patterns, y compris un appel à elle-même. 4Élément racine● Dans le cas d'utilisation de patterns: et pattern1 = ... pattern2 = ... ... ... ... start = element racine … ... 5Exemple atts_communs = ( attribute lang { text },
Voir plus Voir moins
 
Modélisationet interopérabilité :
Semaine 43, cours 6
Benoît Valiron <benoit.valiron@monoidal.net>
http://inf356.monoidal.net/
 
1
 
Aujourd'hui, validation Relax-NG avancée
 
2
Appel :
<element name=”a”> <text /> </element>
<attribute name=”a”> <text /> </attribute>
Occurences :
Résumé
<zeroOrMore>, <oneOrMore>, <optional> Combinaisons : <group>, <choice>, <interleave>, <mixed>
 
 
Appel :
element a { text }
attribute a { text }
Occurences :* ? +
Combinaisons :, | &  mixed Utilisation de(et)pour combinaisons complexes.
3
Patterns
Centralisation des définitions
Permet la récursion
<define name=”elt-def”> <element name=”elt”>  <attribute name=”att” />  <text /> </element> </define>
<element name=”parent”> <attribute name=”att2” /> <ref name=”elt-def” /> </element>
elt-def= element elt {  attribute att { text },  text }
element parent { attribute att2 { text },  elt-def }
La référence peur contenir n'importe quelle combinaison de patterns, y compris un appel à elle-même.  
 
4
Élément racine
Dans le cas d'utilisation de patterns:
<grammar> … </grammar> et <start> … </start>
<grammar> <define name=”pattern1”>  ... </define> ... <start>  <element name=”racine”>  ...  </element> </start> </grammar>
 
 
pattern1 ... = pattern2 = ... ...
start = element racine …
5
<grammar> <define name=”atts communs”> _ <attribute name=”lang” /> <attribute name=”id” />   <attribute name=”style” /> <attribute name=”class” /> </define> <start> <element name=”span”> <ref name=”atts communs” /> _ <text /> </element> </start> </grammar> Equivaut à <element name=”span”> <attribute name=”lang” /> <attribute name=”id” /> <attribute name=”style” /> <attribute name=”class” /> <text /> </element>  
Exemple
atts_communs= ( attribute lang { text }, attribute id { text }, attribute style { text }, attribute class { text } )
start = element span {  atts communs, _ text }
Equivaut à
element span { ( attribute lang { text },  attribute id { text },  attribute style { text },  attribute class { text } ), text }  
6
Exemple
<grammar> _  <define name=”elt rec”>  <element name=”elt”>  <optional>  <ref name=”elt rec” /> _  </optional> </element>     </define>    <start> _  <ref name=”elt rec” />  </start> </grammar>
 
_ elt rec= element elt {elt_rec? } start =elt rec _
<elt></elt> <elt><elt></elt></elt> <elt><elt><elt></elt></elt></elt> <elt><elt><elt><elt></elt></elt></elt></elt> ...
 
7
<grammar> _  <define name="rec content">  <zeroOrMore>  <choice>  <ref name="rec i" /> _  <ref name="rec b" /> _  <text/>  </choice >  </zeroOrMore>  </define>    _  <define name="rec b">  element name="b"> < _  <ref name="rec content" />  </element>  </define>    <define name="rec i"> _  <element name="i">  <ref name="rec content" / > _  </element>  </define>   <start>    <element name="paragraph"> _  <ref name="rec content" />  </element>  </start> < >rammarg/
Exemple
rec content= _  ( rec_b | rec_i | text )*
rec_i = element i {rec content} _ rec b = element b {rec_content} _
start =  element paragraph {rec_content}
 
8
<grammar>
  <defin ename"=erc_conetnt">
 <zeroOrMore>  <mixed>    _  <ref name="rec i" />  <ref name="rec b" /> _  </mixed>  </zeroOrMore>  </define>   _  <define name="rec b"> <element name="b">    _  <ref name="rec content" /> </element>      </define>    <define name="rec i"> _  <element name="i">  <ref name="rec content" / _ >  </element>  </define>    <start>  <element name="paragraph">  <ref name="rec content" /> _ </element>      /start> < </grammar>  
Exemple qui fait pas ce qu'on veut
_ rec content=  mixed { rec_b, rec_i } *
_ element {_content} rec i = irec _ element b {_content} rec b =rec  
start =  element paragraph {rec_content}
 
9
Exemple où ça va pas
<grammar>  define name=”elt rec < ”> _  <element name=”elt”> _  <ref name=”elt rec” />  </element> </define>     <start>   _  <ref name=”elt rec” />  </start> </grammar>
 
elt rec= _ element elt {elt_rec}
_ start =elt rec
 
10
Exemple où ça va pas
<grammar>  <define name=”listatt”>  <attribut name=”att” />  </define>    <start>  <element name=”elt”>  <ref name=”listatt” />  <attribut name=”att” />    </element>  </start> </grammar>
 
listatt= attributatt{ text }
start element elt { =  listatt, attributeatt{ text } } 
 
11
Un pour Un
Permettre à tous d'accéder à la lecture
Pour chaque accès à la bibliothèque, YouScribe donne un accès à une personne dans le besoin