| Home | Products | Issue Tracker | Service Providers | FAQ | Twitter | Download

# INSPIRE View Service

Author

  Stephan Meissl

Contact

  stephan.meissl at eox.at

Last Updated

  2012-03-19

Table of Contents

- INSPIRE View Service

  - Introduction

  - Activation of INSPIRE support

  - Multi-language support for certain capabilities fields

  - Provision of INSPIRE specific metadata

  - Named group layers

  - Style section for root layer and possibly existing group layers

## Introduction

INSPIRE is the name of an European directive, establishing an infrastructure for spatial information in Europe to support Community environmental policies, and policies or activities which may have an impact on the environment.

The INSPIRE View Service is an implementation of the INSPIRE Technical Guidance document on top of the WMS Server implementation explained in the previous chapter.

In order to achieve INSPIRE View Service compliance, the following enhancements have been implemented in MapServer:

- Activation of INSPIRE support (two scenarios)

- Multi-language support for certain capabilities fields

- Provision of INSPIRE specific metadata

- Named group layers

- Style section for root layer and possibly existing group layers

Support for INSPIRE View Service in MapServer uses a syntax identical to the one used for INSPIRE Download Service. Consequently, it is possible to define shared metadata items between Download and View services by using the `ows_` prefix instead of `wms_`.

## Activation of INSPIRE support

INSPIRE specific metadata can either be referenced in an external INSPIRE service metadata document (scenario 1) or can be directly embedded in the capabilities document (scenario 2). MapServer supports both scenarios.

Activation of the corresponding scenario for INSPIRE support takes place in the `WEB.METADATA` section of the mapfile through `wms_inspire_capabilities`. If activated, the corresponding INSPIRE namespace as well as appropriate validation warnings are generated in the capabilities document.

Scenario 1 - activate INSPIRE support using a reference to external service metadata:

    WEB
     METADATA
      "wms_inspire_capabilities" "url"
      ...
     END
    END

Scenario 2 - activate INSPIRE support using embedded service metadata:

    WEB
     METADATA
      "wms_inspire_capabilities" "embed"
      ...
     END
    END

## Multi-language support for certain capabilities fields

INSPIRE requires multi-language support and requests a list of all supported languages as well as the default language in the capabilities document. Based on the language parameter in the GetCapabilities request, certain specific metadata values, namely

- `wms_title`

- `wms_abstract`

- `wms_rootlayer_title`

- `wms_rootlayer_abstract`

- `wms_group_title`

- `wms_group_abstract`

- `wms_style_title`

- `wms_style_<name>_title`

as well as language dependent reference data like

- `DATA "road_eng"`

- `CONNECTION "db_ger"`

need to be provided in the requested language. If the language is not supported (or no language parameter is present), the default language has to be used.

All supported languages have to be specified as comma separated list (first language is default) through `wms_languages` in the `WEB.METADATA` section of the mapfile. This language parameter is also added to the `OnlineResource` in the GetCapabilities output:

    WEB
     METADATA
      ...
      "wms_languages" "eng,ger"       #first default, values according ISO 639-2/B
      ...
     END
    END

For language specific metadata values, a key extension method is applied:

    WEB
     METADATA
      ...
      "wms_title.eng" "myservicetitle"
      "wms_title.ger" "myservicetitleger"
      "wms_abstract" "mylayerabstract"        #fallback
      "wms_abstract.ger" "mylayerabstractger"
      ...
     END
    END

For language dependent reference data, a similar approach like the run-time substitution feature of MapServer has been followed (only `DATA` and `CONNECTION` values with %language% are substituted):

    ...
      LAYER
       NAME TN.RoadTransportNetwork.RoadLink
       DATA "road_%language%"
       ...
      END
    ...

If the language is not supported (or no language parameter is present), the default language is substituted.

## Provision of INSPIRE specific metadata

Depending on the scenario, additional metadata information is required to support the specification. The INSPIRE related fields are provided below.

