-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Local Resource Catalogs and req. class organization #300
Comments
@jerstlouis sorry I don't quite understand your initial description. A "local resources catalogue" is a way of extending an existing endpoint to allow catalogue-like queries at that endpoint. We always use '/collections' as an example but other endpoints might be candidates too (e.g. So you take an endpoint like The response is exactly as before but the list of objects only includes those that satisfy the query predicates. Is this your understanding too? |
B.T.W. @jerstlouis we discussed this before and I told you I would refactor the dependencies because they are not quite right. Unfortunately, my timetable never seems to align with yours! |
@pvretano Yes I believe so. The issue is the way the requirements classes, and in particular the dependencies (on Records API and Records Collection) are currently defined in the spec (as you had mentioned, and yes I noticed they were not yet corrected). So this issue is basically a blueprint on how this dependency issue could be addressed, while also simplifying things and perhaps facilitating how to "plug" Records with Common - Part 2, Processes, and a potential Coverages - Scenes requirements class. I am also hoping that this P.S. I think both of our timetables are way too busy to try to align them ;) But these are async, not sync, requests ;) |
Thanks a lot, I would be happy to hop in whenever that is discussed. |
I'll let you know when it is on the agenda... |
07-AUG-2023: We discussed a bit in the SWG but no one has had time to review in detail. Homework for everyone is to review for the next SWG meeting and we can discuss then. |
21-AUG-2023: @pvretano will refactor the conformance classes to put the query parameters together so that there is only a single set of requirements for the query parameters that can then be referenced in the searchable to local resource catalogue conformance classes. |
18-MAR-2024: Had a long discussion about the current organization of the standard. @jerstlouis wants us to cut it back a bit so we will have a full discussion with @jerstlouis about this in the SWG meeting on 15-APR-2024. |
Sorry for missing the meeting (still on winter time in EU) |
@kalxas I don't want this to delay anything. The changes I proposed are mostly organizational, in terms of:
I thought @pvretano mentioned on the mailing list the SWG was not yet ready to make a motion for OAB review just yet, but still I think these changes are not significant enough to prevent going to the OAB / RFC and applying them after the comment period is completed. Based on discussion with Peter today this is what the reshuffling could look potentially like, assuming the SWG likes the idea: Requirement Classes defining resources OGC API - Records "Core" (merge all of these into 1 req. class):
OGC API - Records "Dynamic Catalog"
OGC API - Records "Feature Records" (Records implemented as a profile of OGC API - Features, where individual features are records, merge these into single req. class)
Requirement Classes defining parameters 8.4. Requirements Class "Record Core Query Parameters" (Building Block) 8.6. Requirements Class "Sorting" (Building Block) 8.7. Requirements Class "Filtering" (Building Block) There would not be a need for req. classes of parameters specific to a particular deployment e.g.:
Actually, there is one issue to resolve regarding "Record Collection", which I think is an issue regardless of the re-organization. The Local Resource Catalogs do not depend on "Record Collection" right now, but the Crawlable Catalogs do. It makes a "Local Resource Catalog" not a valid crawlable catalog, which I think is a problem as ideally the base target client should support "any" kind of OGC API - Records catalog. |
@jerstlouis, with all due respect and I mentioned this in the SWG meeting, this WILL delay the OAB submission. Even simply taking editorial considerations into account, broken references, renaming of files to be more consistent, etc. will require quite a bit of work to get the document back into shape for the OAB. With regard to the "Local Resources Catalog" and "Record Collection". The basic schema of the local resource (i.e. the collection, the process list, the scene list, etc.) is not in the control of the OARec SWG. If we make "Record Collection" a dependency for the "Local Resources Catalog" then that means that each of the SWGs that control a catalog-like local resource (e.g. Features, Processes, Coverages, etc.) would need to refactor their standards to derive the schema of their "local resource" from the collection schema in Records. This is why we took the approach that we did ... that is we describe how an existing local resource can be extended to behave like a catalogue in a non-breaking way (i.e. you simple add a bunch of additional properties which in most/all cases is not illegal and you add some query parameters to the endpoint). As I mentioned in the SWG meeting, it would be very nice from the perspective or consistency across the OGC API standards to have all the "catalogue-like" endpoint schemas be drived from "Record Collection" but I don't think that, that level of consensus is achievable in the short term and certainly not before we want to release the standard for OAB review. I can add language to the current Local Resources Catalog requirements class that say that if a "local resource" is extended as described in the requirement class then that "local resource" can be considered a starting node for a crawlable catalogue the way a record collection is considered a starting node for crawling right now. |
What I meant is that the changes could potentially be done after the OAB / RFC, or if the SWG does not think this is a good idea, and this would cause too much delays, my suggestions can be ignored. Again, sorry to be the PITA that I am.
It's not, but it so happens that all of the existing ones right now ( {
"links" : [ ... ],
"{recordResources}" : [
{
"id": ...,
"links": ...,
...
}, ...
]
} So there should be no refactoring needed. I think it's okay to if they explicitly ask this of future req. classes as well that want to conform to the Records Local Even tileMatrixSets fit the pattern.
That would be the list of local resources, right? e.g., |
Since Features is mentioned here: I assume that this is about the Collection resource in Features Core? How could that extend Records? I did not find a collection schema in Records, so I assume this is about the catalog schema. The catalog schema extends the Collection resource with additional properties, some of them required. A Catalog is a specific Collection, not the other way around. Or am I missing something? |
@cportele Currently there are 3 "deployments" mode:
is only true for the first 2. For local resource catalog, the intent is that I am suggesting that there could be a more rudimental concept of a list of records implied by an OGC API - Records "Core" req. class, which is not a collection of geospatial data as defined in Common - Part 2, or a collection of geospatial features / items as defined in Features, but is simply a list (collection purely in the CS sense) of records (but of which an OGC API - Common - Part 2 / Features "Collection" is a derived class -- EDIT: but here we're talking about the Local resource catalogs (e.g., /processes, /collections) could conform to that list of records, without being a full blown OGC API - Common - Part 2 / Features "Collection". The only caveat is that the Core would need to allow non-GeoJSON catalogs. i.e., I'm not sure whether the current JSON requirement class is in line with this... I'm wondering if having a very high level schema like I'm also realizing that the current catalog.yaml schema would be too restrictive to allow existing collections / processes to be valid catalogs per that schema. That's basically the issue that I'm raising: it would be great if there was a common schema (though JSON Schema might not be able to express the EDIT: I am probably confused by the two different catalog collection levels of Alternatively, perhaps all of these "Building blocks" requirement classes do not need to be requirement classes and are just building blocks (as per the OGC Building Blocks registry concept), and only the Deployment requirement classes need to be req. classes? And perhaps the "Local Resource Catalogs" similarly are not really requirement classes of records, but requirement classes of whichever standard where the associated resources are defined? (Common - Part 2, Processes, Coverage Scenes...). |
@cportele the idea, right now, is that the catalog standard define how to EXTEND exsting OGC resources (like So, the Records standard DOES not use the "Record Collection" or catalog (the terms are used interchangeably in the standard) building block for the Searchable Catalog and Local Resources Catalog deployments ... since these deployments use already-defined "collection objects" that simply need to be extended in order to be usable as mini searchable catalogues. @jerstlouis is correct about that. NOTE: I use "collection object" here in the general sense to mean any OGC object that is used to describe a collection of stuff the way Since the Crawlable Catalog deployment does not have a pre-existing collection object that the Records standard could extend, we simply took/stole the Features collection object, extended it, and used that to describe a static collection of records . This object is called a "Record Collection" or "Catalog" in the standard and this is where So you are correct when you say that a "catalog" (as defined by However, if we were to reorganize the catalog specification "the other way around" as @jerstlouis is suggesting then I believe that would mean that all the OGC standards that define collection objects or one sort or another -- that want those collection objects to be searchable as mini catalogs -- would need to derive the schema of those collection objects from a "Record Collection" object defined in the Records standard. The schema of that "Record Collection" object in JSON would be as defined in While this is probably a good thing (at least from the perspective of consitency across the OGC standards), in records we decided to go the other way and we let each standard define its collection object(s) in any way it wants and the Records standard simply describes how to extend those objects with additional properties [and the endpoints that server them with additional parameters] to enable catalog-like searching. We figured that would be that path of least resistance to adoption so we went with that. I don't think that I am not opposed to doing things the other way around, as @jerstlouis is suggesting, but if that is the case then I don't think we can submit to the OAB with such a big outstanding change waiting to be applied during the public review period. The OAB would be reviewing something that looks nothing like what the standard would eventually look like. @jerstlouis the current JSON requirments class requires GeoJSON for the Record building block only; not the Record Collection building block. There was a cut-n-paste error that I have fixed in the outstanding "carl-edits" PR. @jerstlouis the current standard also defines a set of media types for JSON and HTML encoded records, catalogs and other collections. If a resource is encoded as HTML then its media type is always |
Couldn't there be respective I don't think all of them apply to |
@fmigneault It is these other parameters corresponding to the applicable queryables to filter on, which are inside the records. But I don't know whether this extends to what .../queryables is about, given that this was originally intended specifically for filtering with CQL2. @pvretano regarding |
@jerstlouis @fmigneault these are the kinds of issues we get into when you try to parse things too finely. For me, the simplest approach is that if you say you implement the Query Parameters requirement class then you implement ALL of them. If your information model does not have spatial or temporal properties then the BBOX and DATETIME query parameters are no-ops. Features, for example, does not give you an option of whether you implement bbox or not even though you can have features with no spatial or temporal information at all (i.e. geometry: null). Same for datetime. All this pretzel bending of listing individual conformance classes for each query parameter OR having to look into the OpenAPI document OR somehow highjacking the /queryables endpoint OR supporting a subset and then conditionally supporting the others based on whether the information model has spatial or temporal properties is just too complicated. So, I think we should just stick with the simple approach. If you implement the Query Parameters conformance class you must implement ALL the query parameters even if in your particular case BBOX and DATETIME are ignored since you don't happen to have spatial or temporal information in your information model. @jerstlouis strictly speaking you only need [ogc-rel:catalog]. I broke it out into three to help clients immediately know what kind of catalog they were heading to without having to inspect anything. Assuming that we only have [ogc-rel:catalog] then a catalog client would, upon landing on a catalog page proceed as follows:
You could, conceivably, have all three (records in-line, referenced records and records retriveable from a searchable endpoint) mixed together but I have never seen that and I'm not sure who would have such a requirement. |
I really like that approach :) This way, one could write a Records client that can discover things with a clear logic, without having to care about 3 different deployment types.
Whether the endpoint is queryable is a different story... you should know that from one of the queryable conformance class instead. Because the Local Resource Catalog can also be queryable. |
The "rel=items" comes from Features and there, the query parameters are part of core and not optional. So, I believe, that if you see "rel=items", it's a queryable endpoint. |
Right, but Searchable Collections or Processes could also be queryable. You could also set up a catalog not following the Features API, but implementing Query parameters / Filtering / Sorting. |
@jerstlouis all searchable and crawlable catalogs can catalog external resources. Heck, that is the primary use case! The Element84 site that you sent me does exactly that. The Element84 server catalogs all the Sentinel , Landsat, NAIP, Copernicus DEM and other data products. They did it in a bunch of homogenous catalogs accessible here: https://earth-search.aws.element84.com/v1/collections. and you can, for example, access the NAIP catalog here: https://earth-search.aws.element84.com/v1/collections/naip and the records of the NAIP catalog here: https://earth-search.aws.element84.com/v1/collections/naip/items I would have created a single heterogenous catalog containing all the metadata and you could use the To be honest with you I don't think that Well, what if, instead I set up a searchable catalog with the id "catalog". I would then crawl the resource tree of the local OGC deployment and harvest ALL the metadata. ALL the process summaries, ALL the collections, ALL the scenes, ALL the styles ... everything! In the end my "catalog" catalog would have a record describing every single resource I could retrieve from my local OGC API deployment. I could then do stuff like:
and I would get back the subset of records for feature collections that satisfy the But why stop at "local" resource? I could also add external resources to my "catalog" catalog too ... very easily ... and have a single catalog in my deployment that registers all the local resources and all the external resource that I am interested in. Or, I could do what Element84 did and create two catalogs with ids "LocalCatalog" and "ExternalCatalog" and havest each class of resources (local and external) into the appropriate catalog! All easily supported. As for making a queryable |
Because I passionately dislike the whole idea of the Features API deployment type of catalogs since the very beginning, because it mixes up data & metadata. I mentioned this at the very first OGC API hackathon in London in June 2019 and I have not changed my mind, and I will unlikely ever change my mind about this. For me, not being forced to have
And this is exactly what I am hoping that The great things about this are that:
While you could use the In the end, opinions differ and people are likely to implement and deploy things differently. |
I was saying:
Since "Searchable catalog" in the current req. classes is the Features API deployment type, I'm still not clear whether the current draft and your comment (that did not mention Local Resource Catalog) precludes the Local Resource Catalog deployment type from cataloguing external resources. That's because the only deployment type supporting query parameters at the moment are "Searchable Catalog" (Features API) and "Local Resource Catalog". |
@jerstlouis your definition of local and external is too loose. Say I have two processing servers P1 and P2. P2 has a processes named A on it and P1 "cascades" or behaves as a proxy for that A process. That means that A appears on P1 as a process but when I execute A on P1, P1 actually delegates execution of A to P2. From the client persepctive if I do a Now, if I enhance If the process descriptions on P1 includes some property in the process summary/description like I think this is what you are looking for and if it is, this is opaque to the catalog and the local resources catalog would work just fine in this situation. |
Yes, that's what I'm hoping one can do for both But I was also considering the case where you just have a more traditional CSW-like catalog, and like me, you are philosophically against the idea of the Features API deployment type. This CSW-like catalog would have those core You can't currently call this a "Searchable Catalog", because per the current req. classes that implies the Features API. This was one of the things that would have been fixed with the re-organization. I hope this is still a valid deployment type, even if this makes "Local Resource Catalog" a misnomer. |
@jerstlouis CSW was also based on WFS in a similar way that Records is now based on Features. |
you can just implement your catalog in /collections/catalog and you have the use case you describe above |
I did not know that! Thanks for pointing that out. I'm trying to find in https://docs.ogc.org/is/12-176r7/12-176r7.html where that would be. I see a distinct
That's exactly what I don't want to do, because in my view (and as per the resolution of opengeospatial/ogcapi-common#140) |
There are no direct references in the final CSW document, but during the development stages of CSW, WFS was the base.
Records can also be considered as resources (in CSWRecord we had embeded GML for the spatial part, nowdays we have GeoJSON). I understand your view but I believe we should remain in the CSW spirit that was always based on WFS. |
But this is the important difference between "depending on another spec" (as in Records Features API) vs. re-using common building blocks (as in CSW and WFS).
I am not suggeting to get rid of the Features API deployment type, or change the API at all. I am asking for clarification on whether the "Local Resource Catalog" req. class excludes cataloguing external resources. I really hope it does not, because then my use case / preferred deployment type would already be supported through the Local Resource Catalog provisions. |
One more thing about collections: In CSW we had:
A few years before OGC API Records, the EO community was heavily working with OpenSearch because the collection handling was easier than CSW. Now we have a nice collection mechanism in Common/Features/Records and we argue against using it. We are shooting our own feet here. I would argue on the opposite direction: There is no mechanism in Features to define multiple hierarchies (collection inside a collection) and I foresee that to be a problem in the future... |
@kalxas About collections inside a collection, see opengeospatial/ogcapi-common#11 and opengeospatial/ogcapi-common#298 . I should be finally drafting the req. class this week. |
Lets not waste any more time then. |
Thank you for the links! |
I feel that we are making some important clarifications on things that are not obvious to external implementers / readers, not wasting time.
That would make the use cases for which I care about Records ( I don't want these discussions / feedback to delay anything, so please do not delay the OAB review / RFC . |
Sorry, I did not mean to say that the discussion is not productive. We (SWG) are getting a lot of discussion about the fact that Records is not yet finalized, because a lot of organizations want to adopt (or even have already adopted) Records.
Thank you |
Hi all: some comments:
Over the past 4 years (or more), we have worked to support 3 clauses based on the use cases/workflows:
In addition, we have worked to achieve as much harmonization with STAC as possible. During this time, we have seen significant high profile uptake of OGC API - Records:
I see the discussion in this issue hits some very core underpinnings of metadata in OGC API. Given that one person's metadata is another person's data, as well as the reality of data granularity is something defined by a given SDI/activity, we need to ensure Local Resources discovery is generic enough so as not to block adoption for extension/specialization by downstream API standards. Having said this, I think OGC API - Records could benefit from having the following parts:
IMO, this could satisfy the critical path use case of superseding CSW and allow for fulsome discussion of Parts 2/3 as needed over time. We can visit the feasibility of this during the RFC period. |
13-MAY-2024: @pvretano will add some informative text in the Local Resources Catalogue part to describe how the catalog embedded records object can be used to include records in endpoints like e.g. /processes. |
Following up on past suggestions via e-mail, and based on previous discussion and clarification from @pvretano, if I understand correctly the intent of Section 12 - Local Resource Catalogs would allow to catalog OGC API collections, whether local or from other services, as local collections at
/collections/{collectionId}
(instead of as items at/collections/{collectionId}/items/{itemId}
), so as to enable the concept of a super-API that could gather several data collections under a single API (which could still use remote-links to link to the access mechanisms like/coverage
,/tiles
,/items
etc.). In addition, this would enable functionality to filter a large set of collections directly at/collections
(also related to potential Common - Part 2 req classes for collection filtering), instead of requiring a special catalog collection that is metadata mixed up with all the other collection which are actual data.Accessing
/collections
as a catalog is particularly interesting for a generic OGC API clients (e.g., the GDAL OGCAPI driver), as it does not require the implementation of a dedicated Records client and does not involve any additional step for the user. Furthermore, local processing resource can be integrated into the same API, and data integration/access mechanisms like DGGS and Processes - Part 3: Workflows and Chaining makes for a very interesting API and system of systems.If this could indeed be possible, I believe there might be some issue with the current requirements class layout.
In particular, the current stated dependencies of Local Resources Catalogue on the Record API and the Record Collection might be problematic.
I made the following suggestion as a potential alternative requirements classes layout to address these issues:
Requirement Classes defining resources
Requirement Classes defining origins
/collections/{collectionId}/items/{recordId}
).../{resources}/{resourceId}
) where{resources}
could be e.g., Collections (/collections/{collectionId}
) or Processes (/processes/{processId}
) or EO Scenes (e.g../collections/sentinel2-l2a/scenes/{sceneId}
). This would make it possible to apply Records advanced filtering capabilities at/processes
,/collections
,/collections/sentinel2-l2a/scenes/
. It would be good to have a mechanism to associate specifically with a particulary type of local resources, like "Common - Part 2: Collections" or "Processes", perhaps as requirements classes of those other standards (we are planning to revive the Common SWG at the September meeting, meeting in the OGC API track).Requirement Classes defining query parameters
q=
,type=
,externalId=
)datetime
andbbox
, Common or Features or some other spec would actually be defining them)filter=
, not necessarily CQL2, since you could havefilter-lang=
and you would explicitly declare conformance to CQL2 just like with Features - Part 3)sort=
)properties=
) -- you may want to get lots of info back for several records, but only want some key properties that makes the results a lot smallerThe only requirements class dependency would be of everything else on "Core" (and Records Collection on OGC API - Features).
Any end-point to a resource supporting OGC API - Records "Core" requirements class is automatically a "Records API" and a "Crawlable catalogue".
If that API implements Full Text Search, Records Filtering, or Records Sorting, or Records property selection, it is a kind of "Searchable Catalog".
A "Searchable Catalog" profile could specify that all of these need to be implemented to conform to it.
Would the SWG consider any of these suggestions?
Thank you!
cc. @tomkralidis @joanma747
The text was updated successfully, but these errors were encountered: