This topic has not yet been rated - Rate this topic

2.2.3.6.1.1 Common Expression Syntax

Note: Some of the information in this section is subject to change because it applies to a preliminary implementation of the protocol or structure. For information about specific differences between versions, see the behavior notes that are provided in the Product Behavior appendix.

The filter and orderby query options are specified in the data serviceURI via the common expression syntax defined in following Augmented BNF for query option expressions listing.

commonExpression = [WSP] (boolCommonExpression / methodCallExpression /
             parenExpression / literalExpression / addExpression /
             subExpression / mulExpression / divExpression /
             modExpression /  negateExpression / memberExpression
             / firstMemberExpression / castExpression / functionCallExpression ) [WSP]

boolCommonExpression = [WSP] (boolLiteralExpression / andExpression /
              orExpression /
              boolPrimitiveMemberExpression / eqExpression / neExpression /
              ltExpression / leExpression / gtExpression /
              geExpression / notExpression / isofExpression/
              boolCastExpression / boolMethodCallExpression  /
              firstBoolPrimitiveMemberExpression / boolParenExpression /
              boolFunctionCallExpression) [WSP]

parenExpression = "(" [WSP] commonExpression [WSP] ")"

boolParenExpression = "(" [WSP] boolCommonExpression [WSP] ")"

andExpression = boolCommonExpression WSP "and" WSP boolCommonExpression

orExpression = boolCommonExpression WSP "or" WSP boolCommonExpression

eqExpression = commonExpression WSP "eq" WSP commonExpression

neExpression = commonExpression WSP "ne" WSP commonExpression

ltExpression = commonExpression WSP "lt" WSP commonExpression

leExpression = commonExpression WSP "le" WSP commonExpression

gtExpression = commonExpression WSP "gt" WSP commonExpression

geExpression = commonExpression WSP "ge" WSP commonExpression

addExpression = commonExpression WSP "add" WSP commonExpression

subExpression = commonExpression WSP "sub" WSP commonExpression

mulExpression = commonExpression WSP "mul" WSP commonExpression

divExpression = commonExpression WSP "div" WSP commonExpression

modExpression = commonExpression WSP "mod" WSP commonExpression

negateExpression = "-" [WSP] commonExpression

notExpression = "not" WSP commonExpression

isofExpression = "isof" [WSP] "("[[WSP] commonExpression [WSP] ","][WSP]
                 stringUriLiteral [WSP] ")"

castExpression = "cast" [WSP] "("[[WSP] commonExpression [WSP] ","][WSP]
                 stringUriLiteral [WSP] ")"

boolCastExpression = "cast" [WSP]
                     "("[[WSP] commonExpression [WSP] ","][WSP]
                     "Edm.Boolean" [WSP] ")"
firstMemberExpression = [WSP] [namespaceQualifiedEnitityType "/"]
                        [lambdaPredicatePrefixExpression]
                        ; A lambdaPredicatePrefixExpression is only defined inside a 
                        ; lambdaPredicateExpression. A lambdaPredicateExpression is required   
                        ; inside a lambdaPredicateExpression.
                        entityNavProperty /
                        ; section 2.2.3.1
                        entityComplexProperty /
                        ; section 2.2.3.1
                        entitySimpleProperty /
                        ; section 2.2.3.1
                        entityCollectionProperty
                        ; section 2.2.3.1

firstBoolPrimitiveMemberExpression = [namespaceQualifiedEntityType "/"]entityProperty
                                     ; section 2.2.3.1

memberExpression = commonExpression [WSP]  "/" [WSP] [namespaceQualifiedEntityType "/"]
                   entityNavProperty /      ; section 2.2.3.1
                   entityComplexProperty /      ; section 2.2.3.1
                   entitySimpleProperty /    ; section 2.2.3.1
                   entityCollectionProperty  ; section 2.2.3.1

boolPrimitiveMemberExpression = commonExpression [WSP]  "/" [WSP]
                                [namespaceQualifiedEntityType "/"]entityProperty
                                ; section 2.2.3.1

