Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

MedMij maakt gebruik van verschillende lijsten voor onder andere de beveiliging van het MedMij netwerk. Deze lijsten bevatten deelnemerinformatie en zijn opgemaakt in XML. Al enige tijd speelt de vraag of XML wel het wenselijke formaat is, of dat gekozen moet worden voor JSON.

JSON en XML zijn formats waarmee gegevens worden gepresenteerd. Beide vormen kunnen worden gebruikt bij gegevensuitwisseling tussen applicaties. JSON is een open gegevensuitwisselingsformaat dat leesbaar is voor zowel mensen als machines. JSON is onafhankelijk van welke programmeertaal dan ook en is een veelgebruikte API-uitvoer in een breed scala aan toepassingen. XML is een opmaaktaal die regels biedt om gegevens te definiëren. Het maakt gebruik van tags om onderscheid te maken tussen gegevensattributen en de daadwerkelijke gegevens. Hoewel beide formaten worden gebruikt bij gegevensuitwisseling, is JSON de nieuwere, flexibelere en populairdere optie.

Advies

Hoewel de lijsten op moment van schrijven in XML worden uitgegeven en voor de verschillende lijsten ook schema’s zijn gemaakt, is JSON een interessante optie. Het advies van de Lead Architect van MedMij is dan ook dat we overstappen en wel om de volgende redenen:

  • MedMij is de enige uitgever van de lijsten. Hierdoor is het gebruik van schema’s minder van belang, het netwerk moet erop kunnen vertrouwen dat MedMij de lijsten volgens een bepaalde structuur opbouwt. Deze structuur kan natuurlijk wel in het afsprakenstelsel beschreven worden, net als dat het afsprakenstelsel nu de schema’s bevat in de vorm van XSD bestandendocumenten.

  • Qua omvang en complexiteit van de gegevens heeft JSON de voorkeur. Het is kleiner en eenvoudig te lezen door mens en machine. Hierdoor verbeteren de prestaties van de applicaties die de lijsten moeten opstellen en verwerken.

  • De binnen de MedMij lijsten gebruikte datatypen vallen binnen de range die JSON biedt.

  • Beveiliging wordt vooral op netwerk-niveau geregeld, waardoor partijen die met MedMij communiceren vertrouwd kunnen worden. Die hoeft niet extra op de data-laag worden uitgevoerd.

Uitgebreider onderzoek is mogelijk, maar de verwachting is dat het resultaat hetzelfde blijft.

Wat is

JSON

XML?

JSON XML staat voor JavaScript Object NotationExtensible Markup Language. Het is een lichtgewicht en voor mensen leesbaar gegevensformaat dat key-value pairs en arrays gebruikt om objecten en waarden weer te geven. JSON is afgeleid van JavaScript, maar is taal-onafhankelijk en kan door veel programmeertalen worden gelezen. JSON wordt vaak gebruikt voor webapplicaties, API’s en NoSQL-databases.

Voordelen van JSON

JSON is vanwege een aantal voordelen vaak het voorkeursformaat voor scenario's voor gegevensverwerking. Vergeleken met XML is JSON beknopter en compacter, waardoor het sneller kan worden verwerkt en gegenereerd. Dit vermindert de omvang en bandbreedte van gegevensoverdracht en verbetert de prestaties en efficiëntie van gegevensverwerking. Bovendien is JSON gemakkelijker te lezen en te schrijven dan XML, wat de leesbaarheid en onderhoudbaarheid van de code verbetert. Het ondersteunt ook native gegevenstypen zoals getallen, booleans en nul-waarden, waardoor de representatie en validatie van gegevens wordt vereenvoudigd. Bovendien maakt de compatibiliteit met JavaScript en andere webtechnologieën het gemakkelijker om webapplicaties en API's te ontwikkelen en te integreren.

Nadelen van JSON

