Open GeertThijs opened 7 years ago
Kardinaliteit heeft een semantische betekenis, ttz als ik zeg busnummer[0..1] zeg ik dat een adres niet altijd een busnummer heeft. Wat het niet betekent is dat ik busnummers mag weglaten in een data-uitwisseling.
Eigenlijk niet, toch niet in de huidige manier van werken. De kardinaliteiten zijn enkel van toepassing bij de profielen en bepalen een schema, ze zeggen niets over het voorkomen van die properties in realiteit. Als je dat zou willen doen, kom je bij OWL terecht, maar daar zie ik geen meerwaarde in voor was OSLO doet.
Het principe van meerdere soorten NULL bestaat niet in RDF, en ik zie er ook niet vlug een correcte manier om iets gelijkaardigs te bekomen.
De stereotypes in CPSV-AP zijn daar gebruikt ter vervanging van kardinaliteiten. Elk mandatory attribuut heeft kardinaliteit [1..] en elk optioneel [0..]. Ze hebben de stereotypes niet gebruikt om stereotypes te gebruiken, maar gewoon om de manier waarop ze visueel in het schema staan. (Ze leggen nooit een upper limit op wegens de openheid van RDF.)
Het opleggen van restricties op het "in werkelijkheid" aantal van elk attribuut lijkt mij heel gevaarlijk om je vast te zetten in een bepaalde context. Ik zie er ook geen direct voordeel in.
Je zegt het zelf: kardinaliteit heeft geen betekenis bij de huidige manier van werken. Wat niet betekent dat de huidige manier van werken OK is. INSPIRE doet expliciet moeite om wel betekenis te geven aan kardinaliteiten, dus zo vergezocht is dit idee niet. Gewoon omdat het principe niet bestaat in RDF (maar blijkbaar wel in OWL? @Dieter: bedoel je owl:cardinality?) is geen goed argument. INSPIRE durft onomwonden zeggen dat een adres steeds een adrescomponent heeft, dat een busnummer niet altijd voorkomt, dat een geldigheidsperiode altijd een begindatum heeft etc. Wat dus niet betekent dat al deze gegevens in elke data-uitwisseling moeten zitten. Ik vind het juist gevaarlijk om het aantal-in-werkelijkheid weg te laten: niemand die weet of het gegeven ontbreekt op het terrein of in de dataset. Als je bv busnummers weglaat omdat je ze niet hebt creëer je wel schijnbare adresdubbels: adres123 Molenstraat 12 bus 1 en Adres456 Molenstraat 12 lijken dan hetzelfde adres te zijn. En er is zeker ook de vraag (zie Burgerloket): we hoeven toch niet voor elke toepassing altijd alle elementen vermeld ih profiel uit te wisselen. Op zijn minst moeten we in de specs zeggen wat de kardinaliteit dan wel betekent, iets dat we nu ook niet doen.
INSPIRE gebruikt kardinaliteiten omdat het een profiel is, en geen vocabularium.
Via OWL kan je kardinaliteiten meegeven (owl:cardinality
, owl:maxCardinality
, owl:minCardinality
), waarmee je dan zegt dat vb een GeregistreerdeOrganisatie minstens 1 identicatienummer heeft (ook al is het niet gekend). OWL brengt echter heel wat nadelen mee, de reden waarom het niet is gebruikt is OSLO:
De adresdubbels uit jouw voorbeeld zouden geen probleem zijn, want elk adres heeft zijn eigen URI.
Kardinaliteit heeft een semantische betekenis, ttz als ik zeg busnummer[0..1] zeg ik dat een adres niet altijd een busnummer heeft. Wat het niet betekent is dat ik busnummers mag weglaten in een data-uitwisseling.
We zijn hier niet consequent mee omgegaan in de OSLO-AP's. Bij het Basis Persoon AP geven we de werkelijke kardinaliteit weer (op nog wat foutjes na), dat kan daar ook aangezien er geen applicatie achter zit die bepaalt wat voor de toepassing verplicht of optioneel is. Bij het Dienstencataloog AP echter zie ik kardinaliteiten zoals toepassingsgebied[0..]. Dit klopt niet met de werkelijkheid: elke Dienstverlening heeft altijd een toepassingsgebied. INSPIRE lost dit op dmv het stereotype voidable, elementen van dit type mag je weglaten bij data-uitwisseling, of de kardinaliteit vh element nu 0 of 1 of is doet er niet toe.
INSPIRE biedt zelfs de mogelijkheid om een element toch op te voeren in een data-uitwisseling en er de waarde NULL aan mee te geven op voorwaarde dat je zegt waarom de waarde NULL is: omdat het een voidable element betreft (NULL vh type unpopulated), omdat je de waarde niet kent (NULL vh type unknown) of omdat je de waarde wel kent maar ze niet mag meegeven (NULL vh type withheld).
Ook ISA werkt met stereotypes in CPSV-AP: mandatory of optional (waarbij deze keuze enkel geldt voor verzenders van data, als ontvanger moet je in principe alle elementen kunnen verwerken). Voor de rest geven ze daar alle elementen kardinaliteit van ten minste 1.
Wat ik voorstel is dit: in het UML-diagram geven de kardinaliteiten weer of een element in werkelijkheid steeds voorkomt of niet, om aan te geven of een element verplicht/optioneel is bij data-uitwisseling voegen we net als ISA een tabel toe met per element de kwalificatie verplicht of optioneel (we zouden zoals ISA bijkomend met stereotypes verplicht/optioneel kunnen werken maar dit verzwaart het UML-diagram).