literalExpression = stringUriLiteral ; section 2.2.2
          / dateTimeUriLiteral ; section 2.2.2
          / dateTimeOffsetUriLiteral ; section 2.2.2
          / timeUriLiteral ; section 2.2.2 
          / decimalLiteral ; section 2.2.2
          / guidUriLiteral ; section 2.2.2
          / singleLiteral ; section 2.2.2
          / doubleLiteral ; section 2.2.2
          / int16Literal ; section 2.2.2
          / int32Literal ; section 2.2.2
          / int64Literal ; section 2.2.2
          / binaryLiteral ; section 2.2.2
          / nullLiteral ; section 2.2.2
          / byteLiteral ; section 2.2.2
          / fullPointLiteral ; section 2.2.2
          / fullLineStringLiteral ; section 2.2.2
          / fullPolygonLiteral ; section 2.2.2
          / fullGeoCollectionLiteral ; section 2.2.2
          / fullMultiPointLiteral ; section 2.2.2
          / fullMultiLineStringLiteral ; section 2.2.2
          / fullMultiGeographyLiteral ; section 2.2.2

boolLiteralExpression = boolLiteral ; section 2.2.2

methodCallExpression = boolMethodExpression
                       / indexOfMethodCallExpression
                       / replaceMethodCallExpression
                       / toLowerMethodCallExpression
                       / toUpperMethodCallExpression
                       / trimMethodCallExpression
                       / substringMethodCallExpression
                       / concatMethodCallExpression
                       / lengthMethodCallExpression
                       / yearMethodCallExpression
                       / monthMethodCallExpression
                       / dayMethodCallExpression
                       / hourMethodCallExpression
                       / minuteMethodCallExpression
                       / secondMethodCallExpression
                       / roundMethodCallExpression
                       / floorMethodCallExpression
                       / ceilingMethodCallExpression
                       / distanceMethodCallExpression
                       / geoLengthMethodCallExpression

boolMethodExpression = endsWithMethodCallExpression
                       / startsWithMethodCallExpression
                       / substringOfMethodCallExpression                                          
                       / intersectsMethodCallExpression
                       / anyMethodCallExpression
                       / allMethodCallExpression

