Skip to content

Instantly share code, notes, and snippets.

@apb2006
Created February 21, 2012 23:38
Show Gist options
  • Save apb2006/1879855 to your computer and use it in GitHub Desktop.
Save apb2006/1879855 to your computer and use it in GitHub Desktop.
anotations from Xquery
import module namespace p="apb.parser-basex";
let $xq:='
declare
%rest:path("/stock/widget/{$id}")
function local:widget($id as xs:int) {
(: get the widget :)
fn:collection("/db/widgets")/widget[@id eq $id]
};
2+3
'
return p:parse-XQuery($xq)//AnnotatedDecl
<AnnotatedDecl>
<TOKEN>declare</TOKEN>
<Annotation>
<TOKEN>%</TOKEN>
<EQName>
<FunctionName>
<EQName>rest:path</EQName>
</FunctionName>
</EQName>
<TOKEN>(</TOKEN>
<Literal>
<StringLiteral>"/stock/widget/{$id}"</StringLiteral>
</Literal>
<TOKEN>)</TOKEN>
</Annotation>
<FunctionDecl>
<TOKEN>function</TOKEN>
<EQName>
<FunctionName> <EQName>local:widget</EQName>
</FunctionName>
</EQName>
<TOKEN>(</TOKEN>
<ParamList>
<Param>
<TOKEN>$</TOKEN>
<EQName>
<FunctionName>
<EQName>id</EQName>
</FunctionName>
</EQName>
<TypeDeclaration> <TOKEN>as</TOKEN>
<SequenceType>
<ItemType>
<AtomicOrUnionType>
<EQName>
<FunctionName> <EQName>xs:int</EQName>
</FunctionName>
</EQName>
</AtomicOrUnionType>
</ItemType>
</SequenceType>
</TypeDeclaration>
</Param>
</ParamList>
<TOKEN>)</TOKEN>
<FunctionBody>
<EnclosedExpr> <TOKEN>{</TOKEN>
<Expr>
<ExprSingle>
<OrExpr>
<AndExpr>
<ComparisonExpr>
<FTContainsExpr>
<RangeExpr>
<AdditiveExpr>
<MultiplicativeExpr>
<UnionExpr>
<IntersectExceptExpr>
<InstanceofExpr>
<TreatExpr>
<CastableExpr>
<CastExpr>
<UnaryExpr>
<ValueExpr>
<PathExpr>
<RelativePathExpr>
<StepExpr>
<PostfixExpr>
<PrimaryExpr>
<FunctionCall>
<FunctionName>
(: get the widget :)
<EQName>fn:collection</EQName>
</FunctionName>
<ArgumentList>
<TOKEN>(</TOKEN>
<Argument>
<ExprSingle>
<OrExpr>
<AndExpr>
<ComparisonExpr>
<FTContainsExpr>
<RangeExpr>
<AdditiveExpr>
<MultiplicativeExpr>
<UnionExpr>
<IntersectExceptExpr>
<InstanceofExpr>
<TreatExpr>
<CastableExpr>
<CastExpr>
<UnaryExpr>
<ValueExpr>
<PathExpr>
<RelativePathExpr>
<StepExpr>
<PostfixExpr>
<PrimaryExpr>
<Literal>
<StringLiteral>"/db/widgets"</StringLiteral>
</Literal>
</PrimaryExpr>
</PostfixExpr>
</StepExpr>
</RelativePathExpr>
</PathExpr>
</ValueExpr>
</UnaryExpr>
</CastExpr>
</CastableExpr>
</TreatExpr>
</InstanceofExpr>
</IntersectExceptExpr>
</UnionExpr>
</MultiplicativeExpr>
</AdditiveExpr>
</RangeExpr>
</FTContainsExpr>
</ComparisonExpr>
</AndExpr>
</OrExpr>
</ExprSingle>
</Argument>
<TOKEN>)</TOKEN>
</ArgumentList>
</FunctionCall>
</PrimaryExpr>
</PostfixExpr>
</StepExpr>
<TOKEN>/</TOKEN>
<StepExpr>
<AxisStep>
<ForwardStep>
<AbbrevForwardStep>
<NodeTest>
<NameTest>
<EQName>
<FunctionName>
<EQName>widget</EQName>
</FunctionName>
</EQName>
</NameTest>
</NodeTest>
</AbbrevForwardStep>
</ForwardStep>
<PredicateList>
<Predicate>
<TOKEN>[</TOKEN>
<Expr>
<ExprSingle>
<OrExpr>
<AndExpr>
<ComparisonExpr>
<FTContainsExpr>
<RangeExpr>
<AdditiveExpr>
<MultiplicativeExpr>
<UnionExpr>
<IntersectExceptExpr>
<InstanceofExpr>
<TreatExpr>
<CastableExpr>
<CastExpr>
<UnaryExpr>
<ValueExpr>
<PathExpr>
<RelativePathExpr>
<StepExpr>
<AxisStep>
<ForwardStep>
<AbbrevForwardStep>
<TOKEN>@</TOKEN>
<NodeTest>
<NameTest>
<EQName>
<FunctionName>
<EQName>id</EQName>
</FunctionName>
</EQName>
</NameTest>
</NodeTest>
</AbbrevForwardStep>
</ForwardStep>
<PredicateList/>
</AxisStep>
</StepExpr>
</RelativePathExpr>
</PathExpr>
</ValueExpr>
</UnaryExpr>
</CastExpr>
</CastableExpr>
</TreatExpr>
</InstanceofExpr>
</IntersectExceptExpr>
</UnionExpr>
</MultiplicativeExpr>
</AdditiveExpr>
</RangeExpr>
</FTContainsExpr>
<ValueComp> <TOKEN>eq</TOKEN>
</ValueComp>
<FTContainsExpr>
<RangeExpr>
<AdditiveExpr>
<MultiplicativeExpr>
<UnionExpr>
<IntersectExceptExpr>
<InstanceofExpr>
<TreatExpr>
<CastableExpr>
<CastExpr>
<UnaryExpr>
<ValueExpr>
<PathExpr>
<RelativePathExpr>
<StepExpr>
<PostfixExpr>
<PrimaryExpr>
<VarRef> <TOKEN>$</TOKEN>
<VarName>
<EQName>
<FunctionName>
<EQName>id</EQName>
</FunctionName>
</EQName>
</VarName>
</VarRef>
</PrimaryExpr>
</PostfixExpr>
</StepExpr>
</RelativePathExpr>
</PathExpr>
</ValueExpr>
</UnaryExpr>
</CastExpr>
</CastableExpr>
</TreatExpr>
</InstanceofExpr>
</IntersectExceptExpr>
</UnionExpr>
</MultiplicativeExpr>
</AdditiveExpr>
</RangeExpr>
</FTContainsExpr>
</ComparisonExpr>
</AndExpr>
</OrExpr>
</ExprSingle>
</Expr>
<TOKEN>]</TOKEN>
</Predicate>
</PredicateList>
</AxisStep>
</StepExpr>
</RelativePathExpr>
</PathExpr>
</ValueExpr>
</UnaryExpr>
</CastExpr>
</CastableExpr>
</TreatExpr>
</InstanceofExpr>
</IntersectExceptExpr>
</UnionExpr>
</MultiplicativeExpr>
</AdditiveExpr>
</RangeExpr>
</FTContainsExpr>
</ComparisonExpr>
</AndExpr>
</OrExpr>
</ExprSingle>
</Expr>
<TOKEN>}</TOKEN>
</EnclosedExpr>
</FunctionBody>
</FunctionDecl>
</AnnotatedDecl>
@apb2006
Copy link
Author

apb2006 commented Feb 21, 2012

@ChristianGruen
Copy link

..thanks for the real-time evaluation of our upcoming features ;) support for variables in rest:path annotations will be available in a few days.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment