Noot Robert: Volgens mij zijn er 2 verschillende manieren om een BSM te vervaardigen. Helemaal handmatig waarbij de onderstaande procedure wordt gebruikt of half geautomatiseerd waarbij de Berichtengenerator wordt gebruikt. klopt dat?
SIM’s worden tijdens het opstellen niet opgeslagen in subversion omdat dit het tegelijkertijd met meerdere personen werken aan een Enterprise Architect bestand zou beletten. Om die reden moet nadat een SIM is vrijgegeven voor verdere verwerking deze eerst in versiebeheer ondergebracht worden. Hoe gaat dit echter in zijn werk (er van uitgaand dat een eerdere versie van het SIM al in beheer is in subversion)?
Klik met de rechtermuistoets in de Project Browser op het SIM package dat je wil overzetten en kies ‘Import/Export | Export package to XMI file…’. Let op het moet wel XMI versie 1.1 zijn; |
Het bestand is nu weer te gebruiken in een onder controle van subversion staande omgeving. Vergeet echter niet om in EA op het package een ‘get Latest’ te doen.
Om de catalogus op het GEMMA platform te genereren is een bestand nodig dat Imvertor maakt. Dit bestand bevat alle informatie die nodig is. Het bestand zit in de ZIP van de release, die je vanuit EA of vanuit het dashboard kunt ophalen. Het bestand zit in:
etc/system.imvert.xml
Geef het ZIP bestand door aan
Toine.Schijvenaars@vng.nl
Dit is voorlopig de manier om de overdracht te realiseren; er wordt nagedacht of en hoe we dit volautomatisch kunnen laten verlopen.
20160824 Eerste kennismaking met Imvertor vanuit EA
Voor de early adapter van KING en Kadaster. Let op: het is nog steeds wel beta software. De samples bevatten ook enkele foutjes. Extra leuk om mee te werken. Ook wordt nog de volledige gebruikersdocumentatie opgeleverd door Geert Bellekens.
Download en installeer de msi: EAToolPack_Setup_v*.msi (of via de site van Geert: https://bellekens.com/)
Open EA op een van deze voorbeelden. Ga naar Extensions| EA imvertor | Settings
Kies voor KING het volgende:
De velden ‘Default Processing Mode’ en ‘Default properties File’ kunnen voor jou natuurlijk een andere waarde krijgen. De laatste kan zelfs leeg blijven. Verder bepaal je natuurlijk zelf waar je results opgeslagen moeten worden.
Ga nu naar je project, en plaats cursor op een basismodel of een applicatie of een koppelvlak. Kies rechter muisknop Extenstions | EA imvertor | Publish to imvertor, of kies in het Add-in window dat open gaat voor “Publish”. Pas eventueel de settings aan, en kies ok. Laat Imvertor lopen. Als klaar zie je “Finished (…)”. Loop de knopjes na onderin het scherm, in het Add-in window. Kijk eens rond. Ga ook eens via knop Messages naar een message, en kies rechter muisknop | Find in project browser (of alt-G). Details worden later via documentatie bekend gemaakt. Functionele suggesties graag via Redmine of Jira opvoeren onder issue titel “IMVERTOR SERVER: ……”.
Het vergelijken van de modellen kan op 2 verschillende manieren.
De huidige interface van imvertor binnen Enterprise Architect biedt geen mogelijkheden om deze keuzes te maken reden waarom je zelf zult moeten voorzien in een parameter bestand. Een parameter is een simpel text bestand dat je (bijv. in notepad) aanmaakt met de volgende parameters als inhoud:
Zo worden deze parameters gedefinieerd in het parameter bestand (voorbeeld):
compare = release comparewith = 20160901
Bewaar dit bestand waar je het later eenvoudig kunt vinden.
Een vergelijking op een ‘supplier’ wordt altijd uitgevoerd vanuit de laagste laag in hiërarchie, waarbij SIM hoger is dan UGM en UGM hoger is dan BSM. Er wordt altijd vergeleken met de release van de supplier die in de tagged-value ‘supplier-release’ van de laagste laag staat. Een BSM kan overigens niet met een SIM vergeleken worden.
Zorg er voor dat de versie of het suppliermodel waarop je wil vergelijken wel eerder door imvertor verwerkt is. Is dit niet het geval dan zul je dit nog moeten doen. In dat geval zou je via Tortoise eerst de betreffende versie van dat model uit subversion kunnen exporteren, zonder daarbij overigens de huidige werkbestand te overschrijven. Schrijf het bestand dus even weg op een andere plaats. Deze versie kun je vervolgens weer binnenhalen in een EA bestand en vervolgens verwerken met imvertor.
Is dat eenmaal gedaan dan ga je als volgt te werk:
Kies rechter muisknop Extenstions | EA imvertor | Publish to imvertor, of kies in het Add-in window dat open gaat voor “Publish”; |
We onderkennen binnen Enterprise Architect 3 niveaus waarop datatypes worden gedefinieerd:
In de volgende paragrafen wordt beschreven hoe je hiermee om gaat.
Primitieve datatypes zijn datatypes waarvan de vorm als bekend verondersteld mag worden maar die niet binnen onze modellen in Enterprise Architect worden gedefinieerd. Deze datatypes noemen we Primitieve datatypes alhoewel het niet persé alleen hoeft te gaan om de rudimentaire primitieve datatypes.
Primitieve datatypen staan gedefinieerd in het SIM package ‘MIM11 Primitieve datatypen’. Indien je in je EA bestand niet beschikt over dit datatype dan kun je dit ophalen in de subversion folder voor de SIM tags, het betreft het bestand ‘MIM 1.1 Primitieve datatypen R20201204.xml’.
Gebruik van de datatypes in dit package is redelijk eenvoudig. De datatypes kunnen in een SIM, UGM en BSM model aan een attribute gekoppeld worden middels een referentie in het type veld van dat attribute. Er wordt dus een referentie gemaakt naar een component in het externe SIM package (ook binnen een UGM en BSM model).
Deze sectie bevat informatie die alleen voor beheerders van EA configuraties en Imvertor van belang is.
De informatie in deze paragraaf is erg technisch van aard en daarom vooral bedoelt voor de VNG Realisatie beheerders van Imvertor (Johan Boer en Robert Melskens).
De term ‘primitieve datatypes’ wordt eigenlijk niet zuiver gehanteerd in de MIM 1.1 standaard. Zo zou ‘URI’ bijvoorbeeld kunnen zijn afgeleid van ‘CharacterString’. Een betere naam zou zijn “Built-in types”:https://nl.wikipedia.org/wiki/Datatype#Primitief_type. Het gaat om types die je gratis krijgt bij de schematalen. Zo hoef je voor het kunnen gebruiken van de XML-Schema datatypes ‘xs:string’, ‘xs:int’, ‘xs:gYear’ en de yaml datatypes ‘string’, ‘integer’ en ‘number’, in XML-Schema en yaml niets te doen. Elke XML-Schema cq. yaml parser weet wat daarmee bedoelt wordt.
Omdat we onze UML modellen zoveel mogelijk schemataal agnostisch proberen te modelleren kennen onze modellen bijv. de genoemde XML-Schema datatypes niet. Daar maken we gebruik van schemataal agnostische types zoals ‘CharacterString’. Om deze datatypes binnen Imvertor toch op de juiste wijze te kunnen verwerken worden een aantal karakteristieken hiervan binnen Imvertor gedeclareerd in een zogenaamd conceptual-schema (‘conceptual-schemas.xml’). Een bestand waarin per schemataal een aantal metagegevens van het datatype kunnen worden vastgelegd. Om te weten dat en naar welk XML-Schema type het datatype vertaald moet worden moet Imvertor bijvoorbeeld weten dat het om een primitive type gaat en welk XML Schema type je daar dan precies voor moet gebruiken. Om het te verwerken in een OAS3 of RDF schema heb je echter wellicht hele andere waarden en mogelijk zelfs hele andere metagegevens nodig. Het gaat er in ieder geval om dat Imvertor weet in welke situatie hij op welke wijze moet refereren aan het primitieve datatype.
Op het moment dat bij het processen van een model een referentie naar een agnostisch datatype wordt gevonden wordt, omdat Imvertor nergens iets anders vindt over zo’n datatype, teruggevallen op de definitie van dat datatype in het conceptual schema.
Nu kun je binnen Enterprise Architect dit soort datatypes op 2 verschillende manieren op een property specificeren.
Een voorbeeld van een package met dit soort datatypes is het package ‘MIM11 Primitieve datatypen’. Dit bevat de volgende MIM 1.1 primitieve datatypes:
Hoe deze datatypes in deze packages zijn gedefinieerd is niet van belang. De naam en evt. de identifier zijn van belang, niet het stereotype of enig andere karakteristiek. Zoals gezegd kan je, om een van deze datatypes te gebruiken, er naar refereren door in het ‘type’ veld het betreffende datatype hard in te geven. Het heeft echter de voorkeur er naar te refereren door in het ‘type’ veld een van de types uit de packages ‘MIM11 Primitieve datatypen’ te selecteren. Die manier van werken willen we zelfs binnen VNG-Realisatie standaard gaan toepassen.Om die laatste methode af te dwingen is het gebruik van de parameter ‘nativescalars’ met de waarde ‘no’ van belang. Het hard ingeven van een datatype in het ‘Type’ veld is dan niet meer toegestaan. }}
Binnen VNG Realisatie onderkennen we op dit moment 2 verschillende packages met generieke datatypen:
De gemeentelijke generieke datatypen staan gedefinieerd in het SIM package ‘Generieke Datatypen Gemeenten’ en de gml generieke datatypen in het SIM package ‘GML3’. Deze packages bevatten datatypes die gebaseerd zijn op de in de voorgaande paragraaf beschreven primitieve datatypes of op andere datatypes binnen ‘Generieke datatypes’ en ‘GML3’. Ze bevatten echter een aanscherping, bijv. d.m.v. een patroon, minimale lengte of minimale waarde. Dit zijn datatypes waarvan we verwachten dat ze binnen meerdere modellen een toepassing vinden. Denk aan ‘POSTCODE’, ‘YearMonth’, ‘NietNegatiefInteger’, ‘DMO’ en ‘DTMO’ maar ook ‘GM_Point’ en ‘GM_Polygon’.
Indien je in je EA bestand niet beschikt over het package ‘Generieke Datatypen Gemeenten’ dan kun je dit ophalen in de subversion folder voor de SIM trunk, het betreft het bestand ‘SIM_Generieke Datatypen.xml’.
Hiervoor zal nog een subversion tag worden aangemaakt waarna de tag gebruikt moet gaan worden.
Indien je in je EA bestand niet beschikt over het package ‘GML3’ dan kun je dit ophalen in de subversion folder voor de SIM tags, het betreft het bestand ‘SIM GML3 external in gebruik R20100128.xml’.
Ook het gebruik van generieke datatypen is redelijk eenvoudig. De datatypes kunnen in een SIM, UGM en BSM model aan een attribute gekoppeld worden middels een referentie in het type veld van dat attribute. Er wordt dus een referentie gemaakt naar een component in een van beide SIM generieke datatype packages (ook binnen een UGM en BSM model). Ook hier wordt dus een referentie gemaakt naar een extern package.
Deze sectie bevat informatie die alleen voor beheerders van EA configuraties en Imvertor van belang is.
De informatie in deze paragraaf is erg technisch van aard en daarom vooral bedoelt voor de VNG Realisatie beheerders van Imvertor (Johan Boer en Robert Melskens).
Naast dat de gemeentelijke generieke en gml datatypes zijn gedefinieerd in een UML model zijn ze ook in een extern schema gedefinieerd (bijv. XML-Schema of yaml). Het kan in dit geval gaan om complexe datatypes, groepen, enumeraties, referentielijsten, etc… Ook hier kan het weer gaan om verschillende schematalen al naar gelang waar behoefte aan is.
Wij hebben op dit moment alleen de packages ‘Generieke Datatypen’ en ‘GML3’ maar niets verhinderd ons om, als wij daar een goede reden voor hebben, andere packages en de daarbij horende schema bestanden te creëren. Op dit moment is daar echter nog geen reden toe.
De externe schema’s zouden op basis van de packages met generieke datatypen eveneens met Imvertor gegenereerd kunnen worden. Dat is echter bij ons niet het geval, voor nu hebben we ze handmatig vervaardigd en op een vaste via internet toegankelijke plaats opgeslagen. Zodra we echter wel van dat soort packages met Imvertor willen verwerken en er schema’s van willen genereren moeten ze natuurlijk weer voldoen aan dezelfde eisen als waaraan andere SIM packages moeten voldoen. We spreken echter af dat deze packages, ongeacht of ze wel of niet verwerkt worden met Imvertor, altijd voldoen aan deze eisen.
Let op! Op dit moment hebben we van zowel ‘Generieke Datatypen’ als ‘GML3’ ook nog ‘UGM’ en ‘BSM’ varianten. Deze zullen op korte termijn worden verwijderd.
Let op! Het package ‘Generieke datatypes’ in het ‘SIM’ project is nog van voor het MIM tijdperk. Dit model moet dus kritisch tegen het licht worden gehouden en worden aangepast aan de hierboven beschreven eisen, niet alleen qua metamodel maar ook qua primitieve datatypes waar de verschillende hierin gedefinieerde datatypes naar verwijzen.
Net als bij de ‘MIM 11 Primitieve Datatypen’ geldt ook hier dat alleen de naam van de componenten in het generieke model van belang is. Alle componenten die in het model gedefinieerd zijn moeten weliswaar correct zijn (zo kunnen ze als basis dienen voor een evt. lokaal datatype) maar voor de verwerking worden slechts de namen van de componenten gebruikt. Daarbij speelt ook hier het conceptual schema een rol. Alle in dit soort packages gedefinieerde datatypes moeten ook in het conceptual schema worden gedefinieerd zodat Imvertor weet dat het datatype in een ander schema gedefinieerd staat. In het geval generieke datatypen worden er in het conceptual schema geen schemataal specifieke gegevens opgenomen.
A.d.h.v. het attribute ‘//cs:Map/cs:forSchema/cs-ref:ConceptualSchemaRef/@xlink:href’ in het conceptual schema kan imvertor bepalen naar welk schema moet worden verwezen. Voorwaarde is wel dat de naam van het component in het ‘ Generiek datatype’ package exact gelijk is aan de naam van het gerelateerde component in het schema. De afspraak is dat de namen van deze datatypes alleen bestaan uit alfanummerieke karakters en underscores.
Let op! Voor de generieke datatypen gebruiken we op zowel SIM als UGM en BSM niveau hetzelfde package dat binnen het SIM project wordt geplaatst.
De volgende aanpassingen zijn n.m.m. nodig in de stylesheets:
Lokale datatypes worden altijd gedefinieerd binnen de folderstructuur van een SIM, UGM of BSM model. Het gaat hier om datatypes die gebaseerd zijn op de eerder behandelde primitieve datatypes of op datatypes binnen de lokale datatype package en een aanscherping bevatten. Toepassing van deze datatypes beperkt zich echter tot het model zelf. Lokale datatypes kunnen geen specialisatie van generieke datatypes zijn. Indien men een generiek datatype als basis wil nemen voor een lokaal datatype dan dient het generieke datatype gekopieerd te worden naar lokaal en daar verder worden aangescherpt.
Om deze datatypes correct te kunnen gebruiken moeten ze aan de onderstaande regels voldoen.
SIM Lokale datatypen:
UGM Lokale datatypen:
BSM Lokale datatypen:
Deze datatypes worden aan een attribute gekoppeld middels referentie naar het betreffende datatype.
Vraag De vraag is of we in UGM en BSM niet ook aan het UML type ‘Datatype’ het stereotype ‘Primitief datatype’ willen kunnen koppelen. In principe vind ik dat dat moet kunnen aangezien een datatype met aangescherpte definities geen PrimitiveType meer is. Ook het UGM stereotype ‘Primitief datatype’ klopt dan n.m.m. niet.
Het kan gebeuren dat we een datatype dat gedefinieerd is in een lokaal package ook in andere modellen willen gebruiken. Op dat moment moeten we zo’n datatype gaan definiëren in een package voor generieke datatypes. De procedure om dat te doen staat beschreven in de volgende paragraaf.
Het kan voorkomen dat een lokaal datatype ook voor andere modellen van belang kan zijn. In dat geval moet het worden omgezet naar een generiek datatype. De procedure daarvoor is als volgt: