它是一个有效的OData URI(OData ABNF doc中是否存在错误)?

时间:2013-02-01 00:26:06

标签: odata

在与我的同事的讨论中,出现了一个问题,即在OData网址过滤器中调用eq true方法后是否必须添加substringof

http://localhost/Collection/WorkItems()?$filter=substringof('crash',Title)
http://localhost/Collection/WorkItems()?$filter=substringof('crash',Title) eq true

现在我正在咨询ABNF for OData revised on 4/27/2012。查看filter表达式表单,它需要boolCommonExpr

filter                      =   "$filter" [ WSP ] "=" [ WSP] boolCommonExpr

boolCommonExpr列出boolMethodCallExpr作为其替代方案之一。但是ABNF中没有boolMethodCallExpr符号的定义!

所以,我猜这是ABNF中的一个错误,并且列出的正确替代方案必须是boolMethodExpr,而不是boolMethodCallExpr

boolMethodExpr              =   endsWithMethodCallExpr /
                                startsWithMethodCallExpr /
                                substringOfMethodCallExpr /                                         
                                intersectsMethodCallExpr /
                                anyMethodCallExpr /
                                allMethodCallExpr

在这种情况下,允许调用substringof方法在URI中没有eq true(以及eq true)。

我的理解是否正确?

1 个答案:

答案 0 :(得分:1)

您不需要在URL的末尾加上“eq true”。任何返回布尔值的内置函数都应该足够好。这看起来可能只是ABNF中的一个错字(特别是未定义boolMethodCallExpr)。该特定文档甚至不完整,并且其中包含多个TODO。随着OASIS OData标准化的结合,应该有更明确的ABNF。