Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - stac-api-extensions/sort: The Sort Extension that allows the user to define the fields by which to sort results. · GitHub
Skip to content

Repository files navigation

STAC API - Sort Extension Specification

Overview

This specification defines a new parameter, sortby, that allows the user to define the fields by which to sort results. Only string, numeric, and datetime attributes of Item (id and collection only) or Item Properties (any attributes) may be used to sort results.

It is not required that implementations support sorting over all attributes, but implementations should either implement Sortables or just return a 400 Bad Request status code when attempting to sort over a field name that does not support sorting. Implementers may choose to require fields in Item Properties to be prefixed with properties. or not, or support use of both the prefixed and non-prefixed name, e.g., properties.datetime or datetime.

Sort behavior may be bound to any of the following endpoints by advertising the relevant conformance class:

Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON body vary. The sortby value is an array, so multiple sort fields can be defined which will be used to sort the data in the order provided (e.g., first by datetime, then by eo:cloud_cover).

HTTP GET

When calling a relevant endpoint using GET, a single parameter sortby with a comma-separated list of item field names must be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is provided before the field name, it will be assumed to be "+". Note that + is used commonly by URL encoding as a space, so some tools may require escaping this literal + with a URL encoding of %2B.

Examples of sortby parameter:

  1. GET /search?sortby=properties.created
  2. GET /search?sortby=+properties.created
  3. GET /search?sortby=properties.created,-id
  4. GET /search?sortby=+properties.created,-id
  5. GET /search?sortby=-properties.eo:cloud_cover

Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4.

HTTP POST JSON Entity

When calling the relevant endpoint using POST withContent-Type: application/json, this adds an attribute sortby with an object value to the core JSON search request body.

The syntax for the sortby attribute is:

{
"sortby": [
{
"field": "<property_name>",
"direction": "<direction>"
}
]
}
{
"sortby": [
{
"field": "properties.created",
"direction": "asc"
},
{
"field": "properties.eo:cloud_cover",
"direction": "desc"
},
{
"field": "id",
"direction": "desc"
},
{
"field": "collection",
"direction": "desc"
}
]
}

Sortables

Additional endpoints that provide so called "Sortables" support clients that want to discover the list of resource properties with their types and constraints that may be used to sort resources.

These Sortables endpoints return lists of properties (or aliases) that can be used in the sortby parameter. It returns a JSON Schema that defines the properties allowed in sortby. The precise definition of this can be found in the OGC API - Features - Part 5: Schemas.

In particular:

  • No property SHALL be of type "object" or "array".
  • No property SHALL be a spatial property.
  • If additionalProperties is not included or has the default value true, any property name is valid in a sorting expression on the collection that is evaluated by the server and the property reference SHALL evaluate to null, if the property does not exist for a resource.
  • If additionalProperties is set to false, property references that are not explicitly declared in the sortables schema SHALL result in a 400 response.

All Sortables endpoints SHALL be referenced with a link with the link relation type http://www.opengis.net/def/rel/ogc/1.0/sortables.

Sortables EndpointEndpoint linking to the Sortables EndpointConformance classApplicable sortby endpoints
GET /sortablesGET /https://api.stacspec.org/v1.1.0/item-search#sortablesGET /search and POST /search
GET /collections/{collectionId}/sortablesGET /collections/{collectionId}http://www.opengis.net/spec/ogcapi-features-5/1.0/conf/sortablesGET /collections/{collectionId}/items
GET /... (Endpoint name to be chosen by implementation)GET /collectionshttps://api.stacspec.org/v1.1.0/collection-search#sortablesGET /collections

An example for a link to the sortables endpoint could be:

{
"href": "https://stac.example/sortables",
"type": "application/schema+json",
"rel": "http://www.opengis.net/def/rel/ogc/1.0/sortables",
"title": "Sortables"
}

For an example of a sortables endpoint response, please see the openapi.yaml.

About

The Sort Extension that allows the user to define the fields by which to sort results.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors