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): { }