Class ComputedAttribute
java.lang.Object
net.sf.saxon.expr.Expression
net.sf.saxon.expr.instruct.Instruction
net.sf.saxon.expr.instruct.SimpleNodeConstructor
net.sf.saxon.expr.instruct.AttributeCreator
net.sf.saxon.expr.instruct.ComputedAttribute
- All Implemented Interfaces:
Serializable, SourceLocator, LocationProvider, SaxonLocator, TailCallReturner, ValidatingInstruction, InstructionInfo, Locator
An instruction derived from an xsl:attribute element in stylesheet, or from
an attribute constructor in XQuery, in cases where the attribute name is not known
statically
- See Also:
-
Field Summary
Fields inherited from class AttributeCreator
schemaTypeFields inherited from class SimpleNodeConstructor
select -
Constructor Summary
ConstructorsConstructorDescriptionComputedAttribute(Expression attributeName, Expression namespace, NamespaceResolver nsContext, int validationAction, SimpleType schemaType, boolean allowNameAsQName) Construct an Attribute instruction -
Method Summary
Modifier and TypeMethodDescriptionvoidcheckPermittedContents(SchemaType parentType, StaticContext env, boolean whole) Check that any elements and attributes constructed or returned by this expression are acceptable in the content model of a given complex type.intGet the static properties of this expression (other than its type).copy()Copy an expression.evaluateItem(XPathContext context) Evaluate as an expression.evaluateNodeName(XPathContext context) Determine the name to be used for the attribute, as an integer name codevoidDiagnostic print of expression structure.intGet the static cardinality of this expressionintGet the name of this instructionGet the static type of this expressionGet the expression used to compute the name of the attributeGet the expression used to compute the namespace part of the name of the attributeGet the namespace resolver used to resolve any prefix in the name of the attributebooleanAllowsGet the subexpressions of this expressionvoidlocalTypeCheck(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) Method to perform type-checking specific to the kind of instructionoptimize(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) Perform optimisation of an expression and its subexpressions.protected voidpromoteInst(PromotionOffer offer) Offer promotion for subexpressions.booleanreplaceSubExpression(Expression original, Expression replacement) Replace one subexpression by a replacement subexpressionvoidIndicate that two attributes with the same name are not acceptable.simplify(ExpressionVisitor visitor) Simplify an expression.Methods inherited from class AttributeCreator
getOptions, getSchemaType, getValidationAction, processValue, setNoSpecialChars, setOptions, setSchemaType, setValidationAction, validateOrphanAttributeMethods inherited from class SimpleNodeConstructor
checkContent, computeCardinality, createsNewNodes, getContentExpression, iterate, processLeavingTail, setSelect, typeCheckMethods inherited from class Instruction
assembleParams, assembleTunnelParams, dynamicError, evaluateAsString, getConstructType, getExpressionName, getImplementationMethod, getInstructionName, getIteratorFromProcessMethod, getSourceLocator, isXSLT, process, promoteMethods inherited from class Expression
addToPathMap, adoptChildExpression, checkForUpdatingSubexpressions, computeDependencies, computeStaticProperties, doPromotion, dynamicError, effectiveBooleanValue, evaluatePendingUpdates, explain, getColumnNumber, getColumnNumber, getContainer, getDependencies, getEvaluationMethod, getExecutable, getHostLanguage, getIntegerBounds, getIntrinsicDependencies, getLineNumber, getLineNumber, getLocationId, getLocationProvider, getObjectName, getProperties, getProperty, getPublicId, getSlotsUsed, getSpecialProperties, getSystemId, getSystemId, hasLoopingSubexpression, hasVariableBinding, implementsStaticTypeCheck, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterateEvents, iterateSameFocusSubExpressions, markTailFunctionCalls, resetLocalStaticProperties, setContainer, setEvaluationMethod, setFiltered, setFlattened, setLocationId, staticTypeCheck, suppressValidation, toString, typeErrorMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface SourceLocator
getColumnNumber, getLineNumber, getPublicId, getSystemId
-
Constructor Details
-
ComputedAttribute
public ComputedAttribute(Expression attributeName, Expression namespace, NamespaceResolver nsContext, int validationAction, SimpleType schemaType, boolean allowNameAsQName) Construct an Attribute instruction- Parameters:
attributeName- An expression to calculate the attribute namenamespace- An expression to calculate the attribute namespacensContext- a NamespaceContext object containing the static namespace context of the stylesheet instructionvalidationAction- e.g. validation=strict, lax, strip, preserveschemaType- Type against which the attribute must be validated. This must not be a namespace-sensitive type; it is the caller's responsibility to check this.allowNameAsQName- true if the attributeName expression is allowed to evaluate to a value of type xs:QName (true in XQuery, false in XSLT)
-
-
Method Details
-
setRejectDuplicates
public void setRejectDuplicates()Indicate that two attributes with the same name are not acceptable. (This option is set in XQuery, but not in XSLT)- Overrides:
setRejectDuplicatesin classAttributeCreator
-
getInstructionNameCode
public int getInstructionNameCode()Get the name of this instruction- Overrides:
getInstructionNameCodein classInstruction- Returns:
- a code identifying the instruction: typically but not always the fingerprint of a name in the XSLT namespace
-
getNameExpression
Get the expression used to compute the name of the attribute- Returns:
- the expression used to compute the name of the attribute
-
getNamespaceExpression
Get the expression used to compute the namespace part of the name of the attribute- Returns:
- the expression used to compute the namespace part of the name of the attribute
-
getNamespaceResolver
Get the namespace resolver used to resolve any prefix in the name of the attribute- Returns:
- the namespace resolver if one has been saved; or null otherwise
-
getItemType
Get the static type of this expression- Overrides:
getItemTypein classInstruction- Parameters:
th- the type hierarchy cache- Returns:
- the static type of the item returned by this expression
-
getCardinality
public int getCardinality()Get the static cardinality of this expression- Overrides:
getCardinalityin classExpression- Returns:
- the static cardinality (exactly one)
-
isAllowNameAsQName
public boolean isAllowNameAsQName()Allows- Returns:
- the boolean if name is allowed as a QName
-
computeSpecialProperties
public int computeSpecialProperties()Get the static properties of this expression (other than its type). The result is bit-signficant. These properties are used for optimizations. In general, if property bit is set, it is true, but if it is unset, the value is unknown.- Overrides:
computeSpecialPropertiesin classAttributeCreator- Returns:
- a set of flags indicating static properties of this expression
-
simplify
Description copied from class:InstructionSimplify an expression. This performs any static optimization (by rewriting the expression as a different expression). The default implementation does nothing.- Overrides:
simplifyin classSimpleNodeConstructor- Parameters:
visitor- an expression visitor- Returns:
- the simplified expression
- Throws:
XPathException- if an error is discovered during expression rewriting
-
localTypeCheck
public void localTypeCheck(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) throws XPathException Description copied from class:SimpleNodeConstructorMethod to perform type-checking specific to the kind of instruction- Specified by:
localTypeCheckin classSimpleNodeConstructor- Parameters:
visitor- an expression visitorcontextItemType- the static type of the context item- Throws:
XPathException- if a type error is detected
-
optimize
public Expression optimize(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) throws XPathException Description copied from class:ExpressionPerform optimisation of an expression and its subexpressions. This is the third and final phase of static optimization.This method is called after all references to functions and variables have been resolved to the declaration of the function or variable, and after all type checking has been done.
- Overrides:
optimizein classSimpleNodeConstructor- Parameters:
visitor- an expression visitorcontextItemType- the static type of "." at the point where this expression is invoked. The parameter is set to null if it is known statically that the context item will be undefined. If the type of the context item is not known statically, the argument is set toType.ITEM_TYPE- Returns:
- the original expression, rewritten if appropriate to optimize execution
- Throws:
XPathException- if an error is discovered during this phase (typically a type error)
-
copy
Copy an expression. This makes a deep copy.- Specified by:
copyin classExpression- Returns:
- the copy of the original expression
-
iterateSubExpressions
Get the subexpressions of this expression- Overrides:
iterateSubExpressionsin classSimpleNodeConstructor- Returns:
- an iterator over the subexpressions
-
replaceSubExpression
Replace one subexpression by a replacement subexpression- Overrides:
replaceSubExpressionin classSimpleNodeConstructor- Parameters:
original- the original subexpressionreplacement- the replacement subexpression- Returns:
- true if the original subexpression is found
-
promoteInst
Offer promotion for subexpressions. The offer will be accepted if the subexpression is not dependent on the factors (e.g. the context item) identified in the PromotionOffer. By default the offer is not accepted - this is appropriate in the case of simple expressions such as constant values and variable references where promotion would give no performance advantage. This method is always called at compile time.- Overrides:
promoteInstin classSimpleNodeConstructor- Parameters:
offer- details of the offer, for example the offer to move expressions that don't depend on the context to an outer level in the containing expression- Throws:
XPathException- if any error is detected
-
checkPermittedContents
public void checkPermittedContents(SchemaType parentType, StaticContext env, boolean whole) throws XPathException Check that any elements and attributes constructed or returned by this expression are acceptable in the content model of a given complex type. It's always OK to say yes, since the check will be repeated at run-time. The process of checking element and attribute constructors against the content model of a complex type also registers the type of content expected of those constructors, so the static validation can continue recursively.- Overrides:
checkPermittedContentsin classExpression- Parameters:
parentType- the "given complex type": the method is checking that the nodes returned by this expression are acceptable members of the content model of this typeenv- the static contextwhole- if true, we want to check that the value of this expression satisfies the content model as a whole; if false we want to check that the value of the expression is acceptable as one part of the content- Throws:
XPathException- if the value delivered by this expression cannot be part of the content model of the given type
-
evaluateItem
Description copied from class:SimpleNodeConstructorEvaluate as an expression.- Overrides:
evaluateItemin classSimpleNodeConstructor- Parameters:
context- The context in which the expression is to be evaluated- Returns:
- the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
- Throws:
XPathException- if any dynamic error occurs evaluating the expression
-
evaluateNodeName
Determine the name to be used for the attribute, as an integer name code- Overrides:
evaluateNodeNamein classSimpleNodeConstructor- Parameters:
context- Dynamic evaluation context- Returns:
- the integer name code for the attribute name
- Throws:
XPathException
-
explain
Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.- Specified by:
explainin classExpression- Parameters:
out- the expression presenter used to display the structure
-