All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.saxon.expr.StaticProperty Maven / Gradle / Ivy

There is a newer version: 10.5
Show newest version
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2013 Saxonica Limited.
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package net.sf.saxon.expr;

/**
* This class contains constants identifying dependencies that an XPath expression
* might have on its context.
*/

public abstract class StaticProperty {

    /**
    * Bit setting: Expression depends on current() item
    */

    public static final int DEPENDS_ON_CURRENT_ITEM = 1;

    /**
    * Bit setting: Expression depends on context item
    */

    public static final int DEPENDS_ON_CONTEXT_ITEM = 1<<1;

    /**
    * Bit setting: Expression depends on position()
    */

    public static final int DEPENDS_ON_POSITION = 1<<2;

    /**
    * Bit setting: Expression depends on last()
    */

    public static final int DEPENDS_ON_LAST = 1<<3;

    /**
    * Bit setting: Expression depends on the document containing the context node
    */

    public static final int DEPENDS_ON_CONTEXT_DOCUMENT = 1<<4;

    /**
    * Bit setting: Expression depends on current-group() and/or current-grouping-key()
    */

    public static final int DEPENDS_ON_CURRENT_GROUP = 1<<5;

    /**
    * Bit setting: Expression depends on regex-group()
    */

    public static final int DEPENDS_ON_REGEX_GROUP = 1<<6;


    /**
     * Bit setting: Expression depends on local variables
     */

    public static final int DEPENDS_ON_LOCAL_VARIABLES = 1<<7;

    /**
     * Bit setting: Expression depends on user-defined functions
     */

    public static final int DEPENDS_ON_USER_FUNCTIONS = 1<<8;

    /**
     * Bit setting: Expression depends on assignable global variables
     */

    public static final int DEPENDS_ON_ASSIGNABLE_GLOBALS = 1<<9;

    /**
     * Bit setting: Expression can't be evaluated at compile time for reasons other than the above
     */

    public static final int DEPENDS_ON_RUNTIME_ENVIRONMENT = 1<<10;

    /**
    * Combination of bits representing dependencies on the XSLT context
    */

    public static final int DEPENDS_ON_XSLT_CONTEXT =
            DEPENDS_ON_CURRENT_ITEM |
            DEPENDS_ON_CURRENT_GROUP |
            DEPENDS_ON_REGEX_GROUP |
            DEPENDS_ON_ASSIGNABLE_GLOBALS;

    /**
    * Combination of bits representing dependencies on the focus
    */

    public static final int DEPENDS_ON_FOCUS =
            DEPENDS_ON_CONTEXT_ITEM |
            DEPENDS_ON_POSITION |
            DEPENDS_ON_LAST |
            DEPENDS_ON_CONTEXT_DOCUMENT;

    /**
    * Combination of bits representing dependencies on the focus, but excluding dependencies
    * on the current document
    */

    public static final int DEPENDS_ON_NON_DOCUMENT_FOCUS =
            DEPENDS_ON_CONTEXT_ITEM |
            DEPENDS_ON_POSITION |
            DEPENDS_ON_LAST;

    /*
    * Bit set if an empty sequence is allowed
    */

    public static final int ALLOWS_ZERO = 1<<13;

    /**
    * Bit set if a single value is allowed
    */

    public static final int ALLOWS_ONE = 1<<14;

    /**
    * Bit set if multiple values are allowed
    */

    public static final int ALLOWS_MANY = 1<<15;

    /**
     * Mask for all cardinality bits
     */

    public static final int CARDINALITY_MASK =
            ALLOWS_ZERO | ALLOWS_ONE | ALLOWS_MANY;

    /**
    * Occurence indicator for "one or more" (+)
    */

    public static final int ALLOWS_ONE_OR_MORE =
            ALLOWS_ONE | ALLOWS_MANY;

    /**
    * Occurence indicator for "zero or more" (*)
    */

    public static final int ALLOWS_ZERO_OR_MORE =
            ALLOWS_ZERO | ALLOWS_ONE | ALLOWS_MANY;

    /**
    * Occurence indicator for "zero or one" (?)
    */

    public static final int ALLOWS_ZERO_OR_ONE =
            ALLOWS_ZERO | ALLOWS_ONE;

    /**
    * Occurence indicator for "exactly one" (default occurrence indicator)
    */

    public static final int EXACTLY_ONE = ALLOWS_ONE;

    /**
    * Occurence indicator when an empty sequence is required
    */

    public static final int EMPTY = ALLOWS_ZERO;

    /**
     * Reduce the cardinality value to an integer in the range 0-7
     * @param cardinality the result of calling getCardinality() on an expression
     * @return the cardinality code
     */

    public static int getCardinalityCode(int cardinality) {
        return (cardinality & CARDINALITY_MASK) >> 13;
    }

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression whose item type is node, when the nodes in the result are
     * guaranteed all to be in the same document as the context node. For
     * expressions that return values other than nodes, the setting is undefined.
     */

