Generování modelu EMF pomocí schématu XML (XSD)
Poslední aktualizace: 29. červen 2004
Tento výukový program poskytuje postupný popis pro vytváření modelu EMF ze schématu XML a vytváření jednoduchého editoru modelů. Při procházení tohoto výukového programu zjistíte, jak jednoduše umožňuje EMF přechod od definice jednoduchého modelu ve schématu XML k plně funkčnímu editoru pro tento model.
Screenshoty jsou založeny na Eclipse SDK verze 3.0 a
EMF verze 2.0.
Soubor schématu XML používaný v tomto výukovém programu se nachází zde:
library.xsd. Uložte jej někam na vaši pracovní stanici pro pozdější použití.
Základní pravidla mapování ze schématu XML na Ecore jsou:
- Schéma se mapuje na EPackage. Jakákoli obsažená schémata, která deklarují jiné cílové obory názvů se mapují na jejich vlastní EPackages.
- Definice komplexního typu se mapuje na EClass.
- Definice jednoduchého typu se mapuje na EDataType.
- Deklarace atributu nebo deklarace vnořeného prvku se mapuje na EAttribute nebo EReference, podle svého typu.
- Vytvoří se třída EClass s názvem DocumentRoot, aby udržovala jakékoli deklarace prvků nejvyšší úrovně nebo deklarace atributů.
Z perspektivy modelování není schéma XML stejně expresivní jako Ecore. Nemůže ani specifikovat typ cíle odkazu, ani definovat obousměrné odkazy (ačkoli EMF poskytuje svůj vlastní způsob překročení těchto omezení).
Obsah
obsah
Krok 0: Vstupní specifikace
Tento výukový program vyžaduje jak balíček EMF Runtime, který obsahuje generátor EMF a související moduly plug-in, tak balíček XML Schema Infoset Model (XSD) Runtime. Druhý z uvedených balíčků poskytuje model EMF schématu XML, na který se EMF spoléhá při čtení schémat. Pro jednoduchost je k dispozici kombinovaný balíček EMF a XSD SDK. Po instalaci balíčku(ů) ověřte, zda jsou balíčky k dispozici ve vašem prostředí Eclipse:
- Otevřete dialogové okno "Nápověda/O modulu Eclipse Platform".

- Klepněte na "Podrobnosti modulu plug-in".

- Klepnutím na záhlaví sloupce "Id modulu plug-in" seřadíte moduly plug-in podle tohoto pole.
Poté zkontrolujte, zda je přítomna zvýrazněná sada modulů plug-in.



Další moduly plug-in EMF a XSD, které nejsou zvýrazněny výše, nejsou pro tento výukový program vyžadovány. Mohou a nemusí se objevit, podle toho, které balíčky jste nainstalovali.
obsah
Krok 1: Importovat model ze schématu XML
Vytvořte nový projekt EMF v pracovním prostoru:
- Otevřete dialogové okno "Soubor/Nový/Projekt...".

- Rozbalte položku "Eclipse Modeling Framework" a zvolte "Projekt EMF". Klepněte na tlačítko "Další".

- Pojmenujte projekt např. "knihovna". Poté klepněte na tlačítko "Další".

- Vyberte volbu "Načíst ze schématu XML" a klepněte na tlačítko "Další".

- Klepněte na tlačítko "Procházet" a vyhledejte soubor schématu.

- Pokud se vám zobrazí následující chyba, musíte ukončit Eclipse a opravit váš analyzátor XML. Tato chyba je způsobena chybou v implementaci Crimson DOM, která se používá v některých verzích Sun JDK. Další informace viz webová stránka EMF.

- Schéma bude prozkoumáno a bude navržen výchozí název modelu generátoru. V případě přání je možno změnit název ve vstupním poli. Můžete také vybrat volbu "Vytvořit schéma XML do mapy Ecore" pro vygenerování modelu mapování použitého pro vaše schéma. Poté klepněte na tlačítko "Další".

- Obecně je možno z jednoho schématu vytvořit více než jeden balíček, pokud schéma obsahuje další schémata, která deklarují různé cílové obory názvů. Vyberte balíček, pro který chcete vygenerovat model EMF - v tomto případě pouze balíček "knihovna". Klepněte na tlačítko "Dokončit".

- Bude vytvořen model jádra (library.ecore) a model generátoru (library.genmodel). Pokud byla dříve zaškrtnuta volba "Vytvořit schéma XML do mapy Ecore", bude také vytvořen model mapování (library.xsd2ecore). Lze jej otevřít, aby bylo přesně vidět, jakým způsobem se schéma mapuje na Ecore. Model generátoru se automaticky otevře v hlavním pohledu.

obsah
Krok 2: Generovat kód modelu EMF
Model generátoru zobrazuje kořenový objekt, představující celý model. Tento Import má podřízené prvky, které představují jeho balíčky, jejichž podřízené prvky dále představují klasifikátory (třídy a datové typy, včetně ve výčtu uvedených typů). Podřízené prvky tříd jsou atributy tříd, odkazy a operace, podřízené prvky ve výčtu uvedených typů jsou výčtové literály.
- Tento model je možno rozbalit tak, aby bylo možno vidět jeho různé prvky.

- Každý objekt má přiřazené určité vlastnosti. Pokud se pohled Vlastnosti již nezobrazil, klepněte pravým tlačítkem myši na modelový objekt "Knihovna" a vyberte volbu "Zobrazit pohled Vlastnosti" z rozevírací nabídky.

- Tyto vlastnosti řídí chování generátoru kódů.

