Bonjour
Je suis amené à transformer des fichiers XSD en un ensemble de tables relationnels. Je m'explique : par exemple le fichier XSD nous renseigne que le fichier xml doit contenir une balise englobante "comptes" et plusieurs sous balises (unbounded en XSD) "compte" qui contiennent à leurs tour un nombre illimité de mouvements :
Et voici un exemple d'instance XML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="comptes"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="compte"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="compte"> <xs:complexType> <xs:sequence> <xs:element ref="id"/> <xs:element ref="solde"/> <xs:element ref="mouvements"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="id" type="xs:integer"/> <xs:element name="solde" type="xs:integer"/> <xs:element name="mouvements"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="mouvement"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="mouvement"> <xs:complexType> <xs:sequence> <xs:element ref="date"/> <xs:element ref="flux"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="date" type="xs:integer"/> <xs:element name="flux" type="xs:integer"/> </xs:schema>
Dans ce cas le résultat désiré doit être deux tables une table "compte" et une table mouvements avec une migration de la clé étrangère de la table compte vers mouvements. Ainsi dans un compte on peut avoir plusieurs mouvements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?xml version="1.0" encoding="UTF-8"?> <comptes> <compte> <id>213</id> <solde>2515</solde> <mouvements> <mouvement> <date>11122008</date> <flux>5454</flux> </mouvement> <mouvement> <date>02022010</date> <flux>545</flux> </mouvement> <mouvement> <date>15012011</date> <flux>555</flux> </mouvement> </mouvements> </compte> <compte> <id>213</id> <solde>2515</solde> <mouvements> <mouvement> <date>11122008</date> <flux>5454</flux> </mouvement> <mouvement> <date>02022010</date> <flux>545</flux> </mouvement> <mouvement> <date>15012011</date> <flux>555</flux> </mouvement> </mouvements> </compte> </comptes>
J'utilise le langage Java. Normalement c'est faisable avec Jdom par exemple, mais j'aime bien avoir une solution plus rapide .j'ai pensé par exemple à faire un mapping xml objet (ici je dit un mapping XML objet et non pas XSD objet car je peux travailler sur une instance XML complète) et puis un mapping objet relationnel (hibernate...). Je ne sais pas s'il y a d'autres solutions qui peuvent m'aider plus ou des librairies traitants déjà le mapping XSD ou XML relationnels.
Merci de votre aide.
Partager