WAS v8.5 > Develop applications > XML applications > Use the XML API to perform operations > Performing basic operationsUse static and dynamic contexts
We can use the two context interfaces the XML API provides—XStaticContext and XDynamicContext.
- Static context
- The static context is used to configure prepare-time characteristics.
Prepare-time refers to the execution of one of the prepare methods on XFactory or the execution of one of the compile methods on XCompilationFactory.
Static context defines items that are needed to prepare executables, items such as the names and types of external variables and functions that will be available at run time as well as compilation modes like backwards compatibility, math mode, and so on. These items do not change across invocations.
- Dynamic context
- The dynamic context is used to configure execution-time characteristics.
Dynamic context defines items that are unique to each invocation of an executable, items such as the values for external variables, external function implementations, and resolvers to external inputs or results. These items might change across invocations.
Prepare-time characteristics are not set directly on the XFactory instance so that it can be thread safe. The same is true for execution-time characteristics; they are kept in a separate object from the XExecutable instance so the executable object itself is thread safe.
The prepare and execute steps themselves are separate because preparation takes time and it would be inefficient to prepare for every execution. Having separate steps allows an expression, query, or stylesheet to be prepared once and the resulting executable object then can be used to process any number of input documents.
- Use the static context, XStaticContext, to configure prepare-time characteristics.
Prepare-time characteristics are built directly into the executable object; therefore, after an executable object has been created with a certain set of characteristics, they are fixed and cannot be changed. If an executable object for the same expression, query, or stylesheet is required that has different characteristics, a new one must be generated.
Examples of methods on XStaticContext used for setting prepare-time characteristics:
- setUseCompiler
- The executable object generated is very different for compiled and interpreted; therefore, this is a prepare-time characteristic.
- declareVariable
- The type of a variable affects how the expression, query, or stylesheet gets compiled and therefore is a prepare-time characteristic.
On the other hand, binding the value of a variable is an execution-time characteristic, and the value can be different for each execution.
- setSourceResolver
- A source resolver registered at prepare time is used to resolve includes and imports.
A source resolver can also be registered at execution time, but it is used for a different purpose.
- Use the dynamic context, XDynamicContext, to configure execution-time characteristics.
Execution-time characteristics can be different on each call to the execute method of an executable object.
Examples of methods on XDynamicContext used for setting execution-time characteristics:
- bind methods
- The bind methods on XDynamicContext interface are used to supply a value for a variable. The value can be different for each execution.
- setSourceResolver
- A source resolver registered at execution time is used to resolve input documents loaded with the XPath fn:doc function or the XSLT fn:document function.
- setXSLTInitialTemplate
- Identify the initial template to invoke for an XSL transformation.
The XPath, XQuery, and XSLT specifications also have the concepts of static and dynamic context. For more information, see the following web pages:
- XPath Static Context
- XPath Dynamic Context
- XQuery Static Context
- XQuery Dynamic Context
- XSLT Static Context
- XSLT Dynamic Context
The XStaticContext and XDynamicContext interfaces merge settings from all three languages (XPath, XQuery, and XSLT). To find out which settings apply to which language refer to the "Performing Basic Operations" article for that language in the related tasks listed below.
Related
Performing basic XPath operations
Performing basic XQuery operations
Performing basic XSLT operations