Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

xml tech : Technologies XML

[xml-tech] Re: Validation RelaxNG: problème avec le pattern text

[xml-tech] Re: Validation RelaxNG: problème avec le pattern text

Auteur: Eric van der Vlist <vdv@dyomedea.com>
Date: 07/03/2005 - 17:46
X-Mailer: Evolution 2.0.2

Le lundi 07 mars 2005 à 18:20 +0100, Laurent Jouanneau a écrit :

...

> >James Clark décrit une méthode dite "par dérivation" adaptée de celles
> >qui permettent d'écrire des processeurs d'expressions régulières : en
> >gros, on calcul la "dérivée" du schéma par le document en enlevant du
> >schéma ce que l'on trouve dans le document et le document est valide si
> >l'on n'a détecté aucune erreur pendant la validation et si tout ce qui
> >reste dans le schéma à la fin de la validation est optionnel.
> >
> >
> J'aurais du poser la question plutôt : qu'est ce que la méthode par
> dérivation ? Vous avez reussi à m'expliquer en quelques mots ce que j'ai
> tenté de comprendre dans les nombreuses pages de James Clark pendant
> longtemps :-)
>
> Donc oui, effectivement, je n'ai pas utilisé un algorithme par
> dérivation comme James Clark. En gros, mon implémentation lit le schema
> RelaxNG pour produire une serie de graphe (deterministes). Ensuite,
> lorsque j'ai besoin de valider, un automate lit/execute ces graphes.
> Chaque noeud du graph teste quelque chose (un noeud DOM, text ou
> element, un attribut...), et si le test est ok, le noeud DOM ou
> l'attribut est enlevé d'une liste de noeud/attributs à valider. Si à la
> fin du parcours du graph, cette liste est non vide, ce n'est pas valide.

C'est plus clair :-) ...

D'après ce que je comprend, vous avez utilisé la méthode "classique"
pour implémenter un processeur de schéma qui repose sur un automate à
états finis.

Pour pouvoir être utilisable facilement tout en donnant des temps de
réponse linéaires, cette méthode impose un certain nombre de contraintes
sur le langage de schéma (notamment que les schémas soient
"déterministes"). W3C XML Schema a accepté ces contraintes mais RELAX
les a rejeté ce qui le rend plus difficile à implémenter avec cette
méthode et je me demande si vous ne tombez pas sur un de ces problèmes.

Ceci dit, Murata Makoto a réussi à écrire une implémentation reposant
sur des automates à états finis mais il a fait peu de communications sur
ce point (à part une démonstration où il a montré que cette
implémentation était suffisamment peu gourmande en mémoire pour tourner
sur son téléphone portable).

Il me semble que Daniel Veillard a également utilisé ce type
d'algorithme pour libxml et vous pourriez regarder de ce côté.

> Il m'a semblé que c'était une bonne méthode de faire, vis à vis de mes
> contraintes (pouvoir faire de la validation quasi temps-réèl, que ce
> soit sur des fragments de document ou sur un document entier).
> D'ailleurs, jusqu'au stade actuel (c'est à dire, presque terminé), cela
> a trés bien fonctionné. Jusqu'à ce que je tombe sur ce "bug"...

C'est une méthode qui semble en effet plus naturelle que celle de James
Clark mais celui-ci a montré avec le mode NXML pour Emacs que sa méthode
pouvait être adaptée pour une validation partielle en temps réel... Si
LISP vous inspire plus que Haskell, vous pouvez également regarder
cela :-) ...

> >En suivant ce principe, mon écriture de la dérivation d'un pattern
> >"oneOrMore" par un noeud est :
> >
> > def deriv(self, node):
> > pderiv = self.p.deriv(node)
> > if pderiv == notAllowed:
> > if self.p.nullable():
> > pderiv = self.savp.deriv(node)
> > if pderiv == notAllowed:
> > return pderiv
> > else:
> > self.p = pderiv
> > return self
> > else:
> > return pderiv
> > else:
> > self.p = pderiv
> > return self
> >
> >C'est à dire que je calcul la dérivée de la valeur actuelle du pattern
> >inclus dans le pattern "oneOrMore" par le noeud (pderiv =
> >self.p.deriv(node)).
> >
> >S'il n'y a pas d'erreur, je conserve cette valeur (c'est que l'on est
> >toujours dans la même "boucle" pour reprendre votre terminologie).
> >Sinon, je regarde s'il n'y avait que des patterns optionnels dans "la
> >boucle courante" (self.p.nullable()).
> >
> >Si ce n'est pas le cas il y a erreur, sinon je pars dans une nouvelle
> >boucle en dérivant la valeur initiale du pattern inclus dans le pattern
> >oneOrMore (pderiv = self.savp.deriv(node)).
> >
> >J'espère que vous pourrez adapter tout cela à votre propre
> >implémentation!
> >
> >
> Je ne sais pas. Mon validateur étant quasi terminé, implémenter votre
> algorithme reviendrait peut être à tout remettre en question :-/ Mais ça
> m'est en tout cas instructif, et peut-être que cela va m'aider à trouver
> une solution complète (car entre temps trouvée mais seulement en partie).

Tenez-nous au courant!

Merci,

Eric van der Vlist

-- 
Weblog:
                 http://eric.van-der-vlist.com/blog?t=category&a=English
------------------------------------------------------------------------
Eric van der Vlist       http://xmlfr.org            http://dyomedea.com
(ISO) RELAX NG   ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de 
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant 
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Mon Mar 7 18:46:30 2005

Archive générée par hypermail 2.1.8 le 31/03/2005 - 17:52 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement