Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1274 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Comparaison/Test de "structure" XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparaison/Test de "structure" XML

n°2030660
lalalallal
Posté le 19-10-2010 à 19:50:39  profilanswer
 

Bonjour,
 
je me permet de vous contacter car je suis face au problème suivant
 
j'ai un XML du type
 
<Jouets>
  <Lego>
    <nom>Voiture</nom>
    <prix>12</prix>
    <modele>
      <couleur>rouge</couleur>
      <ref>A123RED</ref>
    </modele>
    <modele>
      <couleur>bleu</couleur>
      <ref>A123BLUE</ref>
   </modele>
  </Lego>
....
  <Lego>
    <nom>Train</nom>
    <prix>13</prix>
    <modele>
      <couleur>rouge</couleur>
      <ref>A142RED</ref>
    </modele>
  </Lego>
</Jouets>
 
et j'aimerai créer un script XSL qui compare cet arbre à un autre arbre théorique dont la structure est connue d'avance (contenu dans le XSL)
 
Par exemple pour la voiture si l'on devait avoir :
<Lego>
  <nom>Voiture</nom>
  <modele>
    <couleur>rouge</couleur>
    <ref>A123RED</ref>
  </modele>
  <modele>
    <couleur>vert</couleur>
    <ref>A123GRE</ref>
  </modele>
</Lego>
 
Le programme devra tester chacun des jouets du XML et détecter qu'il manque la couleur verte et que la couleur bleue est en trop.
Pour le train il ne fera rien car train <> voiture.
Bien entendu, il peut y avoir 1 voiture comme 300 dans le XML avec des prix différents.
 
Si quelqu'un pouvais m'aider ou au moins me donner des pistes de réflexions afin de résoudre ce problème ce serai vraiment cool.
 
Bonne soirée,
 
Lalalallal

mood
Publicité
Posté le 19-10-2010 à 19:50:39  profilanswer
 

n°2030771
rufo
Pas me confondre avec Lycos!
Posté le 20-10-2010 à 10:22:24  profilanswer
 

Tu devrais peut-être regarder du côté de XSD. Ca pourrait répondre à ton besoin...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2032656
lalalallal
Posté le 27-10-2010 à 19:12:00  profilanswer
 

Bonsoir,
 
Merci beaucoup pour la réponse mais j'ai finalement trouvé comment le faire ^^
 
Lalalallal

n°2032671
masklinn
í dag viðrar vel til loftárása
Posté le 27-10-2010 à 19:59:48  profilanswer
 

rufo a écrit :

Tu devrais peut-être regarder du côté de XSD. Ca pourrait répondre à ton besoin...


XSD = caca.
RNG = mieux.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032742
el muchach​o
Comfortably Numb
Posté le 28-10-2010 à 07:03:58  profilanswer
 

lalalallal a écrit :

Bonsoir,
 
Merci beaucoup pour la réponse mais j'ai finalement trouvé comment le faire ^^
 
Lalalallal


Et tu fais comment ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2032746
rufo
Pas me confondre avec Lycos!
Posté le 28-10-2010 à 09:31:53  profilanswer
 

masklinn a écrit :


XSD = caca.
RNG = mieux.


 
Je connais pas RNG. Tu parles de ça ?  http://fr.wikipedia.org/wiki/RNG   :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2032754
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 09:55:12  profilanswer
 

rufo a écrit :


 
Je connais pas RNG. Tu parles de ça ?  http://fr.wikipedia.org/wiki/RNG   :D


http://en.wikipedia.org/wiki/RelaxNG


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032773
esox_ch
Posté le 28-10-2010 à 10:50:10  profilanswer
 

Et niveau compatibilité avec les différents parsers ça donne quoi? Parce que c'est la première fois que j'en entends parler de ce RNG (par contre c'est vrai que la syntaxe à l'air vraiment cool)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2032798
rufo
Pas me confondre avec Lycos!
Posté le 28-10-2010 à 12:24:57  profilanswer
 

Effectivement, c'est moins verbeux. Par contre, côté parsers, ça risque d'être galère... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2032808
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 12:55:21  profilanswer
 

esox_ch a écrit :

