Filter op WKPB attributen met type TimeInstanceType. Hoe?

In de WKPB WFS treffen we een aantal attributen aan met als type TimeInstanceType. Als we op deze attributen filteren alsof het een datum attribuut betreft dan geeft dat geen resultaat.
Hoe moeten we omgaan met deze attributen?

Hoi @Rene_Westenberg heb je een voorbeeld request van hoe je de WFS aanroept? Dat maakt het makkelijker om te kijken waar het fout gaat.

Een vervolgvraag van mijn kant is waarom PDOK ervoor kiest om dit TimeInstant type te kiezen en niet het gebruikelijke date formaat wat algemeen gangbaarder is?

Als ik het goed heb uitgezocht dan zou dit een geldig WFS GetFeature request moeten zijn met TimeInstant:

<wfs:GetFeature service="WFS" version="2.0.0"
outputFormat="application/gml+xml; version=3.2" count="1000" startindex="0" xmlns:wkpb="http://wkpb.geonovum.nl"
xmlns:wfs="http://www.opengis.net/wfs/2.0"
xmlns:fes="http://www.opengis.net/fes/2.0"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml/3.2"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/2.0/wfs.xsd">
<wfs:Query typeNames="wkpb:pb_multipolygon" srsName="EPSG:28992"><fes:Filter>
<fes:And>
<fes:Intersects><fes:ValueReference>geom</fes:ValueReference>
<gml:Polygon gml:id="geo.1" srsName="EPSG:28992"><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">134451.1935 442914.82375 134451.1935 443700.63625 137375.36849999998 443700.63625 137375.36849999998 442914.82375 134451.1935 442914.82375</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></fes:Intersects>
<fes:After>
<fes:ValueReference>datumInWerking</fes:ValueReference>
<gml:TimeInstant frame="ISO - ISO 8601 — Date and time format" gml:id="T01">
<gml:timePosition>2007-12-28T05:08Z</gml:timePosition>
</gml:TimeInstant>
</fes:After>
</fes:And>
</fes:Filter>
</wfs:Query>
</wfs:GetFeature>

Ik krijg echter een foutmelding:
WFS server error. Invalid or Unsupported FILTER in GetFeature

PS Ik ben een collega van Rene.

Een filter dat we gebruiken voor het filteren op een dateTime attribuut is bijvoorbeeld het volgende:

<Filter xmlns="http://www.opengis.net/fes/2.0"><PropertyIsGreaterThanOrEqualTo matchCase="true"><ValueReference>datumInWerking</ValueReference><Literal>01-01-1990</Literal></PropertyIsGreaterThanOrEqualTo></Filter>

Als we dit toepassen op een TimeInstanceType dan levert dat niets op.

Als ik naar de Capabilities kijk, dan zie ik twee dingen:

  • Alleen ImplementsMinTemporalFilter staat op True, ImplementsTemporalFilter staat op False. Je bent dus al beperkt in je tijd-filtering.
  • Bij de Temporal_Capabilities staan alleen TimePeriod en TimeInstant genoemd als Operands, en alleen During als Operator.

Ik denk dat de boven genoemde verzoeken dus niet herkend worden omdat de tijdsafhankelijke filtering redelijk beperkt is, en je voor zover ik uit de Capabilities kan afleiden alleen During kunt gebruiken.
Toch zou dat voldoende moeten zijn, als ik zie wat je probeert te bereiken.

Altijd verstandig om naar de capabilities te kijken. Met dank aan @sbjager het volgende voorbeeld request geschreven wat filtert op alle pb_multipolygon features vanaf 2007-12-28T05:08 tot nu:

#!/usr/bin/env bash
current_date_time=$(date +"%Y-%m-%dT%H:%M:%S")
cat << EOF | curl -H "Content-Type: text/xml" -X POST --data-binary @- https://service.pdok.nl/kadaster/wkpb/wfs/v1_0
<wfs:GetFeature service="WFS" version="2.0.0" outputFormat="application/gml+xml; version=3.2" count="5" startindex="0" xmlns:wkpb="http://wkpb.geonovum.nl" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml/3.2" xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/2.0/wfs.xsd">
    <wfs:Query typeNames="wkpb:pb_multipolygon" srsName="EPSG:28992">
        <fes:Filter>
                <fes:During>
                    <fes:ValueReference>wkpb:datumInWerking</fes:ValueReference>
                    <gml:TimePeriod frame="http://www.iso.org/iso/iso8601">
                        <gml:beginPosition>2007-12-28T05:08</gml:beginPosition>
                        <gml:endPosition>${current_date_time}</gml:endPosition>
                    </gml:TimePeriod>
                </fes:During>
        </fes:Filter>
    </wfs:Query>
</wfs:GetFeature>
EOF

In de GPKG achter de WFS service zijn deze velden wel degelijk van het datum type:

datum_in_werking: Date (0.0)

Maar volgens mij is het zo dat het in de GML/WFS wereld een simpele datum alleen uit te drukken is als een TimeInstant object en dus een gebruikelijke date formaat niet bestaat . Zie bijvoorbeeld de temporal.xsd van het GML schema.

Ik weet overigens niet waarom we alleen MinTemporalFilter ondersteunen en niet ook ImplementsTemporalFilter. Wellicht dat je dan wel een <fes:After> kan toepassen. Ik zal dat hier navragen.

1 like

Bedankt voor de tip. Ik had net zelf ook uitgevonden dat During wel werkt. Wat ik bedoelde met gebruikelijke Date-datatype is xsd:dateTime in DescribeFeatureType. In vorige PDOK WFS versies werd dat nog gebruikt. (N.B. nu zie je nog vaak xsd:string overigens voor datumvelden, bv tijdstipRegistratie in de kadastralekaart 4.0 WFS). Ik kende TimePosition nog niet. Sinds welke WFS versie bestaat dat?

Volgens mij is dat een verschil tussen WFS 1.0.0 vs. 2.0.0 (en dus een verschil in GML versie 2.1 vs 3.2):

https://service.pdok.nl/kadaster/wkpb/wfs/v1_0?request=describefeaturetype&service=WFS&typename=wkpb:pb_multipolygon&VERSION=1.0.0

...
<import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
...
<element name="datumInWerking" minOccurs="0" type="date"/>
<element name="datumBeeindiging" minOccurs="0" type="date"/>
<element name="datumAanbiedenBestuursorgaan" minOccurs="0" type="date"/>
<element name="tijdstipInschrijvenKadaster" minOccurs="0" type="dateTime"/>
...

https://service.pdok.nl/kadaster/wkpb/wfs/v1_0?request=describefeaturetype&service=WFS&typename=wkpb:pb_multipolygon&VERSION=2.0.0

...
<import namespace="http://www.opengis.net/gml/3.2"
          schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd" />
...
<element name="datumInWerking" minOccurs="0" type="gml:TimeInstantType"/>
<element name="datumBeeindiging" minOccurs="0" type="gml:TimeInstantType"/>
<element name="datumAanbiedenBestuursorgaan" minOccurs="0" type="gml:TimeInstantType"/>
<element name="tijdstipInschrijvenKadaster" minOccurs="0" type="gml:TimeInstantType"/>
...

Aha, nuttige info. Ook in WFS versie 1.1.0 is het nog date en dateTime.

1 like

Dit topic is 180 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.