IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Versioning de données XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [XSLT] Versioning de données XML
    Bonjour,

    Etant novice en xslt, je souhaiterai avoir votre aide sur une problématique de transformation.

    Je souhaite assurer la migration automatique de données XML répondant à un XSD donné vers un autre document XML répondant à une nouvelle version enrichie du XSD précédent (versionning).

    Lors de ce versionning, le modèle XSD peut subir quelques changements, i.e :
    - ajout ou suppression d'elements
    - déplacement d'elements (d'une structure complexe à une autre par ex.)


    Dans le cas de l'ajout d'element, la migration des valeurs XML initiales est triviale puisque la donnée n'existe pas initialement: elle est donc vide dans le docuement cible.
    Il en a de même pour la suppression, les données disparaissent du document XML cible.
    Par contre, pour ce qui concerne le déplacement d'un element, je pars de l'hypothèse qu'il conserve son nom et qu'il est donc possible de le copier dans le document cible à la place où il a été localisé dans le nouveau XSD (quelque soit son nouveau niveau d'imbrication).

    Un code XST generique permettrait-il ce genre de traitement ?
    J'ai vu en effet pas mal d'exemples où on mentionne directement le nom des elements dans la transformation. J'entends donc par générique un code qui se contenterait de copier les données XML sur base d'élements identiques entre les deux XSD.

    Merci pour votre aide.

    Cdt, E.

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    oui tu peux car en faite ce que tu souhaites faire est bien de transformer un xml Aavec un xsd A en un xml B ayant un xsd B
    amintenant je ne connais pas d'outil qui te ferrais cela tout seul

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Voilà ce que j'appelle faire avancer le débat

    Quelqu'un a-t-il un exemple de code XSLT assez générique pour traiter n'importe quelle balise connue à priori ?

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,
    Citation Envoyé par emorele Voir le message
    J'ai vu en effet pas mal d'exemples où on mentionne directement le nom des elements dans la transformation. J'entends donc par générique un code qui se contenterait de copier les données XML sur base d'élements identiques entre les deux XSD.
    Pour cela, si j'ai bien compris, il faudrait que le code XSLT soit capable :
    - "d'interpréter" les 2 XSD
    - d'inférer à partir de cette interprétation les opérations de copie à effectuer sur la source XML

    Cela pourrait être possible avec des schémas assez triviaux, mais la richesse des constructions possibles avec les WXS (dérivation par restriction/extension, groupes de substitution, etc.) empêche de l'envisager pour des schémas plus complexes.

    Pourrais-tu donner un petit exemple, afin d'être sûrs que l'on parle bien de la même chose ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par GrandFather Voir le message
    Bonjour,

    Pour cela, si j'ai bien compris, il faudrait que le code XSLT soit capable :
    - "d'interpréter" les 2 XSD
    - d'inférer à partir de cette interprétation les opérations de copie à effectuer sur la source XML

    Cela pourrait être possible avec des schémas assez triviaux, mais la richesse des constructions possibles avec les WXS (dérivation par restriction/extension, groupes de substitution, etc.) empêche de l'envisager pour des schémas plus complexes.

    Pourrais-tu donner un petit exemple, afin d'être sûrs que l'on parle bien de la même chose ?
    Bonjour,

    C'est tout à fait cela.
    - On doit introspecter les 2 xsd,
    - déduire les changements de structure (ajout, suppression, deplacement d'element)
    - migrer les données XML initiales (si elles existent) vers leur nouvel emplacement (sur base d'une nom d'element identique).

    Par contre, les schémas sont vraiment simples, pas d'extension/restriction ou autre complexité.

    Ci-joint un exemple:

    XSD version 1:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:element name="root">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="Titles" type="Title" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:complexType name="Title">
    		<xs:sequence>
    			<xs:element name="title_id" type="xs:int"/>
    			<xs:element name="pub_id" type="xs:int"/>
    			<xs:element name="au_id" type="xs:int"/>
    			<xs:element name="sales">
    				<xs:complexType>
    					<xs:sequence>
    						<xs:element name="unit_price" type="xs:decimal" minOccurs="0"/>
    						<xs:element name="total_sales" type="xs:decimal" minOccurs="0"/>
    					</xs:sequence>
    				</xs:complexType>
    			</xs:element>
    		</xs:sequence>
    	</xs:complexType>
    </xs:schema>
    XSD version 2:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:element name="root">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="Titles" type="Title" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    	<xs:complexType name="Title">
    		<xs:sequence>
    			<xs:element name="title_id" type="xs:int"/>
    			<xs:element name="name" type="xs:string"/>
    			<xs:element name="references">
    				<xs:complexType>
    					<xs:sequence>
    						<xs:element name="pub_id" type="xs:int"/>
    						<xs:element name="au_id" type="xs:int"/>
    					</xs:sequence>
    				</xs:complexType>
    			</xs:element>
    			<xs:element name="unit_price" type="xs:decimal" minOccurs="0"/>
    		</xs:sequence>
    	</xs:complexType>
    </xs:schema>
    Remarque:

    - L'element 'name' a été ajouté dans la version 2: il n'aura pas de valeur dans le docuement XML cible
    - Le complexe 'references' est ajouté dans Title: les elements pub_id et au_id sont descendus d'un niveau et gardent le même nom, les données sont également migrées vers leur nouvel emplacement.
    - le complexe 'sales' est remanié: l'element total_sales disparait et unit_price est remonté d'un niveau. Les données XML correspondantes sont déplacées à leur nouvel emplacement.

    J'espère que ces explications permettront d'y voir plus clair sur la problèmatique ...

    Cdt,

    E.

Discussions similaires

  1. [XSLT] Récupération de données XML et namespace
    Par dread38 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/05/2010, 15h48
  2. [XSLT] affichage des données d'un doc xml associé a un xslt
    Par khafor dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 12/11/2009, 10h48
  3. Réponses: 2
    Dernier message: 29/02/2008, 18h08
  4. [XSLT] Inclure les données d'un fichier XML dans un fichier
    Par SimOOn dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/04/2007, 16h26
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo