8
votes

Comment utiliser EMF pour lire le fichier XML?

EMF = Cadre de modélisation Eclipse

Je dois utiliser EMF dans l'un de mes projets de classe. J'essaie de comprendre comment utiliser EMF pour effectuer ce qui suit:

  1. Lire XML,
  2. Obtenez les valeurs dans des objets.
  3. Utilisez Orm pour persister les valeurs des objets à la base de données. - fait
  4. Obtenez des données de la base de données à l'aide de ORM et générer XML.

    J'ai besoin de faire tout cela en utilisant: EMF (aucune idée de ce que jamais) et JPA (fait).

    J'ai utilisé Jaxb et je sais, cela peut être fait avec Jaxb, mais comment est (EMF == Jaxb) ?!

    J'ai créé de nombreuses classes Java en utilisant EMF, mais il y en a beaucoup! Où puis-je implémenter les méthodes de lecture / écriture et comment exécuter le projet EMF?

    merci

    update1 INDICE http://www.eclipsezone.com/eclipse/forums/t58829.html

    update2

    J'ai un schéma et j'ai généré le code modèle à l'aide de la .xsd .xsd. Maintenant, j'ai un problème dans la lecture des données du fichier XML.


4 commentaires

Je ne pense pas que EMF est conçu à cette fin. C'est une modélisation, pas un cadre contraignant


Il est utilisé pour la liaison XML, j'en suis sûr.


@Bozho - EMF est (ou peut être utilisé comme) un cadre de modélisation ou un cadre de liaison. Cela dépend de l'endroit où vous commencez à partir de ... et votre point de vue. (Il s'agit d'un aspect de la méta-modélisation qui est fréquemment mal compris. Les modèles peuvent être considérés comme des données, et inversement.)


@Stephen c Merci, bon à savoir.


5 Réponses :


1
votes

La manière habituelle de faire ce genre de chose est de commencer par un schéma XML, puis utilisez ceci pour générer le modèle EMF, puis générer un code Java. Ceci est décrit dans Ce tutoriel EMF < / a>.

Vous n'avez pas besoin de mettre en œuvre des méthodes de lecture / écriture. Plutôt, vous utilisez le code de la bibliothèque EMF pour effectuer l'importation XML et l'exportation. Je n'ai pas ma copie du livre EMF devant moi en ce moment, mais il est couvert là-bas. Alternativement, jetez un coup d'œil à ce que l'éditeur EMF généré effectue lorsque vous chargez ou enregistrez une instance de modèle.

Modifier

Voici un Classe d'utilitaire de ressources à partir d'une EMF projet que j'ai développé il y a quelques années. Regardez les méthodes chargez * . Notez que ce n'est pas nécessairement le meilleur moyen de le faire ... mais cela a fonctionné pour moi.

EDIT 2

Je viens de réaliser que j'utilisais XMI et non uni XML. Configuration d'un lecteur XML avec un schéma personnalisé et (potentiellement) un mappage de schéma personnalisé est susceptible d'être différent. Donc, retour à ma réponse d'origine, regarde le code généré !! .


1 commentaires

Pouvez-vous gimer un démarrage, quelle est la bibliothèque EMF qui a les méthodes pour lire / écrire des fichiers XML?



0
votes

EMF n'est pas conçu pour lire des fichiers XML arbitraires. EMF utilise XML comme backend. D'où viennent vos fichiers XML / quel schéma sont-ils conformes? Si vous avez le schéma, vous pouvez l'utiliser pour créer un modèle EMF, qui est à son tour capable de lire vos fichiers XML.

Sinon, vous devriez renvoyer l'ingénieur d'un modèle EMF qui seraient effectivement sérialisé à votre XML, Pour que vous puissiez le lire, mais ce serait un hack.

après la mise à jour2 :

Je suppose que la question suivante est alors " Quel problème avez-vous avec chargement de vos fichiers ». Comment faites-vous cela et qu'est-ce qui ne fonctionne pas? Ou vous ne savez pas comment le faire?

