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