Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

TXT Grammar (work in progress)

In this page is presented the TXT language syntax. EBNF was selected as metalanguage.

<sequence of search conditions> ::=
 			<search condition>
 		       |<sequence of search conditions> <semicolon> <search condition>
<search condition> ::= <boolean value expression>

<boolean value expression> ::=
    <boolean term>
    | <boolean value expression> OR <boolean term>

<boolean term> ::=
    <boolean factor>
    | <boolean term> "AND" <boolean factor>

<boolean factor> ::= [ "NOT" ] <boolean primary>

<boolean primary> ::=
    <predicate>
    | <left parent> <search condition> <right parent>

<predicate> ::=
    <comparison predicate>
    | <like text predicate>
    | <like geom predicate>
    | <null predicate>
    | <temporal predicate>
    | <classification predicate> [1]
    | <existence_predicate>
    | <between predicate>
    | <id predicate>
    | <geometry predicate>

Temporal Predicate
<temporal predicate> ::=
    <attribute_name> "BEFORE" <date-time expression>
    | <attribute_name> "BEFORE" "OR" "DURING" <period>
    | <attribute_name> "DURING" <period>
    | <attribute_name> "DURING" "OR" "AFTER" <period>
    | <attribute_name> "AFTER" <date-time expression>

<date-time expression ::= <date-time> | <period>

Existence Predicate
<existence_predicate> :=
    <attribute_name> "EXISTS"
    | <attribute_name> "DOES-NOT-EXIST"


Comparison Predicate
<comparison predicate> ::= <expression> <comp op> <expression>

<comp op> ::= <equals operator>
    | <not equals operator>
    | <less than operator>
    | <greater than operator>
    | <less than or equals operator>
    | <greater than or equals operator>

Like Predicate
<like text predicate> ::= <expression> [ "NOT" ] "LIKE" <character pattern>

<character pattern> ::= <character string literal>

(* pattern examples :
        attribute like '%contains_this%'
        attribute like 'begins_with_this%'
        attribute like '%ends_with_this'
        attribute like 'd_ve' will match 'dave' or 'dove'
        attribute not like '%will_not_contain_this%'
        attribute not like 'will_not_begin_with_this%'
        attribute not like '%will_not_end_with_this' *)

<like geom predicate> ::= <relate> [ "NOT" ] "LIKE" <relate pattern>

<relate pattern> ::=  <quote>
                         <relate flag><relate flag><relate flag><relate flag>
                         <relate flag><relate flag><relate flag><relate flag>
                        <quote>
<relate flag> ::= "T" | "F" | "*"

Null Predicate
<null predicate> ::= <expression> "IS" [ "NOT" ] "NULL"

Between Predicate
<between predicate> ::= <expression> [ "NOT" ] "BETWEEN" <expression> "AND" <expression>

ID Predicate
<id predicate> ::= "ID" [ "NOT" ] "IN" <id> {"," <id> }
<id> ::= ...(TODO)
IN Predicate
<in predicate>    	::=   <attribute-name> [  "NOT"  ]  "IN"  <in predicate value>
<in predicate value>    ::=   "(" <in value list> ")"
<in value list>         ::=   <expression> {"," <expression>}
Expression
<expression> ::= <term> { <addition operator>  <term> }
<addition operator>::= <plus sign> | <minus sign>

<term> ::=  <factor> { <multiplication operator> <factor> }
<multiplication operator> ::= <asterisk> | <solidus>

<factor> ::=
	  <function>
	| <literal>
	| <attribute>
	| ( <expression> )
	| [ <expression> ]

<literal> ::= <signed numeric literal>| <general literal>

<signed numeric literal> ::= [ <sign> ] <unsigned numeric literal>

<general literal> ::=
    <character string literal>
    | <datetime literal>
    | <boolean literal>
    | <geography literal

<boolean literal> ::= "TRUE" | "FALSE" | "UNKNOWN"
Geometry Predicate
<geometry predicate> ::= <geoop name><georoutine argument list>
	| <relgeoop name><relgeoop argument list>
	| BBOX <bbox argument list>

<geoop name> ::=   "EQUAL" | "DISJOINT" | "INTERSECT" | "TOUCH" | "CROSS" | "WITHIN" | "CONTAINS" | "OVERLAP" | "RELATE"
<georoutine argument list> ::=  <expression> | <geometry literal>

<relgeoop name> ::= "DWITHIN" | "BEYOND"
<relgeoop argument list> ::= <expression> <tolerance>
	| <geometry literal> <tolerance>

bbox argument list> ::= "(" <attribute>"," <min X>"," <min Y>"," <max X>"," <max Y> ["," <crs>] ")"
	| "(" <expression>"," <min X>"," <min Y>"," <max X>"," <max Y> ["," <crs>] ")"
        | "(" <expression>, <expression> ")"


<min X> ::= <signed numerical literal>
<min Y> ::= <signed numerical literal>
<max X> ::= <signed numerical literal>
<max Y> ::= <signed numerical literal>
<crs> ::=  ... (* default: EPSG:4326. *)

<tolerance> ::=<unsigned numeric literal><comma><distance units>

<distance units> ::= = "feet" | "meters" | "statute miles" | "nautical miles" | "kilometers"

Geometry Literal
<geometry literal> :=
    <Point Tagged Text>
    | <LineString Tagged Text>
    | <Polygon Tagged Text>
    | <MultiPoint Tagged Text>
    | <MultiLineString Tagged Text>
    | <MultiPolygon Tagged Text>
    | <GeometryCollection Tagged Text>
    | <Envelope Tagged Text>

<Point Tagged Text> ::= POINT <Point Text>

<LineString Tagged Text> ::= LINESTRING <LineString Text>

<Polygon Tagged Text> ::= POLYGON <Polygon Text>

<MultiPoint Tagged Text> ::= MULTIPOINT <Multipoint Text>

<MultiLineString Tagged Text> ::= MULTILINESTRING <MultiLineString Text>

<MultiPolygon Tagged Text> ::= MULTIPOLYGON <MultiPolygon Text>

<GeometryCollection Tagged Text> ::=GEOMETRYCOLLECTION <GeometryCollection Text>


<Point Text> := EMPTY | <left paren> <Point> <right paren>
<Point> := <x><space><y>
<x> := numeric literal
<y> := numeric literal
<LineString Text> := EMPTY | <left paren> <Point> \{<comma><Point >\}...<right paren>
<Polygon Text> := EMPTY | <left paren><LineString Text>\{<comma><LineString Text> \}...<right paren>
<Multipoint Text> := EMPTY | <left paren><Point Text>\{<comma><Point Text >\}...<right paren>
<MultiLineString Text> := EMPTY | <left paren><LineString Text>\{<comma><LineString Text>\}...<right paren>
<MultiPolygon Text> := EMPTY | <left paren><Polygon Text>\{<comma><Polygon Text>\}...<right paren>
<GeometryCollection Text> := EMPTY | <left paren><Geometry Tagged Text>\{<comma><Geometry Tagged Text>\}...<right paren>
<Envelope Tagged Text> ::= ENVELOPE <Envelope Text>

<Envelope Text> ::= EMPTY |
    <left paren><WestBoundLongitude><comma>
        <EastBoundLongitude><comma>
        <NorthBoundLatitude><comma>
        <SouthBoundLatitude>< <right paren>

<WestBoundLongitude> ::= <numeric literal>
<EastBoundLongitude> ::= <numeric literal>
<NorthBoundLatitude> ::= <numeric literal>
<SouthBoundLatitude> ::= <numeric literal>
<date-time> ::= <full-date> T <UTC-time>
<full_date> ::= <date-year> <date-month> <date-day>
<date-year> ::= <digit><digit><digit><digit>
<date-month> ::= <digit><digit>
<date-day> ::= <digit><digit>
<UTC-time> ::= <time-hour> : <time-minute> : <time-second> Z
<time-hour> ::= <digit><digit>
<time-minute> ::= <digit><digit>
<time-second> ::= <digit><digit>[.<digit>...]
<duration> ::= P <dur-date> | T<dur-time>
<dur-date> ::= <dur-day> | <dur-month> | <dur-year> [<dur-time>]
<dur-day> ::= <digit>... D
<dur-month> ::= <digit>... M [<dur-day>]
<dur-year> ::= <didit>... Y [<dur-month>]
<dur-time> ::= <dir-hour> | <dur-minute> | <dur-second>
<dur-hour> ::= <digit>... H [<dur-minute>]
<dur-minute> ::= <digit>... M [<dur-second>]
<dur-second> ::= <digit>... S
<period> ::=
    <date-time> / <date-time>
    | <date-time> / <duration>
    | <duration> / <date-time>
  • No labels