xquery version "1.0"; let $serial := doc('/db/course/who/data/S9E03_TheSeaDevils.xml') let $characters := doc('/db/course/who/aux/metadata.xml')//character let $speakers := $serial//speaker/@who let $distinctspeakers := distinct-values($speakers) return { for $distinctspeaker in $distinctspeakers let $addressees := $serial//line[speaker/@who = $distinctspeaker]/address/@who let $referents := $serial//line[speaker/@who = $distinctspeaker]/reference/@who let $addref := distinct-values($addressees|$referents) for $person in $addref let $addlevels := $serial//line[speaker/@who = $distinctspeaker]/address[@who=$person]/@level let $reflevels := $serial//line[speaker/@who = $distinctspeaker]/reference[@who=$person]/@level let $levels := distinct-values($addlevels|$reflevels) for $level in $levels order by $distinctspeaker, $person, $level return }
Speaker Total addresses Total references Addressee/referent Number of addresses Number of references Level Number of addresses Number of references
{$characters[@xml:id = $distinctspeaker]/name/string()} {$characters[@xml:id = $person]/name/string()} {$level} {count($addlevels[. = $level])} {count($reflevels[. = $level])}