Filter Beispiele
Filter auf Menge von Werten (IN)

Umsetzung als IN-Filter auf einer per Schleife erzeugten Variable

Vorteil dieser Variante:

  • Variable kann an mehreren Stelle verwendet werden
  • funktioniert auch mit einer Ergebnismenge mit nur einem Element

Definition der Variable: 

<xsl:variable name="ListOfArztpraxenIds">
        <xsl:for-each select="/ButtonRow/Radweg/Arztpraxen/Arztpraxis/autoid">
            <iXRH:Int>
                <xsl:value-of select="."/>
            </iXRH:Int>
        </xsl:for-each>
</xsl:variable>

Verwendung der Variable im Filter: 

<iXRH:Query>
    <iXRH:Filter>
            <iXRH:SingleComparison>
                <iXRH:ColumnName>autoid</iXRH:ColumnName>
                <iXRH:Is>In</iXRH:Is>
                <iXRH:Value>
                    <xsl:copy-of select="$ListOfArztpraxenIds"/>
                </iXRH:Value>
            </iXRH:SingleComparison>
    </iXRH:Filter>
    <iXRH:Return>
        <iXRH:Records>
            <iXRH:Columns embedPrimaryGeometry="true"/>
        </iXRH:Records>
    </iXRH:Return>
</iXRH:Query>
Geometriefilter

Über SingleGeomComparison kann ein Geometriefilter definiert werden. Dabei ist zu beachten, dass die Vergleichsgeometrie mit einer Projektion angegeben wird, damit intern gegebenenfalls umprojeziert werden kann. Sollte die Geometrie in WKT vorliegen, kann über die Erweiterungsfunktion ConvertWktToEWkt eine Geometrie im Format EWKT(mit Projektion) erzeugt werden.

<xsl:variable name="query">
  <iXRH:Query>
    <iXRH:Filter>
      <iXRH:SingleGeomComparison>
        <iXRH:ColumnName>SHAPE</iXRH:ColumnName>
        <iXRH:Is>DefaultRelateT8Stars</iXRH:Is>
        <iXRH:Value>
          <!--Ikx- oder Orf-Geom ist im Format WKT, immer in EWKT konvertieren, damit EPSG in Geom enthalten!-->
          <xsl:value-of select="iduCore:ConvertWktToEWkt(/Root/ORFDOCS/ORFSTORE/RECORD/GEOM,/Root/ORFDOCS/ORFSTORE/RECORD/GEOM/@epsgCode)" />
        </iXRH:Value>
      </iXRH:SingleGeomComparison>
    </iXRH:Filter>
  </iXRH:Query>
</xsl:variable>

 

Hinweis: Bei einem Geometriefilter mit einer Geometriespalte ist der Name der Spalte nur informativ, wird aber nicht ausgewertet. Stattdessen wird intern die korrekte Geometriespalte ermittelt. Deshalb funktioniert solch ein Filter auch auf Ebenen, die mit den Spalten Hochwert und Rechtswert arbeiten.

Komplexe Filter

Komplexe Filter können aus per AND oder OR verknüpften einfachen Filtern zusammengesetzt werden. Zu beachten ist die Schreibweise, eine AND-Verknüpfung wird durch ein <iXRH:And> Knoten umschlossen und verbindet entsprechend alle enthaltenen Filter mit AND (OR analog).

<iXRH:Query>
  <iXRH:Filter>
    <!--mehrere mit UND verknüpfte Filter-->
    <iXRH:And>
      <!--einfacher Filter-->
      <iXRH:SingleComparison>
        <iXRH:ColumnName>
          TITEL
        </iXRH:ColumnName>
        <iXRH:Is>Like</iXRH:Is>
        <iXRH:Value>
          <iXRH:String>Hochwasser%</iXRH:String>
        </iXRH:Value>
      </iXRH:SingleComparison>
      <!--Geometriefilter-->
      <iXRH:SingleGeomComparison>
        <iXRH:ColumnName>SHAPE</iXRH:ColumnName>
        <iXRH:Is>DefaultRelateT8Stars</iXRH:Is>
        <iXRH:Value>
          <xsl:value-of select="iduCore:ConvertWktToEWkt(/Root/ORFDOCS/ORFSTORE/RECORD/GEOM,/Root/ORFDOCS/ORFSTORE/RECORD/GEOM/@epsgCode)" />
        </iXRH:Value>
      </iXRH:SingleGeomComparison>
    </iXRH:And>
  </iXRH:Filter>
</iXRH:Query>

 

Variable Anzahl Filterobjekte

Geht man davon aus, dass es eine variable Anzahl von Filterobjekten geben kann, dann können diese über eine Schleife als einzelne Value-Knoten innerhalb des Filters angegeben werden. Mehere Value-Knoten werden automatisch per OR verknüpft.

<iXRH:Query>
  <iXRH:Filter>
    <iXRH:SingleGeomComparison>
      <iXRH:ColumnName>SHAPE</iXRH:ColumnName>
      <iXRH:Is>DefaultRelateT8Stars</iXRH:Is>
      <xsl:for-each select="/Root/ORFDOCS/ORFSTORE/RECORD/GEOM">
        <!--werden mehrere Value-Knoten angegeben, werden diese autom. per OR verknüpft-->
        <iXRH:Value>
          <xsl:value-of select="iduCore:ConvertWktToEWkt(.,@epsgCode)" />
        </iXRH:Value>
      </xsl:for-each>
    </iXRH:SingleGeomComparison>
  </iXRH:Filter>
</iXRH:Query>
  

 

Sollen die Value-Knoten per AND verknüpft werden, dann kann dieses über ein Attribut des SingleGeomComparison bzw. SingeComparison festgelegt werden:

<iXRH:SingleComparison compareBehavior="CompareCollectionsWithAnd">