Product SiteDocumentation Site

8.7. libjn:project

This function iterates on the input sequence. It projects objects by filtering their pairs and leaves non-objects intact.
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
};
Example 8.7. Projecting objects.
Query:
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")
)
Result:
{ "Captain" : "Kirk", "First Officer" : "Spock" }
[ 1, 2, 3, 4 ] { "Captain" : "Archer" } true 1 null