blob: 6e591ee405cb6fc917eeba3df7fb99f49cc27c2d [file] [log] [blame]
* 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/xmlTypesC"
/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 based(######typedef######)
d like(xmlCenum)
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 like(xmlCint) Set node count
d nodeMax like(xmlCint) 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 based(######typedef######)
d like(xmlCenum)
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 like(xmlCint)
d floatval like(xmlCdouble)
d stringval * xmlChar *
d user * void *
d index like(xmlCint)
d user2 * void *
d index2 like(xmlCint)
* 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 like(xmlCint)
d max_variables_unused... Unused (hash table)
d like(xmlCint)
d varHash like(xmlHashTablePtr) Defined variables
*
d nb_types like(xmlCint) # of defined types
d max_types like(xmlCint) Max number of types
d types like(xmlXPathTypePtr) Defined types array
*
d nb_funcs_unused... Unused (hash table)
d like(xmlCint)
d max_funcs_unused... Unused (hash table)
d like(xmlCint)
d funcHash like(xmlHashTablePtr) Defined functions
*
d nb_axis like(xmlCint) # of defined axis
d max_axis like(xmlCint) Max number of axis
d axis like(xmlXPathAxisPtr) Defined axis array
*
* the namespace nodes of the context node
*
d namespaces * xmlNsPtr *
d nsNr like(xmlCint) # scope namespaces
d user * procptr Function to free
*
* extra variables
*
d contextSize like(xmlCint) The context size
d proximityPosition...
d like(xmlCint)
*
* extra stuff for XPointer
*
d xptr like(xmlCint) 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 like(xmlCint) # scope namespaces
*
* error reporting mechanism
*
d userData * void *
d error like(xmlStructuredErrorFunc) Error callback
d lastError likeds(xmlError) The last error
d debugNode like(xmlNodePtr) XSLT source node
*
* dictionary
*
d dict like(xmlDictPtr) Dictionary if any
*
d flags like(xmlCint) 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 like(xmlCint) Error code
*
d context like(xmlXPathContextPtr) Evaluation context
d value like(xmlXPathObjectPtr) The current value
d valueNr like(xmlCint) Value stack depth
d valueMax like(xmlCint) Max stack depth
d valueTab * xmlXPathObjectPtr *
*
d comp like(xmlXPathCompExprPtr) Precompiled expr.
d xptr like(xmlCint) XPointer expression?
d ancestor like(xmlNodePtr) To walk prec. axis
*
d valueFrame like(xmlCint) Limit stack pop
**************************************************************************
* *
* Public API *
* *
**************************************************************************
* Objects and Nodesets handling
d xmlXPathNAN s import('xmlXPathNAN')
d like(xmlCdouble)
d xmlXPathPINF s import('xmlXPathPINF')
d like(xmlCdouble)
d xmlXPathNINF s import('xmlXPathNINF')
d like(xmlCdouble)
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 extproc('xmlXPathCmpNodes')
d like(xmlCint)
d node1 value like(xmlNodePtr)
d node2 value like(xmlNodePtr)
* Conversion functions to basic types.
d xmlXPathCastNumberToBoolean...
d pr extproc(
d 'xmlXPathCastNumberToBoolean')
d like(xmlCint)
d val value like(xmlCdouble)
d xmlXPathCastStringToBoolean...
d pr extproc(
d 'xmlXPathCastStringToBoolean')
d like(xmlCint)
d val * value options(*string) const xmlChar *
d xmlXPathCastNodeSetToBoolean...
d pr extproc(
d 'xmlXPathCastNodeSetToBoolean')
d like(xmlCint)
d ns value like(xmlNodeSetPtr)
d xmlXPathCastToBoolean...
d pr extproc('xmlXPathCastToBoolean')
d like(xmlCint)
d val value like(xmlXPathObjectPtr)
d xmlXPathCastBooleanToNumber...
d pr extproc(
d 'xmlXPathCastBooleanToNumber')
d like(xmlCdouble)
d val value like(xmlCint)
d xmlXPathCastStringToNumber...
d pr extproc('xmlXPathCastStringToNumber')
d like(xmlCdouble)
d val * value options(*string) const xmlChar *
d xmlXPathCastNodeToNumber...
d pr extproc('xmlXPathCastNodeToNumber')
d like(xmlCdouble)
d node value like(xmlNodePtr)
d xmlXPathCastNodeSetToNumber...
d pr extproc(
d 'xmlXPathCastNodeSetToNumber')
d like(xmlCdouble)
d ns value like(xmlNodeSetPtr)
d xmlXPathCastToNumber...
d pr extproc('xmlXPathCastToNumber')
d like(xmlCdouble)
d val value like(xmlXPathObjectPtr)
d xmlXPathCastBooleanToString...
d pr * extproc( xmlChar *
d 'xmlXPathCastBooleanToString')
d val value like(xmlCint)
d xmlXPathCastNumberToString...
d pr * extproc('xmlXPathCastNumberToString')xmlChar *
d val value like(xmlCdouble)
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 extproc('xmlXPathContextSetCache')
d like(xmlCint)
d ctxt value like(xmlXPathContextPtr)
d active value like(xmlCint)
d value value like(xmlCint)
d options value like(xmlCint)
* Evaluation functions.
d xmlXPathOrderDocElems...
d pr extproc('xmlXPathOrderDocElems')
d like(xmlClong)
d doc value like(xmlDocPtr)
d xmlXPathSetContextNode...
d pr extproc('xmlXPathSetContextNode')
d like(xmlCint)
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 extproc('xmlXPathEvalPredicate')
d like(xmlCint)
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 extproc(
d 'xmlXPathCompiledEvalToBoolean')
d like(xmlCint)
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 extproc('xmlXPathIsNaN')
d like(xmlCint)
d val value like(xmlCdouble)
d xmlXPathIsInf pr extproc('xmlXPathIsInf')
d like(xmlCint)
d val value like(xmlCdouble)
/undefine XML_TESTVAL
/endif
* C macros implemented as procedures for ILE/RPG support.
/if defined(LIBXML_XPATH_ENABLED)
d xmlXPathNodeSetGetLength...
d pr extproc('__xmlXPathNodeSetGetLength')
d like(xmlCint)
d ns value like(xmlNodeSetPtr)
d xmlXPathNodeSetItem...
d pr extproc('__xmlXPathNodeSetItem')
d like(xmlNodePtr)
d ns value like(xmlNodeSetPtr)
d index value like(xmlCint)
d xmlXPathNodeSetIsEmpty...
d pr extproc('__xmlXPathNodeSetIsEmpty')
d like(xmlCint)
d ns value like(xmlNodeSetPtr)
/endif LIBXML_XPATH_ENABLED
/endif XML_XPATH_H__