This function iterates on the input sequence. It projects objects by filtering their pairs and leaves non-objects intact.
declare function project($seq as item*, $keys as string*) as item* { for $item in $seq return typeswitch ($item) case $object as object return {| for $key in keys($object) where some $to-project in $keys satisfies $to-project eq $key let $value := $object.$key return { $key : $value } |} default return $item };
Example 188. Projecting an object 1
let $o := { "Captain" : "Kirk", "First Officer" : "Spock", "Engineer" : "Scott" } return project($o, ("Captain", "First Officer"))
Result (run with Zorba): { "Captain" : "Kirk", "First Officer" : "Spock" }
Example 189. Projecting an object 2
let $o := { "Captain" : "Kirk", "First Officer" : "Spock", "Engineer" : "Scott" } return project($o, "XQuery Evangelist")
Result (run with Zorba): { }