Gültigkeitsprüfung von JSON-Datensätzen mittels JSON Schema

5 Aug

Im Rahmen meiner Bachelorarbeit „ADORE“ beschäftige ich mich u.a. mit der Gültigkeitsprüfung von JSON-Datensätzen. In meinem letzten Blogpost gab es ja schon ein paar JSON Datensätze zu sehen und was meine Anwendung daraus für Graphen erstellt. Natürlich sollte man als gewissenhafter Programmierer niemals Eingabedaten blind vertrauen. Glücklicherweise gibt es JSON Schema – genau wie man XML-Instanzdokumente mittels XML Schema auf Gültigkeit prüfen kann, geht dies auch mit JSON. JSON Schemata werden selbst in JSON notiert und erlauben es, verschiedene Einschränkungen zu formulieren, z.B. dass bestimmte Properties eines Objekts einen bestimmten Datentyp haben müssen. Das kann z.B. so aussehen:

"paths":
        {
            "type": "array",
            "description": "This array joins edges to paths.",
            "required": true,
            "items":
            {
                "type": "object",
                "properties":
                {
                    "id":
                    {
                        "type": "string",
                        "required": true,
                        "description": "A unique ID for this path."
                    },
                    "edges":
                    {
                        "type": "array",
                        "description": "This array holds all the edges (specifically references to the IDs of the edges) belonging to this path.",
                        "additionalItems": false,
                        "items": { "$ref": "edgeType" }
                    }
                }
            }
        }

Hier wird ein Pfad beschrieben, der aus mehreren Kanten ("edges") besteht – die Beschreibung einer einzelnen Kante wird hier per Verweis eingebunden. Weiter oben in der Datei, hier nicht sichtbar, steht dann die Definition von "edgeType". Dieses Verfahren nennt man dann JSON Referencing – und hier fangen leider ein paar kleine Schwiereigkeiten an. Denn: Erstens, ist JSON Schema bis jetzt nur ein IETF Draft und es gibt genau einen vernünftigen Validator, der JSON Schema inkl. Referencing beherrscht. Leider löst dieser die Referenzen auch dann wirklich nur innerhalb von Schemata auf, benutzt man Verweise innerhalb eines JSON (Instanz-)dokumentes, kann man erstmal lange nach einem JSON Parser suchen, der JSON Referencing beherrscht. Glücklicherweise gibt es einen solchen aber.

Obwohl ich so meine Schwierigkeiten mittlerweile in den Griff kriegen konnte, verbleibt doch so etwas wie ein übler Nachgeschmack. JSON mag ein einfaches Datenformat sein, das für viele Zwecke klar XML vorzuziehen ist. (Um mal die offensichtlichste Alternative zu nennen.) Kommt man jedoch in den Bereich Validierung, bleibt es nicht aus, das man sich fast nach XML Schema sehnt. Mittlerweile wurde auch eine leistungsfähige XML-Bibliothek nach JavaScript portiert.

Das Problem scheint mir in der Philosophie von JSON zu liegen. JSON war schon immer als einfaches Datenformat geplant gewesen und die Anforderung, aufwändige Gültigkeitsprüfungen durchzuführen war hier nicht vorgesehen. Bedenkt man die geringe Auswahl an JSON Referencing-fähigen Parsern und den Fakt, dass am IETF Draft zu JSON Schema seit fast 2 Jahren keine Erweiterungen oder Veränderungen vorgenommen wurden, hat man das Gefühl, dass JSON Schema eine „Nische“ bleibt.

Ein weiteres Problem ist natürlich dass manche API im Internet nur als JSON oder nur als XML zu haben ist. Wie hat schon ein anderer schlauer Mensch gesagt: „Das gute an Standards ist, dass es so viele davon gibt.

Eine Antwort to “Gültigkeitsprüfung von JSON-Datensätzen mittels JSON Schema”

  1. Ingo Dahn 6. August 2012 um 10:10 #

    Hallo, wir beschäftigen uns am IWM in Koblenz im Rahmen von Conformance-Tests auch mit JSON-Validierung. Können wir in Erfahrungsaustausch treten?

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: