1
A
回答
0
如果ABNF語法也可以,您可以找到OData V4 URI的ABNF構建規則here。
1
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 <[email protected]> */
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. POSIX sh EBNF語法
- 2. EBNF語法解釋
- 3. 的OData V4.0聚合查詢(聚集查詢語法)
- 4. PHP的EBNF語法定義?
- 5. 的OData查詢
- 6. 虛構語言的EBNF語法
- 7. 的OData查詢UI
- 8. 在URI中指定的查詢無效使用Web API OData
- 9. AZURE表存儲,ODATA和更友好的URI查詢
- 10. URI中OData v4持續時間的正確語法是什麼?
- 11. 提示編寫好的EBNF語法
- 12. 在OData中查詢
- 13. TableController和ODATA查詢
- 14. 訪問OData查詢
- 15. 的OData查詢用的DateTimeOffset
- 16. 如何爲EBNF語法編寫解析?
- 17. EBNF語法爲一個空格
- 18. web api:檢查odata查詢
- 19. 的Java OData服務不URI
- 20. 無法使用oData查詢選項
- 21. EBNF文法(ANTLR)
- 22. 查詢語法的C#方法語法
- 23. 將EBNF語法轉換爲上下文無關語法
- 24. 獲取LINQ查詢的查詢語法
- 25. 管理在URL中包含系統查詢選項的語法的規則(OData)
- 26. OData:限制查詢字段?
- 27. 查詢ebay odata與linq
- 28. Odata查詢$ filter替代
- 29. 從Redux查詢OData API
- 30. ODATA查詢不起作用
謝謝你,我會看看它。 – 2014-09-02 11:45:04