Vous devez d'abord configurer l'usine de votre ensemble de ressources (la représentation en mémoire de l'ensemble des fichiers que vous souhaitez utiliser), puis Chargez le fichier avec GetResource (URI, BOOL). Exemple Pour certains trucs UML, je fais: xxx

qui devrait tous être couvert dans le didacticiel que vous avez déjà le lien vers lequel vous avez déjà le lien. Ensuite, vous pouvez utiliser l'API Java générée pour travailler à partir de «racine».

Je n'ai aucune expérience avec le trucs orm, mais peut-être que vous devriez peut-être jeter un oeil à CDO .


1 commentaires

Oui, CDO ou Teneo mériterait d'être étudié lorsque vous souhaitez stocker des modèles EMF dans des bases de données. Teneo: Eclipse.org/modeling/emft/?project=teneo



5
votes

EMF Serialise le modèle de données utilisant (la manière la plus populaire par défaut) Xmiresourceimpl, qui utilise strictement le format XMI, et non une structure XML personnalisée .

Voir http://eclipsedriven.blogspot.com/ pour des articles sur EMF et ses cas d'utilisation.

Je suis d'accord avec les autres Les répondeurs que EMF n'est probablement pas ce que vous voulez ici.

Si je veux vraiment utiliser EMF avec une structure XML personnalisée (c.-à-d. non XMI), j'utiliserais probablement jaxb sur marshal / Memarshal Mes objets ( Eobjects).

SE EMF n'est donc pas identique à JAXB et qu'ils ont des objectifs et des objectifs différents. En fait, vous pouvez probablement combiner EMF et Jaxb d'une manière ou d'une autre. Je n'ai jamais essayé, mais il semble qu'il y ait des cas valides. (Comme je l'ai dit ci-dessus, pour le marshaling / la déshabation d'objets EMF à / à partir de XML)

Pour comprendre EMF, vous devez changer votre paradigme. Pour commencer, supprimez la partie "XML", laissez-la sortir de votre esprit. Ensuite, je vous suggère de faire ce qui suit:

  1. Créez un projet EMF vide.
  2. Créez un fichier ECORE simple (.ecore) ou obtenez-le à partir d'Internet. Ou importer à partir de n'importe quel fichier de schéma XML / UML dans un modèle ECORE.
  3. Cliquez avec le bouton droit de la souris sur une eclass, alors "Créer une instance dynamique", cela créera un fichier .xmi.
  4. Ouvrez le fichier .xmi, à l'aide de Eclipse, cela ouvrira l'éditeur EMF pour ce modèle. Modifier comme vous voyez FIT.
  5. Inspectez le contenu du fichier .xmi modifié (édité). Vous verrez que le format se conforme exactement au modèle Ecope. Vous ne serez pas en mesure de changer / personnaliser le mappage du fichier <-> XMI, car, comme le nom l'indique, Xmiresourceimpl ne longe / enregistre que les fichiers XMI (qui se déroulent en haut de XML), mais il ne lit pas / enregistré Format XML arbitraire.

    EMF a la prise en charge de la lecture / de la rédaction de Metamodels de schéma XML (dossiers XSD) dans le but de les convertir à un métamodèle Ecope, mais pas de fichiers XML conformes à un tel schéma. (Pas même à Ecore), à ​​moins que ces fichiers ne soient au format XMI.

    pour persister les modèles EMF dans une base de données relationnelle, voir: http://eclipsedRiven.blogspot.com/2010 /12/persisting-emf-Objects-à-rdbms-with.html

    J'utilise Teneo. (et éventuellement, CDO)

    concernant "XML", si vous vous tenez à XMI et que vous vous contentez, EMF rendra votre vie beaucoup plus facile, comme vous n'aurez pas besoin faire tout mappage (contrairement à Jaxb). L'inconvénient est que nos objets doivent être des objets EMF.

    Les objets EMF sont des objets générés par EMF et implémente EOBJECT et directement ou indirectement EXOBITIMPL. Vous ne voudriez généralement pas coder les objets EMF à la main, ce serait une corvée. D'autre part, les "objets" Jaxb sont généralement des pojos d'objets de domaine pure et n'ont aucune exigence supplémentaire de JAXB. Notez que contrairement à Jaxb, Les objets EMF ne sont pas des pojos. Ceci explique un autre objectif différent entre EMF et JAXB. Leur chevauchement est inférieur à ce que vous imaginiez.

    lecture de XMI (pas XML) est très facile: xxx


0 commentaires

14
votes

Vous pouvez lire des fichiers XML arbitraires avec EMF, à condition que vous disposiez du XSD pour eux, et vous n'avez même pas à générer des cours de Java depuis le XSD.
J'ai blogué à ce sujet il y a quelques mois, mais je collerai également les extraits de code ici aussi. Pour une explication légèrement plus détaillée, voir mon article de blog sur comment charger et comparer des fichiers XML arbitraires avec EMF .

Vous devez d'abord charger le XSD et initialiser un couple de choses: xxx

Après cela, vous pouvez charger vos fichiers XML comme vous le feriez normalement: xxx


1 commentaires

Bonjour @Zsolt Török - Quel paquet dois-je trouver ressourcesSetFactory dans?



2
votes

J'ai construit un petit programme qui fait une conversion de format de base de modèle utilisant EmftriPle (ancien EMF4SW), c'est-à-dire ECORE XMI (fichier XML) vers RDF TTL.

J'ai utilisé certains des conseils dans les réponses ici, alors merci les gars!

Peut-être que le code source peut vous inspirer: https://github.com/frostyandy2k/model-transformer < / a>


0 commentaires