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 )不可用,即使在LAYER.METADATA/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计划的附加服务描述。

此功能将通过名为的MapServer特定的HTTP操作提供 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

实施细节

Mapows.c(在 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 未设置。

向后兼容性问题

与现有映射文件没有兼容性问题。

此实施将使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

票据ID

投票历史

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