[mapserver-commits] r8041 - in trunk/docs: howto references/mapfile

svn at osgeo.org svn at osgeo.org
Fri Nov 21 15:22:18 EST 2008


Author: hobu
Date: 2008-11-21 15:22:18 -0500 (Fri, 21 Nov 2008)
New Revision: 8041

Added:
   trunk/docs/references/mapfile/expressions.txt
Removed:
   trunk/docs/howto/msexpressions.txt
Log:
move the expressions howto into the mapfile reference

Deleted: trunk/docs/howto/msexpressions.txt
===================================================================
--- trunk/docs/howto/msexpressions.txt	2008-11-21 20:21:32 UTC (rev 8040)
+++ trunk/docs/howto/msexpressions.txt	2008-11-21 20:22:18 UTC (rev 8041)
@@ -1,424 +0,0 @@
-*****************************************************************************
- Expressions
-*****************************************************************************
-
-:Author:       Dirk Tilger
-:Contact:      dirk at MIRIUP.DE
-:Author:       Umberto Nicoletti
-:Contact:      umberto.nicoletti at gmail.com
-:Revision: $Revision$
-:Date: $Date$
-:Last Updated: 2007/07/09
-
-.. sectnum::
-
-.. contents::
-    :depth: 2
-    :backlinks: top
-    
-
-Introduction
--------------------------------------------------------------------------------
-
-As of version 4.6.1, expressions are used in two places. They're used to filter 
-layers for specific records in the dataset and they're used in CLASS EXPRESSIONS 
-to specify to which items this CLASS does apply to.
-
-Expression Types
--------------------------------------------------------------------------------
-
-Expression are used to match attribute values with certain logical checks. 
-There are three different types of expressions you can use with MapServer:
-
- * String comparisons: A single attribute is compared with a string value.
- * Regular expressions: A single attribute is matched with a regular expression.
- * Logical "MapServer expressions": One or more attributes are compared using 
-   logical expressions.
-
-String comparison
-...............................................................................
-
-String comparison means as the name suggests that attribute values are checked 
-if they are equal to some value. String comparison are the simplest form of 
-MapServer expressions and the fastest option.
-
-To use a string comparison for filtering a LAYER, both FILTERITEM and FILTER 
-must be set. FILTERITEM is set to the attribute name. FILTER is set to the 
-value for comparison. The same rule applies to CLASSITEM and EXPRESSION 
-in the CLASS object.
-
-Example for a simple string comparison filter::
-
-  FILTER "2005"
-  FILTERITEM "year"
-
-would match all records that have the attribute "year" set to "2005". 
-The rendered map would appear as if the dataset would only contain those items 
-that have the "year" set to "2005".
-
-Similarly, a classification for the items matched above would be done 
-by setting the CLASSITEM in the layer and the EXPRESSION in the class::
-    
-    LAYER
-        NAME "example"
-        CLASSITEM "year"
-        ...
-        CLASS
-            NAME "year-2005"
-            EXPRESSION "2005"
-            ...
-        END
-    END
-
-For a reason explained later on the values for both CLASSITEM and FILTERITEM 
-should start neither with an '/' nor with a '(' character.
-
-Regular expression comparison
-...............................................................................
-
-Regular expressions are a standard text pattern matching mechanism from the 
-UNIX world. The functionality of regular expression matching is provided by 
-the operating system on UNIX systems and therefore slightly operating system 
-dependent. However their minimum set of features are those defined by the POSIX 
-standard. The documentation of the particular regular expression library is 
-usually in the "regex" manual page ("man regex").
-
-Regular expression with MapServer work similarly to string comparison, but 
-allow more complex operation. They are slower than pure string comparisons, 
-but might be still faster than logical expression. As with the string 
-comparison use regular expressions, a FILTERITEM or a CLASSITEM has to 
-defined, respectively.
-
-A regular expression typically consists of characters with special meanings 
-and characters that are interpreted as they are. Alphanumeric characters 
-(A-Z, a-z and 0-9) are taken as they are. Characters with special means are:
-
- * **.** will match a single character
- * **[** and **]** are used for grouping. For example *[A-Z]* would 
-   match the characters A,B,C,...,X,Y,Z.
- * **{**,**}**,**\*** are used to specify how often something should match.
- * **^** matches the beginning, **$** matches the end of the value.
- * The backslash **\\** is used to take away the special meaning. 
-   For example *\\$* would match the dollar sign.
-
-The following LAYER configuration would have all records rendered on the 
-map that have "hotel" in the attribute named "placename":
-
-::
-
-LAYER
-    NAME "regexp-example"
-    FILTERITEM "placename"
-    FILTER /hotel/
-    ...
-END
-
-.. note:: 
-
-    Note that the regular expression is case-sensitive, thus records having 
-    "Hotel" in them would not have matched.
-
-Example: Match records that have a value for the current century 
-(as of 2005 ;) in the attribute "year"
-
-::
-
-FILTERITEM "year"
-FILTER /^20[0-9][0-9]/
-
-Example: Match all the records that are either purely numerical or empty
-
-::
-
-FILTER /^[0-9]*$/
-
-.. note:: 
-    
-    When you experience frequently segmentation faults when working with 
-    MapServer and regular expressions, it might be that your current 
-    working environment is linked against more than one regular expression 
-    library. This can happen when MapServer is linked with components that 
-    bring their own copy, like the Apache httpd or PHP. In these cases 
-    the author has made best experiences with making all those components 
-    using the regular expression library of the operating system (i.e. the 
-    one in libc). That involved editing the build files of some of the 
-    components, however.
-
-
-"MapServer expressions"
--------------------------------------------------------------------------------
-
-MapServer expressions are the most complex and depending how they are written 
-can become quite slow. They can match any of the attributes and thus allow 
-filtering and classification depending on more than one attribute. Besides
-pure logical operations there are also expressions allow also certain 
-arithmetic, string- and time operations.
- 
-To be able to use a MapServer expression for a FILTER or EXPRESSION value, 
-the expression has to be finally of a logical value.
-
-Logical expressions
-...............................................................................
-
-Syntactically, a logical expression is everything encapsulated in round 
-brackets. Logical expressions take logical values as their input and 
-return logical values. A logical expression is either 'true' or 'false'.
-
- * ( ( ... ) AND ( ... ) )
-   ( ( ... ) && ( ... ) )
-   ... will become true when both of the two logical expressions in the 
-   innermost brackets are true.
-
- * ( ( ... ) OR ( ... ) )
-   ( ( ... ) || ( ... ) )
-   ... will become true when at least one of the two logical expressions 
-   in the innermost brackets is true.
-
- * NOT ( ... )
-   ! ( ... )
-   ... will become true, when the logical expression in the brackets 
-   becomes false.
-   
-
-String operations that result in a logical value
-...............................................................................
-
-Syntactically, a sting is something encapsulated in double-quotes.
-
- *  ( "String1" eq "String2" )
-    ( "String1" == "String2" )
-    ( "String1" = "String2" )
-    ... will become true when both strings are equal. This operation is 
-    identical to the MapServer string comparison described earlier.
-
- *  ( "String1" != "String2" )
-    ( "String1" ne "String2" )
-    ... will become true when both strings are not equal.
-
- *  ( "String1" < "String2" )
-    ( "String1" lt "String2" )
-    ... will become true when "String1" is lexicographically 
-    smaller than "String2"
-
- *  ( "String1" > "String2" )
-    ( "String1" gt "String2" )
-    ... will become true when "String1" is lexicographically 
-    larger than "String2".
-
- *  ( "String1" <= "String2" )
-    ( "String1" le "String2" )
-    ... will become true when "String1" is not lexicographically larger 
-    than "String2"
-
- *  ( "String1" >= "String2" )
-    ( "String1" ge "String2" )
-    ... will become true when "String1" is not lexicographically smaller 
-    than "String2".
-
- *  ( "String1" IN "token1,token2,...,tokenN" )
-    ... will become true when "String1" is in equal one of the given tokens.
-
-.. note:: 
-
-The separator for those tokens is the comma. That means that you must not add
-unnecessary white space to the list and that you cannot compare to tokens 
-that have a comma in it.
-
- *  ( "String1" =~ /regexp/ )
-    ... will become true, when "String1" matches the regular expression 
-    "regexp". This operation is identical to the regular expression matching 
-    described earlier.
-
-String operations that return string values
-...............................................................................
-
-There is only one operation for strings that returns a string value:
-
- *  "String1" + "String2
-    ... will return "String1String2", thus the two string concatenated to 
-    each other.
-
-Arithmetic expressions returning logical values
-...............................................................................
-
-The basic element for the arithmetic operation is the number. There are 
-some purely arithmetic operations that are returning numbers as their value. 
-They will be covered in the next section.
-
- *  ( n1 eq n2 )
-    ( n1 == n2 )
-    ( n1 = n2 )
-    ... will become true when both numbers are equal.
-
- *  ( n1 != n2 )
-    ( n1 ne n2 )
-    ... will become true when both numbers are not equal.
-
- *  ( n1 &lt; n2 )
-    ( n1 lt n2 )
-    ... will become true when n1 is smaller than n2
-
- *  ( n1 &gt; n2 )
-    ( n1 gt n2 )
-    ... will become true when n1 is larger than n2.
-
- *  ( n1 &lt;= n2 )
-    ( n1 le n2 )
-    ... will become true when n1 is smaller or equal n2
-
- *  ( n1 &gt;= n2 )
-    ( n1 ge n2 )
-    ... will become true when n1 is larger or equal n2.
-
- *  ( n1 IN "number1,number2,...,numberN" )
-    ... will become true when n1 is equal to one of the given numbers.
-
-
-Arithmetic expression returning a number
-...............................................................................
-
-As stated in the previous section, MapServer can do purely numerical 
-operations with numbers.
-
- *  n1 + n2
-    ... will become the sum of n1 and n2
-
- *  n1 - n2
-    ... will become n2 subtracted from n1
- 
- *  n1 \* n2
-    ... will become n1 multiplicated with n2
-
- *  n1 / n2>
-    ... will become n1 divided by n2
- 
- *  -n1
-    ... will become n1 with negated sign
-
- *  n1 ^ n2
-    ... will become n1 by a power of n2
-
- *  length ( "String1" )
-    ... will become the number of characters of "String1"
-
-.. note::
-
-When the numerical operations above are used like logical operations, 
-the following rule applies: values equal to zero will be taken as 
-'false' and everything else will be 'true'. That means the expression
-
-::
-
-( 6 + 5 )
-... 
-
-would evaluate as true, but 
-
-::
-
-( 5 - 5 )
-...
-
-would evaluate as false.
-
-Temporal expressions
-...............................................................................
-
-MapServer uses an internal time type to do comparison. To convert a keys 
-value into this time type it will check the list below from the top down if 
-the specified time matches and if so, it will do the conversion.
-
- * YYYY-MM-DDTHH:MM:SSZ ('Z' and 'T' being the characters itself)</i>
- * YYYY-MM-DDTHH:MM:SS ('T' being the character itself)</i>
- * YYYY-MM-DD HH:MM:SS
- * YYYY-MM-DDTHH:MM ('T' being the character itself)</i>
- * YYYY-MM-DD HH:MM
- * YYYY-MM-DDTHH ('T' being the character itself)</i>
- * YYYY-MM-DD HH
- * YYYY-MM-DD
- * YYYY-MM
- * YYYY
- * THH:MM:SSZ ('Z' and 'T' being the characters itself)</i>
- * THH:MM:SS
-
-For temporal values obtained this way, the following operations are supported:
-
- *  ( n1 eq n2 )
-    ( n1 == n2 )
-    ( n1 = n2 )
-    ... will become true when both times are equal.
-
- *  ( t1 != t2 )
-    ( t1 ne t2 )
-    ... will become true when both times are not equal.
-
- *  ( n1 &lt; n2 )
-    ( n1 lt n2 )
-    ... will become true when t1 is earlier than t2
-
- *  ( n1 > n2 )
-    ( n1 gt n2 )
-    ... will become true when t1 is later than t2.
-
- *  ( t1 <= t2 )
-    ( t1 le t2 )
-    ... will become true when t1 is earlier or same t2
-
- *  ( n1 >= n2 )
-    ( n1 ge n2 )
-    ... will become true when t1 is later or same t2.
-
-How the attributes are referenced
-...............................................................................
-
-To make a meaningful use of the expressions above, we need to get the attribute 
-values into the expressions. That is done by enclosing the attribute key 
-into square brackets, like this: [KEY]. Then before the expression is evaluated 
-every occurrence of "[KEY]" will be replaced by the value for attribute "KEY".
-
-Example: how a simple string comparison would be evaluated. The filter is set to:
-
-::
-
-FILTER ( "[BUILDING_NAME]" == "National Museum" )
-
-There is a attribute "BUILDING_NAME" and its value is "National Government 
-Building". Thus the expression actually evaluated is...
-
-::
-
-"National Government Building" == "National Museum" )
-
-...and as such should be false.
-
-Some layers do not really come with metadata. For raster layers for example 
-special attributes have been defined that can be used for classification:
-
- *  [PIXEL]
-    ... will become the pixel value as number
- *  [RED], [GREEN], [BLUE]
-    ... will become the color value for the red, green and blue component 
-    in the pixel value, respectively.
-
-Quotes escaping in strings
-...............................................................................
-
-.. note::
-Quotes escaping is not supported in MapServer versions lower than 5.0.
-
-Starting with MapServer 5.0, if your dataset contains double-quotes, you 
-can use a C-like escape sequence in the expression string. For example if your 
-key *"NAME"* has the value *'National "hero" statue'* you could write the 
-FILTER expression as follows:
-
-::
-
-FILTER ( "[NAME]" == "National \"hero\" statue" )
-...
-
-to escape a single quote use the following sequence instead:
-
-::
-
-FILTER ( "[NAME]" == "National \'hero\' statue" )
-

Copied: trunk/docs/references/mapfile/expressions.txt (from rev 8039, trunk/docs/howto/msexpressions.txt)
===================================================================
--- trunk/docs/references/mapfile/expressions.txt	                        (rev 0)
+++ trunk/docs/references/mapfile/expressions.txt	2008-11-21 20:22:18 UTC (rev 8041)
@@ -0,0 +1,424 @@
+*****************************************************************************
+ Expressions
+*****************************************************************************
+
+:Author:       Dirk Tilger
+:Contact:      dirk at MIRIUP.DE
+:Author:       Umberto Nicoletti
+:Contact:      umberto.nicoletti at gmail.com
+:Revision: $Revision$
+:Date: $Date$
+:Last Updated: 2007/07/09
+
+.. sectnum::
+
+.. contents::
+    :depth: 2
+    :backlinks: top
+    
+
+Introduction
+-------------------------------------------------------------------------------
+
+As of version 4.6.1, expressions are used in two places. They're used to filter 
+layers for specific records in the dataset and they're used in CLASS EXPRESSIONS 
+to specify to which items this CLASS does apply to.
+
+Expression Types
+-------------------------------------------------------------------------------
+
+Expression are used to match attribute values with certain logical checks. 
+There are three different types of expressions you can use with MapServer:
+
+ * String comparisons: A single attribute is compared with a string value.
+ * Regular expressions: A single attribute is matched with a regular expression.
+ * Logical "MapServer expressions": One or more attributes are compared using 
+   logical expressions.
+
+String comparison
+...............................................................................
+
+String comparison means as the name suggests that attribute values are checked 
+if they are equal to some value. String comparison are the simplest form of 
+MapServer expressions and the fastest option.
+
+To use a string comparison for filtering a LAYER, both FILTERITEM and FILTER 
+must be set. FILTERITEM is set to the attribute name. FILTER is set to the 
+value for comparison. The same rule applies to CLASSITEM and EXPRESSION 
+in the CLASS object.
+
+Example for a simple string comparison filter::
+
+  FILTER "2005"
+  FILTERITEM "year"
+
+would match all records that have the attribute "year" set to "2005". 
+The rendered map would appear as if the dataset would only contain those items 
+that have the "year" set to "2005".
+
+Similarly, a classification for the items matched above would be done 
+by setting the CLASSITEM in the layer and the EXPRESSION in the class::
+    
+    LAYER
+        NAME "example"
+        CLASSITEM "year"
+        ...
+        CLASS
+            NAME "year-2005"
+            EXPRESSION "2005"
+            ...
+        END
+    END
+
+For a reason explained later on the values for both CLASSITEM and FILTERITEM 
+should start neither with an '/' nor with a '(' character.
+
+Regular expression comparison
+...............................................................................
+
+Regular expressions are a standard text pattern matching mechanism from the 
+UNIX world. The functionality of regular expression matching is provided by 
+the operating system on UNIX systems and therefore slightly operating system 
+dependent. However their minimum set of features are those defined by the POSIX 
+standard. The documentation of the particular regular expression library is 
+usually in the "regex" manual page ("man regex").
+
+Regular expression with MapServer work similarly to string comparison, but 
+allow more complex operation. They are slower than pure string comparisons, 
+but might be still faster than logical expression. As with the string 
+comparison use regular expressions, a FILTERITEM or a CLASSITEM has to 
+defined, respectively.
+
+A regular expression typically consists of characters with special meanings 
+and characters that are interpreted as they are. Alphanumeric characters 
+(A-Z, a-z and 0-9) are taken as they are. Characters with special means are:
+
+ * **.** will match a single character
+ * **[** and **]** are used for grouping. For example *[A-Z]* would 
+   match the characters A,B,C,...,X,Y,Z.
+ * **{**,**}**,**\*** are used to specify how often something should match.
+ * **^** matches the beginning, **$** matches the end of the value.
+ * The backslash **\\** is used to take away the special meaning. 
+   For example *\\$* would match the dollar sign.
+
+The following LAYER configuration would have all records rendered on the 
+map that have "hotel" in the attribute named "placename":
+
+::
+
+LAYER
+    NAME "regexp-example"
+    FILTERITEM "placename"
+    FILTER /hotel/
+    ...
+END
+
+.. note:: 
+
+    Note that the regular expression is case-sensitive, thus records having 
+    "Hotel" in them would not have matched.
+
+Example: Match records that have a value for the current century 
+(as of 2005 ;) in the attribute "year"
+
+::
+
+FILTERITEM "year"
+FILTER /^20[0-9][0-9]/
+
+Example: Match all the records that are either purely numerical or empty
+
+::
+
+FILTER /^[0-9]*$/
+
+.. note:: 
+    
+    When you experience frequently segmentation faults when working with 
+    MapServer and regular expressions, it might be that your current 
+    working environment is linked against more than one regular expression 
+    library. This can happen when MapServer is linked with components that 
+    bring their own copy, like the Apache httpd or PHP. In these cases 
+    the author has made best experiences with making all those components 
+    using the regular expression library of the operating system (i.e. the 
+    one in libc). That involved editing the build files of some of the 
+    components, however.
+
+
+"MapServer expressions"
+-------------------------------------------------------------------------------
+
+MapServer expressions are the most complex and depending how they are written 
+can become quite slow. They can match any of the attributes and thus allow 
+filtering and classification depending on more than one attribute. Besides
+pure logical operations there are also expressions allow also certain 
+arithmetic, string- and time operations.
+ 
+To be able to use a MapServer expression for a FILTER or EXPRESSION value, 
+the expression has to be finally of a logical value.
+
+Logical expressions
+...............................................................................
+
+Syntactically, a logical expression is everything encapsulated in round 
+brackets. Logical expressions take logical values as their input and 
+return logical values. A logical expression is either 'true' or 'false'.
+
+ * ( ( ... ) AND ( ... ) )
+   ( ( ... ) && ( ... ) )
+   ... will become true when both of the two logical expressions in the 
+   innermost brackets are true.
+
+ * ( ( ... ) OR ( ... ) )
+   ( ( ... ) || ( ... ) )
+   ... will become true when at least one of the two logical expressions 
+   in the innermost brackets is true.
+
+ * NOT ( ... )
+   ! ( ... )
+   ... will become true, when the logical expression in the brackets 
+   becomes false.
+   
+
+String operations that result in a logical value
+...............................................................................
+
+Syntactically, a sting is something encapsulated in double-quotes.
+
+ *  ( "String1" eq "String2" )
+    ( "String1" == "String2" )
+    ( "String1" = "String2" )
+    ... will become true when both strings are equal. This operation is 
+    identical to the MapServer string comparison described earlier.
+
+ *  ( "String1" != "String2" )
+    ( "String1" ne "String2" )
+    ... will become true when both strings are not equal.
+
+ *  ( "String1" < "String2" )
+    ( "String1" lt "String2" )
+    ... will become true when "String1" is lexicographically 
+    smaller than "String2"
+
+ *  ( "String1" > "String2" )
+    ( "String1" gt "String2" )
+    ... will become true when "String1" is lexicographically 
+    larger than "String2".
+
+ *  ( "String1" <= "String2" )
+    ( "String1" le "String2" )
+    ... will become true when "String1" is not lexicographically larger 
+    than "String2"
+
+ *  ( "String1" >= "String2" )
+    ( "String1" ge "String2" )
+    ... will become true when "String1" is not lexicographically smaller 
+    than "String2".
+
+ *  ( "String1" IN "token1,token2,...,tokenN" )
+    ... will become true when "String1" is in equal one of the given tokens.
+
+.. note:: 
+
+The separator for those tokens is the comma. That means that you must not add
+unnecessary white space to the list and that you cannot compare to tokens 
+that have a comma in it.
+
+ *  ( "String1" =~ /regexp/ )
+    ... will become true, when "String1" matches the regular expression 
+    "regexp". This operation is identical to the regular expression matching 
+    described earlier.
+
+String operations that return string values
+...............................................................................
+
+There is only one operation for strings that returns a string value:
+
+ *  "String1" + "String2
+    ... will return "String1String2", thus the two string concatenated to 
+    each other.
+
+Arithmetic expressions returning logical values
+...............................................................................
+
+The basic element for the arithmetic operation is the number. There are 
+some purely arithmetic operations that are returning numbers as their value. 
+They will be covered in the next section.
+
+ *  ( n1 eq n2 )
+    ( n1 == n2 )
+    ( n1 = n2 )
+    ... will become true when both numbers are equal.
+
+ *  ( n1 != n2 )
+    ( n1 ne n2 )
+    ... will become true when both numbers are not equal.
+
+ *  ( n1 &lt; n2 )
+    ( n1 lt n2 )
+    ... will become true when n1 is smaller than n2
+
+ *  ( n1 &gt; n2 )
+    ( n1 gt n2 )
+    ... will become true when n1 is larger than n2.
+
+ *  ( n1 &lt;= n2 )
+    ( n1 le n2 )
+    ... will become true when n1 is smaller or equal n2
+
+ *  ( n1 &gt;= n2 )
+    ( n1 ge n2 )
+    ... will become true when n1 is larger or equal n2.
+
+ *  ( n1 IN "number1,number2,...,numberN" )
+    ... will become true when n1 is equal to one of the given numbers.
+
+
+Arithmetic expression returning a number
+...............................................................................
+
+As stated in the previous section, MapServer can do purely numerical 
+operations with numbers.
+
+ *  n1 + n2
+    ... will become the sum of n1 and n2
+
+ *  n1 - n2
+    ... will become n2 subtracted from n1
+ 
+ *  n1 \* n2
+    ... will become n1 multiplicated with n2
+
+ *  n1 / n2>
+    ... will become n1 divided by n2
+ 
+ *  -n1
+    ... will become n1 with negated sign
+
+ *  n1 ^ n2
+    ... will become n1 by a power of n2
+
+ *  length ( "String1" )
+    ... will become the number of characters of "String1"
+
+.. note::
+
+When the numerical operations above are used like logical operations, 
+the following rule applies: values equal to zero will be taken as 
+'false' and everything else will be 'true'. That means the expression
+
+::
+
+( 6 + 5 )
+... 
+
+would evaluate as true, but 
+
+::
+
+( 5 - 5 )
+...
+
+would evaluate as false.
+
+Temporal expressions
+...............................................................................
+
+MapServer uses an internal time type to do comparison. To convert a keys 
+value into this time type it will check the list below from the top down if 
+the specified time matches and if so, it will do the conversion.
+
+ * YYYY-MM-DDTHH:MM:SSZ ('Z' and 'T' being the characters itself)</i>
+ * YYYY-MM-DDTHH:MM:SS ('T' being the character itself)</i>
+ * YYYY-MM-DD HH:MM:SS
+ * YYYY-MM-DDTHH:MM ('T' being the character itself)</i>
+ * YYYY-MM-DD HH:MM
+ * YYYY-MM-DDTHH ('T' being the character itself)</i>
+ * YYYY-MM-DD HH
+ * YYYY-MM-DD
+ * YYYY-MM
+ * YYYY
+ * THH:MM:SSZ ('Z' and 'T' being the characters itself)</i>
+ * THH:MM:SS
+
+For temporal values obtained this way, the following operations are supported:
+
+ *  ( n1 eq n2 )
+    ( n1 == n2 )
+    ( n1 = n2 )
+    ... will become true when both times are equal.
+
+ *  ( t1 != t2 )
+    ( t1 ne t2 )
+    ... will become true when both times are not equal.
+
+ *  ( n1 &lt; n2 )
+    ( n1 lt n2 )
+    ... will become true when t1 is earlier than t2
+
+ *  ( n1 > n2 )
+    ( n1 gt n2 )
+    ... will become true when t1 is later than t2.
+
+ *  ( t1 <= t2 )
+    ( t1 le t2 )
+    ... will become true when t1 is earlier or same t2
+
+ *  ( n1 >= n2 )
+    ( n1 ge n2 )
+    ... will become true when t1 is later or same t2.
+
+How the attributes are referenced
+...............................................................................
+
+To make a meaningful use of the expressions above, we need to get the attribute 
+values into the expressions. That is done by enclosing the attribute key 
+into square brackets, like this: [KEY]. Then before the expression is evaluated 
+every occurrence of "[KEY]" will be replaced by the value for attribute "KEY".
+
+Example: how a simple string comparison would be evaluated. The filter is set to:
+
+::
+
+FILTER ( "[BUILDING_NAME]" == "National Museum" )
+
+There is a attribute "BUILDING_NAME" and its value is "National Government 
+Building". Thus the expression actually evaluated is...
+
+::
+
+"National Government Building" == "National Museum" )
+
+...and as such should be false.
+
+Some layers do not really come with metadata. For raster layers for example 
+special attributes have been defined that can be used for classification:
+
+ *  [PIXEL]
+    ... will become the pixel value as number
+ *  [RED], [GREEN], [BLUE]
+    ... will become the color value for the red, green and blue component 
+    in the pixel value, respectively.
+
+Quotes escaping in strings
+...............................................................................
+
+.. note::
+Quotes escaping is not supported in MapServer versions lower than 5.0.
+
+Starting with MapServer 5.0, if your dataset contains double-quotes, you 
+can use a C-like escape sequence in the expression string. For example if your 
+key *"NAME"* has the value *'National "hero" statue'* you could write the 
+FILTER expression as follows:
+
+::
+
+FILTER ( "[NAME]" == "National \"hero\" statue" )
+...
+
+to escape a single quote use the following sequence instead:
+
+::
+
+FILTER ( "[NAME]" == "National \'hero\' statue" )
+



More information about the mapserver-commits mailing list