26 February 2004

# Appendix A: IDL Definitions

This appendix contains the complete OMG IDL [OMG IDL] for the Level 3 Document Object Model XPath definitions.

The IDL files are also available as: http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/idl.zip

### xpath.idl:

    // File: 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;
      typedef dom::DOMObject DOMObject;
      typedef dom::Element Element;

      interface XPathNSResolver;
      interface XPathExpression;

      exception XPathException {
        unsigned short   code;
      };
      // XPathExceptionCode
      const unsigned short      INVALID_EXPRESSION_ERR         = 51;
      const unsigned short      TYPE_ERR                       = 52;

      interface XPathEvaluator {
        XPathExpression    createExpression(in DOMString expression,
                                            in XPathNSResolver resolver)
                                            raises(XPathException,
                                                   dom::DOMException);
        XPathNSResolver    createNSResolver(in Node nodeResolver);
        DOMObject          evaluate(in DOMString expression,
                                    in Node contextNode,
                                    in XPathNSResolver resolver,
                                    in unsigned short type,
                                    in DOMObject result)
                                            raises(XPathException,
                                                   dom::DOMException);
      };

      interface XPathExpression {
        DOMObject          evaluate(in Node contextNode,
                                    in unsigned short type,
                                    in DOMObject result)
                                            raises(XPathException,
                                                   dom::DOMException);
      };

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

      interface XPathResult {

        // XPathResultType
        const unsigned short      ANY_TYPE                       = 0;
        const unsigned short      NUMBER_TYPE                    = 1;
        const unsigned short      STRING_TYPE                    = 2;
        const unsigned short      BOOLEAN_TYPE                   = 3;
        const unsigned short      UNORDERED_NODE_ITERATOR_TYPE   = 4;
        const unsigned short      ORDERED_NODE_ITERATOR_TYPE     = 5;
        const unsigned short      UNORDERED_NODE_SNAPSHOT_TYPE   = 6;
        const unsigned short      ORDERED_NODE_SNAPSHOT_TYPE     = 7;
        const unsigned short      ANY_UNORDERED_NODE_TYPE        = 8;
        const unsigned short      FIRST_ORDERED_NODE_TYPE        = 9;

        readonly attribute unsigned short  resultType;
        readonly attribute double          numberValue;
                                            // raises(XPathException) on retrieval

        readonly attribute DOMString       stringValue;
                                            // raises(XPathException) on retrieval

        readonly attribute boolean         booleanValue;
                                            // raises(XPathException) on retrieval

        readonly attribute Node            singleNodeValue;
                                            // raises(XPathException) on retrieval

        readonly attribute boolean         invalidIteratorState;
        readonly attribute unsigned long   snapshotLength;
                                            // raises(XPathException) on retrieval

        Node               iterateNext()
                                            raises(XPathException,
                                                   dom::DOMException);
        Node               snapshotItem(in unsigned long index)
                                            raises(XPathException);
      };

      interface XPathNamespace : Node {

        // XPathNodeType
        const unsigned short      XPATH_NAMESPACE_NODE           = 13;

        readonly attribute Element         ownerElement;
      };
    };

    #endif // _XPATH_IDL_