|
|
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | Es gibt kein offizielles EBNF für Overpass QL. | + | Es gibt keine EBNF Spezifikatikon für die Overpass QL. Roland weiss sicher mehr :-). |
− | Für Syntax-Beispiele siehe [[Overpass_API]] und [https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example Overpass_API_by_Example].
| |
| | | |
− | Hier ein erster Versuch (Version 0.2):
| + | Da bleibt nur ChatGPT & Co und "Learning by Example": siehe [[Overpass_API]] und v.a. [https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example Overpass_API_by_Example]. |
| | | |
− | <nowiki>
| + | Hier ein erster eigener Versuch als [https://gist.githubusercontent.com/sfkeller/43800cd64014d17c55e40fa5e877fd6a/raw/3410bd8817e47c86e5695388a96ba1db5c0630a7/Overpass_QL_EBNF_v0.2_ChatGPT_generated.txt Github Gist File]. |
− | (* Overpass QL EBNF Grammar *)
| |
| | | |
− | (* Query *)
| + | [[Kategorie:OpenStreetMap]] |
− | query ::= ( global_option )* ( statement )+ ( output_statement )*
| + | [[Kategorie:Overpass]] |
− | | |
− | (* 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 '"'
| |
− | </nowiki>
| |
Es gibt keine EBNF Spezifikatikon für die Overpass QL. Roland weiss sicher mehr :-).