(***********************************************************************)
(*                                                                     *)
(*                                 GALAX                               *)
(*                            XML Query Engine                         *)
(*                                                                     *)
(*  Copyright 2000, Lucent Technologies.                               *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: xml_astutil.mli,v 1.5 2002/11/21 18:39:42 simeon Exp $ *)

(************************************************)
(* Some 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._untyped

val step_within_xml_text :
    Namespace.nsenv ->
      Xml_ast.xml_node ->
	Datatypes._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 get_sax_xml_ns_attributes :
    Sax.sax_xml_attribute_forest -> ((Namespace.prefix * Namespace.uri) list * Sax.sax_xml_attribute_forest)



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

val extract_sax_ws_attribute :
    Whitespace.mode -> Sax.sax_xml_attribute_forest -> (Whitespace.mode * Sax.sax_xml_attribute_forest)

