Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertion XML=>SGBDR

12 réponses
Avatar
Alain Montfranc
Bonjour à tous

J'ai été amené à travailler recement sur des problématiques de
conversion XML=>SGBDR (en gros pour comparer le contenu d'un SGBD avec
le contenu d'un systeme documentaire).

Je n'ai pas vraiment trouvé d'outils (gratuits) me permattant de faire
ca (mais probablement ai je mal cherché).

J'ai donc bricole quelques outils maison qui reconstruisent le modele
relationnel implicite contenu dans un ensemble d'objets XML.

C'est du "maquette version Q&D" mais pensez vous que cela vaille le
cou[pt] d'être nettoyé/documenté/distribué ?

merci de vos retours

10 réponses

1 2
Avatar
Alain Montfranc
helios a écrit

Tu pretends avoir un fichier de test de 200 Mo qui ferait echouer ma
moulinette. Merci de le communiquer ou de communiquer un moyen de le
générer (dans un langage comme C ou shell svp).




je te l'ai donner dans en basic qui est le language le plus distribue au
monde (1 exemplaire dans chaque systeme microsoft depuis 1981 mSDOS a WINDOWS
VISTA)
a toi de convertir dans le language de ton choix mais pour moi le C etant
moins performant que le databasic des SGBDRMV je n'ai pas perdu de temp a
l'apprendre (il a exister un compilateur C sous SGBDRMV donc le seul
utilisateur a ete la boite qui l'avait produit)



Une fois le fichier en ma possession je publierai les resultats de manière
objective.





je t ai detaille la structure precise dans le post suivant alors fait toi un
fichier test repondant si tu veux pas utilise la routine basic pour le creer



Le fichier de test que tu proposes ne fait pas les 200 Mo annoncés mais
bcp plus.

Il contient en effet 15000 * 64 * 360 * 64 éléments terminaux, soient
22118400000 "feuilles"

Donc, premiere remarque : tu contredis ton affirmation qu'un simple
fichier de 200 Mo suffirait à planter mon truc puisque tu es obligé de
sortir un machin énorme pour tenter de prouver tes dire.

Ensuite, le probleme que tu poses est un simple probleme de stockage
car la structure de ton exemple est simplissime en SGBD classique :

Une premiere table de 15000 lignes, chaque ligne est identifiée par un
id unique

Une seconde table liée à la premiere par cet Id, contenant 64 ligne
pour chaque Id, chaque ligne ayant elle meme un identifiant unique (de
1 à 15000 * 64 donc)

Puis une troisieme table liée à la seconde, etc...

Bref ton machin se resume à 4 tables lies entre elles, par des milliers
:-D

lol

vachement utile le multivalué...
Avatar
Alain Montfranc
helios a écrit

je reformules



halon y


le fichier epasqy.xml

contient 15000 occurrences



oui


chaque occurrence contient entre 1 et 64 sous occurrence

chaque sous occurrence contient entre 1 et 360 sous sous occurrence

chaque sous sous occurrence contient entre 1 et 64 sous sous sous occurrence

et une des occurrences a 64 sous occurrences ddonc une qui contient 360 sous
sous occurrence donc une contient 64 sous sous sous occurrences


ce qui en structure mono value

oblige a créer une table de 15000 ligne pointant sur 1 a 64 tables chacune



non, pas besoin de 64 tables, une suffit


snip le reste des élucubrations.
Avatar
helios
helios a écrit :
helios a écrit :
Alain Montfranc a écrit :
helios a écrit
Alain Montfranc a écrit :
helios a écrit

A priori il n'y a pas 1474560 tables dans ton exemple, mais 1
table à 64 lignes liée à une table dont un identifiant correspond
à 360 valeurs (relation 1...360) liée à une table par une
relation 1...64. Je pense que tu confonds valeur et table.



non il y a 15000 item donc un a 64 valeurs donc une a 360 sous
valeur donc une a 64 sous sous valeur

les valeurs sont differente d'un item a l'autre


ce qui donne 1 table de 15000 lignes ......



Ce qui est minuscule :-D

Mais tu parlaius de 17000 tables. Elles sont ou ?




15000 lignes de 64 valeurs qui ont chacune 360 lien et

360 fichiers ayant chacun 64 liens vers 64 fichiers ce qui donne un
total de 15000*64*360*64 tables pour avoir une achitecture type
monovalué




Mais j'interprete peut etre mal ton français approximatif, aussi le



un item est ce que tu appelle une ligne



si tu veux

TABLE divisé en item (ligne) divise en valeur (colonne)



si tu veux

divise en sous valeur



ou en un lien vers une autre table





ce qui fait ici 15000*64 liens vers le meme nombre de tables

divise en sous sous valeur ......



ou un autre lien






ce qui fait ici 15000*64*360 liens vers le meme nombre de tables puis

ce qui fait ici 15000*64*360*64 liens vers le meme nombre de tables

meilleur moyen serait que tu donnes un fichier test.

T'as qu'à anonymiser le fichier en question.



un fichier test de 200Mo :-)



