TQLの文法とEBNF表記法

Tosca Query Language(TQL)は形式言語です。つまり、検索クエリは、システムが理解できる形式文法を使用する必要があります。

この構造には、いわゆる非終端記号と終端記号が含まれます。非終端記号は、他の式(非終端記号または終端記)に置き換えることができる式です。

終端記号はアトミック要素を表し、他の式に置き換えることはできません。TQLが理解できる正しいクエリは、一連の終端記号で構成されている必要があります。有効な検索式を作成するには、すべての非終端記号を徐々に置き換えて最終的にクエリが終端記号だけで構成されるようにします。

TQL 文法を記述するには、EBNF表記法が使用されます (see chapter "EBNF表記法") 。

EBNF表記法

EBNF表記法

|

論理OR
例:

a | b = a or b

[...]

角括弧はオプションを表します。

この式はn回使用できます: n = 0, 1

(...)

括弧は式をグループ化するために使用します。
コンテンツは一度しか使用できません。

例:

(a | b) c = a および c または b および c

に対して

a | b c = a または b および c

{...}

中括弧は繰り返しを表します。

この式はn回使用できます: n = 0, 1, 2, 3, ...

例:

a {b} = a または a および b または a および b および b...

'...'

単語ごとに解釈する必要があるテキストに印を付けます(終端記号)。

例:

'SUBPARTS'

この点に関して、TQLの非終端記号が常に小文字で始まるというのが便利です。終端記号は特殊文字(例: 「]」、「)」、「:」)か、大文字で始まります。

TQLの文法

文法は、いわゆる生成規則で構成されています。これらは、非終端記号を他の非終端記号や終端記号に置き換えることができる規則です。クエリは、一連の終端記号で構成されていなければなりません。有効なクエリを作成するには、すべての非終端記号を終端記号に置き換える必要があります。

query: = {arrowOperator [returnToken] searchExpression}

上記の生成規則は、非終端記号の「 query 」、「 arrowOperator 」、「 returnToken 」、「 searchExpression 」で構成されています(注: 頭文字はすべて小文字)。中括弧があるため、「 arrowOperator [returnToken]searchExpression 」を何度でも並べられます。「 returnToken 」はオプションです。

文法は、上から下へ処理される生成規則の総和で構成されます。開始点は、非終端記号で構成される開始記号であり、これは終端記号で構成される検索クエリが残るまで置き換えられます。

完全なTQL文法

Startsymbol: クエリ

query

::= { arrowOperator [ returnToken ] searchExpression }

 

searchExpression

::= ( assocName | aggregation | specialAssocName | setOperation | subsetOperation | sortOperation | objectsSelector ) [ colonToken type ] [ leftSquareBracket logicalExpression rightSpareBracket ]

 

logicalExpression

::= ( notToken logicalExpression ) |leftParenthesis logicalExpression rightParenthesis |comparisionExpression { logicalOperator logicalExpression }

 

comparisonExpression

::= expression compOperator expression

 

expression

::= term {addOperator term}

この用語は、「stringLiteral」、「intLiteral」、属性、または値で置き換えることができます。

term

::= factor {mulOperator factor}

 

factor

::= leftParenthesis expression rightParenthesis |functionStatementvalue

 

functionStatement

::= functionName leftParenthesis [ expression { comma expression } ] rightParenthesis

 

value

::= stringLiteral| intLiteral| attribute

 

attribute

::= {assocName pointToken} identifier

 

assocName

::= identifier

assocNameは識別子に置き換えられます。

type

::= identifier

タイプを入力することで、それぞれのクエリでどのオブジェクトを検索するかを指定します。

stringLiteral

::= doublequote TEXT doublequote

TEXTは、自由に定義できる文字列のプレースホルダーを表します。特殊文字には、エスケープ文字としてバックスラッシュを使用する必要があります。テキスト中のいくつかの特殊文字は、文字列内の区切り文字として逆カンマ「’」を使用することで転送できます。

intLiteral

::= [ "+" | "-" ] DIGITS

 

uintLiteral

::= DIGITS

 

identifier

::= (LETTER | "_") {LETTER | DIGIT | "_"} | quote TEXT quote

 

aggregation

::= "SUBPARTS" | "SUPERPART" | "SELF" | "PROJECT"

 

specialAssocName

::= "AllReferences" | "OwningObject"

 

setOperation

::= setFunction leftParenthesis search {comma search}] rightParenthesis

 

setFunction

::= "COMPLEMENT" | "UNION" | "INTERSECTION"

 

sortOperation

::= sortFunction leftParenthesis search {comma stringLiteral}] rightParenthesis

 

sortFunction

::= "SORT"

 

objectsSelector

::= "OBJECTS" leftParenthesis uniqueIdOrNodePath {comma uniqueIdOrNodePath}] rightParenthesis

 

uniqueIdOrNodePath

::= uniqueIdString | nodePathString

 

uniqueIdString

::= stringLiteral

 

nodePathString

::= stringLiteral

 

subsetOperation

::= "SUBSET" leftParenthesis intLiteral [comma uintLiteral]] rightParenthesis

 

arrowOperator

:= "=>" | "->"

 

compOperator

::= "==" | "!=" | "=i=" | "!i=" | ">" | "<" | ">=" | "<=" | "=?"| "=i?"| "!?"| "!i?"| // LIKE "=*" // LIKE (old version) "=~" | "=i~" // REGEX

compOperatorsは、2つの式を連結し、論理値(TRUE、false)を決定するために使用されます。

logicalOperator

::= "AND" | "OR"

結合、分離

addOperator

::= "+" | "-"

 

mulOperator

::= "*" | "/"

 

returnToken

::= "RETURN"

 

notToken

::= "NOT"

notTokenを使用すると、論理式を否定することができます。

pointToken

::= "."

 

colonToken

::= ":"

 

leftSquareBracket

::= "["

左角括弧を表します。

rightSquareBracket

::= "]"

右角括弧を表します。

leftParenthesis

::= "("

左括弧を表します。

rightParenthesis

::= ")"

右括弧を表します。

comma

::= ","

 

quota

::= "'"

 

doublethink

::= "“"

 

quantifierOperator

::= '<ANY>'

指定された値が出現するすべてのオブジェクトを返します。