.. _example1-3:

===========
Example 1.3
===========
Displaying Classes in a Layer
-----------------------------

By using non-spatial attribute information in the data, we can create a map
like this:

.. image:: http://demo.mapserver.org/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/example1-3.map&layer=states_poly&layer=states_line&mode=map

MapFile Structure
#################

This is what the mapfile looks like: :ref:`Example1-3.map <example1-3-map>`.

The mapfile structure, by objects, looks like this:

::

                                  MAP
      (states_poly) LAYER----------|---------LAYER (states_line)
                      |                      |
       (land) CLASS---|---CLASS (water)      |-CLASS
                  |       |                    |
            STYLE-|       |-STYLE              |-STYLE

Keywords
********

Our mapfile still only has two layers but the polygon layer has been broken down
into two classes. Let's have a look at the additional parameters:

**CLASSITEM**
         This keyword is used to specify what attribute to use in separating
         the class objects. In this example that attribute is "CLASS". If you
         open the database file associated with this layer's shapefile, you'll
         see that there's a column (attribute) called "CLASS".

         How do we know which attribute to use?  Well, database records in
         shapefiles are stored in DBF files.  You can open it in a spreadsheet
         program such as Openoffice.org's Calc, or in a desktop GIS software
         such as QGIS, Thuban, or ArcView.  If your data came with a metadata
         (and it should!), you can skim through through that metadata file for
         attribute information.  You can also use "ogrinfo" to display basic
         attribute info in your shapefiles--look back at example 1.1 (the last
         few lines after "Layer SRS WKT:" show the attribute names and types).

**EXPRESSION**
          For each class, we specify what attribute value to use. This is the
          simplest form of EXPRESSION. EXPRESSIONs can be even more complex than
          this, allowing one to evaluate regular or logical expressions. Please
          look at the mapfile reference page to see what you can do
          with EXPRESSION.

----

:ref:`Back to Example 1.2 <example1-2>` | :ref:`Proceed to Example 1.4 <example1-4>`

----