JSON heeft enkele nadelen ten opzichte van XML die de toepasbaarheid en functionaliteit ervan beperken. Het is bijvoorbeeld minder expressief en flexibel dan XML, wat betekent dat er beperkingen zijn aan de complexiteit en verscheidenheid van datastructuren en schema's. Bovendien ondersteunt JSON geen opmerkingen, namespaces of attributen, waardoor het moeilijk wordt om metagegevens of annotaties toe te voegen. Definiëren van documenten met schema’s voor JSON is beperkt, al wordt hier snel in verbeterd. Dit komt de interoperabiliteit en mogelijkheden tot valideren niet ten goede, iet wat wel gewenst is bij de communicatie tussen meerdere verschillende systemen. Binaire gegevens worden niet standaard ondersteund in JSON, waardoor extra codering en decodering van gegevens vereist is. Ten slotte is JSON minder veilig dan XML, waardoor de gegevens kwetsbaar zijn voor injectieaanvallen of cross-site scripting.

Wat is XML?

XML staat voor Extensible Markup Language. Het is een flexibel en gestructureerd gegevensformaat dat tags en attributen gebruikt om elementen en hun relaties te definiëren. XML is bovendien taalonafhankelijk en kan door veel tools en standaarden worden verwerkt. XML wordt vaak gebruikt voor documentopmaak, configuratiebestanden en gegevensuitwisseling.

Overeenkomsten

JSON en XML zijn beide formaten waarmee gegevens opgemaakt worden voor communicatie binnen en tussen informatiesystemen. Hiermee kunnen gegevens op een gestandaardiseerde manier uitgewisseld worden. Hiermee worden de communicatie gestandaardiseerd, het gebruik van de informatie blijft een applicatie-aangelegenheid.

Om gegevens onderling uit te wisselen, moeten de volgende stappen worden ondernemen:

  1. Converteer de gegevens naar XML of JSON

  2. Verzend het XML- of JSON-bestand via het MedMij netwerk

  3. Converteer het XML- of JSON-bestand naar een voor de applicatie leesbare variant.

Voor beide formaten is de werking in deze zin hetzelfde.

Verschillen

Format

JSON gebruikt key-value pairs om een boomstructuur te creëren. De sleutel (key) is een string, die het paar identificeert. De waarde (value) is de informatie die u aan die sleutel geeft. XML is daarentegen een opmaaktaal: een subset van SGML met een structuur die lijkt op HTML. Het slaat gegevens op in een boomstructuur die informatielagen presenteert die u kunt volgen en lezen. De boom begint met een hoofdelement (bovenliggend element) voordat er informatie wordt gegeven over onderliggende elementen. Deze uitgebreide structuur is handig bij het laden van veel variabelen en dynamische configuraties.

Code Block
languagejson

flexibele en gestructureerde opmaaktaal, waarmee data leesbaar is voor mensen en computers. De gebruikte symbolen kunnen in de tekst van een document worden geplaatst om deze te ordenen en de verschillende delen van een label te voorzien.

XML is uitbreidbaar, omdat de ontwikkelaar zelf-beschrijvende tags kan maken. Deze taal presenteert niet noodzakelijkerwijs gegevens, maar stelt ontwikkelaars in staat deze op te slaan en te organiseren. Door om vast te stellen hoe de gegevens zullen worden gepresenteerd. Simpel gezegd is XML een opmaaktaal die is gemaakt om gegevens op te slaan.

XML stamt af van SGML (Standard Generalized Markup Language), maar op een flexibelere en eenvoudigere manier. Het is ontworpen om de uitwisseling van gegevens te vergemakkelijken door de opmaak universeel te maken. Om dit te doen werden specificaties opgesteld met betrekking tot semantiek: het heeft hierdoor een standaard en duidelijke structuur voor elke toepassing, waardoor de integriteit en uitwisseling van gegevens werd gewaarborgd.

