Informatievlaanderen / Data.Vlaanderen.be

Vocabularia
Other
10 stars 23 forks source link

[UML modellen] Attribuut types in UML niet gelinkt aan een classifier die voorkomt binnen de scope van het modelbestand #273

Open mvanbrab opened 4 years ago

mvanbrab commented 4 years ago

Link waar het probleem zich voor doet: https://data.vlaanderen.be/

Omschrijving van het probleem: Sommige attribuut types in UML zijn niet gelinkt aan een classifier die voorkomt binnen de scope van het modelbestand.

Dit is nodig voor het goed functioneren van de nog uit te rollen vernieuwde toolchain (vinden van het correct package om correcte externe dependencies te kunnen linken).

In een correct OSLO UML model in EA moeten in principe alle attributen een type hebben dat gelinkt is aan een classifier (in de praktijk een Klasse, Datatype of Enumeratie).

Dit betekent dat bij het toekennen van het attribuut type een classifier moet geselecteerd worden via Select Type… in de gebruikersinterface.

Het type mag dus in geen geval letterlijk ingetypt worden. Een uitzondering hierop geldt voor enkele types die door de toolchain impliciet worden gemapt. Deze worden beschreven in de modelleringsregels; Boolean, Date, DateTime, Double, Duration, HTML, Integer, LangString, Literal, Month, MonthDay, String, Time, URI, Year, YearMonth. Achteraf valt het met de EA gebruikersinterface niet meer te achterhalen of een type manueel werd ingetypt (bij het openen van Select Type… opent de selectie dan op de plaats van de laatste selectie in het algemeen).

Bovendien moet de gelinkte classifier beschikbaar zijn in het model bestand. Voor de centrale EA repo wil dit zeggen dat de classifier zich niet mag bevinden buiten de package structuur die wordt geëxporteerd. Een veel voorkomende fout in de centrale EA repo is dat in een applicatieprofiel een type wordt gelinkt aan een classifier uit een ander applicatieprofiel of rechstreeks uit OSLO²_vocabularium.

Opsporen

In het finale .eap bestand kunnen de attributen niet gelinkt aan een classifier opgespoord worden met behulp van een query in EA.

Die query zoekt alleen in attributen die op een diagram voorkomen. Eerst moet dus het relevante diagram opgezocht worden. Dat kan met een query "DiagramsInBranch.sql":

SELECT Diagram_ID, Name
FROM t_diagram
WHERE t_diagram.Package_ID IN (#Branch#)
ORDER BY Name

Selecteer de te testen branch in de project browser en run deze query.

Het vervolg kan met een query "AttributeTypesWithoutClassifierInDiagrams.sql":

SELECT t_diagram.Diagram_ID, t_diagram.Name AS DiagramName, t_package.Name & ":" & t_object.Name & "." & t_attribute.Name AS AttributeName, t_attribute.Type AS AttributeType
FROM
(((t_diagramobjects INNER JOIN t_diagram ON t_diagramobjects.Diagram_ID = t_diagram.Diagram_ID)
INNER JOIN t_object ON t_object.Object_ID = t_diagramobjects.Object_ID)
INNER JOIN t_package ON t_object.Package_ID = t_package.Package_ID)
INNER JOIN t_attribute ON t_attribute.Object_ID = t_object.Object_ID
WHERE
t_diagram.Diagram_ID IN (<Search Term>)
AND (t_attribute.Classifier IS NULL OR t_attribute.Classifier = '0')
AND t_attribute.Type IS NOT NULL
AND t_attribute.Type NOT IN ('Boolean', 'Date', 'DateTime', 'Double', 'Duration', 'HTML', 'Integer', 'LangString', 'Literal', 'Month', 'MonthDay', 'String', 'Time', 'URI', 'Year', 'YearMonth')
AND 'true' NOT IN (SELECT t_objectproperties.Value FROM t_objectproperties WHERE t_objectproperties.Property = 'ignore' AND t_objectproperties.Object_ID = t_object.Object_ID)
AND 'true' NOT IN (SELECT t_attributetag.VALUE FROM t_attributetag WHERE t_attributetag.Property = 'ignore' AND t_attributetag.ElementID = t_attribute.ID)
ORDER BY 2, 3

Breng het ID van het relevante diagram, gevonden met de vorige query, over naar de Search Term. Meerdere diagrammen kan ook; scheid dan de IDs met kommas. Run dan deze query. Het resultaat geeft diagram ID, diagram naam, attribuut naam (voorafgegaan door Package en parent) en attribuut type.

Corrigeren