xmi parsen über emf

Status
Nicht offen für weitere Antworten.

unpack

Mitglied
Guten Abend.
ich würde gerne eine XMI-Datei auslesen die ein Klassendiagramm enthält und das Klassendiagramm daraufhin anzeigen lassen.
Durch lesen im Forum und Tutorials habe ich jetzt schon herausgefunden das dass über das Eclipse Modelling Framework und dazugehörigen Plugins ganz gut funktionieren soll. Hierfür nimmt man wohl eine xmi.xsd und erstellt sich ein EcoreModell um sich daraufhin Klassen generieren zu lassen.
Hab das jetzt auch schon einmal so wie in diesem Tutorial gemacht was auch alles funktioniert hat.Generating an EMF Model using XML Schema (XSD)

Was ich noch nicht so recht verstehe ist folgendes:
1.) Welche Schemadatei nehm ich am besten um mit möglichst vielen Programmen (die Klassendiagramme erstellen) kompatibel zu sein?
(UML2 soll auf jeden Fall unterstützt werden)
2.) Wie übergeb ich die XMI-Datei die mein Klassendiagramm enthält? Muss die doch bestimmt in den erstellten Klassen irgendwie aufrufen, oder? Hab da nicht ein Tutorial zu gefunden. Nur immer wie ich ausführbaren Code erstell.
3.) Das ganze soll ohne Eclipse lauffähig sein. Wie bekomm ich das hin?

Bin für jede Hilfe dankbar, auch wenn es nur Verweise auf Tutorials o.ä. sind weil es damit in Bezug auf EMF auch sehr mau aus sieht. :(

Mfg unpack
 

unpack

Mitglied
Hallo!
Erstmal Danke für den Tip wildcard.
uml2 sieht tatsächlich sehr gut aus und unterstützt auch eine Menge Tools.
Ich hab jetzt mal versucht folgendes Tutorial durchzugehen:Getting Started with UML2 Dort wird gezeigt wie man ein neues Modell erstellt und als xmi exportieren kann was auch alles funktioniert hat. Allerdings bekomme ich es nicht hin eine xmi-Datei(liegt unter C:/uml/model1.uml) einzulesen. Die Funktion load dafür ist aber wie die save funktion in der Klasse UML2Article bereits vorhanden.
Java:
package com.ibm.uml2.articles;

import java.io.IOException;
import java.util.Iterator;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.WrappedException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.UMLPackage;
import org.eclipse.uml2.uml.resource.UMLResource;
import org.eclipse.uml2.uml.util.UMLUtil;

/**
 * Base class for articles on how to develop tools using UML2.
 */
public abstract class UML2Article {

	public static boolean DEBUG = true;

	protected static final ResourceSet RESOURCE_SET = new ResourceSetImpl();

	protected static void out(String output) {

		if (DEBUG) {
			System.out.println(output);
		}
	}

	protected static void err(String error) {
		System.err.println(error);
	}

	protected static void registerResourceFactories() {
		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
				UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
	}

	protected static void registerPathmaps(URI uri) {
		URIConverter.URI_MAP.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP),
				uri.appendSegment("libraries").appendSegment(""));

		URIConverter.URI_MAP.put(URI.createURI(UMLResource.METAMODELS_PATHMAP),
				uri.appendSegment("metamodels").appendSegment(""));

		URIConverter.URI_MAP.put(URI.createURI(UMLResource.PROFILES_PATHMAP),
				uri.appendSegment("profiles").appendSegment(""));
	}

	protected static void save(org.eclipse.uml2.uml.Package package_, URI uri) {
		Resource resource = RESOURCE_SET.createResource(uri);
		EList contents = resource.getContents();

		contents.add(package_);

		for (Iterator allContents = UMLUtil.getAllContents(package_, true,
				false); allContents.hasNext();) {

			EObject eObject = (EObject) allContents.next();

			if (eObject instanceof Element) {
				contents
						.addAll(((Element) eObject).getStereotypeApplications());
			}
		}

		try {
			resource.save(null);

			out("Done.");
		} catch (IOException ioe) {
			err(ioe.getMessage());
		}
	}

	protected static org.eclipse.uml2.uml.Package load(URI uri) {
		org.eclipse.uml2.uml.Package package_ = null;

		try {
			
			Resource resource = RESOURCE_SET.getResource(uri, true);
			package_ = (org.eclipse.uml2.uml.Package) EcoreUtil
					.getObjectByType(resource.getContents(),
							UMLPackage.Literals.PACKAGE);
		} catch (WrappedException we) {
			err(we.getMessage());
			System.exit(1);
		}

		return package_;
	}

}

auslesen wolte ich sie jetzt folgendermaßen:
Java:
package com.ibm.uml2.articles;

import org.eclipse.emf.common.util.URI;

/**
 * Source code for the "Getting Started with UML2" article.
 */
public class GettingStartedWithUML2 extends UML2Article {

	public static void main(String[] args) {
		
		registerResourceFactories();
		out("loading model..");
		URI model= URI.createURI("file://c://uml//model1.uml");
		org.eclipse.uml2.uml.Package package1 = load(model);
		out(package1.getName());

	}
}

Mein package1 ist allerdings immer null. Das der Pfad falsch ist schließ ich eigentlich aus weil dann eine fehlermeldung von eclipse käme das er die datei nicht findet.

Hat einer eine Idee was ich falsch mache?
 
Zuletzt bearbeitet:

unpack

Mitglied
ok dank dir. :) hab sie jetzt escaped wie du geschrieben hast. Allerdings bekomm ich nun eine Fehlermeldung
Cannot create a resource for 'file:\c:\uml\model1.uml'; a registered resource factory is needed

hab aber eigentlich wie in der FAQ MDT/UML2/FAQ - Eclipsepedia beschrieben das package, die resourceFactory und die Pathmaps registriert.???:L

Java:
package com.ibm.uml2.articles;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.WrappedException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.UMLPackage;
import org.eclipse.uml2.uml.resource.UMLResource;
import org.eclipse.uml2.uml.util.UMLUtil;

/**
 * Base class for articles on how to develop tools using UML2.
 */
public abstract class UML2Article {

	public static boolean DEBUG = true;

	protected static final ResourceSet RESOURCE_SET = new ResourceSetImpl();

	protected static void out(String output) {

		if (DEBUG) {
			System.out.println(output);
		}
	}

	protected static void err(String error) {
		System.err.println(error);
	}

	protected static void registerResourceFactories() {
		RESOURCE_SET.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
				UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
	}

	protected static void registerPathmaps(URI uri) {
		URIConverter.URI_MAP.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP),
				uri.appendSegment("libraries").appendSegment(""));

		URIConverter.URI_MAP.put(URI.createURI(UMLResource.METAMODELS_PATHMAP),
				uri.appendSegment("metamodels").appendSegment(""));

		URIConverter.URI_MAP.put(URI.createURI(UMLResource.PROFILES_PATHMAP),
				uri.appendSegment("profiles").appendSegment(""));
	}

	protected static void save(org.eclipse.uml2.uml.Package package_, URI uri) {
		Resource resource = RESOURCE_SET.createResource(uri);
		EList contents = resource.getContents();

		contents.add(package_);

		for (Iterator allContents = UMLUtil.getAllContents(package_, true,
				false); allContents.hasNext();) {

			EObject eObject = (EObject) allContents.next();

			if (eObject instanceof Element) {
				contents
						.addAll(((Element) eObject).getStereotypeApplications());
			}
		}

		try {
			resource.save(null);

			out("Done.");
		} catch (IOException ioe) {
			err(ioe.getMessage());
		}
	}

	protected static org.eclipse.uml2.uml.Package load(URI uri) {
		org.eclipse.uml2.uml.Package package_ = null;

		try {
			Resource resource = RESOURCE_SET.getResource(uri, true);
			package_ = (org.eclipse.uml2.uml.Package) EcoreUtil
					.getObjectByType(resource.getContents(),
							UMLPackage.Literals.PACKAGE);
		} catch (WrappedException we) {
			err(we.getMessage());
			System.exit(1);
		}

		return package_;
	}

}

Java:
package com.ibm.uml2.articles;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.uml2.uml.UMLPackage;

/**
 * Source code for the "Getting Started with UML2" article.
 */
public class GettingStartedWithUML2 extends UML2Article {

	public static void main(String[] args) {

		out("loading model..");
		
		/*uri erstellen*/
		URI model = URI.createURI("file:\\c:\\uml\\model1.uml");
		
		/*resourceFactory und package registrieren*/
		registerResourceFactories();
		
		/*pathmaps registrieren*/
		UML2Article.registerPathmaps(model);
		
		/*laden des model*/
		org.eclipse.uml2.uml.Package package1 = load(model);
		out(package1.getName());

	}
}
 

Wildcard

Top Contributor
Nein, ich meinte nur das man \ escaped, aber nicht /. Das macht \ aber noch lange nicht zu einem gültigen Trenner in einer URI. Statt // brauchst du /
Code:
file:///c:/uml/model1.uml
 

unpack

Mitglied
achso, dann hatte ich dich total falsch verstanden.
Aber jetzt funktioniert alles super, kann Modelle einlesen und auch speichern.
Vielen Dank schon einmal dafür wildcard!!! :) :)

Hab jetzt auch mal rumgeschaut wie ich die Modelle grafisch als Diagramme darstellen kann, was mit den uml2tools auch ohne Probleme geht. MDT-UML2Tools - Eclipsepedia
Nur kann man das anscheinend nur in Eclipse selbst machen, jedoch nicht "standalone". Hab zumindest keine Tutorials diesbezüglich gefunden. Hat villeicht einer eine Idee wie ich das jetzt am besten umsetze, oder muss man sich dafür selbst in GMF etc. einarbeiten und programmieren?
 

