Schema --> GUI (User) --> XML

Status
Nicht offen für weitere Antworten.
T

Thomas82

Gast
Hallo,
ich habe folgendes Problem / Wunsch: Ich möchte verschiedene Schema Dateien einlesen, aus diesen Informationen eine Oberfläche mit Textfeldern, Comboxen etc. zur Eingabe basteln und die Eingaben in eine zu dem Schema passende xml-Datei schreiben.
Bisher habe ich mit JAXB und einem Schema für Schemas, meine Schema Dateien eingelesen, jedoch weiß ich nicht, wie ich nach dem Unmarshelling an alle Elemente+Attribute, die in meinen Schema Dateien angegeben sind, komme?
Im Klartext wie komme ich am geschicktesten an die Informationen aus meinen Schema Dateien zur Erstellung der GUI? Langsam denke ich, dass ich statt JAXB besser JDOM verwenden sollte, oder?
Hat jemand eine gute Idee?

Vielen Dank
Thomas
 

pinhead84

Aktives Mitglied
Hallo Thomas,

zwei Lösungsansätze sehe ich spontan für dein Problem:

(a) Eine XSD-Datei ist auch nichts anderes als ein XML-Dokument. Warum nimmst nicht einfach einen XML-Parser deiner Wahl und liest dein XSD-Schema dynamisch aus? - Bei dieser Lösung wäre es ratsam, nicht alle XSD-Spielereien des Standards zu verwenden, sondern sich auf Grundlegendes zu beschränken. (z.B. keine Vererbungen)

(b) Du verwendest die Reflections-API von Java auf den dynamisch erzeugten JAXB-Klassen. Auf diesem Wege kannst du dir alle Attribute, die zugehörigen getter- und setter-Methoden dynamisch ermitteln & Instanzen erzeugen.

Beide Lösungsansätze haben ihre Vor- & Nachteile. Variante (a) kenne ich von OpenCms, Variante (b) findet man in Netbeans/Eclipse zu Hauf.

Vielleicht gibt es noch andere Lösungen, die direkt von JAXB2 geliefert werden. Damit kenne ich mich aber nicht gut genug aus.


Thomas82 hat gesagt.:
Langsam denke ich, dass ich statt JAXB besser JDOM verwenden sollte, oder?
Wenn du am Ende der Kette ein XML-Dokument haben willst, ist JAXB meiner Meinung nach schon ein guter Lösungsansatz. Wie sagte der dicke Kanzler: 'Wichtig ist was hinten rauskommt'. ;)
 

Wildcard

Top Contributor
Ich würde zu EMF greifen. Du kannst dir entweder mit EMF ein laufzeit Modell aus deiner XSD erstellen lassen, oder du nimmst das XSD Modell (ein fertiges, mit EMF erstelltes Datenmodell) um den Inhalt der XSD zu verarbeiten.
 

Thomas82

Neues Mitglied
Erstmal vielen Dank für die Antworten.
Ich würde schon gern JAXB verwenden, jedoch würde ich gern wissen, wie ich durch den kompletten XML Baum "wandern" kann. Ähnlich wie es in JDOM der Fall ist.
Oder ist es sinnvoll eine Kombination aus (J)DOM und JAXB zu verwenden? Also mit JDOM den Baum durchgehen und mit JAXB die jeweiligen Elemente unmarshalln?
 

pinhead84

Aktives Mitglied
Thomas82 hat gesagt.:
Ich würde schon gern JAXB verwenden, jedoch würde ich gern wissen, wie ich durch den kompletten XML Baum "wandern" kann. Ähnlich wie es in JDOM der Fall ist.
Durch welchen Baum willst du denn gehen?

(a) Durch den XML-Baum deines Schemas (sollte mit JDOM funktionieren, ist aber aufwändig)
oder
(b) durch den XML-Baum des zu erzeugenden JAXB-Objektes (sollte mit JDOM/JAXB wohl nicht funktionieren)

Meines Erachtens ist es einfacher die Reflections-API zu verwenden. Dann musst du nicht mittels JDOM selbst dein Schema interpretieren, sondern kannst direkt mit dem JAXB-Objekten arbeiten, die du ja letztendlich auch instanziieren und exportieren willst.

Das von 'Wildcard' empfohlene EMF kenne ich selbst nicht, schaut aber auch vielversprechend aus, siehe z.B. hier.
 

CoderJohannes

