--- title: Element Query Guide tags: - Guide - External - Developer --- ## Element Query Guide This guide explains how to format the element query selector for use in an AVIV ScoutRoute Long Form Quest Definition. _For a list of all guides on the TCAT Wiki, refer to the [Guides List](../../guides-list/index.md)._{ .guides-list-ref } --- ### Cheatsheet for element filter syntax The `quest_query` attribute of an AVIV ScoutRoute long form quest definition is constructed in a similar way to an OverPass API query, with some modifications. For example, to get all ways, simply enter the query: `ways` | Expression | \[matches] returns `true` if element... | |:-----------------------------|:--------------------------------------------------------------------------------------------------------------------------| | `shop` | has a tag with key `shop` | | `!shop` | doesn't have a tag with key `shop` | | `shop = car` | has a tag with key `shop` whose value is `car` | | `shop != car` | doesn't have a tag with key `shop` whose value is `car` | | `~shop\|craft` | has a tag whose key matches the regex `shop\|craft` | | `!~shop\|craft` | doesn't have a tag whose key matches the regex `shop\|craft` | | `shop ~ car\|boat` | has a tag whose key is `shop` and whose value matches the regex `car\|boat` | | `shop !~ car\|boat` | doesn't have a tag whose key is `shop` and value matches the regex `car\|boat` | | `~shop\|craft ~ car\|boat` | has a tag whose key matches `shop\|craft` and value matches `car\|boat` (both regexes) | | `~shop\|craft !~ car\|boat` | doesn't have a tag whose key matches `shop\|craft` and value matches `car\|boat` (both regexes) | | `foo < 3.3` | has a tag with key `foo` whose value is smaller than 2.5
`<`,`<=`,`>=`,`>` work likewise | | `foo < 3.3ft` | same as above but value is smaller than 3.3 feet (~1 meter)
This works for other units as well (mph, st, lbs, yds...) | | `foo < 3'4"` | same as above but value is smaller than 3 feet, 4 inches (~1 meter) | | `foo < 2012-10-01` | same as above but value is a date older than Oct 1st 2012 | | `foo < today -1.5 years` | same as above but value is a date older than 1.5 years
In place of `years`, `months`, `weeks` or `days` also work | | `shop newer today -99 days` | has a tag with key `shop` which has been modified in the last 99 days. Absolute dates work as well. | | `shop older today -1 months` | has a tag with key `shop` which hasn't been changed for more than a month. Absolute dates work as well. | | `shop and name` | has both a tag with key `shop` and a tag with key `name` | | `shop or craft` | has either a tag with key `shop` or a tag with key `craft` | | `shop and (ref or name)` | has a tag with key `shop` and either a tag with key `ref` or a tag with key `name` | | `shop and !(ref or name)` | has a tag with key `shop` but not either a tag with key `ref` or a tag with key `name` | Note that regexes have to match the whole string, i.e. `~shop\|craft` does not match `shop_type`. --- ### Equivalent expressions | Expression | Equivalent Expression | |:----------------------------|:---------------------------------------------------------| | `shop and shop = boat` | `shop = boat` | | `!shop or shop != boat` | `shop != boat` | | `shop = car or shop = boat` | `shop ~ car\|boat` | | `craft or shop and name` | `craft or (shop and name)` (`and` has higher precedence) | | `!(amenity and craft)` | `!amenity or !craft` | | `!(amenity or craft)` | `!amenity and !craft` | The queries can be combined with parenthesis and can also be used for matching with multiple tag filters. --- ### Example queries: - Get all sidewalks: `ways with (footway=sidewalk)` - Get all sidewalks without a surface tag: `ways with (footway=sidewalk and !surface)` - Get all kerbs without a tactile_paving tag: `nodes with (barrier=kerb and !tactile_paving)`