(***********************************************************************)
(*                                                                     *)
(*                                 GALAX                               *)
(*                              XQuery Engine                          *)
(*                                                                     *)
(*  Copyright 2001-2003, Lucent Technologies.                          *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: xml_astutil.mli,v 1.2 2003/05/20 15:29:50 mff Exp $ *)

(* Module Xml_astutil
   Description:
     This module implements some useful operations the XML abstract
     syntax tree.
*)

(***********************)
(* Accessor operations *)
(***********************)

(* Steps within a node *)

val step_within_xml_element :
    Namespace.nsenv ->
      Whitespace.mode ->
	Xml_ast.xml_node ->
	  (Whitespace.mode * (Namespace.prefix * Namespace.uri) list * 
	     Sym.relem_symbol * Xml_ast.xml_attribute_forest * Xml_ast.xml_node_forest)

val step_within_xml_attribute :
    Namespace.nsenv ->
      Xml_ast.xml_attribute ->
	Sym.rattr_symbol * Datatypes.xdt_untyped

val step_within_xml_text :
    Namespace.nsenv ->
      Xml_ast.xml_node ->
	Datatypes.xdt_untyped

val step_within_xml_pi :
    Namespace.nsenv ->
      Xml_ast.xml_node ->
	Namespace.ncname * string

val step_within_xml_comment :
    Namespace.nsenv ->
      Xml_ast.xml_node ->
	string

(* Steps within a forest *)

val get_next_xml_node :
    Whitespace.mode -> Xml_ast.xml_node_forest -> (Xml_ast.xml_node option * Xml_ast.xml_node_forest)
val get_next_xml_node_no_whitespace :
    Xml_ast.xml_node_forest -> (Xml_ast.xml_node option * Xml_ast.xml_node_forest)

(*************************)
(* Extractors operations *)
(*************************)

(* Extracts specific attributes *)

val get_xml_ns_attributes :
    Xml_ast.xml_attribute_forest -> ((Namespace.prefix * Namespace.uri) list * Xml_ast.xml_attribute_forest)


val extract_ws_attribute : Whitespace.mode -> Xml_ast.xml_attribute_forest -> (Whitespace.mode * Xml_ast.xml_attribute_forest)