Wildcard

Top Contributor
Was meinst du mit Standalone? RCP Standalone, oder Swing Applikation Standalone?
Mit RCP kein Problem, aber für Swing kannst du nicht auf entsprechende Eclipse Technologie wie uml2tools, GMF, GEF,... zurückgreifen, da musst du dann dein eigenes Frontend schreiben.
 

unpack

Mitglied
brauch ich denn wenn ich es als rcp mach eine eclipseinstallation und kann ich die gui trotzdem noch anpassen?
wenn ich kein eclipse benötige würde mir das natürlich reichen.
nur durchschau ich noch nicht recht wie ich die uml2tools in mein rcp einbinde und mein Modell übergeben kann? gibt es da gute tutorials? find irgendwie kaum etwas wenn es um die nutzung von emf-plugins ohne eclipse geht..:rtfm:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
S XML Document Parsen und Ausgeben mit Suchfunktion XML & JSON 21
M parsen von realen HTML-WEB-Seiten XML & JSON 1
MiMa parsen mit regex -> ein schnelles Ende XML & JSON 10
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
G Langsam beim SAX-Parsen - woran liegts? XML & JSON 2
C Parsen des XML-Streams mit SAX XML & JSON 3
M XML Datei Parsen XML & JSON 4
D SAX parsen - Wie? XML & JSON 11
S XML Parsen und Werte zwischenspeichern XML & JSON 2
K Kurze XML Datei Parsen XML & JSON 5
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
J Comments in XML parsen XML & JSON 3
H Nicht wohlgeformtes XML mit SAX parsen XML & JSON 2
M XML Parsen JDOM NullPointerEcxeption XML & JSON 7
Z XML parsen - Element mit Werten XML & JSON 2
ruutaiokwu xml nur bis auf eine bestimmte ebene parsen mit javax.xml... XML & JSON 5
L [SAX] Geschachtelte XML Datei parsen XML & JSON 3
R XML in UTF-8 mit SAX parsen XML & JSON 9
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
Semox Kann JUnit XML Parsen? XML & JSON 2
L Reihenfolge beim xml Datei parsen einhalten? XML & JSON 8
L xml Datei parsen ohne End-Tag XML & JSON 6
T RSS-Feed parsen und in Datenbank speichern XML & JSON 6
B XML parsen XML & JSON 3
H XML parsen und unbekannten Namespace zurückgeben XML & JSON 5
L invalide xml document parsen?! XML & JSON 2
S DOM Parsen Problem mit HTML Sonderzeichen XML & JSON 4
ABstraCT XML properties am einfachsten parsen. XML & JSON 2
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
P XMLGregorianCalender parsen XML & JSON 4
M Datei parsen XML & JSON 5
S HTML mit dom4j parsen? XML & JSON 2
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
Saxony unbekannte XML Datei parsen und ausgeben XML & JSON 10
P "Formatierungs-Tags" parsen XML & JSON 3
M Attribute parsen XML & JSON 6
R Parsen einer XML ohne Validierung XML & JSON 2
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
M Xerces -Parsen mit einer externen Schemadatei geht nicht XML & JSON 2
L bz2-Datei parsen XML & JSON 9
K XML parsen Whitespaces XML & JSON 2
I XML-String mit SAX parsen ? XML & JSON 2
M Object in XML parsen XML & JSON 2
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
P HTML Seite Parsen, und bestimmten Text extrahieren XML & JSON 3
X xml und xsl parsen mit xerces XML & JSON 8
W Xml-String parsen XML & JSON 2
W root element parsen,Hilfe! XML & JSON 5
F Gibt es Möglichkeiten Deutsche Sätze zu parsen ? XML & JSON 2
A Auf der Suche nach Bibliotheken oder wie parsen? XML & JSON 15
S XML Datei mit Schemafehler parsen XML & JSON 14
R StreamSource parsen ! XML & JSON 8
R RSS parsen XML & JSON 2
K XML Datei parsen XML & JSON 4
N XQUERY Abfrage über tool XML & JSON 2
N Wie komme ich an die Siblings über DOM? XML & JSON 15
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
ms_cikar Excel Dateien über Dropbox zugreifen XML & JSON 0
S Konforme XML Datei über XSD erstellen XML & JSON 2
N Algemeines über xml XML & JSON 3
G XSL: Element über eine Variable ermitteln XML & JSON 4
H XMI über EMF / UML2 einlesen XML & JSON 7
S XML Validierung mit XSD über DOM - Cannot find. XML & JSON 4
D xml über webservice XML & JSON 5
B xml datei über gui ändern XML & JSON 4
J Soap über Axis XML & JSON 3
J Zugriff auf Web Service über den Browser XML & JSON 12

Ähnliche Java Themen

Neue Themen


Oben