有没有人知道在哪里可以找到OData URI查询的EBNF语法?
我想将它与SableCC一起使用来生成用于解析OData URI查询的C ++类。
答案 0 :(得分:2)
http://bottlecaps.de/convert进行了从ABNF到W3C式EBNF的转换。
但是ODATA语法说:
; This grammar uses the ABNF defined in RFC5234 with one extension: literals
; enclosed in single quotes (e.g. '$metadata') are treated case-sensitive.
手动将单引号恢复为双引号后,转换器将处理它,结果如下所示。它直接适用于在http://bottlecaps.de/rr
生成语法图/* converted on Tue Sep 2, 2014, 16:37 (UTC+02) by abnf-to-w3c v0.33.722 which is Copyright (c) 2011-2013 by Gunther Rademacher <grd@gmx.net> */
dummyStartRule
::= odataUri
| header
| primitiveValue
odataUri ::= serviceRoot odataRelativeUri?
serviceRoot
::= ( 'https' | 'http' ) '://' host ( ':' port )? '/' ( segment-nz '/' )*
odataRelativeUri
::= '$batch'
| '$entity' '?' entityOptions
| '$entity' '/' qualifiedEntityTypeName '?' entityCastOptions
| '$metadata' ( '?' format )? context?
| resourcePath ( '?' queryOptions )?
resourcePath
::= entitySetName collectionNavigation?
| singletonEntity singleNavigation?
| actionImportCall
| entityColFunctionImportCall collectionNavigation?
| entityFunctionImportCall singleNavigation?
| complexColFunctionImportCall collectionPath?
| complexFunctionImportCall complexPath?
| primitiveColFunctionImportCall collectionPath?
| primitiveFunctionImportCall singlePath?
| crossjoin
| '$all'
collectionNavigation
::= ( '/' qualifiedEntityTypeName )? collectionNavPath?
collectionNavPath
::= keyPredicate singleNavigation?
| collectionPath
| ref
keyPredicate
::= simpleKey
| compoundKey
simpleKey
::= OPEN keyPropertyValue CLOSE
compoundKey
::= OPEN keyValuePair ( COMMA keyValuePair )* CLOSE
keyValuePair
::= ( primitiveKeyProperty | keyPropertyAlias ) EQ keyPropertyValue
keyPropertyValue
::= primitiveLiteral
keyPropertyAlias
::= odataIdentifier
singleNavigation
::= ( '/' qualifiedEntityTypeName )? ( '/' propertyPath | boundOperation | ref | value )?
propertyPath
::= entityColNavigationProperty collectionNavigation?
| entityNavigationProperty singleNavigation?
| complexColProperty collectionPath?
| complexProperty complexPath?
| primitiveColProperty collectionPath?
| primitiveProperty singlePath?
| streamProperty boundOperation?
collectionPath
::= count
| boundOperation
singlePath
::= value
| boundOperation
complexPath
::= ( '/' qualifiedComplexTypeName )? ( '/' propertyPath | boundOperation )
count ::= '/$count'
ref ::= '/$ref'
value ::= '/$value'
boundOperation
::= '/' ( boundActionCall | boundEntityColFuncCall collectionNavigation? | boundEntityFuncCall singleNavigation? | boundComplexColFuncCall collectionPath? | boundComplexFuncCall complexPath? | boundPrimitiveColFuncCall collectionPath? | boundPrimitiveFuncCall singlePath? )
actionImportCall
::= actionImport
boundActionCall
::= namespace '.' action
boundEntityFuncCall
::= namespace '.' entityFunction functionParameters
boundEntityColFuncCall
::= namespace '.' entityColFunction functionParameters
boundComplexFuncCall
::= namespace '.' complexFunction functionParameters
boundComplexColFuncCall
::= namespace '.' complexColFunction functionParameters
boundPrimitiveFuncCall
::= namespace '.' primitiveFunction functionParameters
boundPrimitiveColFuncCall
::= namespace '.' primitiveColFunction functionParameters
entityFunctionImportCall
::= entityFunctionImport functionParameters
entityColFunctionImportCall
::= entityColFunctionImport functionParameters
complexFunctionImportCall
::= complexFunctionImport functionParameters
complexColFunctionImportCall
::= complexColFunctionImport functionParameters
primitiveFunctionImportCall
::= primitiveFunctionImport functionParameters
primitiveColFunctionImportCall
::= primitiveColFunctionImport functionParameters
functionParameters
::= OPEN ( functionParameter ( COMMA functionParameter )* )? CLOSE
functionParameter
::= parameterName EQ ( parameterAlias | primitiveLiteral )
parameterName
::= odataIdentifier
parameterAlias
::= AT odataIdentifier
crossjoin
::= '$crossjoin' OPEN entitySetName ( COMMA entitySetName )* CLOSE
queryOptions
::= queryOption ( '&' queryOption )*
queryOption
::= systemQueryOption
| aliasAndValue
| customQueryOption
entityOptions
::= ( entityIdOption '&' )* id ( '&' entityIdOption )*
entityIdOption
::= format
| customQueryOption
entityCastOptions
::= ( entityCastOption '&' )* id ( '&' entityCastOption )*
entityCastOption
::= entityIdOption
| expand
| select
id ::= '$id' EQ IRI-in-query
systemQueryOption
::= expand
| filter
| format
| id
| inlinecount
| orderby
| search
| select
| skip
| skiptoken
| top
expand ::= '$expand' EQ expandItem ( COMMA expandItem )*
expandItem
::= STAR ( ref | OPEN levels CLOSE )?
| expandPath ( ref ( OPEN expandRefOption ( SEMI expandRefOption )* CLOSE )? | count ( OPEN expandCountOption ( SEMI expandCountOption )* CLOSE )? | OPEN expandOption ( SEMI expandOption )* CLOSE )?
expandPath
::= ( qualifiedEntityTypeName '/' )? ( ( complexProperty | complexColProperty ) '/' ( qualifiedComplexTypeName '/' )? )* navigationProperty ( '/' qualifiedEntityTypeName )?
expandCountOption
::= filter
| search
expandRefOption
::= expandCountOption
| orderby
| skip
| top
| inlinecount
expandOption
::= expandRefOption
| select
| expand
| levels
levels ::= '$levels' EQ ( DIGIT+ | 'max' )
filter ::= '$filter' EQ boolCommonExpr
orderby ::= '$orderby' EQ orderbyItem ( COMMA orderbyItem )*
orderbyItem
::= commonExpr ( RWS ( 'asc' | 'desc' ) )?
skip ::= '$skip' EQ DIGIT+
top ::= '$top' EQ DIGIT+
format ::= '$format' EQ ( 'atom' | 'json' | 'xml' | pchar+ '/' pchar+ )
inlinecount
::= '$count' EQ booleanValue
search ::= '$search' EQ BWS searchExpr
searchExpr
::= ( OPEN BWS searchExpr BWS CLOSE | searchTerm ) ( searchOrExpr | searchAndExpr )?
searchOrExpr
::= RWS 'OR' RWS searchExpr
searchAndExpr
::= RWS ( 'AND' RWS )? searchExpr
searchTerm
::= ( 'NOT' RWS )? ( searchPhrase | searchWord )
searchPhrase
::= quotation-mark qchar-no-AMP-DQUOTE+ quotation-mark
searchWord
::= ALPHA+
select ::= '$select' EQ selectItem ( COMMA selectItem )*
selectItem
::= STAR
| allOperationsInSchema
| ( qualifiedEntityTypeName '/' )? ( selectProperty | qualifiedActionName | qualifiedFunctionName )
selectProperty
::= primitiveProperty
| primitiveColProperty
| navigationProperty
| selectPath ( '/' selectProperty )?
selectPath
::= ( complexProperty | complexColProperty ) ( '/' qualifiedComplexTypeName )?
allOperationsInSchema
::= namespace '.' STAR
qualifiedActionName
::= namespace '.' action
qualifiedFunctionName
::= namespace '.' function ( OPEN parameterNames CLOSE )?
parameterNames
::= parameterName ( COMMA parameterName )*
skiptoken
::= '$skiptoken' EQ qchar-no-AMP+
aliasAndValue
::= parameterAlias EQ parameterValue
parameterValue
::= arrayOrObject
| commonExpr
customQueryOption
::= customName ( EQ customValue )?
customName
::= qchar-no-AMP-EQ-AT-DOLLAR qchar-no-AMP-EQ*
customValue
::= qchar-no-AMP*
context ::= '#' contextFragment
contextFragment
::= 'Collection($ref)'
| '$ref'
| 'Collection(Edm.EntityType)'
| 'Collection(Edm.ComplexType)'
| singletonEntity
| qualifiedTypeName
| entitySet ( '/$deletedEntity' | '/$link' | '/$deletedLink' )
| entitySet keyPredicate '/' contextPropertyPath
| entitySet selectList? ( '/$entity' | '/$delta' )?
entitySet
::= entitySetName containmentNavigation* ( '/' qualifiedEntityTypeName )?
containmentNavigation
::= keyPredicate ( '/' qualifiedEntityTypeName )? ( '/' complexProperty ( '/' qualifiedComplexTypeName )? )* '/' navigationProperty
selectList
::= OPEN selectListItem ( COMMA selectListItem )* CLOSE
selectListItem
::= STAR
| allOperationsInSchema
| ( qualifiedEntityTypeName '/' )? ( qualifiedActionName | qualifiedFunctionName | selectListProperty )
selectListProperty
::= primitiveProperty
| primitiveColProperty
| navigationProperty '+'? selectList?
| selectPath ( '/' selectListProperty )?
contextPropertyPath
::= primitiveProperty
| primitiveColProperty
| complexColProperty
| complexProperty ( ( '/' qualifiedComplexTypeName )? '/' contextPropertyPath )?
commonExpr
::= ( primitiveLiteral | parameterAlias | arrayOrObject | rootExpr | firstMemberExpr | functionExpr | negateExpr | methodCallExpr | parenExpr | castExpr ) ( addExpr | subExpr | mulExpr | divExpr | modExpr )?
boolCommonExpr
::= ( isofExpr | boolMethodCallExpr | notExpr | commonExpr ( eqExpr | neExpr | ltExpr | leExpr | gtExpr | geExpr | hasExpr )? | boolParenExpr ) ( andExpr | orExpr )?
rootExpr ::= '$root/' ( entitySetName keyPredicate | singletonEntity ) singleNavigationExpr?
firstMemberExpr
::= memberExpr
| inscopeVariableExpr ( '/' memberExpr )?
memberExpr
::= ( qualifiedEntityTypeName '/' )? ( propertyPathExpr | boundFunctionExpr )
propertyPathExpr
::= entityColNavigationProperty collectionNavigationExpr?
| entityNavigationProperty singleNavigationExpr?
| complexColProperty collectionPathExpr?
| complexProperty complexPathExpr?
| primitiveColProperty collectionPathExpr?
| primitiveProperty singlePathExpr?
| streamProperty
inscopeVariableExpr
::= implicitVariableExpr
| lambdaVariableExpr
implicitVariableExpr
::= '$it'
lambdaVariableExpr
::= odataIdentifier
collectionNavigationExpr
::= ( '/' qualifiedEntityTypeName )? ( keyPredicate singleNavigationExpr? | collectionPathExpr )
singleNavigationExpr
::= '/' memberExpr
collectionPathExpr
::= count
| '/' boundFunctionExpr
| '/' anyExpr
| '/' allExpr
complexPathExpr
::= '/' ( qualifiedComplexTypeName '/' )? ( propertyPathExpr | boundFunctionExpr )
singlePathExpr
::= '/' boundFunctionExpr
boundFunctionExpr
::= functionExpr
functionExpr
::= namespace '.' ( entityColFunction functionExprParameters collectionNavigationExpr? | entityFunction functionExprParameters singleNavigationExpr? | complexColFunction functionExprParameters collectionPathExpr? | complexFunction functionExprParameters complexPathExpr? | primitiveColFunction functionExprParameters collectionPathExpr? | primitiveFunction functionExprParameters singlePathExpr? )
functionExprParameters
::= OPEN ( functionExprParameter ( COMMA functionExprParameter )* )? CLOSE
functionExprParameter
::= parameterName EQ ( parameterAlias | parameterValue )
anyExpr ::= 'any' OPEN BWS ( lambdaVariableExpr BWS COLON BWS lambdaPredicateExpr )? BWS CLOSE
allExpr ::= 'all' OPEN BWS lambdaVariableExpr BWS COLON BWS lambdaPredicateExpr BWS CLOSE
lambdaPredicateExpr
::= boolCommonExpr
methodCallExpr
::= indexOfMethodCallExpr
| toLowerMethodCallExpr
| toUpperMethodCallExpr
| trimMethodCallExpr
| substringMethodCallExpr
| concatMethodCallExpr
| lengthMethodCallExpr
| yearMethodCallExpr
| monthMethodCallExpr
| dayMethodCallExpr
| hourMethodCallExpr
| minuteMethodCallExpr
| secondMethodCallExpr
| fractionalsecondsMethodCallExpr
| totalsecondsMethodCallExpr
| dateMethodCallExpr
| timeMethodCallExpr
| roundMethodCallExpr
| floorMethodCallExpr
| ceilingMethodCallExpr
| distanceMethodCallExpr
| geoLengthMethodCallExpr
| totalOffsetMinutesMethodCallExpr
| minDateTimeMethodCallExpr
| maxDateTimeMethodCallExpr
| nowMethodCallExpr
boolMethodCallExpr
::= endsWithMethodCallExpr
| startsWithMethodCallExpr
| containsMethodCallExpr
| intersectsMethodCallExpr
containsMethodCallExpr
::= 'contains' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
startsWithMethodCallExpr
::= 'startswith' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
endsWithMethodCallExpr
::= 'endswith' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
lengthMethodCallExpr
::= 'length' OPEN BWS commonExpr BWS CLOSE
indexOfMethodCallExpr
::= 'indexof' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
substringMethodCallExpr
::= 'substring' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS ( COMMA BWS commonExpr BWS )? CLOSE
toLowerMethodCallExpr
::= 'tolower' OPEN BWS commonExpr BWS CLOSE
toUpperMethodCallExpr
::= 'toupper' OPEN BWS commonExpr BWS CLOSE
trimMethodCallExpr
::= 'trim' OPEN BWS commonExpr BWS CLOSE
concatMethodCallExpr
::= 'concat' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
yearMethodCallExpr
::= 'year' OPEN BWS commonExpr BWS CLOSE
monthMethodCallExpr
::= 'month' OPEN BWS commonExpr BWS CLOSE
dayMethodCallExpr
::= 'day' OPEN BWS commonExpr BWS CLOSE
hourMethodCallExpr
::= 'hour' OPEN BWS commonExpr BWS CLOSE
minuteMethodCallExpr
::= 'minute' OPEN BWS commonExpr BWS CLOSE
secondMethodCallExpr
::= 'second' OPEN BWS commonExpr BWS CLOSE
fractionalsecondsMethodCallExpr
::= 'fractionalseconds' OPEN BWS commonExpr BWS CLOSE
totalsecondsMethodCallExpr
::= 'totalseconds' OPEN BWS commonExpr BWS CLOSE
dateMethodCallExpr
::= 'date' OPEN BWS commonExpr BWS CLOSE
timeMethodCallExpr
::= 'time' OPEN BWS commonExpr BWS CLOSE
totalOffsetMinutesMethodCallExpr
::= 'totaloffsetminutes' OPEN BWS commonExpr BWS CLOSE
minDateTimeMethodCallExpr
::= 'mindatetime(' BWS ')'
maxDateTimeMethodCallExpr
::= 'maxdatetime(' BWS ')'
nowMethodCallExpr
::= 'now(' BWS ')'
roundMethodCallExpr
::= 'round' OPEN BWS commonExpr BWS CLOSE
floorMethodCallExpr
::= 'floor' OPEN BWS commonExpr BWS CLOSE
ceilingMethodCallExpr
::= 'ceiling' OPEN BWS commonExpr BWS CLOSE
distanceMethodCallExpr
::= 'geo.distance' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
geoLengthMethodCallExpr
::= 'geo.length' OPEN BWS commonExpr BWS CLOSE
intersectsMethodCallExpr
::= 'geo.intersects' OPEN BWS commonExpr BWS COMMA BWS commonExpr BWS CLOSE
boolParenExpr
::= OPEN BWS boolCommonExpr BWS CLOSE
parenExpr
::= OPEN BWS commonExpr BWS CLOSE
andExpr ::= RWS 'and' RWS boolCommonExpr
orExpr ::= RWS 'or' RWS boolCommonExpr
eqExpr ::= RWS 'eq' RWS commonExpr
neExpr ::= RWS 'ne' RWS commonExpr
ltExpr ::= RWS 'lt' RWS commonExpr
leExpr ::= RWS 'le' RWS commonExpr
gtExpr ::= RWS 'gt' RWS commonExpr
geExpr ::= RWS 'ge' RWS commonExpr
hasExpr ::= RWS 'has' RWS commonExpr
addExpr ::= RWS 'add' RWS commonExpr
subExpr ::= RWS 'sub' RWS commonExpr
mulExpr ::= RWS 'mul' RWS commonExpr
divExpr ::= RWS 'div' RWS commonExpr
modExpr ::= RWS 'mod' RWS commonExpr
negateExpr
::= '-' BWS commonExpr
notExpr ::= 'not' RWS boolCommonExpr
isofExpr ::= 'isof' OPEN BWS ( commonExpr BWS COMMA BWS )? qualifiedTypeName BWS CLOSE
castExpr ::= 'cast' OPEN BWS ( commonExpr BWS COMMA BWS )? qualifiedTypeName BWS CLOSE
arrayOrObject
::= complexColInUri
| complexInUri
| rootExprCol
| primitiveColInUri
complexColInUri
::= begin-array ( complexInUri ( value-separator complexInUri )* )? end-array
complexInUri
::= begin-object ( ( annotationInUri | primitivePropertyInUri | complexPropertyInUri | collectionPropertyInUri | navigationPropertyInUri ) ( value-separator ( annotationInUri | primitivePropertyInUri | complexPropertyInUri | collectionPropertyInUri | navigationPropertyInUri ) )* )? end-object
collectionPropertyInUri
::= quotation-mark primitiveColProperty quotation-mark name-separator primitiveColInUri
| quotation-mark complexColProperty quotation-mark name-separator complexColInUri
primitiveColInUri
::= begin-array ( primitiveLiteralInJSON ( value-separator primitiveLiteralInJSON )* )? end-array
complexPropertyInUri
::= quotation-mark complexProperty quotation-mark name-separator complexInUri
annotationInUri
::= quotation-mark namespace '.' termName quotation-mark name-separator ( complexInUri | complexColInUri | primitiveLiteralInJSON | primitiveColInUri )
primitivePropertyInUri
::= quotation-mark primitiveProperty quotation-mark name-separator primitiveLiteralInJSON
navigationPropertyInUri
::= singleNavPropInJSON
| collectionNavPropInJSON
singleNavPropInJSON
::= quotation-mark entityNavigationProperty quotation-mark name-separator rootExpr
collectionNavPropInJSON
::= quotation-mark entityColNavigationProperty quotation-mark name-separator rootExprCol
rootExprCol
::= begin-array ( rootExpr ( value-separator rootExpr )* )? end-array
begin-object
::= BWS ( '{' | '%7B' ) BWS
end-object
::= BWS ( '}' | '%7D' ) BWS
begin-array
::= BWS ( '[' | '%5B' ) BWS
end-array
::= BWS ( ']' | '%5D' ) BWS
quotation-mark
::= DQUOTE
| '%22'
name-separator
::= BWS COLON BWS
value-separator
::= BWS COMMA BWS
primitiveLiteralInJSON
::= stringInJSON
| numberInJSON
| 'true'
| 'false'
| 'null'
stringInJSON
::= quotation-mark charInJSON* quotation-mark
charInJSON
::= qchar-unescaped
| qchar-JSON-special
| escape ( quotation-mark | escape | ( '/' | '%2F' ) | 'b' | 'f' | 'n' | 'r' | 't' | 'u' HEXDIG HEXDIG HEXDIG HEXDIG )
qchar-JSON-special
::= SP
| ':'
| '{'
| '}'
| '['
| ']'
escape ::= '\'
| '%5C'
numberInJSON
::= '-'? int frac? exp?
int ::= '0'
| oneToNine DIGIT*
frac ::= '.' DIGIT+
exp ::= 'e' ( '-' | '+' )? DIGIT+
singleQualifiedTypeName
::= qualifiedEntityTypeName
| qualifiedComplexTypeName
| qualifiedTypeDefinitionName
| qualifiedEnumTypeName
| primitiveTypeName
qualifiedTypeName
::= singleQualifiedTypeName
| 'Collection' OPEN singleQualifiedTypeName CLOSE
qualifiedEntityTypeName
::= namespace '.' entityTypeName
qualifiedComplexTypeName
::= namespace '.' complexTypeName
qualifiedTypeDefinitionName
::= namespace '.' typeDefinitionName
qualifiedEnumTypeName
::= namespace '.' enumerationTypeName
namespace
::= namespacePart ( '.' namespacePart )*
namespacePart
::= odataIdentifier
entitySetName
::= odataIdentifier
singletonEntity
::= odataIdentifier
entityTypeName
::= odataIdentifier
complexTypeName
::= odataIdentifier
typeDefinitionName
::= odataIdentifier
enumerationTypeName
::= odataIdentifier
enumerationMember
::= odataIdentifier
termName ::= odataIdentifier
odataIdentifier
::= identifierLeadingCharacter identifierCharacter*
identifierLeadingCharacter
::= ALPHA
| '_'
identifierCharacter
::= ALPHA
| '_'
| DIGIT
primitiveTypeName
::= 'Edm.' ( 'Binary' | 'Boolean' | 'Byte' | 'Date' | 'DateTimeOffset' | 'Decimal' | 'Double' | 'Duration' | 'Guid' | 'Int16' | 'Int32' | 'Int64' | 'SByte' | 'Single' | 'Stream' | 'String' | 'TimeOfDay' | abstractSpatialTypeName concreteSpatialTypeName? )
abstractSpatialTypeName
::= 'Geography'
| 'Geometry'
concreteSpatialTypeName
::= 'Collection'
| 'LineString'
| 'MultiLineString'
| 'MultiPoint'
| 'MultiPolygon'
| 'Point'
| 'Polygon'
primitiveProperty
::= primitiveKeyProperty
| primitiveNonKeyProperty
primitiveKeyProperty
::= odataIdentifier
primitiveNonKeyProperty
::= odataIdentifier
primitiveColProperty
::= odataIdentifier
complexProperty
::= odataIdentifier
complexColProperty
::= odataIdentifier
streamProperty
::= odataIdentifier
navigationProperty
::= entityNavigationProperty
| entityColNavigationProperty
entityNavigationProperty
::= odataIdentifier
entityColNavigationProperty
::= odataIdentifier
action ::= odataIdentifier
actionImport
::= odataIdentifier
function ::= entityFunction
| entityColFunction
| complexFunction
| complexColFunction
| primitiveFunction
| primitiveColFunction
entityFunction
::= odataIdentifier
entityColFunction
::= odataIdentifier
complexFunction
::= odataIdentifier
complexColFunction
::= odataIdentifier
primitiveFunction
::= odataIdentifier
primitiveColFunction
::= odataIdentifier
entityFunctionImport
::= odataIdentifier
entityColFunctionImport
::= odataIdentifier
complexFunctionImport
::= odataIdentifier
complexColFunctionImport
::= odataIdentifier
primitiveFunctionImport
::= odataIdentifier
primitiveColFunctionImport
::= odataIdentifier
primitiveLiteral
::= nullValue
| booleanValue
| guidValue
| dateValue
| dateTimeOffsetValue
| timeOfDayValue
| decimalValue
| doubleValue
| singleValue
| sbyteValue
| byteValue
| int16Value
| int32Value
| int64Value
| string
| duration
| binary
| enum
| geographyCollection
| geographyLineString
| geographyMultiLineString
| geographyMultiPoint
| geographyMultiPolygon
| geographyPoint
| geographyPolygon
| geometryCollection
| geometryLineString
| geometryMultiLineString
| geometryMultiPoint
| geometryMultiPolygon
| geometryPoint
| geometryPolygon
primitiveValue
::= booleanValue
| guidValue
| durationValue
| dateValue
| dateTimeOffsetValue
| timeOfDayValue
| enumValue
| fullCollectionLiteral
| fullLineStringLiteral
| fullMultiPointLiteral
| fullMultiLineStringLiteral
| fullMultiPolygonLiteral
| fullPointLiteral
| fullPolygonLiteral
| decimalValue
| doubleValue
| singleValue
| sbyteValue
| byteValue
| int16Value
| int32Value
| int64Value
| binaryValue
nullValue
::= 'null'
binary ::= 'binary' SQUOTE binaryValue SQUOTE
binaryValue
::= ( base64char base64char base64char base64char )* ( base64b16 | base64b8 )?
base64b16
::= base64char base64char ( 'A' | 'E' | 'I' | 'M' | 'Q' | 'U' | 'Y' | 'c' | 'g' | 'k' | 'o' | 's' | 'w' | '0' | '4' | '8' ) '='?
base64b8 ::= base64char ( 'A' | 'Q' | 'g' | 'w' ) '=='?
base64char
::= ALPHA
| DIGIT
| '-'
| '_'
booleanValue
::= 'true'
| 'false'
decimalValue
::= SIGN? DIGIT+ ( '.' DIGIT+ )?
doubleValue
::= decimalValue ( 'e' SIGN? DIGIT+ )?
| nanInfinity
singleValue
::= doubleValue
nanInfinity
::= 'NaN'
| '-INF'
| 'INF'
guidValue
::= HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG '-' HEXDIG HEXDIG HEXDIG HEXDIG '-' HEXDIG HEXDIG HEXDIG HEXDIG '-' HEXDIG HEXDIG HEXDIG HEXDIG '-' HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG+
byteValue
::= DIGIT ( DIGIT DIGIT? )?
sbyteValue
::= SIGN? DIGIT ( DIGIT DIGIT? )?
int16Value
::= SIGN? DIGIT ( DIGIT ( DIGIT ( DIGIT DIGIT? )? )? )?
int32Value
::= SIGN? DIGIT+
int64Value
::= SIGN? DIGIT+
string ::= SQUOTE ( SQUOTE-in-string | pchar-no-SQUOTE )* SQUOTE
SQUOTE-in-string
::= SQUOTE SQUOTE
dateValue
::= year '-' month '-' day
dateTimeOffsetValue
::= year '-' month '-' day 'T' hour ':' minute ( ':' second ( '.' fractionalSeconds )? )? ( 'Z' | SIGN hour ':' minute )
duration ::= 'duration' SQUOTE durationValue SQUOTE
durationValue
::= SIGN? 'P' ( DIGIT+ 'D' )? ( 'T' ( DIGIT+ 'H' )? ( DIGIT+ 'M' )? ( DIGIT+ ( '.' DIGIT+ )? 'S' )? )?
timeOfDayValue
::= hour ':' minute ( ':' second ( '.' fractionalSeconds )? )?
oneToNine
::= '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
| '8'
| '9'
zeroToFiftyNine
::= ( '0' | '1' | '2' | '3' | '4' | '5' ) DIGIT
year ::= '-'? ( '0' DIGIT DIGIT DIGIT | oneToNine DIGIT DIGIT DIGIT+ )
// ... remainder omitted, because too large for SO post
答案 1 :(得分:0)
如果ABNF语法也没问题,你可以找到OData V4 URI here的ABNF构造规则。