Denne side beskriver Datafordelerens moderniserede Dataleverancespecifikation (DLS).
Sideinformation
Den Moderniserede DLS vil bestå af registrets datamodel og en håndfuld maskinlæsbare bilag. På baggrund af disse vil den Moderniserede Datafordeler automatisk generere tjenester til datadistribution, herunder fildownloads, hændelser, GraphQL-tjenester og geodata-vektor-tjenester (WFS).

Efter identifikation af ændringsbehov opdateres de relevante bilag, f.eks. for datamodel, distribution eller sikkerhed, som derefter afleveres i Datafordelerens DLS GitHub repository til validering af Datafordelerens Change team.
Når ændringerne er godkendt, implementeres de på testmiljøer og idriftsættes efterfølgende - begge dele efter aftale mellem register og Datafordelermyndighed.
I processen står Modelsekretariatet som ansvarlig for Datamodellen. Modelsekretariatet har kun ansvaret for at datamodellen er korrekt. Det er registerets eget ansvar at indsende den nye godkendte datamodel til GitHub.
Følgende distributionstjenester fra registerets datamodel er autogenereret:

Git er et versionsstyringssystem, til håndtering af filversioner. Et Git repository er en database, der indeholder alle filer, og tilhørende filhistorik, for et givent projekt.
Brugere kan arbejde på lokale kopier af repository og synkronisere ændringer med et centralt repository, hvilket muliggør effektivt samarbejde på de versionsstyrede filer.
GitHub er en webbaseret hostingplatform, der bygger på Git-versionskontrolsystemet, hvor udviklere kan gemme, dele, samarbejde om og administrere koderepositories.
For vejledning i brug af Git og GitHub, samt god praksis, henvises til Git – What is Git? og GitHub.
DLS afleveres i Datafordeler Repository, hvor DLS’en versionsstyres og interessenter kan samarbejde om ændringer. Datafordeler Repository er ikke offentligt tilgængelig, hvorfor GitHub-brugere, der ikke er tildelt adgang, vil blive vist en 404 fejlside, når linket tilgås.
For at tilgå Datafordeler Repository kræves en GitHub-bruger. Når GitHub-brugeren er oprettet, kan rettigheder til at se repository opnås ved at kontakte Datafordeleroperatøren.

Datafordeler Repository benytter en branchingstrategi, som skal sikre en stabil Main branch (produktionsversion), der kun opdateres via pull requests fra replikeringskanalernes branches.
Replikeringskanalernes branches navngives efter formatet main/rcXXXXX, hvor X angiver replikeringskanalens numeriske id.
For hver ny DLS oprettes en separat branch fra replikeringskanalens branch, navngivet efter DLS-versionen (f.eks. main/rc00018/version2.4.5).
Dette minimerer risikoen for utilsigtede ændringer i replikeringskanalens branch.

En replikeringskanal arbejder altså primært med to branches:
Ved udvikling af ny DLS oprettes midlertidigt en tredje branch navngivet efter DLS-versionsnummeret (f.eks. main/rc00123/version2.1), hvilket sikrer konsekvent navngivning på tværs af replikeringskanaler.
Det overordnede flow ser ud således:
Historik for registrenes DLS’er tilgås via commit-historikken i Datafordeler Repository.
For at automatisere og standardisere DLS-valideringsprocessen stiller Datafordeleren kommandolinjeværktøjet DLS Validator til rådighed for registre og andre aktører, der udarbejder DLS'er. Dette muliggør, at en DLS-ansvarlig selv kan kvalitetssikre og kontrollere, at en given DLS overholder de påkrævede standarder defineret af Datafordeleren (se Indhold af den moderniserede Dataleverancespecifikation), før DLS'en sendes til Datafordeleren. Dermed kan udviklingstiden for nye DLS-versioner reduceres.
DLS Validator er et kommandolinjeværktøj, som validerer indholdet af Dataleverancespecifikationer (DLS'er), så dataintegritet og konsistens sikres, og dermed letter arbejdsgangen med at udvikle nye DLS'er.
Værktøjet validerer en række obligatoriske og valgfri komponenter af DLS'en, bl.a.:
DLS Validator, brugervejledning og tilhørende kildekode er tilgængelige via Datafordeler_DLS_Validering Repository. Bemærk at repository ikke er offentligt tilgængeligt, hvorfor adgang skal indhentes ved Datafordeleroperatøren. For at tilgå repository kræves en GitHub-bruger. Når GitHub-brugeren er oprettet, kan rettigheder til at se repository opnås ved at kontakte Datafordeleroperatøren.
DLS'en er overordnet defineret af en hierarkisk mappestruktur, som versionsstyres i et Git repository. Repository indeholder en mappe for hvert register, som indsender og distribuerer data via Datafordeleren. Register-mapperne følger en veldefineret struktur og indeholder en række påkrævede og valgfri bilag, som Datafordeleren skal bruge for at modtage og distribuere data.
De følgende afsnit beskriver mappestrukturen, mappernes indhold og bilagenes skemaer, samt vejleder om deres udfyldelse.
Bilag i Datafordelerens DLS er primært maskinlæsbare JSON-filer, som kan valideres mod et tilhørende JSON-skema. Et JSON-skema kan definere komplekse objekter, påkrævede felter, gyldige værdier, etc. Den formelle definition via JSON-skemaet sikrer ensartet udfyldelse og letter validering af bilag.
Bemærk:
Datafordelerens repository har nedenstående, overordnede mappestruktur.
<Repository rodmappe>
Mappen "Guides" indeholder alle vejledninger til, hvordan bilagene i DLS'en udfyldes. Dette inkluderer både en beskrivelse af strukturen for bilagene, samt eksempler på hvordan disse udfyldes.
Der er ingen bilag i denne mappe, der skal afleveres til Datafordelermyndigheden, som del af DLS'en, da filerne heri blot er vejledninger.
Denne mappe indeholder en mappe for hvert register, som indsender og distribuerer data via Datafordeleren.
Registrets mappe organiserer de bilag, som registret har udfyldt, per replikeringskanal. Et register kan have flere replikeringskanaler og de påkrævede bilag skal være udfyldt for hver kanal.
General-mappen skal indeholde følgende påkrævede, maskinlæsbare bilag:
Bilag | Krav |
DLS_metadata.json | Bilaget er påkrævet.Filen skal være navngivet som angivet her. |
Derudover kan et register i denne mappe specificere detaljer om registerets data, som ikke hører til i de øvrige mapper. Eksempler på bilag, hvis indhold hører hjemme i denne mappe er:
Registrets mappe organiserer de bilag, som registret har udfyldt, per replikeringskanal. Et register kan have flere replikeringskanaler og de påkrævede bilag skal være udfyldt for hver kanal.
Bilaget angiver hvilken version af DLS-formatet, den pågældende DLS følger – ikke registrets egen versionering af deres DLS. Ved idriftsættelse af den moderniserede Datafordeler, vil DLS-formatets version være "2.0".
Bilaget er formelt beskrevet af JSON-skemaet: DLS_Metadata_Schema.json.
Objekt | Beskrivelse |
version_format | En string, der beskriver det DLS-format versionsnummer, som den pågældende DLS følger og kan valideres imod. F.eks. "2.0", "2.1", "3.0". |
Filens brug til versionering er yderligere beskrevet i Versionering af DLS gennem DLS_metadata.json bilag.
Replikeringskanal-mappen indeholder en række undermapper, beskrevet i dette afsnit, som indeholder de maskinlæsbare bilag, der definerer den pågældende replikeringskanals distribution af data via Datafordeleren.
Mappen navngives efter formatet: "rc<numerisk id, prefikset med 0, op til 5 cifre>". F.eks. "rc00001"
Mappen er tiltænkt bilag, der beskriver replikeringskanalens bitemporale model. Eksisterende registres bitemporale model er veldefinerede i Datafordeleren. Et nyt register vil være nødsaget til at indlevere bilag, der specificerer den bitemporale model.
I Datamodel-mappen placeres de bilag, der definerer replikeringskanalens logiske- og fysiske datamodel.
Den fysiske datamodel specificeres i en XSD-fil, mens den logiske datamodel specificeres i en XMI-fil.
Navngivningen af filerne skal følge dette mønster:. MAJOR.MINOR.PATCH.[REGISTERNAVN jf. GraphQL schema].xmi
Bilag | Krav |
<filnavn>.xsd | Bilaget er påkrævet. |
<filnavn>.xmi | Bilaget er påkrævet. |
Den fysiske datamodel specificeres i en XSD-fil, der beskriver hvordan data ser ud på indlæsnings- og distributionstidspunktet.
XSD-filen indeholder:
Eksempel på UUID angivelse:
<xs:annotation> <xs:appinfo>EAID_B4EB6CD9_K545_9c37_A782_84B303BDE25A</xs:appinfo> </xs:annotation> |
Eksempel på angivelse af begrænsninger som en del af <xs:element> linjen:
<xs:element name="navnPåElement" type="xs:string" minOccurs="0" maxOccurs="1"> |
Den logiske datamodel specificeres i en XMI-fil, der definerer egenskaber og datatyper for entiteter, samt deres indbyrdes relationer. Alle elementer, attributter og relationer identificeres med UUID.
Filen indeholder følgende:
Relations.json er et supplement til datamodellen og bruges til at definere relationerne mellem entiteter internt i registret og eksternt til andre registre. Bilaget er nødvendig for fleksibel opslagslogik, dvs. for at muliggøre joins mellem entiteter og udstille disse relationer.
Bilaget er formelt beskrevet af JSON-skemaet: Relations_Schema.json.
Bilaget består af en liste af relationsversioner (RelationVersions). Hver RelationVersion er defineret af to egenskaber, et versionsnummer (RelationVersionNumber) og en liste af relationer (Relations). Versionering af bilaget er kompleks og er nærmere beskrevet i afsnit Versionering af Relations.
Navn | Type | Beskrivelse | Bemærkninger |
SourceEntity | String | Navnet på entiteten i kilderegistret | |
SourceField | String | Navnet på feltet i kildeentiteten der bruges til koblingen | Er ikke auto-genereret – skal udfyldes. |
TargetRc | String | RcId på register der kobles til | |
TargetRcVersion | String | Datamodelversionen af målregistret | |
TargetEntity | String | Navnet på entiteten i målregistret | |
TargetField | String | Navnet på feltet i målentiteten der bruges til koblingen | Er ikke auto-genereret – skal udfyldes. |
ToManyRelation | Bool | Specificerer om én kilde kan kobles til flere mål eller bare én | |
Alias | String | Det navn, som relationen har fået i XMI'en | Hvis et navn ikke er angivet i XMI'en, bruges følgende mønster som en reserve: {Kildefelt}_{Målregister}_{Målentitet}_{Målfelt}_ref |
Denne vejledning forklarer, hvordan man korrekt ændrer Relations bilaget. Der er tre scenarier, hvor der er behov for at ændre i bilaget. Disse scenarier er skitseret afsnittene neden for.
Processen og ansvar er ligeledes fordelt som for de andre bilag. Men når relations bilaget genereres første gang, sender Datafordelerleverandøren også Valideringsrapport (yderligere forklaret i afsnit Valideringsrapport) med til registret.
Den generator, der genererer bilaget, kan ikke udtrække kilde- og målfelter (”SourceField” og ”TargetField”) for relationerne, da disse ikke er defineret i XMI'erne. Derfor skal registret gennemgå hver enkelt relation i bilaget, når det modtager den autogenererede Relations.json, og angive kilde- og målfelter. Med andre ord, skal registret indtaste de felter, hvorpå JOIN-operationen skal ske for entiteterne (iflg. instruktionerne i afsnittet Fuldførelse af relation). Dette muliggør, at bilaget kan bruges til at generere en fleksibel GraphQL-tjeneste.
Derudover bør registret overveje følgende:
Bemærk at enhver manuel ændring i relationsbilaget, ud over at fuldføre ufuldstændige relationer, ikke repliceres af generatoren, når den køres igen. Dette skyldes, at generatoren bruger XSD'erne/XMI'erne som input og anser disse for at være autoritative. Det anbefales, at datamodellen (XMI’en) opdateres, så den afspejler alle manuelle ændringer.
Når der er foretaget manuelle ændringer i Relations.json af registret (fjernelse eller tilføjelse af relationer) anbefales det, at registrets datamodel også opdateres. Dette sikrer, at fremtidige genereringer af bilaget indeholder de korrekte relationer, uden behov for yderligere manuel intervention. Generatoren bag bilaget fungerer ved at analysere elementerne <packagedElement> og <connector> i XMI-filerne. Dette betyder, at enhver manuel ændring i Relations.json bør afspejles i førnævnte elementer:
Når en relation tilføjes til relationsbilaget, skyldes det typisk, at der mangler et <packagedElement> og en <connector> i XMI-filen, som derfor bør tilføjes.
Når en datamodelversion opdateres, skal trinene i afsnittet Første generation af bilag gentages. Det er vigtigt også at evaluere, hvordan datamodelændringerne påvirker andre registre (f.eks. hvis en entitet eller et felt fjernes/omdøbes).
Processen for at opdatere et Relationsbilag i produktion er:
Når Relationsbilaget genereres, produceres der også en valideringsrapport til den person som starter generatoren. Hvis der er noget i datamodellen, der giver anledning til fejl eller tvivl, vil den pågældende relation ikke blive parset (dvs. den vil blive udeladt fra bilaget), og advarslen / fejlen logges i valideringsrapporten.
Følgende fejltyper fremgår af valideringsrapporten:
Følgende advarsler fremgår af valideringsrapporten (for advarsel er relationer ikke udeladt):
En manuel relation tilføjes den seneste RelationVersion i bilaget. Hvis der er behov for at oprette en ny RelationVersion vil dette blive kommunikeret af Datafordeleroperatøren, når bilaget er blevet evalueret.
Fjernelse af en relation medfører en ”breaking change”. Derfor skal der altid oprettes en ny RelationVersion i bilaget. Et eksempel er vist under Versionering af Relations.json.
Den anbefalede fremgangsmåde er at:
For at fuldføre en relation skal registret tilføje feltnavnene i de tomme pladser i relationerne for ”SourceField” og ”TargetField”. Bemærk at feltnavnene skal omgives af citationstegn (f.eks. ”NavnPåFelt”).
Følgende oplysninger er allerede udfyldt i Relations.json og kan bruges til at hjælpe dig med at udfylde felterne:
I Security-mappen beskrives et registers sikkerhedsmodel. Sikkerhedsmodellen specificeres i én fil, som beskriver hvilket sikkerhedsniveau der er påkrævet, for at tilgå registerets forskellige entiteter via Datafordeleren. Datafordeleren opererer med tre sikkerhedsniveauer, som beskrevet neden for.
Bilaget er ydermere beskrevet formelt i JSON-skemaet: Security_model_Schema.json.
Sikkerhedsniveau | Navn | Beskrivelse |
1 | Kendt bruger | Data kan indeholde almindelige personoplysninger, som er omfattet af databeskyttelsesforordningen og databeskyttelsesloven. Tilgængelig for alle typer af log-in på Datafordeleren (e-mailadresse, MitID Privat og MitID Erhverv). |
2 | Begrænset data | Data indeholder almindelige personoplysninger eller oplysninger, der er særligt beskyttelsesværdige, og som er omfattet af databeskyttelsesforordningen og databeskyttelsesloven. Tilgængelig for log-in med MitID Erhverv, hvor brugeren har anmodet om og eksplicit fået godkendt adgang til denne data af registret. |
3 | Specielle begrænsede data | Data indeholder almindelige personoplysninger, følsomme personoplysninger eller oplysninger, der er særligt beskyttelsesværdige, og som er omfattet af databeskyttelsesforordningen og databeskyttelsesloven. Tilgængelig for log-in med MitID Erhverv, hvor brugeren har anmodet om og eksplicit fået godkendt adgang til denne data af registret. |
Ved udfyldelse af bilaget kan sikkerhedsniveauet specificeres på to niveauer:
Mindst én af ovenstående skal angives i bilaget. Hvis DefaultSecurity ikke er udfyldt, skal SpecificSecurity være udfyldt for mindst ét sikkerhedsniveau.
Følgende tabel fremviser eksempler for mulige kombinationer af DefaultSecurity og SpecificSecurity udfyldelse.
Bilag | Krav | |||
Security_Model.json | Bilaget er påkrævet. Filen skal være navngivet som angivet i venstre kolonne. Eksempler: Security_Model.json (Alle entiteter udstilles med Security Level 1)
Security_Model.json (Der er eksplicit angivet hvilke entiteter der udstilles med Security Level 1 og Secuirty Level 2)
Security_Model.json (Alle entiteter udstilles med Security Level 1 med undtagelse af CVRPersonType som er SecurityLevel 3).
|
Bemærk Hvis et register ikke bruger DefaultSecurity og ikke har beskrevet alle entiteter ved hjælp af SpecificSecurity, så vil de antages at have et Security Level 1. |
Registre, som indsender og distribuerer tabulære data via Datafordeleren, skal for den pågældende replikeringskanal vedlægge bilag i Tabular_data-mappen, der beskriver hvordan data skal distribueres via Datafordelerens distributionstjenester, dvs. prædefinerede og prægenererede fildownloads.
Mappen ”Tabular_data” indeholder tabulære data i form af bilag, dette inkluderer også vektordata. Bilag såsom Automated Predefined Filedownload, Automated Pregenerated Filedownload og Automated WFS er I denne mappe.
Bemærk at vektordata også betragtes som tabulær data.
Bilaget definerer hvilke fildownload Datafordeleren skal inkludere i de autogenererede distributionstjenester.
For hver entitet specificeres:
Angives entitetsnavn som "All", gælder indstillingerne for alle registerets entiteter.
Bilaget er formelt beskrevet i JSON-skemaet: Automated_Predefined_Filedownloads_Schema.json.
Automated_Predefined_Filedownloads-bilaget består således af en liste af objekter med felter som beskrevet i nedenstående tabel.
Hvis der ikke skal distribueres prædefinerede fildownload udfyldes bilaget blot med en tom liste.
Objekt | Beskrivelse |
EntityName | String: Navnet på entiteten. Nødvendig. |
FileDownloadType | Enumeration: Angiver, om det er et delta- eller totaldownload. Nødvendig. 1: Totaldownload 2: DeltaDownload |
TypeOfData | Enumeration: Angiver typen af data. Nødvendig. 1: Current 2: Temporal 3: Bitemporal |
Frequency | Number: Angiver antallet af dage mellem generering af nyt fildownload. Nødvendig.(Der kan angives enten værdien 1 eller 7. |
SecurityLevel | Enumeration: Angiver hvem der har adgang til data. Nødvendig. Deprecated, skal fortsat udfyldes her også men bruges ikke aktivt længere. 1: Knownuser - Data er omfattet af persondataloven og kræver kendt bruger 2: Restricted - Data er beskyttet, omfattet af persondataloven, og kræver kendt bruger med adgang der er godkendt af registret 3: SpecialRestricted - Ekstra sensitivt data. Som i niveau 2, er data beskyttet, omfattet af persondataloven, og kræver kendt bruger med adgang der er godkendt af registret. |
Eksempler på udfyldelse af filen fremgår i følgende tabel.
Bilag | Krav | ||
Automated_Predefined_Filedownloads.json | Bilaget er påkrævet. Filen skal være navngivet som angivet her i venstre kolonne. Eksempler på udfyldelse: Automated_Predefined_Filedownloads.json – Beskriver udvælgelse på entitetsniveau
Automated_Predefined_Filedownloads.json – Beskriver udvælgelse på baggrund af kombinationen af TypeOfData og FileDownloadType
|
Bilaget definerer hvilke prægenererede fildownload som registeret afleverer til Datafordeleren.
For hvert prægenereret fildownload angives et filnavn, sikkerhedsniveau og filformat, hvis registret ønsker denne type distribution.
Bilaget er formelt beskrevet af JSON-skemaet: Automated_Pregenerated_Filedownloads_Schema.json.
Automated_Pregenerated_Filedownloads bilaget består således af en liste af objekter med felter som beskrevet i nedenstående tabel.
Objekt | Beskrivelse |
FileName | String: Navnet på filen. Nødvendig. |
SecurityLevel | Enumeration: Angiver hvem der har adgang til data. SecurityLevel er beskrevet i 0 . Nødvendig. |
FileFormat | String: Angiver filformatet, f.eks. "XML". Nødvendig. |
Eksempel på udfyldelse ses i følgende tabel.
Bilag | Krav | |
Automated_Pregenerated_Filedownloads.json | Bilaget er valgfrit. Filen skal være navngivet som angivet i venstre kolonne. Eksempel: Automated_Pregenerated_Filedownloads.json
|
Bilaget Automated Geographical Filedownloads kan benyttes af registeret til at definere hvilke entiteter som har geografiske felter som skal bruges til filtrering af fildownloads. Dette inkluderer at specificere navnet på entiteten og en liste af navne på de geografiske felter. Hvis en eller flere entiteter ikke har et eller flere geografiske felter behøves de ikke fremgå i bilaget.
JSON-skemaet Automated_Geographical_Filedownloads_Schema.json består af en liste af Automated_Geographical_Filedownloads objekter. Disse objekter består af følgende egenskaber:
Objekt | Beskrivelse |
EntityName | String: Navnet på entiten. Nødvendig. |
GeographicFieldNames | List: Angiver hvilke geografiske felter der skal bruges til filtrering. Nødvendig. |
GeographicFieldNames er en liste af unikke tekststrenge som indeholder navnene på de felter som fortæller geografisk om hvor data’en til entiteten befinder sig eller hører til. Her er det vigtigt at understrege at feltet skal være af samme type og det derfor ikke er muligt at blande geografiske felter af forskellige typer eller at lave et nyt objekt for samme entitet.
Som et eksempel kan man have godt have en entitet ”NavngivenVej” med kun ”administreresAfKommune” i listen eller med både “vejnavnebeliggenhed_vejnavnelinje”, “vejnavnebeliggenhed_vejnavneområde” og “vejnavnebeliggenhed_vejtilslutningspunkter”, men ikke alle fire i samme liste. Årsagen er at feltet “administreresAfKommune” er af typen ”Kommunekode” og ”vejnavnebeliggenhed” felterne er af typen ”string”. Disse egenskaber er alle krævede før JSON-filen kan valideres.
Automated_Wfs_Schema.json bruges af et register, når de ønsker at definere hvilke entiteter de vil udstille via WFS for en given replikeringskanal. Bilaget angiver navnene på entiteterne.
Objekt | Beskrivelse |
Entities | String array: Navnet på entiteterne. Nødvendig. Kan indeholde et tomt array, hvis intet skal udstilles. Kan også indeholde ”All” som betyder alle entiteter fra XSD’en udstilles. |
Registre, som indsender og distribuerer rasterdata via Datafordeleren, skal for den pågældende replikeringskanal vedlægge bilag i Raster_data-mappen, der beskriver hvordan data skal distribueres via Datafordelerens distributionstjenester, det vil sige prægenererede fildownload.
Bilaget definerer hvilke prægenererede fildownload som registeret afleverer til Datafordeleren.
For hvert prægenereret fildownload angives et filnavn, sikkerhedsniveau og filformat, hvis registret ønsker denne type distribution.
Bilaget er formelt beskrevet af JSON-skemaet: Automated_Pregenerated_Filedownloads_Schema.json.
Automated_Pregenerated_Filedownloads bilaget består således af en liste af objekter med felter som beskrevet i nedenstående tabel.
Objekt | Beskrivelse |
FileName | String: Navnet på filen. Nødvendig. |
SecurityLevel | Enumeration: Angiver hvem der har adgang til data. SecurityLevel er beskrevet i 0 . Nødvendig. |
FileFormat | String: Angiver filformatet, f.eks. "XML". Nødvendig. |
Eksempel på udfyldelse ses i følgende tabel.
Bilag | Krav | |
Automated_Pregenerated_Filedownloads.json | Bilaget er valgfrit. Filen skal være navngivet som angivet i venstre kolonne. Eksempel: Automated_Pregenerated_Filedownloads.json
|
Filer versioneres automatisk gennem Githubs indbyggede versionsstyring. Versionering af maskinlæsbare formater bruger Git´s indbyggede versionering. Ændringer i disse filer kan således findes ved at bruge Git diff funktionaliteten direkte i ens lokale kommandoprompt eller ved at finde filen i Github og kigges på tidligere commits.
Git diff (funktionalitet til at se forskel på to filer)
Verificering via Github (Mere visuel vej til at se forskel)
Naviger til Datafordeler Repository

Eksempler på bilag der versioneres således:
Versionering af ikke-maskinlæsbare filer gennem Githubs versionsstyring understøtter ikke at man kan tjekke forskelle mellem versioner via eksempelvis Git diff. Dette kan eksempelvis gøres for Word-dokumenter udenfor Git.
Bilaget angiver hvilken version af DLS-formatet, den pågældende DLS følger – ikke registrets egen versionering af deres DLS. Ved idriftsættelse af den moderniserede Datafordeler, vil DLS-formatets version være "2.0".
Hvis der tilføjes / fjernes bilag fra DLS'en i fremtiden, bruges dette til at være bagud kompatibelt. Datafordeleren øger versionsnummeret, når en ny DLS-format version kommer ud. Dette skal registrene tilføje som værdi i deres DLS_metadata.json bilag.
Når et register ændrer i dets datamodel, kan det håndteres ved enten at oprette en replikeringskanal eller opdatere den eksisterende. Når ændringen træder i kraft, vil der blive lavet en ændring i både den interne og eksterne version.
Her opretter man en ny replikeringskanal og indsender data til begge replikationskanaler, både den eksisterende og den nye, som man har oprettet, til autogenerering. Den gamle replikeringskanal vil bibeholde modelversion 1, som den nuværende ’as-is’ løsning, hvor den nye replikeringskanal vil få modelversion 2 og blive den nye ’to-be’ løsning. Resultatet er altså to modelversioner, på hver sin replikeringskanal, hvor den ene version kører den ’gamle’ version og den anden version kører den ’nye’ version.

I dette tilfælde vil resultatet stadig være to interne modelversioner, igen en ’as-is’ version og en ’to-be’ version.
Her skal registrene dog levere flere DLS-filer. En samlet XSD fil til replikering, as-is XMI og XSD, to-be XMI og XSD samt to sæt af mapping regler fra den samlede XSD til as-is og to-be XSD-filer.

Datafordeleroperatøren og registrene bør i samarbejde vælge hvilken af de 2 mulige fremgangsmåder for intern versionering som registeret skal anvende. Det bør overvejes før processen om et skift sker, da implementeringen af den parallelle replikering-implementering i registerets eget system vil være stærkt afhængigt af hvilken fremgangsmåde der anvendes.
Det anbefales at hvis et register laver en mindre datamodel-ændring (som potentielt indeholder breaking changes) som leveres af samme bagvedliggende register-system at metoden fra Én replikeringskanal vælges. Dette kunne være tilføjelse af et par nye tabeller, fjernelse af enkelte felter, og lign.
Hvis registerets datamodel-ændring er en stor fuldamental ændring, som potentielt leveres af et helt separat ny-udviklet system der parallel-driftes med registerets gamle system, så anbefales det at metoden fra To replikeringskanaler vælges. Dette anbefales da denne metode ikke kræver nogen koordinering mellem registeret systemer, da hvert system har sin egen kanal med dedikeret sekvensnummer.
Da virkelighedens register datamodel-ændringer forventes at ligge et sted imellem de ovennævnte ender af skalaen, og da registeret muligvis har andre heri-ikke-beskrevne behov til paralleldriften, anbefales det at Datafordeleroperatøren og registrene sammen vurderer på en case-by-case basis hvilken fremgangsmåde der passer bedst til den konkrete situation.
Ekstern versionering relaterer sig til udstilling af registrenes data til anvendere og baserer sig på register-navne og eksterne versionsnumre. En ny datamodel for et givent register er stadig det samme register og register-navnet skal dermed ikke nødvendigvis ændres, når der kommer en ny version. Helt konkret menes der her at register navneændringer der kommer udelukkende pga. ny datamodel (f.eks. MAT à MAT2) fremadrettet ikke er teknisk nødvendig.
Det er muligt at indføre et nyt register-navn ifm. en versions-opdatering hvis registeret og Datafordeleroperatøren aftaler dette, men det anbefales ikke at gøre det da dette vil anses af DAF-systemet som et helt nyt register, og ikke blot en ny version af et eksisterende register. Bemærk at hvis register-navnet ændres så skal den interne versionering med separate replikeringskanaler, beskrevet i To replikeringskanaler, vælges.
Når der oprettes en ny intern modelversion, beskrevet i Intern versionering, opretter DAF en ny ekstern version som udstiller ændringerne til anvenderne. Den gamle, eksisterende snitflade vil basere sig på den ’gamle’ ’as-is’ løsning, og der oprettes en ny ’to-be’ version ved siden af, så dette kan paralleldriftes så anvenderne har mulighed for at opdatere deres systemer.

Hvis et register sender data til to separate replikeringskanaler, vil det totale flow se ud som i nedenstående figur.

Hvis et register sender data til én enkelt replikeringskanal, vil det komplette flow se ud som neden for.

Som kan ses i ovenstående figurer så er den anvender-vendte eksterne snitflade altid ens overfor anvenderne, uagtet hvilken fremgangsmåde der er blevet valgt i den interne versionering.
Når et register ændrer i dets datamodel, skal registeret aflevere følgende bilag, som bruges til at generere services:
Det er ikke tilladt at ændre felter. I stedet skal et register specificere et nyt felt som er fyldt med konverteret data fra det eksisterende felt. Efter perioden for afskrivning af nuværende, bliver det gamle felt slettet og det nye felt kan omdøbes hvis det er nødvendigt.
Så længe der er paralleldrift på flere versioner af samme datamodel, vil det være påkrævet af et register at aflevere XSD-skemaer på de datamodeller der driftes. Dette betyder også, at hvis et register har paralleldrift på 3 datamodeller, vil det være påkrævet af et register at aflevere tilsvarende flere XSD-skemaer. Bemærk at det ikke anbefales at have mere end 2 modeller ad gangen.

XMI og XSD placeres under den tilhørende replikeringskanals mappe i GitHub, medmindre ændringerne kommer i forbindelse med en ny replikeringskanal, så oprettes der en ny mappe i GitHub. Reglerne for As-is og To-be mapping håndteres af autogeneratoren og kræver ikke yderligere handlinger af registret.
Bilaget Relations versioneres på to niveauer:
{
"RelationVersions": [
{
"RelationVersionNumber": "1",
"Relations": [
{
"SourceEntity": "Husnummer",
"SourceField": "navngivenVej",
"TargetRc": "22",
"TargetRcVersion": "1",
"TargetEntity": "NavngivenVej",
"TargetField": "id_lokalId",
"ToManyRelation": false,
"Alias": "husnummerHoererTilNavngivenVej"
},
{
"SourceEntity": "Husnummer",
"SourceField": "adgangTilBygning",
"TargetRc": "18",
"TargetRcVersion": "1",
"TargetEntity": "Bygning",
"TargetField": "id_lokalId",
"ToManyRelation": false,
"Alias": "husnummerGiverAdgangTilBygning"
}
]
},
{
"RelationVersionNumber": "2",
"Relations": [
{
"SourceEntity": "Husnummer",
"SourceField": "navngivenVej",
"TargetRc": "22",
"TargetRcVersion": "1",
"TargetEntity": "NavngivenVej",
"TargetField": "id_lokalId",
"ToManyRelation": false,
"Alias": "husnummerHoererTilNavngivenVej"
}
]
}
]
} |
Fildownload bliver automatisk genereret baseret på den leverede fysiske datamodel der leveres af et register. Fildownload versioneres derfor også på tværs af replikeringskanaler, hvilket vil sige at ændringer i enkelte entiteter vil forårsage en ny version af alle fildownload for den replikeringskanal, hvis ændringen indebærer at anvenderne skal lave ændringer i eget systemet for at bruge den pågældende tjeneste. Eksempelvis hvis der fjernes et felt eller en entitet. Det samme gør sig gældende for GraphQL-tjenester.