Et niveau compatibilité avec les différents parsers ça donne quoi? Parce que c'est la première fois que j'en entends parler de ce RNG (par contre c'est vrai que la syntaxe à l'air vraiment cool)


http://www.relaxng.org/#validators

 

Perso j'utilise lxml (en Python), qui est une surcouche à libxml2, et comprend donc très bien le rng (pas le rnc par contre, donc faut traduire le source entre l'écriture et l'utilisation du schéma).

 

Il y a aussi nxml-mode pour emacs qui peut valider un fichier XML contre un schéma rnc (pas rng ce coup ci), et <oXygen> qui n'a il me semble pas de problème à comprendre (et valider contre) rng comme rnc.

 

Et la syntaxe est pas le seul truc que je trouve supérieur à XSD, je préfère aussi la sémantique: rng c'est du pattern matching, donc tu peux exprimer une contrainte genre "un élément 'a' contenant un attribut 'id' OU un élément 'id'" trivialement:

element a {
    ( attribute id { text }
    | element id { text })
}


et rng ne fait pas d'augmentation de l'infoset (un document est strictement le même qu'il ait été validé contre un rng ou pas, c'est pas le cas avec un XSD)

Message cité 1 fois
Message édité par masklinn le 28-10-2010 à 12:58:07

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 28-10-2010 à 12:55:21  profilanswer
 

n°2032821
rufo
Pas me confondre avec Lycos!
Posté le 28-10-2010 à 13:57:08  profilanswer
 

masklinn a écrit :


http://www.relaxng.org/#validators
 
Perso j'utilise lxml (en Python), qui est une surcouche à libxml2, et comprend donc très bien le rng (pas le rnc par contre, donc faut traduire le source entre l'écriture et l'utilisation du schéma).
 
Il y a aussi nxml-mode pour emacs qui peut valider un fichier XML contre un schéma rnc (pas rng ce coup ci), et <oXygen> qui n'a il me semble pas de problème à comprendre (et valider contre) rng comme rnc.
 
Et la syntaxe est pas le seul truc que je trouve supérieur à XSD, je préfère aussi la sémantique: rng c'est du pattern matching, donc tu peux exprimer une contrainte genre "un élément 'a' contenant un attribut 'id' OU un élément 'id'" trivialement:

element a {
    ( attribute id { text }
    | element id { text })
}


et rng ne fait pas d'augmentation de l'infoset (un document est strictement le même qu'il ait été validé contre un rng ou pas, c'est pas le cas avec un XSD)


 
Je suis pas sûr d'avoir bien compris le sens de cette phrase. Tu peux développer, svp?

Message cité 1 fois
Message édité par rufo le 28-10-2010 à 13:57:16

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2032831
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 14:27:47  profilanswer
 

rufo a écrit :

Je suis pas sûr d'avoir bien compris le sens de cette phrase. Tu peux développer, svp?


Bien sûr.
 
Un infoset XML, c'est l'ensemble des informations contenues dans un document XML (nb: tu peux aussi créer un infoset programatiquement sans avoir de document physique derrière) bien formé et correctement namespacé (ordre des nodes, contenu textuel, valeur des attributs, ...). D'après la spec w3c sur les infosets, un document a un infoset même s'il n'est pas validé par un schéma:

Citation :

There is no requirement for an XML document to be valid in order to have an information set.


XSD a hérité de DTD deux fonctionnalités — @fixed et @default — qui permettent de définir dans le schéma des valeurs pour des éléments ou attributs d'un document XML si celles-ci sont absentes. C'est pratique parce que ça permet, justement, de définir des valeurs par défaut.
 
Sauf que derrière selon que le parseur utilisé est validant ou pas, et selon que tu aies validé ou non ton document, tu n'auras pas les mêmes données. Sans compter que les valeurs injectées dépendent d'un schéma distant lié par une URL arbitraire, qui peut être modifié ou spoofé sans contrôle par la personne consommant le document. Ça diminue donc très fortement la portabilité, la flexibilité et la sécurité du document.
 
Parce que RNG n'augmente pas l'infoset, soit les données sont intégralement présentes dans le document soit cette connaissance des valeurs par défaut et autres est dans le code applicatif. Dans tous les cas, que le document ait été validé ou pas il aura strictement le même contenu.
 
Et perso je préfère ça.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032835
esox_ch
Posté le 28-10-2010 à 14:36:18  profilanswer
 

À oué j'avais pas pensé au cas d'un spoof :ouch:
Pas mal ... je garde ce RNG dans un coin de ma tête pour la prochaine fois !


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2032850
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 15:02:27  profilanswer
 

esox_ch a écrit :

À oué j'avais pas pensé au cas d'un spoof :ouch:


En toute honnêteté, c'est loin d'être le plus gros risque du monde, la non portabilité due à la différence entre l'infoset validé et l'infoset non validé me gène plus perso.
 
Et le fait que les XSD soit totalement illisibles :D


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032854
esox_ch
Posté le 28-10-2010 à 15:07:51  profilanswer
 

C'est déjà nettement moins pire que le DTD à mon sens  [:spamafote]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2032855
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 15:09:51  profilanswer
 

esox_ch a écrit :

C'est déjà nettement moins pire que le DTD à mon sens  [:spamafote]


Chuis pas d'accord. DTD est moins puissant mais beaucoup plus simple à lire.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2032860
rufo
Pas me confondre avec Lycos!
Posté le 28-10-2010 à 15:24:47  profilanswer
 

masklinn a écrit :


Bien sûr.
 
Un infoset XML, c'est l'ensemble des informations contenues dans un document XML (nb: tu peux aussi créer un infoset programatiquement sans avoir de document physique derrière) bien formé et correctement namespacé (ordre des nodes, contenu textuel, valeur des attributs, ...). D'après la spec w3c sur les infosets, un document a un infoset même s'il n'est pas validé par un schéma:

Citation :

There is no requirement for an XML document to be valid in order to have an information set.


XSD a hérité de DTD deux fonctionnalités — @fixed et @default — qui permettent de définir dans le schéma des valeurs pour des éléments ou attributs d'un document XML si celles-ci sont absentes. C'est pratique parce que ça permet, justement, de définir des valeurs par défaut.
 
Sauf que derrière selon que le parseur utilisé est validant ou pas, et selon que tu aies validé ou non ton document, tu n'auras pas les mêmes données. Sans compter que les valeurs injectées dépendent d'un schéma distant lié par une URL arbitraire, qui peut être modifié ou spoofé sans contrôle par la personne consommant le document. Ça diminue donc très fortement la portabilité, la flexibilité et la sécurité du document.
 
Parce que RNG n'augmente pas l'infoset, soit les données sont intégralement présentes dans le document soit cette connaissance des valeurs par défaut et autres est dans le code applicatif. Dans tous les cas, que le document ait été validé ou pas il aura strictement le même contenu.
 
Et perso je préfère ça.


 
Merci pour ces précisions :jap: Effectivement, le fait que suivant le parser et que les données aient été validés ou pas, le doc XML soit différent est gênant :/
 
Pour la DTD, son principal pb était que c'était pas un doc xml :o Par contre, c'est vrai que c'était assez facile à lire. XSD est plus verbeux... Personne n'est parfait :lol:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2032868
esox_ch
Posté le 28-10-2010 à 15:41:31  profilanswer
 

D'accord mais l'important c'est quand même le rapport puissance/complexité selon moi.
Du coup en DTD, c'est vrai que c'est un peu plus simple à lire que le XSD, mais t'es quand même vite limité.. Du coup je préfère encore utiliser un XSD qu'un DTD..
Par contre là ton RNG il me plait bien :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2032879
masklinn
í dag viðrar vel til loftárása
Posté le 28-10-2010 à 16:02:51  profilanswer
 

rufo a écrit :

Pour la DTD, son principal pb était que c'était pas un doc xml :o


C'est un avantage ça, pas un inconvénient.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Comparaison/Test de "structure" XML

 

Sujets relatifs
[VBA] fusionner 2 fichiers XMLCréer un fichier XML à partir d'un formulaire
Problème test if()Recherche de différences dans deux arbres XML
Wanted : Parser XML avec bonnes propriétésComparaison de deux mots
[VBA] Test de chaine de caractère sur une collectionComparaison de 2 colonnes dans 2 feuilles differentes
Windows clipboard et DROPFILE structurecomparaison de mots clés
Plus de sujets relatifs à : Comparaison/Test de "structure" XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR