Je me demandais si c'=E9tait une bonne id=E9e (si =E7a ne risquait pas de m=
e mener en enfer) de cr=E9er une
classe d=E9riv=E9e de XML::Twig qui impl=E9mente ainsi l'ajout de nouvelles=
ids.
sub createId {
my ($o, $node) =3D @_;
my $i =3D 0;
while (exists $node->twig->{twig_id_list}->{"_" . ++$i}){};
$node->twig->{twig_id_list}->{"_" . $i} =3D $node;
$node->set_id("_" . $i);
return "_" . $i;
}
Ce qui me m=E8ne =E0 une question, d'o=F9 je suis parti, en fait:
Pourquoi le support des ajouts d'ids est-il difficile =E0 impl=E9menter dan=
s XML::Twig?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Fri, 3 Jun 2005 12:07:12 +0200, nicolas // écrivait (wrote):
Je me demandais si c'était une bonne idée (si ça ne risquait pas de me mener en enfer) de créer une classe dérivée de XML::Twig qui implémente ainsi l'ajout de nouvelles ids.
Pour l'enfer, je ne me prononce pas... je préfère attendre la réponse de Michel (l'auteur de XML::Twig) ;-)
sub createId { my ($o, $node) = @_; my $i = 0; while (exists $node->twig->{twig_id_list}->{"_" . ++$i}){}; $node->twig->{twig_id_list}->{"_" . $i} = $node; $node->set_id("_" . $i); return "_" . $i; }
Ce qui me mène à une question, d'où je suis parti, en fait: Pourquoi le support des ajouts d'ids est-il difficile à implémenter dans XML::Twig?
La méthode 'add_id' génère un id automagiquement mais par une autre méthode (en fait par simple incrémentation d'une variable globale).
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à jour en permanence... mais je crois que ce n'est pas le cas tout le temps -- voire même pas du tout (c'est quand même pas évident à implémenter de manière efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou non).
Petit extrait de la doc (section BUGS) :
ID list The ID list is NOT updated when ID's are modified or elements cut or deleted.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 3 Jun 2005 12:07:12 +0200,
nicolas // <akuma@swing.be> écrivait (wrote):
Je me demandais si c'était une bonne idée (si ça ne risquait pas de me mener
en enfer) de créer une classe dérivée de XML::Twig qui implémente ainsi
l'ajout de nouvelles ids.
Pour l'enfer, je ne me prononce pas... je préfère attendre la réponse de
Michel (l'auteur de XML::Twig) ;-)
sub createId {
my ($o, $node) = @_;
my $i = 0;
while (exists $node->twig->{twig_id_list}->{"_" . ++$i}){};
$node->twig->{twig_id_list}->{"_" . $i} = $node;
$node->set_id("_" . $i);
return "_" . $i;
}
Ce qui me mène à une question, d'où je suis parti, en fait: Pourquoi le
support des ajouts d'ids est-il difficile à implémenter dans XML::Twig?
La méthode 'add_id' génère un id automagiquement mais par une autre méthode
(en fait par simple incrémentation d'une variable globale).
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à
jour en permanence... mais je crois que ce n'est pas le cas tout le temps --
voire même pas du tout (c'est quand même pas évident à implémenter de manière
efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou
non).
Petit extrait de la doc (section BUGS) :
ID list
The ID list is NOT updated when ID's are modified or
elements cut or deleted.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 3 Jun 2005 12:07:12 +0200, nicolas // écrivait (wrote):
Je me demandais si c'était une bonne idée (si ça ne risquait pas de me mener en enfer) de créer une classe dérivée de XML::Twig qui implémente ainsi l'ajout de nouvelles ids.
Pour l'enfer, je ne me prononce pas... je préfère attendre la réponse de Michel (l'auteur de XML::Twig) ;-)
sub createId { my ($o, $node) = @_; my $i = 0; while (exists $node->twig->{twig_id_list}->{"_" . ++$i}){}; $node->twig->{twig_id_list}->{"_" . $i} = $node; $node->set_id("_" . $i); return "_" . $i; }
Ce qui me mène à une question, d'où je suis parti, en fait: Pourquoi le support des ajouts d'ids est-il difficile à implémenter dans XML::Twig?
La méthode 'add_id' génère un id automagiquement mais par une autre méthode (en fait par simple incrémentation d'une variable globale).
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à jour en permanence... mais je crois que ce n'est pas le cas tout le temps -- voire même pas du tout (c'est quand même pas évident à implémenter de manière efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou non).
Petit extrait de la doc (section BUGS) :
ID list The ID list is NOT updated when ID's are modified or elements cut or deleted.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Michel Rodriguez
Paul Gaborit wrote: [...]
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à jour en permanence... mais je crois que ce n'est pas le cas tout le temps -- voire même pas du tout (c'est quand même pas évident à implémenter de manière efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou non).
Petit extrait de la doc (section BUGS) :
ID list The ID list is NOT updated when ID's are modified or elements cut or deleted.
En fait la liste des ID est mise a jour: - quand on parse un document (ou un element) - quand on utilise set_id
En plus, quand on enleve (avec cut ou delete) des element, Perl se debrouille assez bien, et les fait pointer sur undef.
Il reste quand meme quelques bugs, et je devrai fixer ca, c'est pas trop sorcier quand meme. En plus maintenant il faudrait que par defaut je considere xml:id comme un id.
Un petit bout de code pour te montrer l'etendue des degats, ce qui marche et ce qui marche pas trop.
#!/usr/bin/perl -w use strict; use XML::Twig;
my $t= XML::Twig->new->parse( *DATA); dump_ids( $t, "tout va bieng"); my $e1= $t->elt_id( "e1"); $e1->del_id(); dump_ids( $t, "normal"); $e1->set_id( "e4"); dump_ids( $t, "toujours normal");
{ my $ee1= $t->elt_id( "ee1"); $ee1->cut; dump_ids( $t, "ee1 est toujours la"); } dump_ids( $t, "ee1 est toujours dans la liste mais pointe vers undef (ca je vais pas reparer)");
$t->elt_id( "e2")->set_id( "e5"); dump_ids( $t, "Oops! e2 devrait avoir disparu. Bug, sera reparee dans pas longtemps");
my $ne1= $t->root->insert_new_elt( elt => { id => "ne1", vid => "vne1"}); dump_ids( $t, "ne1 n'est pas encore la (ca je peux corriger"); $ne1->set_id( "ne1"); dump_ids( $t, "ne1 arrive");
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à
jour en permanence... mais je crois que ce n'est pas le cas tout le temps --
voire même pas du tout (c'est quand même pas évident à implémenter de manière
efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou
non).
Petit extrait de la doc (section BUGS) :
ID list
The ID list is NOT updated when ID's are modified or
elements cut or deleted.
En fait la liste des ID est mise a jour:
- quand on parse un document (ou un element)
- quand on utilise set_id
En plus, quand on enleve (avec cut ou delete) des element, Perl se
debrouille assez bien, et les fait pointer sur undef.
Il reste quand meme quelques bugs, et je devrai fixer ca, c'est pas trop
sorcier quand meme. En plus maintenant il faudrait que par defaut je
considere xml:id comme un id.
Un petit bout de code pour te montrer l'etendue des degats, ce qui
marche et ce qui marche pas trop.
#!/usr/bin/perl -w
use strict;
use XML::Twig;
my $t= XML::Twig->new->parse( *DATA);
dump_ids( $t, "tout va bieng");
my $e1= $t->elt_id( "e1");
$e1->del_id();
dump_ids( $t, "normal");
$e1->set_id( "e4");
dump_ids( $t, "toujours normal");
{
my $ee1= $t->elt_id( "ee1");
$ee1->cut;
dump_ids( $t, "ee1 est toujours la");
}
dump_ids( $t, "ee1 est toujours dans la liste mais pointe vers undef (ca
je vais pas reparer)");
$t->elt_id( "e2")->set_id( "e5");
dump_ids( $t, "Oops! e2 devrait avoir disparu. Bug, sera reparee dans
pas longtemps");
my $ne1= $t->root->insert_new_elt( elt => { id => "ne1", vid => "vne1"});
dump_ids( $t, "ne1 n'est pas encore la (ca je peux corriger");
$ne1->set_id( "ne1");
dump_ids( $t, "ne1 arrive");
Votre méthode pourrait marcher *si* la liste 'twig_id_list' était maintenu à jour en permanence... mais je crois que ce n'est pas le cas tout le temps -- voire même pas du tout (c'est quand même pas évident à implémenter de manière efficace). Je laisse tout cela au conditionnel et Michel pourra confirmer (ou non).
Petit extrait de la doc (section BUGS) :
ID list The ID list is NOT updated when ID's are modified or elements cut or deleted.
En fait la liste des ID est mise a jour: - quand on parse un document (ou un element) - quand on utilise set_id
En plus, quand on enleve (avec cut ou delete) des element, Perl se debrouille assez bien, et les fait pointer sur undef.
Il reste quand meme quelques bugs, et je devrai fixer ca, c'est pas trop sorcier quand meme. En plus maintenant il faudrait que par defaut je considere xml:id comme un id.
Un petit bout de code pour te montrer l'etendue des degats, ce qui marche et ce qui marche pas trop.
#!/usr/bin/perl -w use strict; use XML::Twig;
my $t= XML::Twig->new->parse( *DATA); dump_ids( $t, "tout va bieng"); my $e1= $t->elt_id( "e1"); $e1->del_id(); dump_ids( $t, "normal"); $e1->set_id( "e4"); dump_ids( $t, "toujours normal");
{ my $ee1= $t->elt_id( "ee1"); $ee1->cut; dump_ids( $t, "ee1 est toujours la"); } dump_ids( $t, "ee1 est toujours dans la liste mais pointe vers undef (ca je vais pas reparer)");
$t->elt_id( "e2")->set_id( "e5"); dump_ids( $t, "Oops! e2 devrait avoir disparu. Bug, sera reparee dans pas longtemps");
my $ne1= $t->root->insert_new_elt( elt => { id => "ne1", vid => "vne1"}); dump_ids( $t, "ne1 n'est pas encore la (ca je peux corriger"); $ne1->set_id( "ne1"); dump_ids( $t, "ne1 arrive");
Merci pour ces réponses, que je vais examiner -- désolé de ne pas avo ir répondu plus tôt: je n'ai pas eu d'accès internet pendant quelques jours.
-- nicolas //
nicolas //
Le Fri, 10 Jun 2005 19:06:24 +0200 Michel Rodriguez a écrit:
nicolas // wrote:
Merci pour ces réponses, que je vais examiner -- désolé de ne pas avoir répondu plus tôt: je n'ai pas eu d'accès internet pendant quelques jours.
Pas de probleme.
Incidemment la gestion des ids est legerement amelioree dans la version de developement de XML::Twig ( http://xmltwig.com/xmltwig/ ): changer un id (avec set_id, set_att ou set_atts), creer un nouvel element avec un id, par un new ou par un parse mettent a jour la liste des id.
Regarde les tests dans t/test_bugs_3.18.t
Au passage ca m'a fait decouvrir que "0" est un id tout a fait valable, d'ou correction de quelques bugs dans mon code :--)
-- mirod
merci -- nicolas //
Le Fri, 10 Jun 2005 19:06:24 +0200
Michel Rodriguez <mirod@mirod.org> a écrit:
nicolas // wrote:
Merci pour ces réponses, que je vais examiner -- désolé de ne pas avoir répondu plus tôt: je
n'ai pas eu d'accès internet pendant quelques jours.
Pas de probleme.
Incidemment la gestion des ids est legerement amelioree dans la version
de developement de XML::Twig ( http://xmltwig.com/xmltwig/ ): changer un
id (avec set_id, set_att ou set_atts), creer un nouvel element avec un
id, par un new ou par un parse mettent a jour la liste des id.
Regarde les tests dans t/test_bugs_3.18.t
Au passage ca m'a fait decouvrir que "0" est un id tout a fait valable,
d'ou correction de quelques bugs dans mon code :--)
Le Fri, 10 Jun 2005 19:06:24 +0200 Michel Rodriguez a écrit:
nicolas // wrote:
Merci pour ces réponses, que je vais examiner -- désolé de ne pas avoir répondu plus tôt: je n'ai pas eu d'accès internet pendant quelques jours.
Pas de probleme.
Incidemment la gestion des ids est legerement amelioree dans la version de developement de XML::Twig ( http://xmltwig.com/xmltwig/ ): changer un id (avec set_id, set_att ou set_atts), creer un nouvel element avec un id, par un new ou par un parse mettent a jour la liste des id.
Regarde les tests dans t/test_bugs_3.18.t
Au passage ca m'a fait decouvrir que "0" est un id tout a fait valable, d'ou correction de quelques bugs dans mon code :--)