Neues Mitglied
Hi Thomas!
Ich mache gerade genau das - generiere Flex-UIs aus Schemata mit JAXB. Konkret habe ich ein Plugin für XJC geschrieben. Wie das geht, steht hier: http://weblogs.java.net/blog/kohsuke/archive/2005/06/writing_a_plugi.html
Innerhalb der run-Methode des Plugins bekommt man dann das geparste Schema inkl. evtl. importierter Schemata über model.getModel().schemaComponent. Die JAXB/XJC-Javadoc findet sich hier: https://jaxb-architecture-document.dev.java.net/nonav/doc/?jaxb/package-summary.html
Die so ausgelesenen Schemata liegen dann in XSOM vor. Mit etwas Lesen in der Javadoc (https://xsom.dev.java.net/nonav/javadoc/index.html) und dem Architektur-Diagramm (http://www.w3.org/TR/xmlschema-1/components.gif) findet man sich hierin ganz gut zurecht.
Das so vorliegende Schema kann man dann mittels Visitor-Pattern durchlaufen. Ich habe eine XSOMWalker-Klasse geschrieben, die für alle für mich interessanten Schemakomponenten eine Visitor-, eine ProcessPre- und eine ProcessPost-Methode enthält (diese "Visitor"-Klassen sind nicht wirklich Visitors im Sinne des GOF-Patterns, aber mir ist kein besserer Name eingefallen). Meine ElementDeclaration-Visitor-Methode sieht z.B. so aus:
Code:
public final void elementDecl(XSElementDecl decl, XSComponent parent)
	{
		processElementDeclPre(decl, parent);
		if (decl.getType().isSimpleType())
		// value
		{
			processElementDeclSimpleTypePre(decl, parent);
			simpleType(decl.getType().asSimpleType(), decl);
			processElementDeclSimpleTypePost(decl, parent);
		}
		else
		// group of values
		{
			processElementDeclComplexTypePre(decl, parent);
			complexType(decl.getType().asComplexType());
			processElementDeclComplexTypePost(decl, parent);
		}
	}

Die process...-Methoden dieser Klasse sind leer:
Code:
protected void processElementDeclComplexTypePre(XSElementDecl decl, XSComponent parent)
{
}

Wenn man nun eine Unterklasse dieser Walker-Klasse schreibt, muss man nur noch die process-Methoden überschreiben und hier den Generierungscode für die bearbeiteten Schemakomponenten einfügen. Wie das praktisch für Flex-UIs machbar ist, habe ich übrigens hier beschrieben: http://blog.ubigrate.com/2008/11/25/creating-flex-uis-in-java-a-short-tutorial/
Eine kleine EInführung in XJC gibt es hier: http://blog.ubigrate.com/2008/05/12/neues-von-jaxb/
Hilft das soweit weiter?
Grüße, Johannes
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Wie kann ich ein XSD-Schema in einer JSP-Seite verwenden? XML & JSON 7
B XML Schema Validierung des Zahlenbereichs XML & JSON 3
P Eclipse Rinzo - Schema muss mit DOCTYPE "root" übereinstimmen XML & JSON 0
K XML Schema list unique value restriction XML & JSON 0
F.S.WhiTeY JAXB: Schema nicht "erben" XML & JSON 2
Q Konvertierung von json zum Java Objekt nach vorgegebenem Schema XML & JSON 3
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
G Suche guten freien XML Schema (XSD) Editor XML & JSON 7
X XML Schema Beziehungen validieren XML & JSON 1
F XML-Schema mapping XML & JSON 6
D eine Schema für ein andere Schema XML XML & JSON 14
P Qualifizierung und XML- Schema XML & JSON 2
G mit EMF gegen XML-Schema validieren XML & JSON 7
V JAXB schema 2 java XML & JSON 3
M XML Schema & Attribut Bedingung XML & JSON 2
B Einschränken der Eingabe bei XML SCHEMA XML & JSON 2
H Schema-Validierung mit JDOM XML & JSON 2
S finde den Schema-Compiler "xjc" nicht XML & JSON 4
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Eindeutige Kennnummer Schema XML & JSON 3
C Validierung klappt nicht mit Schema XML & JSON 2
S XML-Schema einlesen um parsen zu erleichtern? XML & JSON 2
T Klassen aus XML-Schema generieren und füllen XML & JSON 10
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
G Problem mit XML-Schema Validierung mit Java XML & JSON 12
J XML - schreiben und einlesen (Schema) XML & JSON 14
A xml-schema aus wsdl auslagern in eine eigene xsd-Datei XML & JSON 3
H xml - Schema : warum passen die nicht zueinander XML & JSON 2
J XML-Schema: Beliebige Unterelemente zulassen XML & JSON 4
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
J schema-Validierung mit xerces und jdom: bug in java 1.4? XML & JSON 9
J JDOM mit XML-Schema XML & JSON 8
P Datentyp in Schema definieren XML & JSON 2
S XML Schema XML & JSON 7
N Externes Schema inkludieren XML & JSON 7
A XML Dokument aus einem Schema ableiten/generieren? XML & JSON 6
Z beispiel für valides Xml-Dokument durch XML-Schema XML & JSON 5
Z Frage zu XML Schema XML & JSON 3
T XML mit Java gegen Schema validieren XML & JSON 6
X Xpath, alle Element die mit "user" beginnen auswäh XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben