OParl / spec

Spezifikation für eine offene Schnittstelle für Ratsinformationssysteme
https://oparl.org
Creative Commons Attribution Share Alike 4.0 International
61 stars 21 forks source link

Leere Objekte untersagen #184

Closed black-snow closed 10 years ago

black-snow commented 10 years ago

Leere Objekte sollten pauschal nicht zulässig sein. Es sollte nicht möglich sein einen Pflichtwert schlicht mit einem leeren Objekt zu füllen. Dabei bedeutet "leer" wohl gerade, dass keine tatsächlichen Werte vorliegen. Ein Objekt mit Kontext aber ohne Werte ist ebenfalls als leer zu betrachten.

marians commented 10 years ago

Hierzu noch als Hintergrund: Wir haben uns die Frage gestellt, ob beim oparl:Location Objekt eine der beiden Eigenschaften (description oder geometry) ZWINGEND vorhanden sein sollte. Allerdings wäre das praxisfern, weil es Fälle geben kann, in denen nur description vorhanden ist, und andere, in denen nur geometry geliefert werden kann.

Um den unsinnigen Fall abzudecken, dass ein Objekt völlig ohne Eigenschaften ausgeliefert wird, schlagen wir diese zusätzliche Anforderung vor.

akuckartz commented 10 years ago

Einverstanden. Zur Präzisierung und Erweiterung:

Telofy commented 10 years ago

In verschiedenen Projekten hab ich es als nützlich empfunden verschiedene Mengen von Objekten aus unseren JSON-Objekten rekursiv rauszufiltern, um sie in eine kanonische Form zu bringen, wozu ich diese Funktion benutze. In der Regel ist das nur None, a.k.a. null, aber teilweise auch (None, '', {}, []). Das ist alles für Python-Dictionaries gedacht, die letztlich in JSON-Objekten enkodiert werden sollen, so dass ich Unterklassen und Tupel nicht beachte.

>>> canonicalized({'pony': 'Twilight Sparkle', 'middle_name': '', 'flaws': {'character_flaws': None}}, blacklist=(None, {}, ''))
{'pony': 'Twilight Sparkle'}

Vielleicht ließe sich dementsprechend die neue Anforderung einfach als eine Definition einer solchen kanonischen Form beschreiben. Besonders die rekursive Natur der Filterung könnte noch wichtig sein.

akuckartz commented 10 years ago

Ist "[]" als Wert JSON-LD konform? Habe ich nicht geprüft, falls ja, dann sollte das auch als leer und für OParl unzulässig erklärt werden. Eine solche Eigenschaft würde 0 RDF-Tripeln entsprechen.

marians commented 10 years ago

Vorsicht, dass wir hier nicht über's Ziel hinaus schießen. Folgender Fall ist in der Praxis denkbar:

Der RIS-Betreiber legt ein neues Gremium (oparl:Organization) an. Noch bevor er die ersten Mitglieder zum Gremium hinzufügen kann, ist es 17 Uhr, und der Sachbearbeiter muss die Arbeit leider unterbrechen.

Das System sollte diese Gruppierung ohne Mitglieder trotzdem ausgeben dürfen. Nun ist member aber eine zwingende Eigenschaft. Der einzig sonnvolle Wert dafür wäre meiner Ansicht nach "member": [].

marians commented 10 years ago

Zu leeren Arrays finde ich in JSON-LD keine Aussage. Daher sollte es erlaubt sein.

akuckartz commented 10 years ago

Es ist widersprüchlich, wenn für eine "zwingende" Eigenschaft vorgesehen wird, dass sie dennoch "leer" sein darf. Der Informationsgehalt einer solchen "leeren" Eigenschaft ist identisch zur Situation, dass sie nicht vorhanden ist: es gibt kein Tripel für die Beziehung - im konkreten Fall: es gibt kein Mitglied. (Ein Gremium kann übrigens durchaus auch unter anderen Umständen längere Zeit ohne Mitglieder bleiben.)

"ZWINGEND" sollte strikt wie ein Constraint einer relationalen Datenbank behandelt werden, also jederzeit gelten.

Die Auflösung des Widerspruchs besteht in der Lockerung der Eigenschaft zu "EMPFOHLEN".

marians commented 10 years ago

@akuckartz Ich gebe Dir Recht. Macht Sinn.

marians commented 10 years ago

Habe die Formulierung in commit 5fc81759e054172b5f882d38dae62a3e53825639 für leere Objekte ergänzt.