Het is echter geen programmeertaal, omdat het geen algoritmen of berekeningen uitvoert. Het beschikt niet over een eigen set grammaticaregels en woordenschat om computerprogramma's te genereren. XML is ontwikkeld om de gegevens te identificeren, op te slaan en te organiseren. Verder kan het voordelig zijn in een verscheidenheid aan systemen, omdat het succesvolle HTML-functies kan overnemen.

Wat is JSON?

JSON staat voor JavaScript Object Notation, wat betekent dat het het primaire gegevensformaat is in JavaScript-toepassingen. De groeiende populariteit van JavaScript leidde bijgevolg tot het creëren van meer JSON-berichten. Hoewel andere formaten ook in aanmerking komen in dit programmeerplatform, vergen ze extra inspanning, terwijl JSON al geïntegreerd is en perfect gekoppeld is om met JavaScript te werken. Bovendien is JSON, ondanks dat het in JavaScript is geschreven, taalonafhankelijk (net als XML), wat betekent dat je het met elke programmeertaal kunt gebruiken.

Het eerste bericht van JSON werd in 2001 verzonden en sindsdien is er steeds meer gebruik gemaakt van dit gegevensformaat, dat wordt gebruikt om gegevens op te slaan en te transporteren. In feite ontvangt JSON, net als XML, ook gegevens van een webserver en verzendt deze naar een webclient. Er is echter minder codering nodig en de omvang is kleiner, wat bijdraagt aan snellere processen en datatransport.

Hoe kies je JSON of XML?

Als eerste moet gezegd worden dat een vergelijking tussen XML en JSON niet helemaal een eerlijke is. Het hangt volledig van de de aard, het doel, de context en de vereisten af welke van de twee beter is. Hierdoor is geen one-size-fits-all antwoord mogelijk. Factoren waarmee rekening moet worden gehouden, zijn onder meer de omvang en complexiteit van de gegevens, de leesbaarheid en onderhoudbaarheid van de code, de prestaties en efficiëntie van de gegevensverwerking, datatypes en validatie, evenals compatibiliteit en beveiliging. Deze onderwerpen staan hieronder uitgewerkt.

Voorbeelden

Code Block
{
  organisaties: [
    {
      naam: "MedMij"
      adres: {
        straat: "Maanweg"
        huisnummer: 174
        toevoeging: "Gebouw C, 3e etage"
        postcode: "2516 AB"
        stad: "Den Haag"
      }
    }
  ]
}
language
Code Block
xml
<organisaties>
  <organisatie>
    <naam>MedMij</naam>
    <adres>
      <straat>Maanweg</straat>
      <huisnummer>174</huisnummer>
      <toevoeging>Gebouw C, 3e etage</toevoeging>
      <postcode>2516 AB</postcode>
      <stad>Den Haag</stad>
    </adres>
  </organisatie>
</organisaties>
Syntax

Reden van gebruik

Voor de MedMij lijsten is één leverancier, namelijk MedMij zelf. De lijsten worden alleen door MedMij opgesteld, de deelnemers halen de lijsten op om deze te gebruiken voor onder andere de beveiliging van het netwerk. De deelnemers maken gebruik van allerlei verschillende technologiën.

Omvang

De syntax die in JSON wordt gebruikt, is compacter en gemakkelijker te schrijven en lezendan die van XML. Met JSON kunnen eenvoudig objecten worden gedefinieerd. XML is uitgebreider en vervangt bepaalde tekens voor entiteitsreferenties, omdat bepaalde tekens een bepaalde waarde hebben binnen de syntax. In plaats van het <-teken gebruikt XML bijvoorbeeld de entiteitsreferentie &itlt;. XML maakt ook gebruik van eindtags, waardoor het langer is dan JSON.

Parsen

eind-tags, zoals in het voorbeeld te zien is. Hierdoor is het groter dan JSON.

< = &lt;
> = &gt
( = &#40;
) = &#41;
# = &#35;
& = &amp;
" = &quot;
' = &apos;

Op moment van schrijven betekent dit dat een Zorgaanbiederskoppellijst van iets meer dan 9MB wordt teruggebracht naar iets minder dan 4MB, zonder eerst een verdere optimalisatie uit te voeren.

Info

Keuze: Door de veel kleinere hoeveelheid data die over de lijn moet, gaat de voorkeur uit naar JSON.

Leesbaarheid

JSON gebruikt key-value pairs om een boomstructuur te creëren. De sleutel (key) is een string, die het paar identificeert. De waarde (value) is de informatie die u aan die sleutel geeft. XML is daarentegen een opmaaktaal: een subset van SGML met een structuur die lijkt op HTML. Het slaat gegevens op in een boomstructuur die informatielagen presenteert die u kunt volgen en lezen. De boom begint met een hoofdelement (bovenliggend element) voordat er informatie wordt gegeven over onderliggende elementen. Deze uitgebreide structuur is handig bij het laden van veel variabelen en dynamische configuraties.

Leesbaarheid van de lijsten is alleen interessant bij de ontwikkeling van de software. Zodra een systeem is ingeregeld, zullen de lijsten niet meer zichtbaar zijn voor de Persoon. Voor de ontwikkeling van de software kan de ontwikkelaar ook gebruikmaken van de schema’s, voorbeelden en verantwoordelijkheden uit het afsprakenstelsel.

Info

Keuze: Ondanks dat leesbaarheid niet een heel grote rol speelt, gaat de voorkeur uit naar JSON.

Prestaties

Beide formaten moeten omgezet worden na ontvangst, echter voor de meeste talen is JSON is dit een stuk eenvoudiger. Door het verschil in syntax is JSON eenvoudiger te lezen en door de kleinere omvang gaat dit ook nog sneller.

Schemadocumentatie

Schemadocumentatie beschrijft het doel van een bestand en laat zien waarvoor het moet worden gebruiken. XML-documenten hebben een link naar hun schema in de header. Het schema is tevens in XML-formaat. De XML kan worden gevalideerd aan de hand van het schema en er kan worden gecontroleerd of alles correct en zonder fouten te laden isOp Javascript gebaseerde systemen kunnen JSON direct gebruiken, maar ook de meeste andere talen lezen JSON eenvoudig uit. XML moet echter altijd omgezet worden, wat voor grote bestanden een intensieve actie is.

Info

JSON geniet een duidelijke voorkeur.

Datatypes

JSON ondersteunt een beperkt aantal gegevenstypen, namelijk strings, getallen, booleans, verzamelingen en objecten. Door gebruik te maken van deze beperkte set, kunnen hele documenten worden gestructureerd. XML is echter flexibeler en ondersteunt complexe gegevenstypen zoals binaire gegevens en tijdstempels.

Info

Met de beperkte set van datatypes die JSON biedt, kunnen de lijsten worden samengesteld. De uitgebreide mogelijkheden van XML vormen in dit geval geen meerwaarde.

Schema’s

Schema’s worden vooral in de XML-wereld gebruikt om:

  • XML-documenten te beschrijven. XML-documenten bevatten een link naar een schema (XSD-document) en bevatten zo een beschrijving van hun eigen formaat;

  • Doordat gebruik te maken van de schema’s kan gevalideerd XML-documenten worden of de XML voldoet aan de in het schema beschreven eisen;

  • Onafhankelijke systemen van verschillende organisaties gebruiken een schema als een beschreven standaard om gegevens met elkaar uit te wisselen. Zo weten de verschillende partijen van elkaar of ze aan de afgesproken eisen voldoen.

Met JSON kunnen ook schema's worden gebruikt. Ze , deze zijn echter eenvoudiger en bieden meer flexibiliteit.

Ondersteuning voor data types

JSON ondersteunt slechts een beperkt aantal gegevenstypen, zoals strings, getallen en objecten. JSON kan ook Booleaanse arrays ondersteunen, wat XML niet kan zonder extra tags toe te voegen.

XML is echter flexibeler en ondersteunt complexe gegevenstypen zoals binaire gegevens en tijdstempels.

Makkelijk te gebruiken

Als opmaaktaal is XML complexer en vereist een tagstructuur. JSON is daarentegen een gegevensformaat dat voortkomt uit JavaScript. Het maakt geen gebruik van tags, waardoor het compacter en gemakkelijker leesbaar is voor mensen. JSON kan dezelfde gegevens in een kleinere bestandsgrootte weergeven voor snellere gegevensoverdracht.

Beveiliging

minder structuur. In tegenstelling tot XML zijn de schema’s niet direct gekoppeld aan het document. Om gebruik te maken van JSON-schema’s moet systemen over het algemeen worden voorzien van extensies.

Info

Als schema’s gebruikt moeten worden, gaat de voorkeur automatisch naar XML. Echter is het voor de MedMij lijsten de vraag of schema’s daadwerkelijk een meerwaarde bieden. Omdat er maar één uitgever is van de MedMij lijsten, namelijk MedMij zelf, kunnen de andere partijen (de MedMij deelnemers) op de correctheid vertrouwen. Controle en validatie is minder (of niet) noodzakelijk dan wanneer verschillende systemen dezelfde type documenten kunnen opleveren en elkaar moeten controleren en valideren. Hierdoor is JSON een geschikte keuze voor de MedMij lijsten.

Uitbreidbaarheid

Daar waar JSON gebruikmaakt van een vast aantal datatypes, kunnen binnen XML nieuwe datatypes gedefinieerd worden. Hiermee is de uitbreidbaarheid van XML vele malen beter, als je dit bekijkt vanuit het perspectief van schema-gebruik.

Info

Omdat de verwachting is dat de MedMij lijsten niet uitgebreid zullen worden met nieuwe datatypes, is JSON een prima optie. De uitbreidbaarheid van XML biedt in dit geval nauwelijks meerwaarde.

Veiligheid

JSON-parsing is veiliger dan XML. De structuur van XML is kwetsbaar voor ongeoorloofde wijzigingen, waardoor een beveiligingsrisico ontstaat dat bekend staat als XML External Entity Injection (XXE). Het is ook kwetsbaar voor ongestructureerde externe documenttypedeclaratie (DTD). Beide problemen kunnen op zich wel eenvoudig voorkomen worden door de DTD-functie tijdens de verzending uit te schakelen.

Hoe kies je JSON of XML?

Bij de keuze tussen JSON en XML voor gegevensverwerking is er geen one-size-fits-all antwoord mogelijk; het hangt af van de aard, het doel en de context van de gegevens en de verwerkingsvereisten. Factoren waarmee rekening moet worden gehouden, zijn onder meer de omvang en complexiteit van de gegevens, de leesbaarheid en onderhoudbaarheid van de code, de prestaties en efficiëntie van de gegevensverwerking, gegevenstypen en -validatie, evenals compatibiliteit en beveiliging. Over het algemeen is JSON geschikter voor eenvoudige en kleine gegevens, beter leesbaar en onderhoudbaar voor webontwikkelaars, sneller en efficiënter voor webapplicaties of API's, ondersteunt native datatypen maar mist een uitgebreide standaard schema-taal. JSON is beter compatibel met webtechnologieën, maar minder veilig dan XML. Aan de andere kant is XML geschikter voor complexe en grote gegevens, vereist typeconversie en validatie, is veiliger maar minder compatibel met webtechnologieën.Voor JSON geldt dat geen gebruikgemaakt mag worden van JSONP, maar waarschijnlijk is dit al niet aan de orde. Het gaat bij het uitwisselen van de MedMij lijsten om backchannel-verkeer, de browser (en webpplicatie) zijn hierbij buiten scope.

Info

Geen voorkeur, beiden kunnen veilig ingericht worden en hebben een extra set aan eisen nodig.

Referenties