Class TPathCache
The syntax constraints on attribute values are different than in
pure XML: Whenever an embedded xpath expressions is indicated by an escape
character, the further contents must be parsable as such.
So "a{" is a valid value for any CDATA attribute in XML,
but not in xslt result elements.
The involved compiler for AVTs is AttributeValueTemplate.
It always delivers a TPath.Expr;
if there are no opening brackets in the source, this will be one single
constant literal expression.
This value is turned into a an TPathCache.ExprClassified, which contains
the parsed code and analysis results (or "null" in the code field iff
there had been errors.)
Look-up and memorization go in two steps:
(1) first look for verbatim cached source.
(2) Then parse and look up for canonical source text.
If look-up fails, perform analyses and store accordingly.
+ FIXME: List of all variable names collected !?!?
Additionally, the "sensitivity" on the context is calculated:
None -> needs evaluation only once, is constant
Session -> depends only on global variables, needs evaluation
only once per application
Multi -> depends on context (=input focus, local vars), needs always
re-evaluation
FIXME variable access is context depended.
FIXME But if ALL appearing variable NAMES appear only on global level,
this raises sensivity only to "session", not to "multi".
FIXME the "union of relative and absolute" is not yet supported, (????)
code has to be unified with [mt]/tpath/Util.isAbsolute() !!!!
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classHolds the results of parsing and analysis.static classStatistic data on the sub-expressions of the top-level TPath.Union expression.protected classstatic enumThis value is ONLY related to the current-node-(list)-context, not to referred variables nor functions! -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final TPath.Uniontpath "(preceding::node()|nacestor-or-self::node())"static final TPath.Stepstatic final TPath.AxisSpecifierstatic final TPath.AxisSpecifierstatic final TPath.AxisSpecifierstatic final TPath.AxisSpecifierstatic final TPath.AxisSpecifier(package private) static final Map<TPath.Expr, TPath.Expr> protected Map<String, TPathCache.ExprClassified> (package private) TPathCache.PatternPart(package private) boolean(package private) Location<XMLDocumentIdentifier> (package private) MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> (package private) booleanstatic final TPath.Steptpath "precedingSiblings::node()"(package private) final TPathCache.PredicateCheckerstatic final TPath.Step(package private) String(package private) TPathCache.ExprClassifiedstatic final TPath.Nodestatic final TPath.Root -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidMeans to check the function which can appear as first (umod: deepest) expression on a path expression ("id(x)/a/b/")booleancheckPattern(MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> msg_EXT, @Opt Location<XMLDocumentIdentifier> loc, TPathCache.ExprClassified expr, boolean inTemplateOrKeyMatch, String role) Returns whether the ExprClassified is a pattern, and updatesTPathCache.ExprClassified.patternPartsaccordingly.protected voidcheckStep(TPath.Step step, boolean isTop) protected voidcheckTop(TPath.Expr expr) (package private) static TPath.ExprcopyLocation(TPath.Expr newer, TPath.Expr old) (package private) void(package private) static final TPath.ExprAny expression of un-rooted type "a/b/..."
= TPath.Step()->base->Step->base->null
can be interpreted existentially quantified by prepending with
"/descendant-or-self::node()/a/b/.."
= TPath.Step()->base->Step->base-> (descendant-or-self) Root
This is realized by a copy, which is cached and can be used as key for the cached evaluation result.parse(MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> msg_EXT, Location<XMLDocumentIdentifier> loc, NamespaceName attribName, @Opt String data, boolean isTemplate) Parse expression source and store result to caches.protected voidsplitTop(TPath.Expr expr) (package private) static final TPath.SteptopStep(TPath.Step step) (package private) static TPath.ExprwithRoot(TPath.Expr expr, TPath.Expr root) Return a clone which has the given root instead of a base of null; distribute this over a possible top-level "union" operation.
-
Field Details
-
attributeValueTemplates_to_canonical
-
attributeValue_to_canonical
-
canonical_to_parsed
-
tpathParser
-
msg
-
loc
-
inTemplateOrKeyMatch
boolean inTemplateOrKeyMatch -
role
String role -
patternOkay
boolean patternOkay -
toCheck
TPathCache.ExprClassified toCheck -
curPart
TPathCache.PatternPart curPart -
predicateChecker
-
TPATH_NODE
-
TPATH_ROOT
-
AXIS_ANC_OR_SELF
-
AXIS_DESC
-
AXIS_DESC_OR_SELF
-
AXIS_PRECEDING
-
AXIS_PRECEDING_SIBS
-
RELATIVE_TO_PRECEDING
-
ANYWHERE_IN_DOM
-
ALL_LOWERS
tpath "(preceding::node()|nacestor-or-self::node())" -
PRECEDING_SIBS
tpath "precedingSiblings::node()" -
cache_all_quantified
-
-
Constructor Details
-
TPathCache
public TPathCache()
-
-
Method Details
-
parse
@Opt public @Opt TPathCache.ExprClassified parse(MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> msg_EXT, Location<XMLDocumentIdentifier> loc, NamespaceName attribName, @Opt @Opt String data, boolean isTemplate) Parse expression source and store result to caches. Return null in case of parsing errors. Otherwise classify expression for sensitivity. Return cached value, iff it exists. FIXME dann stimmt rel2abs nicht !?!?!? (Error msg must contain an attribute name, since location has only element granularity.) -
error
-
checkStep
-
checkFunction
Means to check the function which can appear as first (umod: deepest) expression on a path expression ("id(x)/a/b/") -
checkTop
-
splitTop
-
checkPattern
public boolean checkPattern(MessageReceiver<SimpleMessage<XMLDocumentIdentifier>> msg_EXT, @Opt @Opt Location<XMLDocumentIdentifier> loc, TPathCache.ExprClassified expr, boolean inTemplateOrKeyMatch, String role) Returns whether the ExprClassified is a pattern, and updatesTPathCache.ExprClassified.patternPartsaccordingly. Generates errors if ExprClassified is not correct as a pattern. -
copyLocation
-
withRoot
Return a clone which has the given root instead of a base of null; distribute this over a possible top-level "union" operation. -
topStep
-
make_all_quantified
Any expression of un-rooted type "a/b/..."
= TPath.Step()->base->Step->base->null
can be interpreted existentially quantified by prepending with
"/descendant-or-self::node()/a/b/.."
= TPath.Step()->base->Step->base-> (descendant-or-self) Root
This is realized by a copy, which is cached and can be used as key for the cached evaluation result.- Parameters:
expr- an un-rooted expression serving as pattern-part, i.e. not a Union.
-