xquery version "1.0"; declare function local:test($id as xs:string, $case as element(case), $expected as element(expected), $result as element(result)) as element(test) { { if (deep-equal($expected/node(), $result/node())) then attribute ok {} else ( attribute fail {}, $case, $expected, $result ) } }; let $xml :=

p1

p2

p3

p4

p5

p6

p7

p8

return { local:test("1", ($xml//p)[2],

p2

, { ($xml//p)[2] } ), local:test("2", $xml/(.//p)[2],

p2

, { $xml/(.//p)[2] } ), local:test("3", $xml//(p)[2],

p2

p4

p6

p8

, { $xml//(p)[2] } ), local:test("4", $xml//p[2],

p2

p4

p6

p8

, { $xml//p[2] } ), local:test("5", ($xml/part//p)[2],

p2

, { ($xml/part//p)[2] } ), local:test("6", $xml/(part//p)[2],

p2

, { $xml/(part//p)[2] } ), local:test("7", $xml/part/(.//p)[2],

p2

p6

, { $xml/part/(.//p)[2] } ), local:test("8", $xml/part//(p)[2],

p2

p4

p6

p8

, { $xml/part//(p)[2] } ), local:test("9", $xml/part//p[2],

p2

p4

p6

p8

, { $xml/part//p[2] } ) }
{ local:test("1", ($xml//p)[position() = 2],

p2

, { ($xml//p)[position() = 2] } ), local:test("2", $xml/(.//p)[position() = 2],

p2

, { $xml/(.//p)[position() = 2] } ), local:test("3", $xml//(p)[position() = 2],

p2

p4

p6

p8

, { $xml//(p)[position() = 2] } ), local:test("4", $xml//p[position() = 2],

p2

p4

p6

p8

, { $xml//p[position() = 2] } ), local:test("5", ($xml/part//p)[position() = 2],

p2

, { ($xml/part//p)[position() = 2] } ), local:test("6", $xml/(part//p)[position() = 2],

p2

, { $xml/(part//p)[position() = 2] } ), local:test("7", $xml/part/(.//p)[position() = 2],

p2

p6

, { $xml/part/(.//p)[position() = 2] } ), local:test("8", $xml/part//(p)[position() = 2],

p2

p4

p6

p8

, { $xml/part//(p)[position() = 2] } ), local:test("9", $xml/part//p[position() = 2],

p2

p4

p6

p8

, { $xml/part//p[position() = 2] } ) }
{ local:test("1", ($xml/descendant-or-self::node()/p)[2],

p2

, { ($xml/descendant-or-self::node()/p)[2] } ), local:test("2", $xml/(./descendant-or-self::node()/p)[2],

p2

, { $xml/(./descendant-or-self::node()/p)[2] } ), local:test("3", $xml/descendant-or-self::node()/(p)[2],

p2

p4

p6

p8

, { $xml/descendant-or-self::node()/(p)[2] } ), local:test("4", $xml/descendant-or-self::node()/p[2],

p2

p4

p6

p8

, { $xml/descendant-or-self::node()/p[2] } ), local:test("5", ($xml/part/descendant-or-self::node()/p)[2],

p2

, { ($xml/part/descendant-or-self::node()/p)[2] } ), local:test("6", $xml/(part/descendant-or-self::node()/p)[2],

p2

, { $xml/(part/descendant-or-self::node()/p)[2] } ), local:test("7", $xml/part/(./descendant-or-self::node()/p)[2],

p2

p6

, { $xml/part/(./descendant-or-self::node()/p)[2] } ), local:test("8", $xml/part/descendant-or-self::node()/(p)[2],

p2

p4

p6

p8

, { $xml/part/descendant-or-self::node()/(p)[2] } ), local:test("9", $xml/part/descendant-or-self::node()/p[2],

p2

p4

p6

p8

, { $xml/part/descendant-or-self::node()/p[2] } ) }
{ local:test("1", ($xml/descendant-or-self::node()/p)[position() = 2],

p2

, { ($xml/descendant-or-self::node()/p)[position() = 2] } ), local:test("2", $xml/(./descendant-or-self::node()/p)[position() = 2],

p2

, { $xml/(./descendant-or-self::node()/p)[position() = 2] } ), local:test("3", $xml/descendant-or-self::node()/(p)[position() = 2],

p2

p4

p6

p8

, { $xml/descendant-or-self::node()/(p)[position() = 2] } ), local:test("4", $xml/descendant-or-self::node()/p[position() = 2],

p2

p4

p6

p8

, { $xml/descendant-or-self::node()/p[position() = 2] } ), local:test("5", ($xml/part/descendant-or-self::node()/p)[position() = 2],

p2

, { ($xml/part/descendant-or-self::node()/p)[position() = 2] } ), local:test("6", $xml/(part/descendant-or-self::node()/p)[position() = 2],

p2

, { $xml/(part/descendant-or-self::node()/p)[position() = 2] } ), local:test("7", $xml/part/(./descendant-or-self::node()/p)[position() = 2],

p2

p6

, { $xml/part/(./descendant-or-self::node()/p)[position() = 2] } ), local:test("8", $xml/part/descendant-or-self::node()/(p)[position() = 2],

p2

p4

p6

p8

, { $xml/part/descendant-or-self::node()/(p)[position() = 2] } ), local:test("9", $xml/part/descendant-or-self::node()/p[position() = 2],

p2

p4

p6

p8

, { $xml/part/descendant-or-self::node()/p[position() = 2] } ) }
{ local:test("1", ($xml/descendant::p)[2],

p2

, { ($xml/descendant::p)[2] } ), local:test("2", $xml/(descendant::p)[2],

p2

, { $xml/(descendant::p)[2] } ), local:test("3", $xml/(descendant::p)[2],

p2

, { $xml/(descendant::p)[2] } ), local:test("4", $xml/descendant::p[2],

p2

, { $xml/descendant::p[2] } ), local:test("5", ($xml/part/descendant::p)[2],

p2

, { ($xml/part/descendant::p)[2] } ), local:test("6", $xml/(part/descendant::p)[2],

p2

, { $xml/(part/descendant::p)[2] } ), local:test("7", $xml/part/(descendant::p)[2],

p2

p6

, { $xml/part/(descendant::p)[2] } ), local:test("8", $xml/part/(descendant::p)[2],

p2

p6

, { $xml/part/(descendant::p)[2] } ), local:test("9", $xml/part/descendant::p[2],

p2

p6

, { $xml/part/descendant::p[2] } ) }
{ local:test("1", ($xml/descendant::p)[position() = 2],

p2

, { ($xml/descendant::p)[position() = 2] } ), local:test("2", $xml/(descendant::p)[position() = 2],

p2

, { $xml/(descendant::p)[position() = 2] } ), local:test("3", $xml/(descendant::p)[position() = 2],

p2

, { $xml/(descendant::p)[position() = 2] } ), local:test("4", $xml/descendant::p[position() = 2],

p2

, { $xml/descendant::p[position() = 2] } ), local:test("5", ($xml/part/descendant::p)[position() = 2],

p2

, { ($xml/part/descendant::p)[position() = 2] } ), local:test("6", $xml/(part/descendant::p)[position() = 2],

p2

, { $xml/(part/descendant::p)[position() = 2] } ), local:test("7", $xml/part/(descendant::p)[position() = 2],

p2

p6

, { $xml/part/(descendant::p)[position() = 2] } ), local:test("8", $xml/part/(descendant::p)[position() = 2],

p2

p6

, { $xml/part/(descendant::p)[position() = 2] } ), local:test("9", $xml/part/descendant::p[position() = 2],

p2

p6

, { $xml/part/descendant::p[position() = 2] } ) }