endsWithMethodCallExpression = "endswith" [WSP]
                               "(" [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression  [WSP] ")"

indexOfMethodCallExpression = "indexof" [WSP]
                              "(" [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression [WSP] ")"

replaceMethodCallExpression =  "replace" [WSP]
                               "(" [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression [WSP] ")"

startsWithMethodCallExpression = "startswith" [WSP]
                                 "(" [WSP] commonexpression [WSP]
                                 "," [WSP] commonexpression  [WSP] ")"

toLowerMethodCallExpression = "tolower" [WSP]
                              "(" [WSP] commonexpression [WSP] ")"

toUpperMethodCallExpression = "toupper" [WSP]
                              "(" [WSP] commonexpression [WSP] ")"

trimMethodCallExpression = "trim" [WSP]
                           "(" [WSP] commonexpression [WSP] ")"

substringMethodCallExpression = "substring" [WSP]
                                "(" [WSP] commonexpression [WSP]
                                "," [WSP] commonexpression [WSP]
                                [ "," [WSP] commonexpression  [WSP] ] ")"

substringOfMethodCallExpression = "substringof" [WSP]
                                  "(" [WSP] commonexpression [WSP]
                                  [ "," [WSP] commonexpression [WSP] ] ")"

concatMethodCallExpression = "concat" [WSP]
                             "(" [WSP] commonexpression [WSP]
                             [ "," [WSP] commonexpression [WSP] ] ")"

lengthMethodCallExpression = "length" [WSP]
                             "(" [WSP] commonexpression [WSP] ")"

getTotalOffsetMinutesMethodCallExpression = "gettotaloffsetminutes" [WSP]
                             "(" [WSP] commonexpression [WSP] ")" 

yearMethodCallExpression = "year" [WSP]
                           "(" [WSP] commonexpression [WSP] ")"

monthMethodCallExpression = "month" [WSP]
                            "(" [WSP] commonexpression [WSP] ")"

dayMethodCallExpression = "day" [WSP]
                          "(" [WSP] commonexpression [WSP] ")"

hourMethodCallExpression = "hour" [WSP]
                           "(" [WSP] commonexpression [WSP] ")"

minuteMethodCallExpression = "minute" [WSP]
                             "(" [WSP] commonexpression [WSP] ")"

secondMethodCallExpression = "second" [WSP]
                             "(" [WSP] commonexpression [WSP] ")"

roundMethodCallExpression = "round" [WSP]
                            "(" [WSP] commonexpression [WSP] ")"

floorMethodCallExpression = "floor" [WSP]
                            "(" [WSP] commonexpression [WSP] ")"

ceilingMethodCallExpression = "ceiling" [WSP]
                              "(" [WSP] commonexpression [WSP] ")"

distanceMethodCallExpression = "geo.distance" [WSP]
                               "(" [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression  [WSP] ")"

geoLengthMethodCallExpression = "geo.length" [WSP]
                               "(" [WSP] commonexpression [WSP] ")"

intersectsMethodCallExpression = "geo.intersects" [WSP]
                               "(" [WSP] commonexpression [WSP]
                               "," [WSP] commonexpression  [WSP] ")"
  implicitVariableExpression = "$it"
        ; references the unnamed outer variable of the query

  lambdaVariableExpression     = *pchar   
                       ; section 3.3 of [RFC3986]
                       ; a identifier/name that complies with EDM identifier rules

  lambdaPredicatePrefixExpression = inscopeVariableExpression  "/"

  lambdaPredicateExpression = boolCommonExpression
    ; this is a boolCommonExpression with the added restriction that any 
    ; firstMemberExpressions inside the methodPredicateExpression MUST have a prefix of
    ; lambdaPredicatePrefixExpression

  inscopeVariableExpression  =  implicitVariableExpression | lambdaVariableExpression
    ; the lambdaVariableExpression must be the name of a variable introduced by either the 
    ; current lambdaMethodCallExpression’s lambdaVariableExpression or via a wrapping    
    ; lambdaMethodCallExpression’s lambdaVariableExpression.

  lambdaMethodCallExpression = anyMethodCallExpression | allMethodCallExpression.  


  anyMethodCallExpression = pathExpression-collection "/" 
                            "any" 
                            "("  
                            [ lambdaVariableExpression ":" lambdaPredicateExpression ]
                            ")"

  allMethodCallExpression = pathExpression-collection "/" 
                            "all" 
                            "("  
                            lambdaVariableExpression ":" lambdaPredicateExpression
                            ")"

  singlePathExpression = [WSP]
                         "("singlePathExpression / inscopeVariableExpression  
                         "/" entityNavProperty-et | entityComplexProperty


  collectionPathExpression = [WSP] commonexpression [WSP]
                              singlePathExpression / inscopeVariableExpression  
                              "/"
                              (entityNavProperty-es | entityCollectionProperty)
functionCallExpression = [ ( memberExpression / firstMemberExpression ) "/"]
                         functionFQName ; section 2.2.3.1
                         "(" [functionParametersExpression] ")"

boolFunctionCallExpression = functionCallExpression
                       ; with the added restriction that the specified FunctionImport
                       ; has a ReturnType of Edm.Boolean


functionParametersExpression = 
                       functionParameterExpression *( "," functionParameterExpression) 

functionParameterExpression = [WSP] 
                              functionParameterName ; section 2.2.3.1
                              [WSP] "=" 
                              [WSP]
                              literalExpression / structuralValue / entityReference
                              [WSP]
  structuralValue = ; a Verbose JSON encoding of a ComplexType, Multi-value, Entity or a 
                    ; collection of Entities 
entityReference =      "KEY("
                       [ entityContainer "." ] 
                       entitySet 
                       "("keyPredicate")"  
                       ")" 
                       ["/" namespaceQualifiedEntityType ]
                     ; refers a single Entity by key, and optionally allows a cast to a 
                     ; derived type.

Listing: Augmented BNF for Query Option Expressions

A data service MAY<7> support some or all of the boolCommonExpressions for the filter ($filter) system query option. A data service MAY<8> support some or all of the commonExpressions for the orderby ($orderby) query option.

If a data service does not support a given expression, it MUST reject any requests which contain the unsupported expression.

A data service MAY reject any requests that contain expressions not defined in this document.

Common expressions SHOULD be constructed and evaluated according to the rules defined in common expression syntax for each specific expression type.

 
Did you find this helpful?
(1500 characters remaining)