logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

Validation RelaxNG: problème avec le pattern text: msg#00186

Subject: Validation RelaxNG: problème avec le pattern text
Bonjour,

Ça fait un petit moment que je suis abonné à la liste, mais ceci est mon 
premier message. Petite présentation donc : je suis développeur d'appli 
basée sur le framework de Mozilla (C++/XPCOM/XUL etc..), fondateur du 
site http://xulfr.org, co-fondateur du site http://openweb.eu.org.

Je réalise actuellement un validateur RelaxNG, et j'ai un petit souci 
avec le pattern <text />.

Si j'ai bien compris les specs (et le livre d'Eric sur RelaxNG ;-), le 
pattern <text /> est "positif" quand :
- il y a un noeud texte (ou cdata) avec du texte
- il y a un noeud texte (ou cdata) avec seulement des caractères "blancs"
- quand il n'y a pas de noeud texte.

(cf :
* http://books.xmlschemata.org/relaxng/ch05s02.html#id2821949 "More 
precisely, it matches zero or more text nodes"
* http://www.relaxng.org/spec-20011203.html#text-pattern "a text element 
matches zero or more strings" )


Imaginons ce bout de schema RelaxNG (que l'on retrouve dans le schema 
RelaxNG de RelaxNG : http://www.relaxng.org/spec-20011203.html#IDA5MCS 
au niveau du <define name="other"/>)

<element>
  ....
    <zeroOrMore>
       <choice>
         <attribute>
           <anyName/>
         </attribute>
         <text/>
       </choice>
    </zeroOrMore>
</element>

Ce schema indique que l'élément peut contenir n'importe quel attribut OU 
un noeud text, et ce en un nombre indéterminé. D'une manière générale, 
le problème existe avec ce schema :

<element>
  ....
    <zeroOrMore>
       <choice>
         <pattern_quelconque />
         <text/>
       </choice>
    </zeroOrMore>
</element>

ou même

<element>
    <zeroOrMore>
       <text/>
    </zeroOrMore>
</element>

imaginons alors par exemple cette balise :
<foo />

comme il n'y a pas d'attribut le pattern <text /> s'applique, et est 
finalement positif (puisque valide l'absence de noeud text).
Du coup <zeroOrMore> est valide.
Bien sûr, puisque "zero ou plus", il faut vérifier  une nouvelle fois 
que les sous-patterns de zeroOrMore ne valident pas encore une fois. 
D'où, une boucle dans mon implementation.

Mais voilà, dans ce cas précis : ça tourne en boucle indéfiniement 
puisque le pattern <text /> valide toujours.

Donc je m'interroge :
- un "bug" dans les specs de RelaxNG ?
- une mauvaise interpretation de ma part au sujet de <text/> ou de 
<zeroOrMore /> ? (ou même <oneOrMore> puisque le problème existe aussi 
avec lui)
- mon implémentation est-elle incorrecte ? Mais alors, quand arreter 
cette boucle ? Quand est ce que le pattern <zeroOrMore> ne devrait-il 
plus "matcher" dans ce cas ?


Merci d'avance pour vos idées..


Laurent Jouanneau




<Prev in Thread] Current Thread [Next in Thread>