2009-09-01 6 views
0

Mon application utilise une base de modèle sur un xsd qui a été convertie en ecore avant la génération des classes Java. Un membre de mon équipe a modifié le métamodèle .ecore dans une version précédente, un attribut qui était généré auparavant. Il a modifié le nom de l'attribut mais pas le méta-données étendu en spécifiant le nom de l'élément utilisé pour la persistance xml.EMF ecore et xsd désynchronisé, comment résoudre?

<eStructuralFeatures xsi:type="ecore:EReference" name="javaDocsAndUserApi" upperBound="-1" 
    eType="#//JavaDocsAndUserApi" containment="true" resolveProxies="false"> 
    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> 
    <details key="kind" value="element"/> 
    <details key="name" value="docsAndUserApi"/> 
    </eAnnotations> 
</eStructuralFeatures> 

donc nous avons un nom d'attribut qui est javaDocsAndUserApi et l'élément persistant nommé docsAndUserApi, et bien sûr si je crée changer l'attribut dans le xsd être nommé javaDocsAndUserApi, la transformation ecore sera générer un nom de métadonnées javaDocsAndUserApi également, ce qui rompt la compatibilité avec les modèles précédemment conservés.

J'ai regardé guide de création de XSD pour trouver un ecore: som_attribute qui me permettrait de spécifier quelle clé utiliser dans le XSD pour forcer les métadonnées à être nommé docsAndUserApi au cours de la xsd à Ecore transformation mais n'a pas trouvé n'importe quoi. Est-ce que quelqu'un a une idée pour m'aider?

Merci.

Répondre

1

Traiter des modèles (méta-) évolutifs n'est pas facile après tout. Il s'agit essentiellement de migrer des données d'un format (conforme à un modèle Ecore) vers un autre (conforme à un autre modèle Ecore). Vous pouvez appliquer des techniques de transformation de modèle telles que ATL et AMW. Cela vous permet de connecter (tisser) deux modèles Ecore (méta) (m1 et m2) et de générer automatiquement du code qui transforme les données du format m1 au format m2 et vice versa. (Voir here pour des documents de recherche très intéressants sur ce sujet.)

Une approche pragmatique pourrait être d'implémenter manuellement la transformation de modèle en utilisant EMF. Puisque les changements entre vos modèles sont simples, cela ne devrait pas être trop difficile à implémenter.

Questions connexes