Features - Search
specdraftimplproposalUnterstützung für den Abruf von Features aus mehreren Collections sowie für gespeicherte Abfragen.
Umfang
Dieser Baustein unterstützt die Suche nach Features aus einer oder mehreren Collections. Das heißt, es unterstützt Abfragen, die mit den Filtermechanismen, die durch die Bausteine Features und Filter zur Verfügung stehen, nicht oder nicht bequem ausgedrückt werden können.
Datenformate, die nur eine einzige Objektart mit einem festen Schema pro Datei unterstützen, werden für Endpunkte dieses Bausteins automatisch deaktiviert.
Beispiele für die Arten von Abfragen:
- Abfragen mit einem langen Ausdruckstext, der nicht bequem als URL angegeben werden kann;
- Abfragen, die in einer einzigen Anfrage Ressourcen aus einer oder mehreren Collections abrufen;
- gespeicherte Abfragen;
- gespeicherte Abfragen, die mehrere Collections referenzieren;
- gespeicherte Abfragen mit Parametern.
Eine Query Expression wird als JSON-Objekt ausgedrückt.
Das Query-Expression-Objekt kann eine einzelne Abfrage (Key-Value-Paare "collections", "filter", "properties" und "sortby") oder mehrere Abfragen (Key-Value-Paar "queries" mit einem Array von Abfrageobjekten) in einer einzigen Anfrage beschreiben.
Für jede Abfrage:
- Der Wert von "collection" ist ein Array mit einem Element, dem Identifikator der abzufragenden Feature Collection.
- Der Wert von "filter" ist ein CQL2 JSON-Filterausdruck. Siehe den Filter-Baustein.
- Der Wert von "filterCrs" ist die URI des Koordinatenreferenzsystems der Koordinaten in einem "filter". Der Standardwert ist "http://www.opengis.net/def/crs/OGC/1.3/CRS84" (WGS 84, Longitude/Latitude).
- Der Wert von "properties" ist ein Array mit den Namen der Eigenschaften, die in die Antwort aufgenommen werden sollen. Siehe den Projections-Baustein.
- Der Wert von "sortby" wird zum Sortieren der Merkmale in der Antwort verwendet. Siehe den Sorting-Baustein.
- Der Wert von "resultSets" ist ein Objekt, das benannte Result-Sets deklariert. Jeder Wert ist ein Objekt: Ist es leer, besteht das Result-Set aus den IDs der von der Abfrage selektierten Features; mit einem Member "values", das eine Eigenschaft benennt, besteht es aus den IDs, die von dieser Eigenschaft der selektierten Features referenziert werden. "resultSet" mit einem Namen ist eine Kurzform für ein einzelnes Result-Set der selektierten IDs.
- Eine spätere Abfrage kann Features selektieren, die mit einem Result-Set in Beziehung stehen, und zwar mit dem CQL2-Prädikat
{"op": "inResultSet", "args": [ { "property": "..." }, "name" ]}in ihrem "filter". Das Prädikat verhält sich wie ein IN-Ausdruck (einzelne Werte) bzw. wie ein A_OVERLAPS-Ausdruck (Arrays) gegen die Objekt-IDs im Result-Set. Ein Result-Set kann nur von Abfragen referenziert werden, die auf die deklarierende Abfrage folgen. - Mit "resultSetOnly": true deklariert eine Abfrage nur ihre Result-Sets; sie trägt keine Features zur Antwort bei und wird in "numberMatched" und "numberReturned" nicht berücksichtigt.
Für mehrere Abfragen:
- Wenn mehrere Abfragen angegeben werden, werden die Ergebnisse zusammengeführt. Die Antwort ist eine einzelne Feature Collection. Die Feature-IDs in der Antwort auf eine Abfrage mit mehreren Feature Collections müssen eindeutig sein. Da der Bezeichner eines Features nur pro Feature Collection eindeutig sein muss, müssen sie mit der Feature-Collection-ID kombiniert werden. Es wird eine Verkettung mit "." als Verbindungszeichen verwendet (z. B. "apronelement.123456"). Deklariert der Feature-Provider, dass seine Feature-IDs global eindeutig sind, werden die IDs nicht umgeschrieben.
- Die direkten Key-Value-Paare "filter" und "properties" stellen 'globale' Bedingungen dar, die in jeder Abfrage mit dem entsprechenden Key-Value-Paar kombiniert werden müssen. Die globale und die lokale Eigenschaftsauswahlliste werden verkettet. Die globalen und lokalen Filter werden mit dem logischen Operator kombiniert, der durch das Mitglied "filterOperator" angegeben wird.
- Das globale Mitglied "filter" darf nur auf Queryables verweisen, die allen abgefragten Collections gemeinsam sind.
- Das globale Mitglied "properties" darf nur auf Presentables verweisen, die allen abgefragten Collections gemeinsam sind.
- Ein Feature, das von mehr als einer Abfrage selektiert wird, erscheint einmal pro selektierender Abfrage. Mit "deduplicate": true wird ein solches Feature nur einmal in die Antwort aufgenommen. Hinweis: "numberMatched" und "numberReturned" werden berechnet, bevor Duplikate entfernt werden, beide können also zu hoch sein, wenn die Deduplizierung aktiviert ist.
Allgemeines:
- Ein "Titel" und eine "Beschreibung" für die Query Expression können hinzugefügt werden. Es wird dringend empfohlen, beides anzugeben, um Benutzern die Abfrage zu erklären.
- Das Element "limit" gilt für die gesamte Ergebnismenge. Antworten werden nicht in Seiten aufgeteilt: Es gibt kein Paging und keine "next"-Links, "limit" ist eine Obergrenze für die Anzahl der Features in der Antwort.
- Standardmäßig enthält die Antwort "numberMatched". Wird "computeNumberMatched" auf false gesetzt, wird darauf verzichtet; dies vermeidet eine Count-Abfrage pro Abfrage und kann bei Query Expressions mit vielen oder verketteten Abfragen deutlich schneller sein. "numberMatched" wird dann nicht ausgegeben.
- Die Elemente "crs" und "verticalCrs" sind optional und können verwendet werden, um das Koordinatenreferenzsystem für die Koordinaten in der Antwort zu spezifizieren. Ist kein Wert angegeben, dann wird das Standard-Koordinatenreferenzsystem verwendet. Ist "verticalCrs" angegeben, dann muss es die URI eines vertikalen Koordinatenreferenzsystem sind und "crs" angegeben sein und die URI eines horizontales 2D-Koordinatenreferenzsystem sein.
- "sortby" wird nur pro Abfrage angewendet. Ein globales "sortby" würde erfordern, dass die Ergebnisse aller Abfragen zuerst kompiliert werden und dann die kombinierte Ergebnismenge sortiert wird. Dies würde das "Streaming" der Antwort nicht unterstützen.
- Im Falle einer parametrisierten gespeicherten Abfrage kann der Abfrageausdruck JSON-Objekte mit einem Member "$parameter" enthalten. Der Wert von "$parameter" ist ein Objekt mit einem Key-Value-Paar, bei dem der Schlüssel der Parametername und der Wert ein JSON-Schema ist, das den Parameter beschreibt. Bei der Ausführung der gespeicherten Abfrage werden alle Objekte mit einem "$parameter"-Member durch den Wert des Parameters für diese Abfrageausführung ersetzt. Kommagetrennte Parameterwerte werden in ein Array umgewandelt, wenn der Parameter vom Typ "array" ist.
- Parameter können auch in einem Member "parameters" im Abfrageausdruck angegeben werden und mit "$ref" referenziert werden.
- Parameter können in allen Membern der Query Expression verwendet werden, außer in "id", "title" und "description".
- Ein Parameter, dessen Schema ein "format" hat, das mit "geometry" beginnt (und keinen "type"), nimmt eine Geometrie entgegen, zum Beispiel ein Suchgebiet in einem räumlichen Prädikat. Der Wert kann eine Geometrie als WKT (Well-Known Text) oder eine GeoJSON-Geometrie sein. Ein Format wie "geometry-polygon" beschränkt den Parameter auf diesen Geometrietyp (der Typ wird validiert). Die Koordinaten liegen in dem durch "filterCrs" angegebenen Koordinatenreferenzsystem vor.
Limitierungen
Für parametrisierte gespeicherte Abfragen gelten die folgenden Beschränkungen:
- Das JSON-Schema eines Parameters unterstützt eine Teilmenge der Sprache. Insbesondere werden
patternProperties,additionalProperties,allOf,oneOf,prefixItems,additionalItemsunditems: falsenicht unterstützt. - Parameter in Filterausdrücken sind auf Skalarwerte (Strings, Zahlen, Boolesche Werte), Arrays von Skalarwerten oder Geometrien als WKT (siehe oben) beschränkt.
- POST zur Ausführung einer gespeicherten Abfrage wird nicht unterstützt. Dies wird hinzugefügt, nachdem die Spezifikation in OGC diskutiert wurde (z.B. ob die Nutzlast JSON oder URL-kodierte Abfrageparameter sein sollen).
Für Result-Sets gelten die folgenden Beschränkungen:
- Alle in einer Query Expression mit Result-Sets referenzierten Collections müssen vom selben Feature-Provider bereitgestellt werden.
Außerdem:
- Antworten werden nicht in Seiten aufgeteilt,
limitist eine Obergrenze für die Anzahl der Features in der Antwort. Für große Abrufe ist die asynchrone Ausführung von Abfragen vorgesehen, die ein separates Arbeitspaket ist.
Konformitätsklassen
Dieser Baustein implementiert die OGC-API-Features-Erweiterungen, die in den Kapiteln 5 und 6 des OGC Testbed-18 Filtering Service and Rule Set Engineering Report spezifiziert sind. Die Implementierung wird sich im Zuge der weiteren Standardisierung der Spezifikation noch ändern.
Operationen
| Ressource | Pfad | Methoden | Formate | Beschreibung |
|---|---|---|---|---|
Ad-hoc Query | search | POST | CSV, Debug Tokens, FlatGeobuf, GML, GeoJSON, HTML | Eine Ad-hoc-Query ausführen |
Stored Queries | search | GET | Abrufen der auf dem Server verfügbaren Abfragen. | |
Stored Query | search/{queryId} | GET | CSV, Debug Tokens, FlatGeobuf, GML, GeoJSON, HTML | Führt die gespeicherte Abfrage aus. Parameter werden als Abfrageparameter übergeben. |
Stored Query | search/{queryId} | DELETE, PUT | Erzeugen, Ersetzen und Löschen von Stored Queries. | |
Stored Query Definition | search/{queryId}/definition | GET | Abrufen der Definition der gespeicherten Abfrage. | |
Stored Query Parameters | search/{queryId}/parameters | GET | Abrufen der Definition der Abfrageparameter | |
Stored Query Parameter | search/{queryId}/parameters/{name} | GET | Abrufen der Details eines Abfrageparameters |
Pfad-Parameter
| Name | Ressourcen | Beschreibung |
|---|---|---|
queryId | Stored Query, Stored Query Definition, Stored Query Parameters, Stored Query Parameter | Der Identifikator der gespeicherten Abfrage. |
name | Stored Query Parameter | Der Name des Abfrageparameters. |
Query Parameter
| Name | Ressourcen | Beschreibung |
|---|---|---|
f | Search | Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet. |
f | Search | Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet. |
f | Stored Query | Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet. |
f | Stored Query Definition | Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet. |
dry-run | Stored Query | Bei true wird die Anfrage nur validiert, die gespeicherte Abfrage wird nicht geändert. |
Konfiguration
Optionen
| Name | Default | Beschreibung | Typ | Seit |
|---|---|---|---|---|
buildingBlock | Immer SEARCH. | string | v3.1 | |
enabled | false | Soll der Baustein aktiviert werden? | boolean | v3.1 |
caching | {} | Setzt feste Werte für HTTP-Caching-Header für die Ressourcen. | object | v3.1 |
managerEnabled | false | Steuert, ob Stored Queries über PUT und DELETE verwaltet werden können. | boolean | v3.4 |
optimisticLockingLastModified | false | Option zur Aktivierung der Unterstützung für die bedingte Verarbeitung von PUT- und DELETE-Anfragen, basierend auf der Zeit, zu der die Stored Query zuletzt aktualisiert wurde. Solche Anfragen müssen bei einer bestehenden Stored Query einen If-Unmodified-Since-Header enthalten, andernfalls werden sie zurückgewiesen. Eine Stored Query wird nur dann geändert, wenn die Stored Query seit dem Zeitstempel im Header nicht geändert wurde (oder wenn kein letzter Änderungszeitpunkt für die Stored Query bekannt ist). Die Option wird ignoriert, wenn optimisticLockingETag aktiviert ist. | boolean | v3.5 |
optimisticLockingETag | false | Option zur Aktivierung der Unterstützung für die bedingte Verarbeitung von PUT- und DELETE-Anfragen, basierend auf einem starken Entity Tag (ETag) der Stored Query. Solche Anfragen müssen bei einer bestehenden Stored Query einen If-Match-Header enthalten, andernfalls werden sie zurückgewiesen. Eine Stored Query wird nur dann geändert, wenn der aktuelle ETag der Stored Query zu den ETag(s) im Header passt. | boolean | v3.5 |
validationEnabled | false | Steuert, ob bei PUT von Stored Queries die Validierung über den Header Prefer (Wert handling=strict) unterstützt werden soll. | boolean | v3.4 |
allLinksAreLocal | false | Signalisiert Feature-Encodern, ob alle Links auf Objekte im selben Dokuments zeigen. | boolean | v3.4 |
Speicherung
Stored-Queries müssen im Value-Store unter dem relativen Pfad queries/{apiId}/{queryId}.json abgelegt werden.
Beispiele
- buildingBlock: SEARCH
enabled: true
managerEnabled: true
validationEnabled: false
allLinksAreLocal: true