Wie verwende ich EMF, um XML-Dateien zu lesen?

8

EMF = Eclipse Modeling Framework

Ich muss EMF in einem meiner Klassenprojekte verwenden. Ich versuche zu verstehen, wie man EMF benutzt, um folgendes zu tun:

  1. XML lesen,
  2. Hol die Werte in Objekte.
  3. Verwenden Sie ORM, um die Werte in Objekten für die Datenbank beizubehalten. - Fertig
  4. Holen Sie Daten aus der Datenbank mit ORM und generieren Sie XML.

Ich muss all das tun mit: EMF (keine Ahnung was auch immer) und JPA (DONE).

Ich habe JAXB verwendet und ich weiß, dies kann mit JAXB gemacht werden, aber wie ist (EMF == JAXB)?!

Ich habe viele Java-Klassen mit EMF erstellt, aber es gibt so viele! Wo implementiere ich die Lese- / Schreibmethoden und wie betreibe ich das EMF-Projekt?

Danke

UPDATE1 HINWEIS Ссылка

UPDATE2

Ich habe ein Schema und ich habe den Modellcode mit der .xsd generiert. Jetzt habe ich Probleme beim Lesen der Daten aus der XML-Datei.

    
zengr 30.03.2010, 09:09
quelle

5 Antworten

4

EMF serialisiert das Datenmodell mithilfe der (am häufigsten verwendeten) Standardmethode XMIResourceImpl, wobei ausschließlich das XMI-Format und keine benutzerdefinierte XML-Struktur verwendet.

Siehe Ссылка für Artikel über EMF und seine Anwendungsfälle.

Ich stimme anderen Bewertern zu, dass EMF wahrscheinlich nicht das ist, was Sie hier wollen.

Wenn ich wirklich EMF mit einer benutzerdefinierten XML-Struktur (d. h. nicht XMI) verwenden möchte, würde ich wahrscheinlich JAXB verwenden, um meine EMF-Objekte (EObjects) zu marshalieren / unmarshalen.

EMF ist also nicht dasselbe wie JAXB und sie haben unterschiedliche Ziele und Ziele. In der Tat können Sie wahrscheinlich EMF und JAXB in irgendeiner Weise kombinieren. Ich habe es noch nie versucht, aber es scheint, dass es gültige Anwendungsfälle gibt. (wie ich oben gesagt habe, um EMF-Objekte zu / von XML zu marshalieren / zu entpacken)

Um EMF zu verstehen, müssen Sie Ihr Paradigma ändern. Für den Anfang entfernen Sie den "XML" Teil, lassen Sie es aus Ihrem Kopf gehen. Dann empfehle ich Ihnen, Folgendes zu tun:

  1. Erstellen Sie ein leeres EMF-Projekt.
  2. Erstellen Sie eine einfache Ecore-Datei (.ecore) oder rufen Sie sie aus dem Internet ab. Oder importieren Sie aus einer beliebigen XML Schema / UML-Datei in ein Ecore-Modell.
  3. Klicken Sie mit der rechten Maustaste auf eine Klasse und dann auf "Dynamische Instanz erstellen". Dadurch wird eine .xmi-Datei erstellt.
  4. Öffnen Sie die .xmi-Datei mit Eclipse, um den EMF-Editor für dieses Modell zu öffnen. Bearbeiten Sie, wie Sie für richtig halten.
  5. Überprüfen Sie den Inhalt der (bearbeiteten) .xmi-Datei. Sie werden sehen, dass das Format genau dem Ecore-Modell entspricht. Sie können das Mapping von Modell & lt; - & gt; XMI-Datei, weil, wie der Name schon sagt, XMIResourceImpl nur XMI-Dateien liest / speichert (die zufällig über XML implementiert werden), aber es liest / speichert kein beliebiges XML-Format.

EMF unterstützt das Lesen / Schreiben von XML-Schema-Metamodellen (dh XSD-Dateien), um sie in ein Ecore-Metamodell zu konvertieren, aber nicht XML-Dateien, die einem solchen Schema entsprechen Ecore), sofern diese Dateien nicht im XMI-Format vorliegen.

Für persistente EMF-Modelle in einer relationalen Datenbank, siehe: Ссылка

Ich benutze Teneo. (und optional, CDO)

In Bezug auf "XML", wenn Sie bei XMI bleiben und damit zufrieden sein werden, wird EMF Ihnen das Leben viel erleichtern, da Sie keine brauchen Mapping (im Gegensatz zu JAXB). Der Nachteil ist, dass unsere Objekte EMF-Objekte sein müssen.

EMF-Objekte sind Objekte, die von EMF generiert werden und EObject implementieren und EObjectImpl direkt oder indirekt erweitern. Normalerweise würden Sie EMF-Objekte nicht mit der Hand programmieren wollen, das wäre mühsam. Auf der anderen Seite sind JAXB- "Objekte" in der Regel reine Domänenobjekt-POJOs und haben keine zusätzliche Anforderung von JAXB. Beachten Sie, dass EMF-Objekte im Gegensatz zu JAXB keine POJOs sind. Dies erklärt ein anderes Ziel zwischen EMF und JAXB. Ihre Überlappung ist weniger als Sie sich vorstellen.

Das Lesen von XMI (nicht XML) ist sehr einfach:

%Vor%     
Hendy Irawan 06.01.2011, 14:29
quelle
13

Sie können beliebige XML-Dateien mit EMF lesen, vorausgesetzt, Sie haben das XSD für sie, und Sie müssen nicht einmal Java-Klassen vom XSD generieren.
Ich habe vor ein paar Monaten darüber gebloggt, aber ich werde die Code-Schnipsel auch hier einfügen. Für eine etwas detailliertere Erklärung siehe meinen Blogbeitrag auf So laden und vergleichen Sie beliebige XML-Dateien mit EMF .

Zuerst müssen Sie die XSD laden und ein paar Dinge initialisieren:

%Vor%

Danach können Sie Ihre XML-Dateien wie gewohnt laden:

%Vor%     
Zsolt Török 07.02.2011 16:33
quelle
2

Ich habe ein kleines Programm erstellt, das eine grundlegende Konvertierung des Grundformats unter Verwendung von emftriple (ehemals emf4sw), d. h. Ecore XMI (XML-Datei), in RDF TTL durchführt.

Ich habe einige der Tipps in den Antworten hier verwendet, also danke euch Jungs!

Vielleicht kann der Quellcode Sie inspirieren: Ссылка

    
Andrei 02.05.2015 12:50
quelle
1

Der normale Weg, um so etwas zu machen, besteht darin, mit einem XML-Schema zu beginnen, um dann das EMF-Modell zu generieren und dann Java-Code zu generieren. Dies ist in diesem EMF-Lernprogramm beschrieben.

Sie müssen keine Lese- / Schreibmethoden implementieren. Stattdessen verwenden Sie den EMF-Bibliothekscode, um den XML-Import und -Export durchzuführen. Ich habe gerade keine Kopie des EMF-Buchs vor mir, aber es ist darin enthalten. Schauen Sie sich alternativ an, was der generierte EMF-Editor macht, wenn Sie eine Modellinstanz laden oder speichern.

BEARBEITEN

Hier ist ein Ressourcenklasse von einem EMF-basierten Projekt, das ich entwickelt habe vor ein paar Jahren. Sehen Sie sich die Methoden load* an. Beachten Sie, dass dies nicht unbedingt der beste Weg ist, dies zu tun ... aber es hat für mich funktioniert.

BEARBEITEN 2

Ich habe gerade festgestellt, dass ich XMI nicht einfach XML verwende. Das Konfigurieren eines XML-Readers mit einem benutzerdefinierten Schema und (möglicherweise) einer benutzerdefinierten Schemazuordnung ist wahrscheinlich anders. Also, zurück zu meiner ursprünglichen Antwort, schau dir den generierten Code an! .

    
Stephen C 30.03.2010 11:19
quelle
0

EMF wurde nicht zum Lesen beliebiger XML-Dateien entwickelt. EMF verwendet XML als Backend. Woher kommen Ihre XML-Dateien, aus welchem ​​Schema? Wenn Sie das Schema haben, können Sie es verwenden, um ein EMF-Modell zu erstellen, das wiederum hoffentlich Ihre XML-Dateien lesen kann.

Andernfalls müssten Sie ein EMF-Modell zurückentwickeln, das in der Tat zu Ihrem XML serialisiert würde, so dass Sie es lesen könnten, aber das wäre ein Hack.

Nach UPDATE2 :

Ich denke, die nächste Frage ist dann: "Welches Problem hast du beim Laden deiner Dateien?" Wie machst du das und was funktioniert nicht? Oder Sie wissen nicht, wie es geht?

Zuerst müssen Sie die Factory für Ihre Ressourcengruppe (die speicherinterne Repräsentation der Gruppe von Dateien, mit denen Sie arbeiten möchten) konfigurieren und dann die Datei mit getResource (URI, bool) laden. Beispiel für einige UML-Sachen, die ich mache:

%Vor%

Das sollte alles in dem Tutorial behandelt werden, zu dem Sie bereits einen Link haben. Dann können Sie die generierte Java-API verwenden, um von 'root' aus zu arbeiten.

Ich habe allerdings keine Erfahrung mit dem ORM-Zeug, aber vielleicht sollten Sie sich CDO ansehen.

>     
ShiDoiSi 09.04.2010 07:48
quelle

Tags und Links