Document toolboxDocument toolbox

XML of JSON voor de MedMij lijsten

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 documenten.

  • 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 XML?

XML staat voor Extensible Markup Language. Het is een 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

{ organisaties: [ { naam: "MedMij" adres: { straat: "Maanweg" huisnummer: 174 toevoeging: "Gebouw C, 3e etage" postcode: "2516 AB" stad: "Den Haag" } } ] }
<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>

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 dan die van XML. Met JSON kunnen eenvoudig objecten worden gedefinieerd. XML is uitgebreider en vervangt bepaalde tekens, omdat bepaalde tekens een bepaalde waarde hebben binnen de syntax. In plaats van het <-teken gebruikt XML bijvoorbeeld &lt;. XML maakt ook gebruik van 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.

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.

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 een stuk eenvoudiger. Op 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.

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.

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, deze zijn echter eenvoudiger en bieden 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.

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.

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. 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.

Referenties