我一直在遵循 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?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&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?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&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 的那个)......我错了吗?