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>'  | 
                                                            指定された値が出現するすべてのオブジェクトを返します。 |