
Here are two clarification points related to each other: [1] For CDL expression, on which the spec says that "it must not contain any location path," please see the attached file that defines the syntax of expression (based on XPath1.0 spec). [2] For Component Model's cmp:switch, I am not really sure what cmp:case/@condition should support. The spec says "a valid XPath calculation on declared properties returning a boolean value" -- however, I do not think this includes the full set of XPath, which does not always make sense. I assume that cdl:pathType is used instead of the full-spec path expression. Then, the syntax of cmp:case/@condition can be given by extending the syntax of cdl expression as: ----- PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall | CDLPath CDLPath ::= ('/')? Step ('/' Step)* Step ::= '.' | '..' | QName ----- which is also a valid XPath expression. (We may want to remove VariableReference from PrimaryExpr, since there is no way to define variables for cmp:switch). One possible problem here is that we cannot specify @cdl:refroot (this is the reason why I introduced cdl:expression and cdl:variable) within the expression. This may not be a problem if we just want to refer to properties within a component graph. -- Best Regards, Jun Tatemura CDL's expression is a subset of XPath 1.0. Its syntax can be described as follows (See Section 3 of XPath 1.0 specification for comparison) Functions supported are string functions (Section 4.2), boolean functions (Section 4.3), and number functions (Section 4.4). Expr ::= OrExpr OrExpr ::= AndExpr | OrExpr 'or' OrExpr AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr EqualityExpr ::= RelationalExpr | EqualityExpr '=' RelationalExpr | EqualityExpr '!=' RelationalExpr RelatiopnalExpr ::= AdditiveExpr | RelationalExpr '<' AdditiveExpr | RelationalExpr '>' AdditiveExpr | RelationalExpr '<=' AdditiveExpr | RelationalExpr '>=' AdditiveExpr AdditiveExpr ::= MultiplicativeExpr | AdditiveExpr '+' MultiplicativeExpr | AdditiveExpr '-' MultiplicativeExpr MultiplicativeExpr := UnaryExpr | MultiplicativeExpr MultiplyOperator UnaryExpr | MultiplicativeExpr 'div' UnaryExpr | MultiplicativeExpr 'mod' UnaryExpr UnaryExpr ::= PrimaryExpr | '-' UnaryExpr PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall FunctionCall ::= FunctionName '(' (Argument (',',Argument)*)? ')' Argument ::= Expr