    public static final int CONTEXT_DOCUMENT_NODESET = 1<<16;

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression whose item type is node, when the nodes in the result are
     * in document order.
     */

    public static final int ORDERED_NODESET = 1<<17;

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression that delivers items in the reverse of the correct order, when unordered
     * retrieval is requested.
     */

    public static final int REVERSE_DOCUMENT_ORDER = 1<<18;

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression that delivers a set of nodes with the guarantee that no node in the
     * set will be an ancestor of any other. This property is useful in deciding whether the
     * results of a path expression are pre-sorted. The property is only used in the case where
     * the ORDERED_NODESET property is true, so there is no point in setting it in other cases.
     */

    public static final int PEER_NODESET = 1<<19;

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression that delivers a set of nodes with the guarantee that every node in the
     * result will be a descendant or self, or attribute or namespace, of the context node
     */

    public static final int SUBTREE_NODESET = 1<<20;

    /**
     * Expression property: this bit is set by getProperties() in the case of
     * an expression that delivers a set of nodes with the guarantee that every node in the
     * result will be an attribute or namespace of the context node
     */

    public static final int ATTRIBUTE_NS_NODESET = 1<<21;

    /**
     * Expression property: this bit is set in the case of an expression that will
     * never return newly created nodes, nor a value that depends on the identity
     * of newly created nodes (for example generate-id(new-node())). Expressions
     * that do create new nodes cannot be moved out of loops as this could cause
     * too few nodes to be created: for example if f() creates a new node, then
     * count(for $i in 1 to 5 return f()) must be 5.
     */

    public static final int NON_CREATIVE = 1<<22;

    /**
     * Expression property: this bit is set in the case of an expression that delivers
     * a set of nodes that are all in the same document (not necessarily the same
     * document as the context node).
     */

    public static final int SINGLE_DOCUMENT_NODESET = 1<<23;

    /**
     * Expression property: this bit indicates that an expression has (or might have)
     * side-effects. This property is applied to calls on extension functions and to
     * certain instructions such as xsl:result-document and xsl:message.
     */

    public static final int HAS_SIDE_EFFECTS = 1<<24;

    /**
     * Expression property: this bit indicates that although the static type of the expression
     * permits untyped atomic values, it is known that the value will not be untyped atomic.
     */

    public static final int NOT_UNTYPED_ATOMIC = 1<<25;

    /**
     * Expression property: this bit indicates that in the result of an expression,
     * any element and attribute nodes that are present will have type annotation xs:untyped or
     * xs:untypedAtomic respectively, and that any document nodes that are present will have
     * no element children whose type annotation is anything other than xs:untyped
     */

    public static final int ALL_NODES_UNTYPED = 1<<26;

    /**
     * Expression property: this bit indicates that the expression is required during evaluation to maintain
     * the values of position() and last() because they might be required.
     */

    public static final int MUST_MAINTAIN_POSITION = 1<<27;

    /**
     * Mask to select all the dependency bits
     */

    public static final int DEPENDENCY_MASK =
            DEPENDS_ON_CONTEXT_DOCUMENT |
            DEPENDS_ON_CONTEXT_ITEM |
            DEPENDS_ON_CURRENT_GROUP |
            DEPENDS_ON_REGEX_GROUP |
            DEPENDS_ON_CURRENT_ITEM |
            DEPENDS_ON_FOCUS |
            DEPENDS_ON_LOCAL_VARIABLES |
            DEPENDS_ON_USER_FUNCTIONS |
            DEPENDS_ON_ASSIGNABLE_GLOBALS |
            DEPENDS_ON_RUNTIME_ENVIRONMENT |
            HAS_SIDE_EFFECTS;

    /**
     * Mask for "special properties": that is, all properties other than cardinality
     * and dependencies
     */

    public static final int SPECIAL_PROPERTY_MASK =
            CONTEXT_DOCUMENT_NODESET |
            ORDERED_NODESET |
            REVERSE_DOCUMENT_ORDER |
            PEER_NODESET |
            SUBTREE_NODESET |
            ATTRIBUTE_NS_NODESET |
            SINGLE_DOCUMENT_NODESET |
            NON_CREATIVE |
            HAS_SIDE_EFFECTS |
            NOT_UNTYPED_ATOMIC |
            ALL_NODES_UNTYPED |
            MUST_MAINTAIN_POSITION;

    /**
     * Mask for nodeset-related properties
     */

    public static final int NODESET_PROPERTIES =
            CONTEXT_DOCUMENT_NODESET |
            ORDERED_NODESET |
            REVERSE_DOCUMENT_ORDER |
            PEER_NODESET |
            SUBTREE_NODESET |
            ATTRIBUTE_NS_NODESET |
            SINGLE_DOCUMENT_NODESET |
            ALL_NODES_UNTYPED;

    // This class is not instantiated
    private StaticProperty() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy