Generér en EMF-model fra XML-skema (XSD)

Sidst opdateret: 21. maj 2008

Dette øveprogram indeholder en trinvis beskrivelse af, hvordan du opretter en EMF-model fra et XML-skema og derefter genererer en enkel modeleditor til den. Øveprogrammet viser, hvor let det er at gå fra en enkel modeldefinition i et XML-skema til en fuldt funktionsdygtig editor til modellen ved at bruge EMF.

Skærmbillederne er fra version 3.2.0 RC6 af Eclipse SDK og version 2.2.0 RC6a af EMF.

Den XML-skemafil, vi bruger i øveprogrammet, findes her: library.xsd. Gemt den et sted på din arbejdsstation til senere brug.

De grundlæggende regler for tilknytning vha. mapping fra XML-skema til Ecore er:

Set ud fra et modelleringsperspektiv er et XML-skema ikke så udtryksmæssigt detaljeret som Ecore. Det kan hverken angive et referencemåls type eller definere tovejsreferencer (selvom EMF har sin egen måde at komme ud over disse begrænsninger på).


Indhold

Trin 0: Forudsætninger
Trin 1: Importér model fra XML-skema
Trin 2: Generér EMF-modelkoden
Trin 3: Generér en editor til modellen
Trin 4: Udfør den genererede editor


 indhold

Trin 0: Forudsætninger

Dette øveprogram kræver både pakken EMF Runtime, som indeholder EMF-generatoren og relaterede plugins, og pakken XML Schema Definition (XSD) Runtime. Sidstnævnte pakke indeholder en EMF-model af et XML-skema, som EMF anvender under læsning af skemaer. For nemheds skyld er en kombineret EMF- og XSD SDK-pakke til rådighed. Kontrollér, at pakken eller pakkerne findes i dit Eclipse-miljø, når du har installeret dem:

Der kræves ikke yderligere EMF- og XSD-plugins til dette øveprogram. Der kan blive vist yderligere plugins, afhængigt af hvilke pakker du har installeret.


 indhold

Trin 1: Importér model fra XML-skema

Opret et nyt EMF-projekt i arbejdsområdet:


 indhold

Trin 2: Generér EMF-modelkoden

I generatormodellen vises et rodobjekt, der repræsenterer hele modellen. Dette modelobjekt har underordnede, der repræsenterer dens pakker, og pakkernes underordnede repræsenterer klassifikationer (klasser og datatyper, herunder enumererede typer). Klassernes underordnede er klasseattributter, referencer og funktioner. De underordnede for enumererede typer er enum-strengværdier.

I de fleste tilfælde er det ikke nødvendigt at ændre egenskabernes standardværdi, men indstillingerne giver stor kontrol over den kode, der genereres. På dette tidspunkt kan du nøjes med at vælge forskellige objekter i generatormodellen og lægge mærke til deres egenskaber.

Generatormodellen er også det sted, du skal starte kodegenereringen fra. Ved at højreklikke på et objekt i modellen kan du generere kode til det.

Efter genereringen vil der være oprettet klassegrænseflader og en enum-klasse, og der vil være oprettet et nyt sæt grænseflader til pakken selv og til fabrikken. Der vil også være to nye pakker med suffikset "impl" og "util", som indeholder implementeringer af grænsefladerne og funktionsklasserne, og begge typer manifestfiler til model-plugin'en: "plugin.xml" og "MANIFEST.MF".

Hvis du ændrer modellen, kan du generere den igen, og ændringerne flettes samen med eventuelle manuelle ændringer, der kan være foretaget af koden. Du kan også selektivt generere en del af modelkoden ved at højreklikke på en pakke, en klasse eller et enum-objekt og vælge "Generér modelkode" på pop op-menuen.


 indhold

Trin 3: Generér en editor til modellen

Der kan også genereres en fuldt funktionsdygtig Eclipse-editor til en hvilken som helst model. Standardværdien er, at den er fordelt på to plugins: en redigering-plugin indeholder adaptere, der leverer en struktureret oversigt og udfører kommandobaseret redigering af modelobjektet, og en editor-plugin leverer brugergrænsefladen til editoren og guiden.

Generelt gælder, at hvis du vil generere plugins til model, redigering og editor på én gang, kan du gøre det ved at vælge "Generér alle" på pop op-menuen. Derved oprettes også en test-plugin, der indeholder genereret JUnit-testkode.

Koden skulle automatisk blive kompileret under genereringen og bør blive kompileret igen, hver gang den ændres. Hvis du har deaktiveret automatisk bygning i indstillingerne for arbejdsbænken, kan du starte kompileringen manuelt:


 indhold

Trin 4: Udfør den genererede editor

Når du vil teste de nye plugins, skal du starte en forekomst mere af Eclipse. Disse plugins skal udføres på denne arbejdsbænk.

Guiden Library Model kan nu bruges til at oprette en ny forekomst af modellen.

Rodobjektet i denne editor svarer til ressourcen My.library. Under det findes et enkelt objekt ved navn Library, som blev valgt som modelobjekt i guiden.


indhold