xquery version "1.0"; (: : Copyright 2006-2009 The FLWOR Foundation. : : Licensed under the Apache License, Version 2.0 (the "License"); : you may not use this file except in compliance with the License. : You may obtain a copy of the License at : : http://www.apache.org/licenses/LICENSE-2.0 : : Unless required by applicable law or agreed to in writing, software : distributed under the License is distributed on an "AS IS" BASIS, : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. : See the License for the specific language governing permissions and : limitations under the License. :) (:~ : This module defines a set of function which can be used : to determine (1) the relationship between two nodes (e.g. if one : is the ancestor if another) and (2) properties of given : nodes (e.g. their level in the tree). : : The same functionality can be achieved with simple XPath expressions. : However, please note that using the functions in this modules instead : of path expressions guarantees better performance. : : @author Matthias Brantner : @project XDM/node :) module namespace node = "http://www.zorba-xquery.com/modules/node"; declare namespace ver = "http://www.zorba-xquery.com/options/versioning"; declare option ver:module-version "2.0"; (:~ : Determines whether the node given as second argument is an : ancestor of the node given as first argument. : : @param $node1 the potential descendant : @param $node2 the potential ancestor : : @return true if $node2 is an ancestor of $node1; false otherwise. :) declare function node:ancestor-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is a : descendant of the node given as first argument. : : @param $node1 the potential ancestor : @param $node2 the potential descendant : : @return true if $node2 is a descendant of $node1; false otherwise. :) declare function node:descendant-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is a : parent of the node given as first argument. : : @param $node1 the potential child : @param $node2 the potential parent : : @return true if $node2 is a parent of $node1; false otherwise. :) declare function node:parent-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is a : child of the node given as first argument. : : @param $node1 the potential parent : @param $node2 the potential child : : @return true if $node2 is a child of $node1; false otherwise. :) declare function node:child-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is a : following-sibling of the node given as first argument. : : @param $node1 the potential preceding-sibling : @param $node2 the potential following-sibling : : @return true if $node2 is a following-sibling of $node1; false otherwise. :) declare function node:following-sibling-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is a : preceding-sibling of the node given as first argument. : : @param $node1 the potential following-sibling : @param $node2 the potential preceding-sibling : : @return true if $node2 is a preceding-sibling of $node1; false otherwise. :) declare function node:preceding-sibling-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is : following the node given as first argument. : : @param $node1 the potential preceding node : @param $node2 the potential following node : : @return true if $node2 is following the node $node1; false otherwise. :) declare function node:following-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Determines whether the node given as second argument is : preceding the node given as first argument. : : @param $node1 the potential following node : @param $node2 the potential preceding node : : @return true if $node2 is preceding the node $node1; false otherwise. :) declare function node:preceding-of( $node1 as node(), $node2 as node()) as xs:boolean external; (:~ : Computes the level of a given node in the tree. : : Note: The first level has the number one. : : @param $node the node for which the level should be computed : : @return The level as xs:integer of the given node in the tree. :) declare function node:level( $node as node()) as xs:integer external; (:~ : Computes the least common ancestor of two given nodes in : the tree. : : @param $node1 the first node : @param $node2 the second node : : @return the least common ancestor of the two given nodes or : the empty sequence if the two nodes are not part of the same : tree. :) declare function node:least-common-ancestor( $node1 as node(), $node2 as node()) as node()? external;