MS RFC 82: Support for Enhanced Layer Metadata Management¶
- Date
2012-01-24
- Authors
Tom Kralidis (tomkralidis at gmail.com)
- Last Edited
2017-04-03
- Status
Adopted
- Version
MapServer 7.2
Overview¶
OGC Web Services (OWS) have the ability to advertise content metadata associated with a given resource (WMS Layer, WFS FeatureType, WCS Coverage, SOS ObservationOffering), both inline to the Capabilities document and as a reference to a given URL (i.e. ISO metadata XML document).
MapServer supports both inline (e.g. wms_title
, wms_abstract
) and URL
based (e.g. wms_metadataurl_href
) metadata advertising for OWS Capabilities.
In the case that a given dataset does not have associated formal XML
metadata, Capabilities XML references to metadata (i.e. WMS MetadataURL
)
are not available, even though between the LAYER.METADATA/ows_* values and the
layer’s spatial properties, enough information can be processed to generate a
useful XML metadata document.
The existence of formal XML metadata in MapServer OGC services Capabilities XML provides value to Catalogue services which harvest metadata to support discovery.
It is proposed that MapServer be enhanced to support the generation of XML metadata documents from a given layer’s METADATA and spatial properties.
This enhancement provides dynamic publishing of XML metadata for OWS services for cases where XML metadata does not exist / is not specified for a given resource.
Technical Solution¶
MapServer will have the ability to generate an ISO 19139:2007 metadata XML document dynamically from LAYER.METADATA/ows_* directives and the given layer’s spatial properties.
MapServer will also provide support for output of a service metadata document formatted as ISO 19119:2005 based on WEB.METADATA ows_* directives. This is an additional service description that supports the INSPIRE initiative.
This functionality will be made available through a MapServer specific HTTP
operation called GetMetadata
with the following parameters:
layer
: layer NAME. Optional parameter. Iflayer
is not specified, then an ISO metadata document of the service metadata is returned. If an invalidlayer
parameter specified, anows:ExceptionReport
is returnedoutputschema
: response schema of metadata. Optional parameter. Possible values:http://www.isotc211.org/2005/gmd (ISO 19139:2007 [default])
http://www.opengis.net/cat/csw/2.0.2 (Dublin Core)
http://www.opengis.net/cat/csw/csdgm (FGDC CSDGM)
If an invalid
outputschema
parameter specified, anows:ExceptionReport
is returned
Calling GetMetadata
with no parameters will return an ISO metadata
document of the service metadata.
The initial implementation will cover the ISO metadata standards, and will allow for additional metadata formats to be implemented in the future. In particular, this RFC provides a building block to support the INSPIRE metadata format requirements.
Examples¶
Requesting service metadata:
http://my.host.com/cgi-bin/mapserv?request=GetMetadata
Requesting specific layer metadata:
http://my.host.com/cgi-bin/mapserv?request=GetMetadata&layer=foo
Implementation Details¶
mapows.c (in msOWSDispatch
)
...
if (ows_request.service == NULL) {
if (EQUAL(ows_request.request, "GetMetadata")) {
status = msMetadataDispatch(map, request, &ows_request);
} else if(force_ows_mode) { /* exit if service is not set */
...
mapmetadata.c
int msMetadataDispatch(mapObj *map, cgiRequestObj *requestobj,
owsRequestObj *ows_request)
if layer parameter is not specified
return msMetadataGetServiceMetadata(map, paramsObj, ows_request);
else
return msMetadataGetLayerMetadata(map, paramsObj, ows_request);
...
int msMetadataGetLayerMetadata(mapObj *map, metadataParamsObj *paramsObj,
owsRequestObj *ows_request)
if MAP.LAYER.METADATA/ows_metadataurl_href
return HTTP 301 redirect to MAP.LAYER.METADATA/ows_metadataurl_href
else
generate metadata XML based on LAYER metadata spatial properties
...
int msMetadataGetServiceMetadata(mapObj *map, metadataParamsObj *paramsObj,
owsRequestObj *ows_request)
read map->web.metadata
return ISO 19119:2005 XML
Downstream OGC web service code then implements:
if !LAYER.METADATA.ows_metadataurl_href
set ows_metadataurl_href to http://host/mapserv?request=GetMetadata&layer=foo
set ows_metadataurl_format to "text/xml"
set ows_metadataurl_type to "TC211"
Testing¶
The msautotest/wxs
suite will be extended with test cases exemplifying
the expected behaviour of GetMetadata
.
Documentation¶
Documentation will be updated by adding ogc/mapmetadata.txt
to ogc/index.txt
. As well, wms_server.txt
, wfs_server.txt
,
wcs_server.txt
, sos_server.txt
will be updated to explain default
output if ows_metadataurl_href
is not set.
Backwards Compatibility Issues¶
There are no compatibility issues with existing mapfiles.
This implementation will result in the ability for MapServer OWS Capabilities
XML to always advertise XML metadata by reference of a metadata URL
(i.e. WMS MetadataURL
), but will not override existing behaviour. That
is, if a given layer has set ows_metadataurl_href
, then this value will
be used to advertise metadata XML references. If ows_metadataurl_href
is not set, then the code will advertise the metadata via a reference to
the GetMetadata
operation.
Affected Files¶
mapmetadata.c (new)
mapows.c
mapwms.c
mapwfs.c
mapwfs11.c
mapwcs.c
mapwcs11.c
mapwcs20.c
mapogcsos.c
Voting History¶
Adopted on 2012/10/08 with +1 from ThomasB, SteveL, StephanM, PerryN, SteveW, DanielM, and TomK.