1

我一直在遵循 INSPIRE 下载服务的官方技术指南来使用 OpenSearch 构建 ATOM 提要:https ://inspire.ec.europa.eu/documents/technical-guidance-implementation-inspire-download-services

我坚持创建PHP执行搜索的。

根据前面提到的指南,OpenSearch 描述 XML 必须具有以下模板:

<Url type="application/zip" rel="results" template="http://myWeb/atom/search.php?spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&amp;spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&amp;crs={inspire_dls:crs?}&amp;language={language?}&amp;q={searchTerms?}"/>    

<Url type="application/atom+xml" rel="describedby" template="http://myWeb/atom/search.php?spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&amp;spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&amp;crs={inspire_dls:crs?}&amp;language={language?}&amp;q={searchTerms?}"/> 

同一指南有一个PHP脚本来帮助开发人员编写“search.php”文件。该脚本的开头是这样的:

$returnFile = false; 
foreach (apache_request_headers() as $name => $value) {
   //echo("$name: $value\n"); 
   if ($name=="Accept" && $value=="application/zip"){ 
      $returnFile = true; 
   } 
}  

如果$returnFile为真,则必须返回 ZIP 文件。如果为假,则返回一个 XML(这就是脚本的其余部分所做的)。

我的问题是条件$name=="Accept" && $value=="application/zip"永远不会为真,所以搜索总是返回一个 XML。

怎么$value可能application/zip

这是Accept我访问时得到的值http://myWeb/atom/search.php

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 

编辑:该指南详细说明了这一点:

The example given in Annex A uses content negotiation to identify which 
operation to perform. This means that even though the operation endpoint is 
only one, i.e. http://myWeb/search.php, the client has to set the HTTP 
―Accept‖ Header to the correct value in order to receive the expected 
result.

所以,如果我在 INSPIRE 验证器中测试我的 ATOM 提要,客户端就是 INSPIRE 验证器(将查询发送到 search.php 的那个)......我错了吗?

4

1 回答 1

0

我向验证器的开发人员提出了一个问题,他们确认没有按预期工作。验证器应在请求中添加“接受”标头,但将其留空。他们正在修复中。

于 2017-11-14T13:52:09.303 回答