Overpass API EBNF

Aus Geoinformation HSR
Version vom 15. September 2024, 20:58 Uhr von Stefan (Diskussion | Beiträge) (Die Seite wurde neu angelegt: «Es gibt kein offizielles EBNF für Overpass QL. Für Syntax-Beispiele siehe Overpass_API und [https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_…»)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Es gibt kein offizielles EBNF für Overpass QL. Für Syntax-Beispiele siehe Overpass_API und Overpass_API_by_Example.

Hier ein erster Versuch (Version 0.2):

(* Overpass QL EBNF Grammar *) (* Query *) query ::= ( global_option )* ( statement )+ ( output_statement )* (* Global Options *) global_option ::= '[' option ( ';' option )* ']' option ::= 'out:' format | 'timeout:' number | 'maxsize:' number | 'bbox:' bbox | 'date:' date | 'diff:' date ',' date | 'resolve-aliases:' boolean | 'force:' boolean boolean ::= 'true' | 'false' (* Statements *) statement ::= fetch_statement | area_statement | assignment_statement | union_statement | difference_statement | intersection_statement | recurse_statement | foreach_statement | if_statement | print_statement | make_statement | count_statement (* Fetch Statement *) fetch_statement ::= element_type ( filter )* ( search_area )? ( ';' | '{' ( statement )+ '}' ) element_type ::= 'node' | 'way' | 'relation' | 'nwr' (* Filters *) filter ::= '[' attribute_filter ']' | '[' attribute_regexp_filter ']' | '[' attribute_negation_filter ']' | '(' bounding_clause ')' | '[if:' condition ']' attribute_filter ::= key operator value attribute_regexp_filter::= key operator_regex regex_value attribute_negation_filter ::= '!' key operator ::= '=' | '!=' operator_regex ::= '~' | '!~' regex_value ::= '"' regex_pattern '"' (* Bounding Clause *) bounding_clause ::= bbox | 'around' ':' radius ( ',' lat ',' lon )? | 'poly' ':' '"' coordinates '"' (* Search Area *) search_area ::= '(' area_selector ')' area_selector ::= 'area' ( '.' variable )? | 'area' '(' query ')' (* Assignment Statement *) assignment_statement ::= variable '=' expression ';' expression ::= fetch_statement | union_statement | difference_statement | intersection_statement | recurse_statement | '(' statement_list ')' (* Union Statement *) union_statement ::= '(' statement_list ')' statement_list ::= statement ( ';' statement )* ( ';' )? (* Difference Statement *) difference_statement ::= '(' statement ';' '-' statement ( ';' )? ')' (* Intersection Statement *) intersection_statement ::= '(' statement ';' statement ( ';' )? ')' (* Recurse Statement *) recurse_statement ::= ( variable ':' )? element_type recurse_operator ';' recurse_operator ::= '>' | '<' | '<<' | '>>' | '>' letter (* Foreach Statement *) foreach_statement ::= 'foreach' '(' variable ')' '{' ( statement )+ '}' (* If Statement *) if_statement ::= 'if' '(' condition ')' '{' ( statement )+ '}' (* Print Statement *) print_statement ::= 'print' ( variable )? ( output_modifiers )* ';' (* Make Statement *) make_statement ::= 'make' 'area' '(' statement ')' '->' variable ';' (* Count Statement *) count_statement ::= 'count' '(' element_type ')' ';' (* Area Statement *) area_statement ::= 'area' area_filter '->' variable ';' area_filter ::= '[' attribute_filter ']' (* Output Statement *) output_statement ::= 'out' output_modifiers* ';' output_modifiers ::= 'body' | 'skel' | 'tags' | 'meta' | 'geom' | 'center' | 'ids' | 'qt' | 'count' | 'bb' (* Variable *) variable ::= '.' identifier (* Identifier *) identifier ::= letter ( letter | digit | '_' )* (* Key and Value *) key ::= '"' identifier '"' value ::= '"' string '"' (* Condition *) condition ::= logical_expression logical_expression ::= logical_term ( ( 'and' | 'or' ) logical_term )* logical_term ::= '(' logical_expression ')' | comparison comparison ::= expression comparison_operator expression comparison_operator ::= '=' | '!=' | '>' | '<' | '>=' | '<=' (* Expressions *) expression ::= variable | function_call | value | number function_call ::= function_name '(' ( expression ( ',' expression )* )? ')' function_name ::= identifier (* Numbers and Strings *) number ::= digit+ ( '.' digit+ )? digit ::= '0'..'9' letter ::= 'a'..'z' | 'A'..'Z' string ::= character* character ::= any character except '"' regex_pattern ::= character* (* Bounding Box and Coordinates *) bbox ::= number ',' number ',' number ',' number radius ::= number lat ::= number lon ::= number coordinates ::= number ( ' ' number )+ ( ',' number ( ' ' number )+ )* (* Date *) date ::= '"' iso8601_date '"' iso8601_date ::= year '-' month '-' day 'T' hour ':' minute ':' second 'Z' year ::= digit digit digit digit month ::= digit digit day ::= digit digit hour ::= digit digit minute ::= digit digit second ::= digit digit (* Format *) format ::= 'json' | 'xml' | 'csv' | 'popup' (* Terminals *) character ::= any character except '"'