<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.Shkpostityyli17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 2.0cm 70.85pt 2.0cm;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1821968491;
        mso-list-type:hybrid;
        mso-list-template-ids:-1132309230 67829777 67829785 67829787 67829775 67829785 67829787 67829775 67829785 67829787;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="FI" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span lang="EN-US">GDAL OAPIF driver, according to the documentation https://gdal.org/drivers/vector/oapif.html, takes the service landing page as URL<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">“Dataset name syntax<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The syntax to open a OGC API - Features datasource is : OAPIF:http://path/to/OAPIF/endpoint<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">where endpoint is the landing page or a the path to collections/{id}.”<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">In the OGC API Features standard <a href="http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_http_uris">
http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_http_uris</a> the landing page is defined as<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">“The entry point is a Landing page (path /)”<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I read this so that the landing page is “base URL followed by slash” and collections are supposed to locate at “base URL followed by /collections”.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The standard seems to say that the landing page must always have a trailing slash and therefore I should use URL like this<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV">ogrinfo OAPIF:https://www.ldproxy.nrw.de/rest/services/kataster/<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">That request works OK with this server and so does work the next request that ogrinfo generates even if has now two slashes in a row in the middle or the URL<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><a href="https://www.ldproxy.nrw.de/rest/services/kataster/collections/gebaeudebauwerk/items?limit=10">https://www.ldproxy.nrw.de/rest/services/kataster//collections/gebaeudebauwerk/items?limit=10</a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">However, with our own server landing page with trailing slash leads to failure because it does not like the double slashes later.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV">ogrinfo oapif:https://beta-paikkatieto.maanmittauslaitos.fi/geographic-names/wfs3/v1/<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="SV">generates<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV">https://beta-paikkatieto.maanmittauslaitos.fi/geographic-names/wfs3/v1//collections<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV">and the result is<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">ERROR 1: HTTP error code : 404 Not Found<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="SV"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I can imagine two alternative ways to fix the issue:<o:p></o:p></span></p>
<ol style="margin-top:0cm" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo1"><span lang="EN-US">Document that the URL is the base path and concatenate it with “/” or “/collections” for fetching the landing page or collection reference, respectively.<o:p></o:p></span></li><li class="MsoListParagraph" style="margin-left:0cm;mso-list:l0 level1 lfo1"><span lang="EN-US">Document that landing page must end with slash and make sure that slash will not be duplicated for /collections.<o:p></o:p></span></li></ol>
<p class="MsoNormal"><span lang="EN-US">Other suggestions are welcome, including advice to fix our own systems. I have checked many web pages which do not have problems with multiple slashes. Reference to corresponding part of http standard would be appreciated.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I wonder also if I understood right that OAPIF driver does not currently read the landing page at all. However I believe that it is OK that OAPIF server is advertising links which do not use the same base url than the
 landing page and then the collections would not be found.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Finally I do not understand why using direct URL to a collection work for this server<br>
ogrinfo oapif:https://www.ldproxy.nrw.de/kataster/collections/flurstueck<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">but not for our server<br>
ogrinfo oapif:https://beta-paikkatieto.maanmittauslaitos.fi/maastotiedot_100k/wfs3/v1/collections/rautatiepiste<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The http request looks good but the result is Not Found<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">HTTP: Fetch(https://beta-paikkatieto.maanmittauslaitos.fi/maastotiedot_100k/wfs3/v1/collections/rautatiepiste)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">HTTP: libcurl/7.37.1 OpenSSL/1.0.1h zlib/1.2.3<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">HTTP: These HTTP headers were set: Accept: application/json<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">ERROR 1: HTTP error code : 404<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-Jukka Rahkonen-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>