Scenario 1 - INSPIRE related fields using referenced external service metadata:

    WEB
     METADATA
      "wms_inspire_capabilities" "url"
      "wms_languages" "eng,ger"               #first default, values according ISO 639-2/B
      "wms_inspire_metadataurl_href" "http://INSPIRE.service/metadata"
      "wms_inspire_metadataurl_format" "application/vnd.ogc.csw.capabilities.response_xml"
      "wms_keywordlist_ISO_items" "infoMapAccessService" #value according "classification of spatial data services"
      "wms_keywordlist_vocabulary" "ISO"
      "wms_title" "myservicetitle"
      "wms_abstract" "myabstract"
      "wms_fees" "conditions unknown"         #value either "no conditions apply"|default "conditions unknown"|<specific conditions>
      "wms_accessconstraints" "None"          #value according ISO 19115 (MD_RestrictionCode codelist) or default "None"
      "wms_contactorganization" "MapServer"   #responsible organization
      "wms_contactposition" "owner"           #responsible organization, value according "INSPIRE Metadata Regulation" (part D6)
      ...
     END
    END

Scenario 2 - INSPIRE related fields using embedded service metadata:

    WEB
     METADATA
      "wms_inspire_capabilities" "embed"
      "wms_languages" "eng,ger"               #first default, values according ISO 639-2/B
      "wms_inspire_temporal_reference" "2011-09-19" #date of last revision, value according YYYY-MM-DD
      "wms_inspire_mpoc_name" "mympocname"    #point of contact
      "wms_inspire_mpoc_email" "mympoc@e.mail" #point of contact
      "wms_inspire_metadatadate" "2011-09-19" #value according YYYY-MM-DD
      "wms_inspire_resourcelocator" "http://myinspireresource" #URL for ResourceLocator
      "wms_inspire_keyword" "infoMapAccessService" #value according "classification of spatial data services"
      "wms_keywordlist_ISO_items" "infoMapAccessService"
      "wms_keywordlist_vocabulary" "ISO"
      "wms_title" "myservicetitle"
      "wms_abstract" "myabstract"
      "wms_fees" "conditions unknown"         #value either "no conditions apply"|default "conditions unknown"|<specific conditions>
      "wms_accessconstraints" "None"          #value according ISO 19115 (MD_RestrictionCode codelist) or default "None"
      "wms_contactorganization" "MapServer"   #responsible organization
      "wms_contactposition" "owner"           #responsible organization, value according "INSPIRE Metadata Regulation" (part D6)
      ...
     END
    END

Notes:

- several fields require certain values, these values are not validated by MapServer itself, instead a manual validation against the INSPIRE schemas and the WMS INSPIRE tester is recommended

- as suggested in this document regarding scenario 2, `<inspire_common:ResourceType>` is always set to service and `<inspire_common:SpatialDataServiceType>` is always set to view, both values can’t be altered through the mapfile

- conformity is always set to not evaluated, based on the latest INSPIRE Metadata Implementing Rules (page 7), a specification document, the specification date and a specification URI or URL need to be provided for degree conformant/not conformant, which is currently not implemented

## Named group layers

INSPIRE mandates usage of named group layers. Thus the functionality of `wms_layer_group` is extended to support named group layers. If a layer with the same name as used in `wms_layer_group` is found it is treated as named group and if no layer with this name is found as unnamed group as before.

Provided that ability, a hierarchy of any level can be achieved. See for example the grouping used in the wms_inspire.map mapfile in msautotest:

    TN
    +--- TN.CommonTransportElements
         +--- TN.CommonTransportElements.TransportArea
         +--- TN.CommonTransportElements.TransportLink
         +--- TN.CommonTransportElements.TransportNode
    +--- TN.RoadTransportNetwork
         +--- TN.RoadTransportNetwork
         +--- TN.RoadTransportNetwork.VehicleTrafficArea
         +--- TN.RoadTransportNetwork.RoadServiceArea
         +--- TN.RoadTransportNetwork.RoadArea
    +--- TN.RailTransportNetwork
         +--- TN.RailTransportNetwork.RailwayLink
         +--- TN.RailTransportNetwork.RailwayStationArea
         +--- TN.RailTransportNetwork.RailwayYardArea
         +--- TN.RailTransportNetwork.RailwayArea

## Style section for root layer and possibly existing group layers

For regular layers, the concept of GROUP and CLASSGROUP can be used to set the layer style name to the according value. Additionally the layer style titles can be overwritten through `wms_style_<stylename>_title` and the layer style legendURLs through `wms_style_<stylename>_legendurl_*` (width, height, format, and href need to be provided):

    ...
      LAYER
       NAME TN.RoadTransportNetwork.RoadLink
       DATA "road"
       METADATA
        "wms_title.eng" "Transport networks: Road Link"
        "wms_title.ger" "Verkehrsnetze: Strassensegment"
        ...
        "wms_style_inspire_common:DEFAULT_title" "mylayerstyletitle"     #style title
        "wms_style_inspire_common:DEFAULT_legendurl_width" "85"          #override style legendurl (mandatory: width, height, format, href)
        "wms_style_inspire_common:DEFAULT_legendurl_height" "40"
        "wms_style_inspire_common:DEFAULT_legendurl_format" "image/png"
        "wms_style_inspire_common:DEFAULT_legendurl_href" "http://path/to/onlineresource...roadlink"
       END
       ...
      END
      ...
      CLASSGROUP "inspire_common:DEFAULT"
      CLASSITEM "NAME_E"

      CLASS
       NAME "myclass1"
       GROUP "inspire_common:DEFAULT"
       EXPRESSION "Trans-Canada Highway"
       COLOR 255 0 0
      END

      CLASS
       NAME "myclass2"
       GROUP "inspire_common:DEFAULT"
       COLOR 0 255 0
      END
    ...

The following method is implemented to support (customizable) style sections in the root layer:

- use `wms_style_name` in the `WEB.METADATA` section to add a style section to the root layer

- use `wms_style_title` to override the style title (optional)

- use `wms_style_legendurl_*` to override width, height, format and href of the legendURL (optional)

and possibly existing group layers:

- use `wms_group_style_name` in the first corresponding `LAYER.METADATA` section to add a style section to the group layer

- use `wms_group_style_title` to override the style title (optional)

- use `wms_group_style_legendurl_*` to override width, height, format and href of the legendURL (optional)

    ...
      WEB
       METADATA
        ...
        "wms_style_name" "inspire_common:DEFAULT"      #style name
        "wms_style_title" "myroadarealayerstyletitle"  #style title
        "wms_style_legendurl_width" "85"               #override style legendurl (mandatory: width, height, format, href)
        "wms_style_legendurl_height" "40"
        "wms_style_legendurl_format" "image/png"
        "wms_style_legendurl_href" "http://path/to/onlineresource...roadarea"
       END
      END

      LAYER
       NAME TN.RailTransportNetwork.RailwayLink
       GROUP TN.CommonTransportElements.TransportLink
        DATA "road"
        METADATA
         "wms_group_title.eng" "Transport networks: Generic Transport Link"
         "wms_group_title.ger" "Verkehrsnetze: Generisches Verkehrssegment"
         "wms_group_abstract" "mygenerictransportlinklayerabstract" #fallback
         "wms_group_abstract.ger" "mygenerictransportlinklayerabstract"
         "wms_group_style_name" "inspire_common:DEFAULT" #style name
         "wms_group_style_title" "mygenerictransportlinklayerstyletitle" #style title
         "wms_group_style_legendurl_width" "85"        #override style legendurl (mandatory: width, height, format, href)
         "wms_group_style_legendurl_height" "40"
         "wms_group_style_legendurl_format" "image/png"
         "wms_group_style_legendurl_href" "http://path/to/onlineresource...generictransportlink"
         "wms_title.eng" "Transport networks: Railway Link"
         "wms_title.ger" "Verkehrsnetze: Eisenbahnverbindung"
         "wms_abstract" "myrailwaylinklayerabstract"   #fallback
         "wms_abstract.ger" "myrailwaylinklayerabstractger"
         ...
        END
       ...
      END
    ...

Provided that ability, 3 levels of hierarchy can be achieved as done in the example mapfiles wms_inspire_scenario1.map and wms_inspire_scenario2.map in msautotest:

    TN.RoadTransportNetwork.RoadArea
    +--- TN.RoadTransportNetwork.RoadLink
    +--- TN.CommonTransportElements.TransportLink
         +--- TN.RailTransportNetwork.RailwayLink
         +--- TN.AirTransportNetwork.AirLink