Pour info mon fichier de test fait 1,7 Go, alors tes 200 Mo...

Je serai vraiment interssé par un test de ma moulinette. A ce stade
de la discussion je reste persuadé que ton fichier passera sans
probleme. Je ne demande qu'a avoir un jeu de test qui me
permettrait soit de reconnaitre publiquement l'infériorité des SGBD
classique (postgresql en l'occurence), soit...

Mais tu as peut etre peur du resultat ? :-D




cree un fichier xml ayant 15000 occurence contenant chacune 64 sous
ocurence de 360 sous sous occurences de 64 sous sous sous occurences




T'as changé :-)

Là tu as 15000 * 64 * 360 * 64 = 22118400000 valeurs au bout

Ton fichier faisant 200 Mo ca laisse
0,0094814814814814814814814814814815 octet par donnée sans compter la
place prise par les balises XML....

Ta proposition est incohérente avec tes affirmations

Ou alors voulais tu dire (cf. ton premier discours) :

Cree un fichier XML ayant 15000 occurences dont *une* contient 64
sous ocurence dont une contient 360 sous sous occurences dont une
contient 64 sous sous sous occurences






je reformules

le fichier epasqy.xml

contient 15000 occurrences

chaque occurrence contient entre 1 et 64 sous occurrence

chaque sous occurrence contient entre 1 et 360 sous sous occurrence

chaque sous sous occurrence contient entre 1 et 64 sous sous sous
occurrence

et une des occurrences a 64 sous occurrences ddonc une qui contient 360
sous sous occurrence donc une contient 64 sous sous sous occurrences


ce qui en structure mono value

oblige a créer une table de 15000 ligne pointant sur 1 a 64 tables
chacune qui elle même pointe sur 1 a 360 tables chacune qui pointe elle
même sur 1 a 64 tables chacune


admettons que chaque ligne pointe en moyenne sur 6 tables de niveau1

admettons que chaque table de niveau 1 pointe en moyenne sur 36 tables
de niveau2

admettons que chaque table de niveau2 pointe sur 6 table de niveau3


cela donne quand même 15000x6x36x6 table soit 19440000 table a créer

la réalité pour appeler les occurrences par leur nom le fichier EPASQY
contient la liste de 15000 terrains issus du regroupement de 1 a 64 lots
qui étaient constitué de 1 a 360 parcelles qui provenaient de la fusion
de 1 a 64 terrains

alors comment réagi ta moulinette pour transformer ce genre de fichier
xml en base monovalué ? forfait ?






l'occurence monstrueuse est un centre commercial constitué de 64 lots
donc un lot (parking) est le regroupement de 360 groupes de places de
parking donc un avait ete creer par l'achat de 64 terrains
Avatar
helios
Alain Montfranc a écrit :
helios a écrit

Tu pretends avoir un fichier de test de 200 Mo qui ferait echouer ma
moulinette. Merci de le communiquer ou de communiquer un moyen de le
générer (dans un langage comme C ou shell svp).




je te l'ai donner dans en basic qui est le language le plus distribue
au monde (1 exemplaire dans chaque systeme microsoft depuis 1981 mSDOS
a WINDOWS VISTA)
a toi de convertir dans le language de ton choix mais pour moi le C
etant moins performant que le databasic des SGBDRMV je n'ai pas perdu
de temp a l'apprendre (il a exister un compilateur C sous SGBDRMV donc
le seul utilisateur a ete la boite qui l'avait produit)



Une fois le fichier en ma possession je publierai les resultats de
manière objective.





je t ai detaille la structure precise dans le post suivant alors fait
toi un fichier test repondant si tu veux pas utilise la routine basic
pour le creer



Le fichier de test que tu proposes ne fait pas les 200 Mo annoncés mais
bcp plus.

Il contient en effet 15000 * 64 * 360 * 64 éléments terminaux, soient
22118400000 "feuilles"

Donc, premiere remarque : tu contredis ton affirmation qu'un simple
fichier de 200 Mo suffirait à planter mon truc puisque tu es obligé de
sortir un machin énorme pour tenter de prouver tes dire.

Ensuite, le probleme que tu poses est un simple probleme de stockage car
la structure de ton exemple est simplissime en SGBD classique :

Une premiere table de 15000 lignes, chaque ligne est identifiée par un
id unique


Une seconde table liée à la premiere par cet Id, contenant 64 ligne pour
chaque Id, chaque ligne ayant elle meme un identifiant unique (de 1 à
15000 * 64 donc)




non 15000 seconde tables de 64 lignes

les constituant de chaque occurence sont different d'une occurence a l'autre



Puis une troisieme table liée à la seconde, etc...





non 15000*64*360 troisieme table

les constituant de chaque occurence sont different d'une occurence a l'autre


Bref ton machin se resume à 4 tables lies entre elles, par des milliers :-D






non 15000*64*360*64 table de niveau 4


lol

vachement utile le multivalué...





en realite comme expliqué tu as


une table de 15000 lignes pointant chacun sur 1 a 64 tables admetons en
moyenne 6

donc nous avons 90000 table de niveau 2 pointant sur 1 a 360 tables
niveau3 en moyenne admetons 36

donc nous avons 36*90000 table de niveau 3 qui pointe sur 1 a 64 table
de niveau4 admeton en moyenne 6

nous avons donc 6*36*90000 tables de niveau4 soit environ 20000000 de
table de niveau 4


voila
Avatar
Denis Bitouzé
Le Wed, 22 Nov 2006 14:06:19 +0100
helios a écrit :

360 groupes de places de parking donc un avait ete [...]



Pourrais-tu faire la distinction entre « donc » et « dont ». Ça
fait plusieurs fois que tu fais la faute et ça rend la lecture de tes
messages encore plus... euh, difficile.
--
Denis
Avatar
helios
Alain Montfranc a écrit :
helios a écrit

je reformules



halon y


le fichier epasqy.xml

contient 15000 occurrences



oui


chaque occurrence contient entre 1 et 64 sous occurrence

chaque sous occurrence contient entre 1 et 360 sous sous occurrence

chaque sous sous occurrence contient entre 1 et 64 sous sous sous
occurrence

et une des occurrences a 64 sous occurrences ddonc une qui contient
360 sous sous occurrence donc une contient 64 sous sous sous occurrences


ce qui en structure mono value

oblige a créer une table de 15000 ligne pointant sur 1 a 64 tables
chacune



non, pas besoin de 64 tables, une suffit


snip le reste des élucubrations.






premier terrain pointe vers 64lots
deuxieme terrain pointe vers 64lot different des 64 premiers

chaque lot est une tables comment tu fait pour avoir 64 table lot pour
les 15000 terrains ?

les 1 a 64 liens pointe sur des table differentes une table de niveau2
est rarement dans deux lignes differentes (il est rare qu'un meme lot
entre dans la composition de deux terrains vendu)

apres pour chaque lot il est rare qu'une meme parcelle soit dans
plusieur lot

apres il est rare que un meme terrain acheté est formé plusieur lot

bref il ya presque pas de doublon dans les destinations des liens a
chaque niveau

exemple

occ 1 -> 1-64
occ 2 -> 65-96 37 38
occ 3 -> 38 97-150
-
-
occ 15000 -> 75000-75032

pour les lien vers les table de niveau 2

table niveau 2

1 t1-t350
2 t351-t420 t15 t12
3 t421-t700 t15
-
-
75032 t13500760-t13500765 t12566

table niveau3

t1 -> tt1-tt64
t2 -> tt65-tt96 tt10 tt12
-
-
-
t13500765 ---------

table niveau 4


tt1 valeur1
tt2 valeur2
-
-
-
-
-
Avatar
helios
je presente autrement pour te faire comprendre avec des noms pour les
niveaux


niveau 1 tu_ as une liste de 15000 villes

niveau2 c'est les nom des quartiers des villes (1 a 64 quartiers par
villes) les quartiers des villes ne sont pas commun a plusieurs villes

niveau 3 les rue de chaque quartiers (1 a 360 rue par quartiers) les rue
appartienne a un seul quartiers et une seule ville

niveau4 les maisons de chaque rue (1 a 64 maison) les maisons son dans
une seule rue qui est dans un seul quartier qui est dans une seule ville

le nombre sera reduit par le fait que toute les ville n'ont pas 64
quartiers et que certain quartier peuvent etre limitrophe

que tout les quartiers n'ont pas 360 rue et que des rues sont limitrophe

que toute les rue n'ont pas 64 maisons et que des maisons sont limitrophe



si on prend que la moyenne des liens a chaque niveau est de 10% du
maximal on obtient qu'il faut presque 20000000 de table descriptiff de
maisons 3 millions de table rue 90000 table quartiers pour 15000 villes

compris le probleme en fichier mono valué ?
Avatar
Alain Montfranc
helios a écrit
je presente autrement pour te faire comprendre avec des noms pour les niveaux


niveau 1 tu_ as une liste de 15000 villes

niveau2 c'est les nom des quartiers des villes (1 a 64 quartiers par villes)
les quartiers des villes ne sont pas commun a plusieurs villes




Et alors ? L'unité semantique "quartier" est la meme quelque soit la
ville, c'est le rattachement qui differe c'est tout !
Avatar
ALain Montfranc
helios a écrit
ALain Montfranc a écrit :
helios a écrit

Donc en préliminaire tu admets avoir eu tord ?





il n'y a pas besoin non plus d'avoir un camion pour transporter plusieurs
dizaine de tonne de sable une brouette peut le faire :-)



Pourtant tu disais :

XML est multivalué il te *faut* donc utilise un SGBDR multivalué
*sinon* tu as une perte d'information















C'était donc faux ?



comme il y a pas besoin d'un camion parce que une brouette peut le remplacer



Non, une brouette peut *parfois* remplacer un camion, nuance...

Quel est donc l'interet des SGBD multivalués ? ;-)





quel est l'intérêt d'un camion ? ;-)



Il y a une difference : il existe des objets qu'une brouette ne peut pas
transporter (un arbre, une cuve à mazout de 3000 litres, etc...). Par
contra j'attends toujours un exemple de fichier XML que ma
brouette/moulinette ne sait pas gérer...




une brouette peut transporter un arbre aprés l'avoir découper avec une scie



repoussera pas...

ta moulinette ne geres pas elle decoupe ce qui est different
le fichier de 353ko n'est pas convertie en un fichier mais decouper en plus
de 100 fichier



Oh que non, il n'y a pas 100 tables... Réfléchis :-D

ta moulinette semble faire la conversion mais que donne en exploitation
le resultat ?







Ton objection d'origine était une hypothétique perte d'information. Tu
admets que c'était faux ?




a vérifier la non perte d'info le découpage a été fait mais cela ne prouve
rien d'autre que le découpage possible



En francais ca veut dire quoi ?

Si je te regenere le XML, ca te suffit a prouver la non perte d'infos ?
Avatar
ALain Montfranc
(supersedes )

helios a écrit
ALain Montfranc a écrit :
helios a écrit

Donc en préliminaire tu admets avoir eu tord ?





il n'y a pas besoin non plus d'avoir un camion pour transporter plusieurs
dizaine de tonne de sable une brouette peut le faire :-)



Pourtant tu disais :

XML est multivalué il te *faut* donc utilise un SGBDR multivalué
*sinon* tu as une perte d'information















C'était donc faux ?



comme il y a pas besoin d'un camion parce que une brouette peut le
remplacer



Non, une brouette peut *parfois* remplacer un camion, nuance...

Merci de relire ta phrase initiale et d'expliquer en quoi elle est
vraie...

Quel est donc l'interet des SGBD multivalués ? ;-)





quel est l'intérêt d'un camion ? ;-)



Il y a une difference : il existe des objets qu'une brouette ne peut pas
transporter (un arbre, une cuve à mazout de 3000 litres, etc...). Par
contra j'attends toujours un exemple de fichier XML que ma
brouette/moulinette ne sait pas gérer...



une brouette peut transporter un arbre aprés l'avoir découper avec une scie



repoussera pas...

ta moulinette ne geres pas elle decoupe ce qui est different
le fichier de 353ko n'est pas convertie en un fichier mais decouper en plus
de 100 fichier



Oh que non, il n'y a pas 100 tables... Réfléchis :-D

ta moulinette semble faire la conversion mais que donne en exploitation
le resultat ?







Ton objection d'origine était une hypothétique perte d'information. Tu
admets que c'était faux ?



a vérifier la non perte d'info le découpage a été fait mais cela ne prouve
rien d'autre que le découpage possible



En francais ca veut dire quoi ?

Si je te regenere le XML, ca te suffit a prouver la non perte d'infos ?
1 2