TQLの文法とEBNF表記法
Tosca Query Language(TQL)は形式言語です。つまり、検索クエリは、システムが理解できる形式文法を使用する必要があります。
この構造には、いわゆる非終端記号と終端記号が含まれます。非終端記号は、他の式(非終端記号または終端記)に置き換えることができる式です。
終端記号はアトミック要素を表し、他の式に置き換えることはできません。TQLが理解できる正しいクエリは、一連の終端記号で構成されている必要があります。有効な検索式を作成するには、すべての非終端記号を徐々に置き換えて最終的にクエリが終端記号だけで構成されるようにします。
TQL 文法を記述するには、EBNF表記法が使用されます (see chapter "EBNF表記法") 。
EBNF表記法
この点に関して、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 |
タイプを入力することで、それぞれのクエリでどのオブジェクトを検索するかを指定します。 |
|
::= 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>' |
指定された値が出現するすべてのオブジェクトを返します。 |