MS RFC 82:支持增强的层元数据管理

日期

2012-01-24

作者

Tom Kralidis(gmail.com上的Tomkralidis)

最后编辑

2017-04-03

状态

采用

版本

MAPServer 7.2

概述

OGC Web服务(OWS)能够将与给定资源(WMS层、WFS FeatureType、WCS Coverage、SOS ObservationOffering)相关联的内容元数据发布到功能文档中,并作为对给定URL(即ISO元数据XML文档)的引用。

mapserver支持两种内联(例如 wms_titlewms_abstract )和基于URL的(例如 wms_metadataurl_href )OWS功能的元数据广告。

如果给定的数据集没有关联的正式XML元数据,那么功能XML引用元数据(即WMS MetadataURL )不可用,即使在层之间。元数据/OWS_*值和层的空间属性之间,也可以处理足够的信息来生成有用的XML元数据文档。

MAPServer OGC服务功能XML中正式XML元数据的存在,为获取元数据以支持发现的目录服务提供了价值。

建议对mapserver进行增强,以支持从给定层的元数据和空间属性生成XML元数据文档。

此增强功能为OWS服务动态发布XML元数据,以应对给定资源不存在/未指定XML元数据的情况。

技术解决方案

MapServer将能够从layer.metadata/ows_*指令和给定层的空间属性动态生成ISO 19139:2007元数据XML文档。

MapServer还将支持基于web.metadata ows_u*指令格式化为ISO 19119:2005的服务元数据文档的输出。这是一个支持Inspire计划的附加服务描述。

此功能将通过一个名为 GetMetadata 具有以下参数:

调用 GetMetadata 如果没有参数,将返回服务元数据的ISO元数据文档。

最初的实现将涵盖ISO元数据标准,并允许在将来实现其他元数据格式。特别是,这个RFC提供了一个构建块来支持inspire元数据格式需求。

实例

正在请求服务元数据:

http://my.host.com/cgi-bin/mapserv?request=GetMetadata

请求特定层元数据:

http://my.host.com/cgi-bin/mapserv?request=GetMetadata&layer=foo

实施细节

地图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

下游OGC Web服务代码然后实现:

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"

测试

这个 msautotest/wxs 套件将通过测试用例进行扩展,以证明 GetMetadata .

文档

文档将通过添加 ogc/mapmetadata.txtogc/index.txt . 也, wms_server.txtwfs_server.txtwcs_server.txtsos_server.txt 将更新以解释默认输出,如果 ows_metadataurl_href 未设置。

向后兼容性问题

与现有 Mapfile 没有兼容性问题。

此实现将使MapServer OWS功能XML能够始终通过引用元数据URL(即WMS)来公布XML元数据 MetadataURL ,但不会覆盖现有行为。也就是说,如果给定的层 ows_metadataurl_href ,则此值将用于公布元数据XML引用。如果 ows_metadataurl_href 未设置,则代码将通过引用 GetMetadata 操作。

受影响的文件

  • mapmetadata.c(新)

  • mapows.c

  • mapwms.c

  • mapwfs.c

  • mapwfs11.c

  • mapwcs.c

  • mapwcs11.c

  • mapwcs20.c

  • mapogcsos.c

投票历史

2012/10/08通过,由Thomasb、Stevel、Stephanm、Perryn、Stevew、Danielm和Tomk提供+1。