XQuery
Priscilla Walmsley (pwalmsley@datypic.com)
ISBN: 1491915103
2nd edition, , O'Reilly Media, Inc.
Chapter 28: Additional XQuery-Related Standards
Please note that the book contains many inline examples and informal tables that are not provided here.
for $prod in doc("catalog.xml")//product order by $prod/name return $prod/number
<?xml version="1.0"?> <xqx:module xmlns:xqx="http://www.w3.org/2005/XQueryX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xqx:mainModule> <xqx:queryBody> <xqx:flworExpr> <xqx:forClause> <xqx:forClauseItem> <xqx:typedVariableBinding> <xqx:varName>product</xqx:varName> </xqx:typedVariableBinding> <xqx:forExpr> <xqx:pathExpr> <xqx:argExpr> <xqx:functionCallExpr> <xqx:functionName>doc</xqx:functionName> <xqx:arguments> <xqx:stringConstantExpr> <xqx:value>catalog.xml</xqx:value> </xqx:stringConstantExpr> </xqx:arguments> </xqx:functionCallExpr> </xqx:argExpr> <xqx:stepExpr> <xqx:xpathAxis>descendant-or-self</xqx:xpathAxis> <xqx:anyKindTest/> </xqx:stepExpr> <xqx:stepExpr> <xqx:xpathAxis>child</xqx:xpathAxis> <xqx:nameTest>product</xqx:nameTest> </xqx:stepExpr> </xqx:pathExpr> </xqx:forExpr> </xqx:forClauseItem> </xqx:forClause> <!-- ... -->
xquery version "3.0"; module namespace prod = "http://datypic.com/prod"; declare namespace rest = "http://exquery.org/ns/restxq"; declare %rest:GET %rest:path("/product/{$num}") function prod:product-info($num) { let $prod := doc("catalog.xml")//product[number=$num] return <html> <body> <p><b>Number</b>: {data($prod/number)}</p> <p><b>Name</b>: {data($prod/name)}</p> <p><b>Department</b>: {data($prod/@dept)}</p> </body> </html> };
xquery version "3.0"; module namespace prod = "http://datypic.com/prod"; declare namespace rest = "http://exquery.org/ns/restxq"; declare %rest:GET %rest:path("/products") %rest:query-param("dept", "{$dept}", "*") function prod:prods-by-dept($dept) { <html> <body>{ for $prod in doc("catalog.xml")//product[@dept=$dept or $dept = '*'] let $num := data($prod/number) return <p><a href="product/{$num}">{$num}</a></p> }</body> </html> };
xquery version "3.0"; module namespace prod = "http://datypic.com/prod"; declare namespace rest = "http://exquery.org/ns/restxq"; declare namespace http = "http://expath.org/ns/http-client"; declare %rest:GET %rest:HEAD %rest:POST %rest:PUT %rest:DELETE function prod:not-found() { <rest:response> <http:response status="404" message="I was not found."> <http:header name="Content-Language" value="en"/> <http:header name="Content-Type" value="text/html; charset=utf-8"/> </http:response> </rest:response> };