/*
 * Copyright (c) 2001 World Wide Web Consortium,
 * (Massachusetts Institute of Technology, Institut National de
 * Recherche en Informatique et en Automatique, Keio University). All
 * Rights Reserved. This program is distributed under the W3C's Software
 * Intellectual Property License. This program is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE.
 * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
 */

// File: http://www.w3.org/TR/2001/WD-DOM-Level-3-XPath-20010618/xpath.idl

#ifndef _XPATH_IDL_
#define _XPATH_IDL_

#include "dom.idl"

#pragma prefix "dom.w3c.org"
module xpath
{

  typedef dom::DOMString DOMString;
  typedef dom::Node Node;

  interface NamespaceResolver;
  interface ActiveNodeSet;

  exception XPathException {
    unsigned short   code;
  };


  interface XPathEvaluator {
    boolean            evaluateAsBoolean(in DOMString expression, 
                                         in Node contextNode, 
                                         in NamespaceResolver resolver)
                                        raises(XPathException);
    double             evaluateAsNumber(in DOMString expression, 
                                        in Node contextNode, 
                                        in NamespaceResolver resolver)
                                        raises(XPathException);
    DOMString          evaluateAsString(in DOMString expression, 
                                        in Node contextNode, 
                                        in NamespaceResolver resolver)
                                        raises(XPathException);
    Node               evaluateAsNode(in DOMString expression, 
                                      in Node contextNode, 
                                      in NamespaceResolver resolver)
                                        raises(XPathException);
    ActiveNodeSet      evaluateAsNodeSet(in DOMString expression, 
                                         in Node contextNode, 
                                         in NamespaceResolver resolver)
                                        raises(XPathException);
  };

  interface StaticNodeSet {
    Node               item(in unsigned long index);
    readonly attribute unsigned long    length;
  };

  interface ActiveNodeSet {
    Node               nextNode()
                                        raises(dom::DOMException);
    void               reset()
                                        raises(dom::DOMException);
    ActiveNodeSet      cloneSet()
                                        raises(dom::DOMException);
    ActiveNodeSet      getDocumentOrderedSet()
                                        raises(dom::DOMException);
    StaticNodeSet      getStaticNodeSet()
                                        raises(dom::DOMException);
  };

  interface NamespaceResolver {
    DOMString          lookupNamespaceURI(in DOMString prefix);
  };
};

#endif // _XPATH_IDL_

