Skip to content
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

Eigenschaften als URL-Parameter für alle OParl-Objekte #174

Closed
sterni24 opened this issue May 29, 2014 · 10 comments
Closed

Eigenschaften als URL-Parameter für alle OParl-Objekte #174

sterni24 opened this issue May 29, 2014 · 10 comments

Comments

@sterni24
Copy link
Contributor

Um gezielte Abfragen bestimmter Daten vorzunehmen, halte ich es für sinnvoll die Liste der reservierten URL-Parameter (siehe Spezifikation 4.13) um weitere objektspezifische Parameter zu erweitern.

Für die Implementierter bedeutet dies keinen nennenswerten Mehraufwand.

Beispiel: Abfrage aller oparl:Meetings für ein Gremium ab einem Startdatum
"https://oparl.ratsinfo.de/body/0/meeting/?organization=13&startdate=2014-01-01"

@akuckartz
Copy link
Contributor

Das ist genau die Art von "Abfragesprache" deren schleichende Einführung ich nach dem Beschluss zur Einführung der startdate- und enddate-Parameter bereits befürchtet hatte (ein Grund weshalb ich diese nicht begrüßt habe). Ich bin nicht begeistert von einem Vorgehen, bei dem nach und nach Teile einer solchen "Abfragesprache" spezifiziert und dann natürlich auch implementiert, getestet und validiert werden müssen.

(Was den Aufwand betrifft: Ich finde es in jeder Hinsicht einfacher schlicht eine SPARQL 1.1-Schnittstelle zum Bestandteil von OParl zu machen. Dennoch würde ich eher eine Umsetzung von #165 befürworten - wobei auch dafür das Problem besteht, dass die bis zur Freigabe von OParl 1.0 vorgesehene Zeit knapp ist !)

@akuckartz
Copy link
Contributor

Siehe auch #176

@akuckartz
Copy link
Contributor

Für das Beispiel "Abfrage aller oparl:Meetings für ein Gremium ab einem Startdatum" würde nur der Parameter startdate benötigt, wenn die meeting-Eigenschaft des Objekts für das Gremium auf "etwas" zeigt was mit dem Parameter startdate aufgerufen werden kann.

Ein Problem dabei: Bei einer oder wenigen Sitzungen sind die Werte einzelne Sitzungen und nur wenn es ein Link auf eine Liste ist, dann könnte der Parameter bei der Zusammenstellung der Elemente der Liste berücksichtigt werden. Möchte man dann prophylaktisch auch bei einer einzelnen Sitzung den Parameter anhängen? Denn nach aktuellem Stand der Spezifikation sind ein Link auf eine einzelne Sitzung und ein Link auf eine Liste von Sitzungen erst nach einem Zugriff darauf zu unterscheiden. Das würde zu unschönem IRI-/Parameter-Wildwuchs führen.

Eine denkbare Lösung bestünde ich der Ergänzung alternativer Eigenschaften wie meetingList, die (nur) für Links auf Listen verwendet werden. Dies würde aber aufgrund der betroffenen Eigenschaften zu erheblicher zusätzlicher Komplexität führen. Diese Problematik wird auch in der Hydra-Community diskutiert: Siehe HydraCG/Specifications#41 und https://www.w3.org/community/hydra/wiki/Avoid_that_collections_%22break%22_relationships

@sterni24
Copy link
Contributor Author

Den ersten Satz verstehe ich nicht. Bitte zeigen Sie mir folgenden Lösungsweg auf: Ein Client möchte für ein Gremium, dessen ID ihm bereits bekannt ist, alle zukünftigen Termine auslesen. Wie sieht die Anfrage an den Server und wie sieht das Ergebnis in JASONP aus?

@akuckartz
Copy link
Contributor

@sterni24 Die Aussage ist im ersten Satz ist nur, dass zur Angabe des Gremiums kein Parameter verwendet oder vorgesehen werden muss, da es selbst durch eine URL (bzw. IRI) identifiziert und zugreifbar ist. Vom Server muss das JSON-LD-Objekt für das Gremium geholt werden. Und wenn das Gremium eine meeting-Eigenschaft hat, dann kommt man darüber an die Sitzungen. Der Rest des Kommentars geht auf ungelöste Probleme bzgl. der Werte der Eigenschaft sowie Filterung und Paging ein. JSONP hat darauf keine Auswirkung.

@sterni24
Copy link
Contributor Author

@akuckartz Genau so habe ich mir das nicht vorgestellt!

Ein Client zieht sich ein Gremium und bekommt in diesem Objekt eine Objektliste aller Termine. Nun darf sich der Client aus einer Liste von z. B. 76 Einträgen die 4 zukünftigen Termine ermitteln. Siehe auch #167.

Wenn ich das richtig verstanden habe, müssen hier 76 Anfragen an den Server gesendet und die Ergebnisse vom Client geprüft werden. Das wäre wohl nicht im Sinne der OParl-Erfinder, oder?

@marians
Copy link
Contributor

marians commented Jun 1, 2014

Ein Zwischen-Feedback: @akuckartz und ich haben uns am vergangenen Freitag über das Problem ausführlicher ausgetauscht.

Aktuell ist es so, wie Sie (@sterni24) schreiben. Der Client müsste das entsprechende oparl:Organization Objekt haben oder abrufen. Über die Eigenschaft meeting käme der Client an alle Sitzungen der Gruppierung. Ist diese Liste kurz, kann der Server sie "inline", also direkt im Objekt ausgeben. Ist sie lang, sollte sie über eine eigene URL abrufbar sein. Um das Datum der jeweiligen Sitzung herauszufinden, müsste der Client jedes einzelne Objekt abrufen. (Das ist auch aus meiner Sicht unbefriedigend.)

Wie könnte es besser funktionieren? Hier ein paar Ausführungen, die auf dem aufsetzen, was wir bisher haben.

Für die "inline"-Ausgabe der Sitzung-URLs direkt im oparl:Organization-Objekt fällt mir keine Möglichkeit ein, die Liste durch den Client einzuschränken.

Bei der Ausgabe der Sitzungen-Liste über eine eigene URL wäre es dagegen recht einfach, eine Einschränkung durch den Client vorzusehen. Man könnte hierzu beispielsweise die schon vorgesehenen URL-Parameter startDate und endDate verwenden, die sich bei der Abfrage auf den Sitzungszeitpunkt beziehen würden. Diese Abfragemöglichkeit könnte per Spezifikation für alle Listen, die oparl:Meeting Objekte enthalten, vorgesehen werden. In diesem Fall müsste das sogar besonders performant sein, da das Abfragekriterium und das Sortierkriterium (Sitzungstermin) identisch sind.

Nun ist noch dafür zu sorgen, dass der Server diese Listen, die eine dynamische Abfrage ermöglichen sollen, ZWINGEND über eine eigene URL anbietet. Damit vermeidet man, dass der Server die Liste "inline" ausgibt und damit die Abfragemöglichkeit nicht greift.

Damit wäre für mich der Anwendungsfall "Sitzungen einer bestimmten Gruppierung in einem bestimmten Zeitraum abrufen" für mich befriedigend gelöst.

Weiterhin ist zu klären, welche derartigen Abfragemöglichkeiten noch benötigt werden. Ich bin bislang der Auffassung, dass wir Server-Implementierern einen Gefallen tun, wenn wir hier nur eine stark begrenzte Flexibilität einfordern. Schließlich muss jede einzelne Eigenschaft, nach der performant gefiltert werden soll, Server-seitig irgend eine Art von Index haben.

@akuckartz akuckartz assigned akuckartz and unassigned marians Jun 11, 2014
@akuckartz
Copy link
Contributor

Ich verschiebe dieses Issue auf die Zeit nach 1.0. Die Erfüllung der Anforderung wird dann voraussichtlich auf allgemeinere Weise mittels Linked Data Fragments erfolgen können (#165).

Die Verwendung der URL-Parameter startDate und endDate für Listenobjekte gehört zu #176.

@akuckartz akuckartz modified the milestones: FerneZukunft, 1.0 Freigabe Jun 13, 2014
@akuckartz akuckartz modified the milestones: JSON-LD Version, 2.0 Jun 28, 2014
@akuckartz
Copy link
Contributor

Aufgrund der Diskussionen in den letzten Tagen behandele dieses issue unter dem Milestone "JSON-LD Version" als Anwendungsfall von #165 weiter. Es hat für mich auch eine höhere Priorität.

@marians
Copy link
Contributor

marians commented Jul 5, 2014

Speziell für den Anwendungsfall "Sitzungen eines bestimmten Gremiums", auf Wunsch auch mit Beschränkung mit startDate und/oder endDate, ist dies im Entwurf für 1.0 gelöst. Ich schließe daher das Issue.

@marians marians closed this as completed Jul 5, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants