Please help me with the following problem:

I try to construct the current status of a series of objects along the following simple rules:

 *   the current status of on object with a certain `identificatie`
   (id) is the newest version of that object
 * except when the newest object has the property
   `<status>beëindigen</status>` then the object stops existing.

I use a fold-left to proces these rules with a simple function implementing those rules. This gives me unexpected results.

I've reduced the problem to a single stand alone query in which the last object (`obj3`) has the property `<status>beëindigen</status>`.

So I would expect this line:
`let $stand4 := fold-left(($obj3, $obj2, $obj1), (), function($stand, $obj) { local:stand-totaal($stand, $obj) })` to give me an empty result as `obj3`has the property <status>beëindigen</status>
but I am getting `obj1` as demonstrated in the following stand alone query.

When running the stand alone query I would *expect*:

  2 <-> 1 as shown in the result (`obj2`)
  3 <-> 1 as shown in the result (empty as `obj3`has the property `<status>beëindigen</status>`)   3 <-> 2 as shown in the result (empty as `obj3`has the property `<status>beëindigen</status>`)

  3 <-> 2 <-> 1 as 3 <-> 2 and 3 <-> 1 (empty as `obj3` has the property `<status>beëindigen</status>`) *but in the result I am getting *`obj1`.

What am I doing wrong?
Any help greatly appreciated.


The query I use:

```
declare namespace op="http://www.geostandaarden.nl/imow/opobject";;
    declare namespace da="http://www.geostandaarden.nl/imow/datatypenalgemeen";;     declare namespace ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing";;
    declare namespace gml="http://www.opengis.net/gml/3.2";;
    declare namespace l="http://www.geostandaarden.nl/imow/locatie";;
    declare namespace ow="http://www.geostandaarden.nl/imow/owobject";;
    declare namespace ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand";;
    declare namespace r="http://www.geostandaarden.nl/imow/regels"; ;
    declare namespace rol="http://www.geostandaarden.nl/imow/regelsoplocatie"; ;     declare namespace sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek"; ;
    declare namespace xlink="http://www.w3.org/1999/xlink"; ;
    declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";;
    declare namespace rg="http://www.geostandaarden.nl/imow/regelingsgebied";;

    declare function local:id
      (: returns the id(s) of ow-object(s) :)
      ($seq as item()*) as item()* {
           $seq//*:owObject/*/*:identificatie | $seq/*/*:identificatie
    };

    declare function local:stand-totaal
      (: returns an object by comparing new to old :)
      (: newest should be returned, except when
         <ow:status>beëindigen</ow:status>
         then no object should be returned :)
      ($new as item()*,
       $old as item()*) as item()* {

       let $new_ids := local:id($new)
       let $stand_deel1 :=
         for $obj_oud in $old//*:owObject
           where not(local:id($obj_oud) = $new_ids)
             return <sl:stand>{ $obj_oud }</sl:stand>
       let $stand_deel2 :=
         for $obj_new in $new//*:owObject[not(.//*:status)]
            return <sl:stand>{ $obj_new }</sl:stand>

       return ($stand_deel1, $stand_deel2)
    };

    let $obj1 := <sl:stand>
    <ow-dc:owObject xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand"; xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>     <r:RegelVoorIedereen xmlns:r="http://www.geostandaarden.nl/imow/regels";>
<r:identificatie>nl.imow-mnre1034.juridischeregel.OR0000000027</r:identificatie>
<r:idealisatie>http://standaarden.omgevingswet.overheid.nl/idealisatie/id/concept/Exact</r:idealisatie>
      <r:artikelOfLid>
        <r:RegeltekstRef xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.regeltekst.OR0000000027"/>
      </r:artikelOfLid>
<r:thema>http://standaarden.omgevingswet.overheid.nl/thema/id/concept/WaterEnWatersystemen</r:thema>
      <r:locatieaanduiding>
        <l:LocatieRef xmlns:l="http://www.geostandaarden.nl/imow/locatie"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.ambtsgebied.LND6030B"/>
      </r:locatieaanduiding>
    </r:RegelVoorIedereen>
    </ow-dc:owObject></sl:stand>

    let $obj2 := <sl:stand>
    <ow-dc:owObject xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand"; xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
    <r:Instructieregel xmlns:r="http://www.geostandaarden.nl/imow/regels";>
<r:identificatie>nl.imow-mnre1034.juridischeregel.OR0000000027</r:identificatie>
<r:idealisatie>http://standaarden.omgevingswet.overheid.nl/idealisatie/id/concept/Exact</r:idealisatie>
      <r:artikelOfLid>
        <r:RegeltekstRef xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.regeltekst.OR0000000027"/>
      </r:artikelOfLid>
<r:thema>http://standaarden.omgevingswet.overheid.nl/thema/id/concept/WaterEnWatersystemen</r:thema>
      <r:locatieaanduiding>
        <l:LocatieRef xmlns:l="http://www.geostandaarden.nl/imow/locatie"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebied.Kustfundament"/>
      </r:locatieaanduiding>
      <r:gebiedsaanwijzing>
        <ga:GebiedsaanwijzingRef xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.Kustfundament"/>         <ga:GebiedsaanwijzingRef xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.RGKustfundament"/>
      </r:gebiedsaanwijzing>
<r:instructieregelInstrument>http://standaarden.omgevingswet.overheid.nl/instrument/id/concept/Omgevingsplan</r:instructieregelInstrument>
    </r:Instructieregel>
    </ow-dc:owObject></sl:stand>

    let $obj3 := <sl:stand>
    <ow-dc:owObject xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand"; xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
    <r:Instructieregel xmlns:r="http://www.geostandaarden.nl/imow/regels";>
      <ow:status xmlns:ow="http://www.geostandaarden.nl/imow/owobject";>beëindigen</ow:status>
<r:identificatie>nl.imow-mnre1034.juridischeregel.OR0000000027</r:identificatie>
<r:idealisatie>http://standaarden.omgevingswet.overheid.nl/idealisatie/id/concept/Exact</r:idealisatie>
      <r:artikelOfLid>
        <r:RegeltekstRef xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.regeltekst.OR0000000027"/>
      </r:artikelOfLid>
<r:thema>http://standaarden.omgevingswet.overheid.nl/thema/id/concept/WaterEnWatersystemen</r:thema>
      <r:locatieaanduiding>
        <l:LocatieRef xmlns:l="http://www.geostandaarden.nl/imow/locatie"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebied.Kustfundament"/>
      </r:locatieaanduiding>
      <r:gebiedsaanwijzing>
        <ga:GebiedsaanwijzingRef xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.Kustfundament"/>         <ga:GebiedsaanwijzingRef xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.RGKustfundament"/>
      </r:gebiedsaanwijzing>
<r:instructieregelInstrument>http://standaarden.omgevingswet.overheid.nl/instrument/id/concept/Omgevingsplan</r:instructieregelInstrument>
    </r:Instructieregel>
    </ow-dc:owObject></sl:stand>

    let $stand1 := fold-left(($obj2, $obj1), (), function($stand, $obj) { local:stand-totaal($stand, $obj) })     let $stand2 := fold-left(($obj3, $obj1), (), function($stand, $obj) { local:stand-totaal($stand, $obj) })     let $stand3 := fold-left(($obj3, $obj2), (), function($stand, $obj) { local:stand-totaal($stand, $obj) })     let $stand4 := fold-left(($obj3, $obj2, $obj1), (), function($stand, $obj) { local:stand-totaal($stand, $obj) })

    return (    '2 <-> 1 ==================', $stand1,
              '3 <-> 1 ==================', $stand2,
              '3 <-> 2 ==================', $stand3,
              '3 <-> 2 <-> 1 ============', $stand4
           )
```

