-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Leere Objektlisten, deren Eigenschaft ZWINGEND ist #223
Comments
Das Ganze wurde schon in #184 behandelt, wird jedoch am Ende m. E. etwas unpräzise. Das vorstehende Beispiel mit der Eigenschaft Die Eigenschaft von ZWINGEND auf EMPFOHLEN zu setzen halte ich für keine Lösung. Der Client muss Klarheit darüber gewinnen, ob Termine vorhanden sind oder nicht. |
Ich gebe Ihnen Recht. Bei Pflichteigenschaften wäre es besser, eine leere Liste auszugeben, als die Eigenschaft komplett weg zu lassen. |
Formulierungsvorschlag für den Abschnitt
Statt "DÜRFEN" könnte im letzten Satz auch "SOLLEN" oder gar "MÜSSEN" stehen. Was wäre das beste? Ist das mit dieser Formulierung deutlich? |
@marians Mein Formulierungsvorschlag: JSON erlaubt es grundsätzlich, Eigenschaften mit dem Wert 'null' zu versehen. Dies gilt ausschließlich für Eigenschaften, die ihrerseits als Pflichteigenschaften mit ("ZWINGEND") deklariert sind und somit die Kardinalität "0 bis *" besitzen, also eine URL, eine Liste oder 'null' als Wert haben können. Clients MÜSSEN eine Eigenschaft mit dem Wert 'null' so behandeln, als wären zu der Eigenschaft im Objekt keine Daten vorhanden. Beispiele aus "meeting": "null", |
@marians Als Ergänzung zur letzten Zeile aus den Beispielen gilt: ein Server darf eine URL nur ausgeben, wenn die damit verbundene Liste auch Daten enthält. Gleichzeitg stellt sich an dieser Stelle die Frage, ob die Ausgabe von Objektlisten überhaupt noch Anwendung findet. Die Augabe einer URL in Verbindung mit #218 wäre hier m. E. die einfachste und performanteste Lösung. |
@stern24 "Ein Server DARF eine URL nur ausgeben, wenn die damit verbundene Liste auch Daten enthält." - das habe ich mir zuerst auch gedacht. Dabei ist folgendes zu bedenken: Zwischen dem Abruf des Objekts (z. B. oparl:Organization) und dem Abruf der entsprechende Liste (z. B. die Liste der Sitzungen, die über die Eigenschaft "meeting" verknüpt ist) vergeht in jedem Fall Zeit. Es ist möglich, dass zwischen den beiden Abrufen Elemente zur Liste hinzugekommen oder entfallen sind. Es kann also regulär vorkommen, dass der Server bei Ausgabe des einzelnen Objekts die URL der Liste ausgibt, weil diese gerade Elemente enthält. Dann fragt der Client die Liste über diese URL ab, diese enthält jedoch keine Elemente mehr. Sollte man das als Verstoß gegen die Spezifikation werten? Ich denke nein, daher ist hier evtl. die weichere Form "SOLL" angemessen: "Ein Server SOLL eine URL zu einer Liste nur dann ausgeben, wenn die Liste Einträge enthält." |
Das von Ihnen aufgezeigt Scenario tritt natürlich nicht nur innerhalb einer Abfrage auf, sondern zieht sich durch eine gesamtes System. Um dieses zu vermeiden, veröffentlichen wir in Zyklen, die z. B.im 2-Stunden-Takt oder tageweise erfolgen. Mit dieser Verfahrensweise ist davon auszugehen, dass die Daten konsistent sind. Aus Sicht des Servers ist es ein MUSS, weil die Ausgabe der Eigenschaft ZWINGEND ist. Wenn zum Zeitpunkt der Client-Abfrage Objektdaten vorhanden sind, erfolgt die Ausgabe einer URL, ansonsten 'null'. |
Hier sind mehrere interessante Fragen aufgeworfen. Ich gehe auf ein paar davon in separaten Kommentaren ein.
Eine nicht vorhandene oder leere Eigenschaft eines Objekts bedeutet nicht mehr und nicht weniger, als dass zu dem betrachteten Abrufzeitpunkt kein einziges Tripel existiert, auf welches dieses Pattern passt (in dem die ersten beiden Positionen festgelegt sind wärend die letzte Position variabel ist):
Welche Bedeutung hätte in einem solchen Fall die von @marians vorgeschlagene URL zu einer leeren Liste? Es wäre ein Query mit genau dem selben Pattern:
Eine solche URL muss dem Client aber vom Server dann nicht mitgeteilt werden, wenn er derartige Abfragen selbst formulieren kann. Mit #165 ist genau dies möglich. (Wenn aber im Fall leerer Eigenschaften auf die Übermittlung solcher URLs vom Server an den Client verzichtet werden kann - weil der Client die Query-URL bei Bedarf jederzeit selbst generieren kann - dann stellt sich möglicherweise die Frage ob dies bei nicht-leeren Listen auf die selbe Weise behandelt werden kann, also die (selbe) URL auch in dem Fall nicht an den Client übermittelt werden muss. Auf diese Frage und mögliche Antworten gehe ich hier aber nicht weiter ein.) |
@akuckartz Wenn ich ein Objekt mit einer ZWINGENDen Eigenschaften abrufe, erwarte ich ein Ergebnis in Form einer URL oder 'null'. Beispiel für eine leere Eigenschaft aus Da muss ich auch keine Abfrage mehr formulieren; da weiß ich, dass zu diesem Zeitpunkt keine Termine zu dem Gremium vorhanden sind. Was das an dieser Stelle mit einem Tripel zu tun hat, verstehe ich zudem nicht. |
An allen anderen Stellen wurde darauf geachtet, dass ZWINGENDE Eigenschaften auch automatisch getestet werden können. Wenn diese Anforderung nicht mehr gelten soll, dann kann man hier schlicht fordern, dass beim Vorhandensein von z.B. Terminen wie hier diese als Werte der Eigenschaft ausgegeben werden müssen und wenn keine vorhanden sind die Eigenschaft nicht vorhanden sein darf - oder nicht? @sterni24 Die Tripel-Sicht sollte helfen die Semantik des Vorschlags von @marians zu illustrieren. Dieser besteht ja nach meinem Verständnis darin auch bei keinem bekannten Termin eine URL auszugeben. |
Ich gehe davon aus, dass ein Validator auch auf ZWINGENDe Eigenschaften testet. Das íst ja genau der Punkt. In Ihrem Fall wäre das Programm nicht valide, weil bei nicht vorhandenen Terminen die Ausgabe der Eigenschaft Es geht mit hier darum, es für den Client eindeutig zu machen. Ein Client sollte sich nicht darum kümmern müssen, ob eine Eigenschaft ZWINGEND ist oder nicht. Semantik hin oder her, ich suche hier den praktischen Ansatz. Anmerkung: |
@sterni24 Wir sind einer Meinung, dass der Client wissen können MUSS, ob ein Server eine Eigenschaft unterstützt oder nicht. Und ich halte es ebenfalls für notwendig solche Informationen dem Client maschinenlesbar zur Verfügung zu stellen. Dazu Objekte mit Ich bin gegenwärtig dabei eine generelle Lösung vorzubereiten. Das wird aber noch ein paar Tage dauern. |
Ich denke, hierzu wurde alles gesagt. |
Für's Archiv: Dieses Thema wurde unter #226 weiter behandelt. |
Wie wird mit leeren Objektlisten umgegangen, deren Eigenschaft ZWINGEND ist?
Beispiele für die Eigenschaft
meeting
, wenn Daten vorhanden sind:"meeting": "https://oparl.beispielris.de/meeting_of_organization/1"
"meeting": [
"https://oparl.beispielris.de/meeting/1",
"https://oparl.beispielris.de/meeting/2",
...
]
The text was updated successfully, but these errors were encountered: