mit EMF gegen XML-Schema validieren

greeni

Mitglied
Hallo Zusammen,

ich habe mir aus einer XML-Schema Datei ein DatenModell mittels EMF erzeugt.
Ich habe EMF ebenfalls dafür genutzt mir den Baum Editor in Form einer RCP Anwendung zu erzeugen.
Nun gibt es hier ja schon eine ganze reihe Menüpunkte, die auch alle Funktionieren. Datei öffnen, speichern usw...

Aber es gibt auch 2 Punkte die, die ganze Zeit grau sind. Dies sind Validate & Control...
Nun Habe ich 2 Fragen:

1. Wieso gibt es diese Menüpunkte wenn sie nicht funktionieren.
2. Ich Möchte meine Datei die ich mit dem BaumEditor erstellen vor dem speichern gegen das XML-Schemla validieren. Wie könnte ich das mit EMF am einfachsten realisieren?
 
1. Kann ich dir aus dem Kopf gerade auch nicht beantworten. Schau mal ob die Action durch einen Extension Point, oder durch den Editor selbst hinzugefügt wird
2. Die meisten Constraints deiner XSD brauchst du nicht extra prüfen, da der Editor gar nicht zulässt ein syntaktisch falsches Modell anzulegen. Für spezielle Constraints ist dein Modell zuständig, da brauchst du die XSD nicht mehr. Beim Speichern sollte der Editor automatisch Error Marker auf der Resource anlegen wenn ein Constraint verletzt wurde.
 
Hallo Wildcard,

ersmalt danke für deine Antwort. Das mit dem Menüpuknt validate funktioniert jetzt.
Zu deinem 2. Punkt hätte ich noch eine Frage...
Also kurz vorab. Bei mir ist das jetzt so, wenn ich irgendeinen Knoten in meinem Baum auswhäle und dan auf validate im Menü klicke prüft er meinen Baum gegenüber dem XML Schema bzw Modell und zeigt mir die Fehler ganz automatisch an.

Wenn ich dich bei deinem 2. Punkt nun richtig verstanden habe, sollte er dieses aber auch automatische beim speichern machen und mir gegebenenfalls Error Marker setzen. Dieses tut er aber nicht. Ich kann immer Speichern sobald ich meinen Baum geändert habe. Egal ob Fehler drin sind, oder nicht. Er validiert halt nur, wenn ich den Punkt im Menü auswähle.

Ich hätte das aber gerne genau so, wie du das beschrieben hast. Er soll mir Error Marken setzen sobald ich speichern möchte und nuch validierungsfehler drin sind.

Wie gehe ich hierfür vor? Was muss ich dazu tun?
 
Ok, ich dachte das passiert automatisch, mein Fehler. Editiere doch einfach die doSave Methode des Editors.
Dort validierst du dann bevor du speicherst. Wie man das validieren aufruft kannst du ja an der implementierung der validate Action sehen.
 
Also ich habe mir die Klasse ValidateAction angeschaut. Aber irgendwie werde ich daraus nicht schlau. Ich verstehe nicht wie ich die Validierung selber aufrufen kann.

Hast du sowas vieleicht schon mal gemacht. Hättest du mir vieleicht ein stückchen Beispielcode?
 
Ah... habs rausgefunden. Über Diagnostician.INSTANCE.validate(...) komme ich an die Informationen heran. Aber jetzt hätte ich doch noch eine letzte Frage.

Ich bekomme jetzt über die eben genannte Funktion verschiedene Validierungsfehler zurück. Nun Möchte ich diese in dem MarkerView von Eclipse anzeigen lassen. Kann mir da vieleicht jemand weiter helfen?
 
Die Resource (IFile) hat eine createMarker Methode. Sobald du Marker an die Resource hängst werden sie in der Problems view angezeigt.
 

Zurück
Oben