declare function libjn:project($sequence as item()*, $keys as xs:string*) as item()* { for $item in $sequence return typeswitch ($item) case $object as object() return {| for $key in $object()[ . = $keys ] return { $key : $object($key) } |} default return $item };
libjn:project( ( { "Captain" : "Kirk", "First Officer" : "Spock", "Engineer" : "Scott" }, [ 1, 2, 3, 4 ] { "Captain" : "Archer", "Engineer" : "Trip", }, true(), 1, jn:null() ), ("Captain", "First Officer", "XQuery Evangelist") )
{ "Captain" : "Kirk", "First Officer" : "Spock" } [ 1, 2, 3, 4 ] { "Captain" : "Archer" } true 1 null