The results:

```
2 <-> 1 ==================
    <sl:stand xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek";>       <ow-dc:owObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand";>         <r:Instructieregel xmlns:r="http://www.geostandaarden.nl/imow/regels";>
<r:identificatie>nl.imow-mnre1034.juridischeregel.OR0000000027</r:identificatie>
<r:idealisatie>http://standaarden.omgevingswet.overheid.nl/idealisatie/id/concept/Exact</r:idealisatie>
          <r:artikelOfLid>
            <r:RegeltekstRef xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.regeltekst.OR0000000027"/>
          </r:artikelOfLid>
<r:thema>http://standaarden.omgevingswet.overheid.nl/thema/id/concept/WaterEnWatersystemen</r:thema>
          <r:locatieaanduiding>
            <l:LocatieRef xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:l="http://www.geostandaarden.nl/imow/locatie"; xlink:href="nl.imow-mnre1034.gebied.Kustfundament"/>
          </r:locatieaanduiding>
          <r:gebiedsaanwijzing>
            <ga:GebiedsaanwijzingRef xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.Kustfundament"/>             <ga:GebiedsaanwijzingRef xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:ga="http://www.geostandaarden.nl/imow/gebiedsaanwijzing"; xlink:href="nl.imow-mnre1034.gebiedsaanwijzing.RGKustfundament"/>
          </r:gebiedsaanwijzing>
<r:instructieregelInstrument>http://standaarden.omgevingswet.overheid.nl/instrument/id/concept/Omgevingsplan</r:instructieregelInstrument>
        </r:Instructieregel>
      </ow-dc:owObject>
    </sl:stand>
    3 <-> 1 ==================
    3 <-> 2 ==================
    3 <-> 2 <-> 1 ============
    <sl:stand xmlns:sl="http://www.geostandaarden.nl/bestanden-ow/standlevering-generiek";>       <ow-dc:owObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:ow-dc="http://www.geostandaarden.nl/imow/bestanden/deelbestand";>         <r:RegelVoorIedereen xmlns:r="http://www.geostandaarden.nl/imow/regels";>
<r:identificatie>nl.imow-mnre1034.juridischeregel.OR0000000027</r:identificatie>
<r:idealisatie>http://standaarden.omgevingswet.overheid.nl/idealisatie/id/concept/Exact</r:idealisatie>
          <r:artikelOfLid>
            <r:RegeltekstRef xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:href="nl.imow-mnre1034.regeltekst.OR0000000027"/>
          </r:artikelOfLid>
<r:thema>http://standaarden.omgevingswet.overheid.nl/thema/id/concept/WaterEnWatersystemen</r:thema>
          <r:locatieaanduiding>
            <l:LocatieRef xmlns:xlink="http://www.w3.org/1999/xlink"; xmlns:l="http://www.geostandaarden.nl/imow/locatie"; xlink:href="nl.imow-mnre1034.ambtsgebied.LND6030B"/>
          </r:locatieaanduiding>
        </r:RegelVoorIedereen>
      </ow-dc:owObject>
    </sl:stand>
```


--
Marco Duiker
LandGoed
Technisch directeur
+31617115114

Reply via email to