* Summary: XML Path Language implementation * Description: API for the XML Path Language implementation * * XML Path Language implementation * XPath is a language for addressing parts of an XML document, * designed to be used by both XSLT and XPointer * http://www.w3.org/TR/xpath * * Implements * W3C Recommendation 16 November 1999 * http://www.w3.org/TR/1999/REC-xpath-19991116 * * Copy: See Copyright for the status of this software. * * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A. /if not defined(XML_XPATH_H__) /define XML_XPATH_H__ /include "libxmlrpg/xmlversion" /if defined(LIBXML_XPATH_ENABLED) /include "libxmlrpg/xmlerror" /include "libxmlrpg/tree" /include "libxmlrpg/hash" /endif LIBXML_XPATH_ENABLED /if defined(LIBXML_XPATH_ENABLED) d xmlXPathContextPtr... d s * based(######typedef######) d xmlXPathParserContextPtr... d s * based(######typedef######) * The set of XPath error codes. d xmlXPathError s 10i 0 based(######typedef######) enum d XPATH_EXPRESSION_OK... d c 0 d XPATH_NUMBER_ERROR... d c 1 d XPATH_UNFINISHED_LITERAL_ERROR... d c 2 d XPATH_START_LITERAL_ERROR... d c 3 d XPATH_VARIABLE_REF_ERROR... d c 4 d XPATH_UNDEF_VARIABLE_ERROR... d c 5 d XPATH_INVALID_PREDICATE_ERROR... d c 6 d XPATH_EXPR_ERROR... d c 7 d XPATH_UNCLOSED_ERROR... d c 8 d XPATH_UNKNOWN_FUNC_ERROR... d c 9 d XPATH_INVALID_OPERAND... d c 10 d XPATH_INVALID_TYPE... d c 11 d XPATH_INVALID_ARITY... d c 12 d XPATH_INVALID_CTXT_SIZE... d c 13 d XPATH_INVALID_CTXT_POSITION... d c 14 d XPATH_MEMORY_ERROR... d c 15 d XPTR_SYNTAX_ERROR... d c 16 d XPTR_RESOURCE_ERROR... d c 17 d XPTR_SUB_RESOURCE_ERROR... d c 18 d XPATH_UNDEF_PREFIX_ERROR... d c 19 d XPATH_ENCODING_ERROR... d c 20 d XPATH_INVALID_CHAR_ERROR... d c 21 d XPATH_INVALID_CTXT... d c 22 d XPATH_STACK_ERROR... d c 23 d XPATH_FORBID_VARIABLE_ERROR... d c 24 * A node-set (an unordered collection of nodes without duplicates). d xmlNodeSetPtr s * based(######typedef######) d xmlNodeSet ds based(xmlNodeSetPtr) d align qualified d nodeNr 10i 0 Set node count d nodeMax 10i 0 Max # nodes in set d nodeTab * xmlNodePtr * * An expression is evaluated to yield an object, which * has one of the following four basic types: * - node-set * - boolean * - number * - string * * @@ XPointer will add more types ! d xmlXPathObjectType... d s 10i 0 based(######typedef######) enum d XPATH_UNDEFINED... d c 0 d XPATH_NODESET c 1 d XPATH_BOOLEAN c 2 d XPATH_NUMBER c 3 d XPATH_STRING c 4 d XPATH_POINT c 5 d XPATH_RANGE c 6 d XPATH_LOCATIONSET... d c 7 d XPATH_USERS c 8 d XPATH_XSLT_TREE... R/O XSLT value tree d c 9 d xmlXPathObjectPtr... d s * based(######typedef######) d xmlXPathObject ds based(xmlXPathObjectPtr) d align qualified d type like(xmlXPathObjectType) d nodesetval like(xmlNodeSetPtr) d boolval 10i 0 d floatval 8f d stringval * xmlChar * d user * void * d index 10i 0 d user2 * void * d index2 10i 0 * xmlXPathConvertFunc: * @obj: an XPath object * @type: the number of the target type * * A conversion function is associated to a type and used to cast * the new type to primitive values. * * Returns -1 in case of error, 0 otherwise d xmlXPathConvertFunc... d s * based(######typedef######) d procptr * Extra type: a name and a conversion function. d xmlXPathTypePtr... d s * based(######typedef######) d xmlXPathType ds based(xmlXPathTypePtr) d align qualified d name * The type name d func like(xmlXPathConvertFunc) Conversion function * Extra variable: a name and a value. d xmlXPathVariablePtr... d s * based(######typedef######) d xmlXPathVariable... d ds based(xmlXPathVariablePtr) d align qualified d name * The variable name d value like(xmlXPathObjectPtr) The value * xmlXPathEvalFunc: * @ctxt: an XPath parser context * @nargs: the number of arguments passed to the function * * An XPath evaluation function, the parameters are on the XPath * context stack. d xmlXPathEvalFunc... d s * based(######typedef######) d procptr * Extra function: a name and an evaluation function. d xmlXPathFuncPtr... d s * based(######typedef######) d xmlXPathFunct ds based(xmlXPathFuncPtr) d align qualified d name * The function name d func like(xmlXPathEvalFunc) Evaluation function * xmlXPathAxisFunc: * @ctxt: the XPath interpreter context * @cur: the previous node being explored on that axis * * An axis traversal function. To traverse an axis, the engine calls * the first time with cur == NULL and repeat until the function returns * NULL indicating the end of the axis traversal. * * Returns the next node in that axis or NULL if at the end of the axis. d xmlXPathAxisFunc... d s * based(######typedef######) d procptr * Extra axis: a name and an axis function. d xmlXPathAxisPtr... d s * based(######typedef######) d xmlXPathAxis ds based(xmlXPathAxisPtr) d align qualified d name * The axis name d func like(xmlXPathAxisFunc) The search function * xmlXPathFunction: * @ctxt: the XPath interprestation context * @nargs: the number of arguments * * An XPath function. * The arguments (if any) are popped out from the context stack * and the result is pushed on the stack. d xmlXPathFunction... d s * based(######typedef######) d procptr * Function and Variable Lookup. * xmlXPathVariableLookupFunc: * @ctxt: an XPath context * @name: name of the variable * @ns_uri: the namespace name hosting this variable * * Prototype for callbacks used to plug variable lookup in the XPath * engine. * * Returns the XPath object value or NULL if not found. d xmlXPathVariableLookupFunc... d s * based(######typedef######) d procptr * xmlXPathFuncLookupFunc: * @ctxt: an XPath context * @name: name of the function * @ns_uri: the namespace name hosting this function * * Prototype for callbacks used to plug function lookup in the XPath * engine. * * Returns the XPath function or NULL if not found. d xmlXPathFuncLookupFunc... d s * based(######typedef######) d procptr * xmlXPathFlags: * Flags for XPath engine compilation and runtime * XML_XPATH_CHECKNS: * * check namespaces at compilation d XML_XPATH_CHECKNS... d c X'0001' * XML_XPATH_NOVAR: * * forbid variables in expression d XML_XPATH_NOVAR... d c X'0002' * xmlXPathContext: * * Expression evaluation occurs with respect to a context. * he context consists of: * - a node (the context node) * - a node list (the context node list) * - a set of variable bindings * - a function library * - the set of namespace declarations in scope for the expression * Following the switch to hash tables, this need to be trimmed up at * the next binary incompatible release. * The node may be modified when the context is passed to libxml2 * for an XPath evaluation so you may need to initialize it again * before the next call. d xmlXPathContext... d ds based(xmlXPathContextPtr) d align qualified d doc like(xmlDocPtr) Current document d node like(xmlNodePtr) Current node * d nb_variables_unused... Unused (hash table) d 10i 0 d max_variables_unused... Unused (hash table) d 10i 0 d varHash like(xmlHashTablePtr) Defined variables * d nb_types 10i 0 # of defined types d max_types 10i 0 Max number of types d types like(xmlXPathTypePtr) Defined types array * d nb_funcs_unused... Unused (hash table) d 10i 0 d max_funcs_unused... Unused (hash table) d 10i 0 d funcHash like(xmlHashTablePtr) Defined functions * d nb_axis 10i 0 # of defined axis d max_axis 10i 0 Max number of axis d axis like(xmlXPathAxisPtr) Defined axis array * * the namespace nodes of the context node * d namespaces * xmlNsPtr * d nsNr 10i 0 # scope namespaces d user * procptr Function to free * * extra variables * d contextSize 10i 0 The context size d proximityPosition... d 10i 0 * * extra stuff for XPointer * d xptr 10i 0 XPointer context ? d here like(xmlNodePtr) For here() d origin like(xmlNodePtr) For origin() * * the set of namespace declarations in scope for the expression * d nsHash like(xmlHashTablePtr) Namespace hashtable d varLookupFunc like(xmlXPathVariableLookupFunc) Var lookup function d varLookupData * void * * * Possibility to link in an extra item * d extra * void * * * The function name and URI when calling a function * d function * const xmlChar * d functionURI * const xmlChar * * * function lookup function and data * d funcLookupFunc... Func lookup func d like(xmlXPathVariableLookupFunc) d funcLookupData... void * d * * * temporary namespace lists kept for walking the namespace axis * d tmpNsList * xmlNsPtr * d tmpNsNr 10i 0 # scope namespaces * * error reporting mechanism * d userData * void * d error like(xmlStructuredErrorFunc) Error callback d lastError like(xmlError) The last error d debugNode like(xmlNodePtr) XSLT source node * * dictionary * d dict like(xmlDictPtr) Dictionary if any * d flags 10i 0 Compilation control * * Cache for reusal of XPath objects * d cache * void * * The structure of a compiled expression form is not public. d xmlXPathCompExprPtr... d s * based(######typedef######) * xmlXPathParserContext: * * An XPath parser context. It contains pure parsing informations, * an xmlXPathContext, and the stack of objects. d xmlXPathParserContext... d ds based(xmlXPathParserContextPtr) d align qualified d cur * const xmlChar * d base * const xmlChar * * d error 10i 0 Error code * d context like(xmlXPathContextPtr) Evaluation context d value like(xmlXPathObjectPtr) The current value d valueNr 10i 0 Value stack depth d valueMax 10i 0 Max stack depth d valueTab * xmlXPathObjectPtr * * d comp like(xmlXPathCompExprPtr) Precompiled expr. d xptr 10i 0 XPointer expression? d ancestor like(xmlNodePtr) To walk prec. axis * d valueFrame 10i 0 Limit stack pop ************************************************************************** * * * Public API * * * ************************************************************************** * Objects and Nodesets handling d xmlXPathNAN s 8f import('xmlXPathNAN') d xmlXPathPINF s 8f import('xmlXPathPINF') d xmlXPathNINF s 8f import('xmlXPathNINF') d xmlXPathFreeObject... d pr extproc('xmlXPathFreeObject') d obj value like(xmlXPathObjectPtr) d xmlXPathNodeSetCreate... d pr extproc('xmlXPathNodeSetCreate') d like(xmlNodeSetPtr) d val value like(xmlNodePtr) d xmlXPathFreeNodeSetList... d pr extproc('xmlXPathFreeNodeSetList') d obj value like(xmlXPathObjectPtr) d xmlXPathFreeNodeSet... d pr extproc('xmlXPathFreeNodeSet') d obj value like(xmlNodeSetPtr) d xmlXPathObjectCopy... d pr extproc('xmlXPathObjectCopy') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr) d xmlXPathCmpNodes... d pr 10i 0 extproc('xmlXPathCmpNodes') d node1 value like(xmlNodePtr) d node2 value like(xmlNodePtr) * Conversion functions to basic types. d xmlXPathCastNumberToBoolean... d pr 10i 0 extproc( d 'xmlXPathCastNumberToBoolean') d val 8f value d xmlXPathCastStringToBoolean... d pr 10i 0 extproc( d 'xmlXPathCastStringToBoolean') d val * value options(*string) const xmlChar * d xmlXPathCastNodeSetToBoolean... d pr 10i 0 extproc( d 'xmlXPathCastNodeSetToBoolean') d ns value like(xmlNodeSetPtr) d xmlXPathCastToBoolean... d pr 10i 0 extproc('xmlXPathCastToBoolean') d val value like(xmlXPathObjectPtr) d xmlXPathCastBooleanToNumber... d pr extproc( d 'xmlXPathCastBooleanToNumber') d 8f d val 10i 0 value d xmlXPathCastStringToNumber... d pr 8f extproc('xmlXPathCastStringToNumber') d val * value options(*string) const xmlChar * d xmlXPathCastNodeToNumber... d pr 8f extproc('xmlXPathCastNodeToNumber') d node value like(xmlNodePtr) d xmlXPathCastNodeSetToNumber... d pr 8f extproc( d 'xmlXPathCastNodeSetToNumber') d ns value like(xmlNodeSetPtr) d xmlXPathCastToNumber... d pr 8f extproc('xmlXPathCastToNumber') d val value like(xmlXPathObjectPtr) d xmlXPathCastBooleanToString... d pr * extproc( xmlChar * d 'xmlXPathCastBooleanToString') d val 10i 0 value d xmlXPathCastNumberToString... d pr * extproc('xmlXPathCastNumberToString')xmlChar * d val 8f value d xmlXPathCastNodeToString... d pr * extproc('xmlXPathCastNodeToString') xmlChar * d node value like(xmlNodePtr) d xmlXPathCastNodeSetToString... d pr * extproc('xmlXPathCastNodeSetToString'xmlChar * d ) d ns value like(xmlNodeSetPtr) d xmlXPathCastToString... d pr * extproc('xmlXPathCastToString') xmlChar * d val value like(xmlXPathObjectPtr) d xmlXPathConvertBoolean... d pr extproc('xmlXPathConvertBoolean') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr) d xmlXPathConvertNumber... d pr extproc('xmlXPathConvertNumber') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr) d xmlXPathConvertString... d pr extproc('xmlXPathConvertString') d like(xmlXPathObjectPtr) d val value like(xmlXPathObjectPtr) * Context handling. d xmlXPathNewContext... d pr extproc('xmlXPathNewContext') d like(xmlXPathContextPtr) d doc value like(xmlDocPtr) d xmlXPathFreeContext... d pr extproc('xmlXPathFreeContext') d ctxt value like(xmlXPathContextPtr) d xmlXPathContextSetCache... d pr 10i 0 extproc('xmlXPathContextSetCache') d ctxt value like(xmlXPathContextPtr) d active 10i 0 value d value 10i 0 value d options 10i 0 value * Evaluation functions. d xmlXPathOrderDocElems... d pr 20i 0 extproc('xmlXPathOrderDocElems') d doc value like(xmlDocPtr) d xmlXPathSetContextNode... d pr 10i 0 extproc('xmlXPathSetContextNode') d node value like(xmlNodePtr) d ctx value like(xmlXPathContextPtr) d xmlXPathNodeEval... d pr extproc('xmlXPathNodeEval') d like(xmlXPathObjectPtr) d node value like(xmlNodePtr) d str * value options(*string) const xmlChar * d ctx value like(xmlXPathContextPtr) d xmlXPathEval pr extproc('xmlXPathEval') d like(xmlXPathObjectPtr) d str * value options(*string) const xmlChar * d ctx value like(xmlXPathContextPtr) d xmlXPathEvalExpression... d pr extproc('xmlXPathEvalExpression') d like(xmlXPathObjectPtr) d str * value options(*string) const xmlChar * d ctxt value like(xmlXPathContextPtr) d xmlXPathEvalPredicate... d pr 10i 0 extproc('xmlXPathEvalPredicate') d ctxt value like(xmlXPathContextPtr) d res value like(xmlXPathObjectPtr) * Separate compilation/evaluation entry points. d xmlXPathCompile... d pr extproc('xmlXPathCompile') d like(xmlXPathCompExprPtr) d str * value options(*string) const xmlChar * d xmlXPathCtxtCompile... d pr extproc('xmlXPathCtxtCompile') d like(xmlXPathCompExprPtr) d ctxt value like(xmlXPathContextPtr) d str * value options(*string) const xmlChar * d xmlXPathCompiledEval... d pr extproc('xmlXPathCompiledEval') d like(xmlXPathObjectPtr) d comp value like(xmlXPathCompExprPtr) d ctx value like(xmlXPathContextPtr) d xmlXPathCompiledEvalToBoolean... d pr 10i 0 extproc( d 'xmlXPathCompiledEvalToBoolean') d comp value like(xmlXPathCompExprPtr) d ctxt value like(xmlXPathContextPtr) d xmlXPathFreeCompExpr... d pr extproc('xmlXPathFreeCompExpr') d comp value like(xmlXPathCompExprPtr) /endif LIBXML_XPATH_ENABLED /undefine XML_TESTVAL /if defined(LIBXML_XPATH_ENABLED) /define XML_TESTVAL /elseif defined(LIBXML_SCHEMAS_ENABLED) /define XML_TESTVAL /endif /if defined(XML_TESTVAL) d xmlXPathInit pr extproc('xmlXPathInit') d xmlXPathIsNaN pr 10i 0 extproc('xmlXPathIsNaN') d val 8f value d xmlXPathIsInf pr 10i 0 extproc('xmlXPathIsInf') d val 8f value /undefine XML_TESTVAL /endif * C macros implemented as procedures for ILE/RPG support. /if defined(LIBXML_XPATH_ENABLED) d xmlXPathNodeSetGetLength... d pr 10i 0 extproc('__xmlXPathNodeSetGetLength') d ns value like(xmlNodeSetPtr) d xmlXPathNodeSetItem... d pr extproc('__xmlXPathNodeSetItem') d like(xmlNodePtr) d ns value like(xmlNodeSetPtr) d index 10i 0 value d xmlXPathNodeSetIsEmpty... d pr 10i 0 extproc('__xmlXPathNodeSetIsEmpty') d ns value like(xmlNodeSetPtr) /endif LIBXML_XPATH_ENABLED /endif XML_XPATH_H__