Ve většině případů není nutno měnit výchozí hodnoty vlastností,
avšak tyto volby mohou poskytovat velký podíl na řízení kódu, který je generován. Nyní vyberte několik různých modelových objektů generátoru a sledujte jejich vlastnosti.
Model generátoru je také místo, ve kterém budete zahajovat generování kódu.
Klepnutím pravým tlačítkem myši na objekt v modelu je možno vygenerovat kód pro tento objekt.
- Klepněte pravým tlačítkem myši na modelový objekt "Knihovna" a vyberte volbu "Generovat kód modelu" z rozevírací nabídky.

- Sledujte vygenerované soubory.

Po vygenerování budou vytvořena rozhraní tříd a třída výčtu a bude vytvořena nová dvojice rozhraní pro samotný balíček a pro továrnu. Přibudou také dva nové balíčky s příponami "impl" a "util", které obsahují implementace rozhraní a další obslužné třídy a soubor s manifestem "plugin.xml" pro modul plug-in modelu.
Změněný model je možno regenerovat a změny budou sloučeny s jakýmikoli ručně provedenými úpravami, které jste u kódu provedli. Je možno také selektivně vygenerovat podmnožinu kódu modelu tak, že klepnete pravým tlačítkem myši na balíček,
třídu, nebo objekt výčtu a vyberete volbu "Generovat kód modelu" z rozevírací nabídky.
obsah
Krok 3: Vygenerujte editor pro model
Pro kterýkoli model je možno vygenerovat plně funkční editor Eclipse. Ve výchozím nastavení je rozdělen mezi dva moduly plug-in: modul plug-in pro úpravy obsahuje adaptéry poskytující strukturovaný pohled a provádějící příkazovou úpravu modelových objektů, modul plug-in "editor" poskytuje uživatelské rozhraní pro editor a průvodce.
- V generátoru klepněte pravým tlačítkem na modelový objekt "Knihovna" a vyberte volbu
"Generovat editační kód" z rozevírací nabídky.

- Klepněte pravým tlačítkem myši znovu na modelový objekt a vyberte volbu "Generovat kód editoru" z rozevírací nabídky.

- Sledujte vygenerované projekty v pohledu Průzkumník balíčků s příponami "edit" a "editor".

Obecně platí, že pokud si přejete vygenerovat moduly plug-in modelu, editace a editoru v rámci jednoho kroku, můžete to provést pomocí volby "Vygenerovat vše" v rozevírací nabídce.
Kód by se měl zkompilovat automaticky při svém vygenerování a při každé změně by se měl zkompilovat znovu. Pokud vypnete volbu automatického sestavování v předvolbách pracovní plochy, máte možnost kompilaci zahájit ručně:
- Vyberte volbu "Sestavit vše" z nabídky "Projekt".

- Sledujte pohled problémů. V projektech library, library.edit, a library.editor by se neměly vyskytovat žádné chyby.

obsah
Krok 4: Spustit vygenerovaný editor
Pro otestování nových modulů plug-in musí být spuštěna druhá instance Eclipse s názvem Běhová pracovní plocha. Moduly plug-in poběží na této pracovní ploše.
- Vyberte volbu "Spustit jako/Běhová pracovní plocha" z rozbalovacího panelu nástrojů "Spustit".

- Počkejte, než se objeví druhá instance modulu Eclipse Platform. Otevřete dialogové okno "Nápověda/O modulu Eclipse Platform", klepněte na tlačítko "Podrobnosti modulu plug-in" a ověřte, zda jsou přítomny vygenerované moduly plug-in.

Nyní je možno použít průvodce modelu Knihovna pro vytvoření nové instance modelu.
- Otevřete dialogové okno "Soubor/Nový/Projekt...".

- Rozbalte nabídku "Jednoduchý" a vyberte volbu "Projekt". Klepněte na tlačítko "Další".

- Pojmenujte projekt a klepněte na tlačítko "Dokončit".

- Klepněte pravým tlačítkem myši na projekt a vyberte volbu "Nový/Další..." z rozevírací nabídky.

- Rozbalte položku "Příklad průvodce vytvořením EMF modelu" a zvolte "Model knihovny".
Klepněte na tlačítko "Další".

- Zadejte název souboru pro model knihovny. Přesvědčte se, zda končí příponou ".library". Poté klepněte na tlačítko "Další".

- Vyberte volbu "Knihovna" jako modelový objekt a klepněte na tlačítko "Dokončit".

- Nově vytvořený model knihovny se otevře v hlavním pohledu.

Kořenový objekt v tomto editoru odpovídá prostředku My.library. Pod ním leží jednoduchá knihovna, objekt vybraný jako modelový objekt v průvodci.
- Rozbalte prostředek "platform:/resource/librarytest/My.library" pro zobrazení objektu "Knihovna". Vyberte jej.

- Pokud se pohled Vlastnosti již nezobrazil, klepněte pravým tlačítkem myši na objekt "knihovna" a vyberte volbu "Zobrazit pohled Vlastnosti" z rozevírací nabídky.

- V pohledu Vlastnosti klepněte na sloupec "Hodnota" u vlastnosti "Název"
a pojmenujte knihovnu. Jmenovka v hlavním pohledu se aktualizuje, pokud klepnete na tlačítko Enter.

- Klepněte pravým tlačítkem myši na knihovnu a vyberte volbu "Nový podřízený prvek/zapisovač" z rozevírací nabídky.
Do knihovny se přidá nový zapisovač.

- Zadejte název zapisovače v pohledu Vlastnosti.

- Podobným způsobem lze do knihovny přidat příručku.

- Všechny atributy a odkazy příručky lze editovat v pohledu Vlastnosti.

- Pokud si přejete zobrazit serializaci XML na bázi schématu, máte možnost uložit, uzavřít a znovu otevřít model pomocí textového editoru.

obsah