Search in sources :

Example 61 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class Matching method containedDescendants.

/**
 * Counts the number of descendant nodes in the subtrees of x and y that are also in the matching.
 *
 * @param nodeX first subtree root node
 * @param nodeY second subtree root node
 * @return number of descendant which have been matched
 */
public long containedDescendants(@Nonnegative final long nodeX, @Nonnegative final long nodeY) {
    long retVal = 0;
    mRtxOld.moveTo(nodeX);
    for (final Axis axis = new DescendantAxis(mRtxOld, IncludeSelf.YES); axis.hasNext(); ) {
        axis.next();
        retVal += mIsInSubtree.get(nodeY, partner(mRtxOld.getNodeKey())) ? 1 : 0;
        if (mRtxOld.getKind() == Kind.ELEMENT) {
            for (int i = 0, nspCount = mRtxOld.getNamespaceCount(); i < nspCount; i++) {
                mRtxOld.moveToNamespace(i);
                retVal += mIsInSubtree.get(nodeY, partner(axis.getTrx().getNodeKey())) ? 1 : 0;
                mRtxOld.moveToParent();
            }
            for (int i = 0, attCount = mRtxOld.getAttributeCount(); i < attCount; i++) {
                mRtxOld.moveToAttribute(i);
                retVal += mIsInSubtree.get(nodeY, partner(axis.getTrx().getNodeKey())) ? 1 : 0;
                mRtxOld.moveToParent();
            }
        }
    }
    return retVal;
}
Also used : DescendantAxis(org.sirix.axis.DescendantAxis) Axis(org.sirix.api.Axis) DescendantAxis(org.sirix.axis.DescendantAxis)

Example 62 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class XPathParser method parseForwardStep.

/**
 * Parses the the rule ForwardStep according to the following production rule:
 * <p>
 * [29] ForwardStep ::= (ForwardAxis NodeTest) | AbbrevForwardStep .
 * </p>
 *
 * @throws SirixXPathException
 */
private void parseForwardStep() throws SirixXPathException {
    Axis axis;
    Filter filter;
    if (isForwardAxis()) {
        axis = parseForwardAxis();
        filter = parseNodeTest(axis.getClass() == AttributeAxis.class);
        mPipeBuilder.addStep(axis, filter);
    } else {
        axis = parseAbbrevForwardStep();
        mPipeBuilder.addStep(axis);
    }
}
Also used : ItemFilter(org.sirix.axis.filter.ItemFilter) AttributeFilter(org.sirix.axis.filter.AttributeFilter) NameFilter(org.sirix.axis.filter.NameFilter) TypeFilter(org.sirix.axis.filter.TypeFilter) NestedFilter(org.sirix.axis.filter.NestedFilter) DocumentRootNodeFilter(org.sirix.axis.filter.DocumentRootNodeFilter) CommentFilter(org.sirix.axis.filter.CommentFilter) WildcardFilter(org.sirix.axis.filter.WildcardFilter) PIFilter(org.sirix.axis.filter.PIFilter) SchemaElementFilter(org.sirix.service.xml.xpath.filter.SchemaElementFilter) Filter(org.sirix.api.Filter) SchemaAttributeFilter(org.sirix.service.xml.xpath.filter.SchemaAttributeFilter) TextFilter(org.sirix.axis.filter.TextFilter) ElementFilter(org.sirix.axis.filter.ElementFilter) NodeFilter(org.sirix.axis.filter.NodeFilter) PrecedingAxis(org.sirix.axis.PrecedingAxis) Axis(org.sirix.api.Axis) DocumentNodeAxis(org.sirix.service.xml.xpath.filter.DocumentNodeAxis) FollowingAxis(org.sirix.axis.FollowingAxis) AbstractAxis(org.sirix.axis.AbstractAxis) AncestorAxis(org.sirix.axis.AncestorAxis) ChildAxis(org.sirix.axis.ChildAxis) FollowingSiblingAxis(org.sirix.axis.FollowingSiblingAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SelfAxis(org.sirix.axis.SelfAxis) DescendantAxis(org.sirix.axis.DescendantAxis) ParentAxis(org.sirix.axis.ParentAxis) AttributeAxis(org.sirix.axis.AttributeAxis) PrecedingSiblingAxis(org.sirix.axis.PrecedingSiblingAxis)

Example 63 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class FNBoolean method computeResult.

/**
 * {@inheritDoc}
 */
@Override
protected byte[] computeResult() throws SirixXPathException {
    final Axis axis = getArgs().get(0);
    boolean value = false;
    if (axis.hasNext()) {
        mKey = axis.next();
        final XdmNodeReadTrx rtx = axis.getTrx();
        if (rtx.getNodeKey() >= 0) {
            // first item is a real node
            // ->
            // true
            value = true;
        } else {
            final Type type = Type.getType(rtx.getTypeKey());
            if (type.derivesFrom(Type.BOOLEAN)) {
                value = Boolean.parseBoolean(rtx.getValue());
            // value = TypedValue.parseBoolean(rtx.getRawValue());
            } else if (type.derivesFrom(Type.STRING) || type.derivesFrom(Type.ANY_URI) || type.derivesFrom(Type.UNTYPED_ATOMIC)) {
                // if length = 0 -> false
                value = (rtx.getValue().length() > 0);
            } else if (type.isNumericType()) {
                final double dValue = Double.parseDouble(rtx.getValue());
                value = !(Double.isNaN(dValue) || dValue == 0.0d);
            } else {
                // for all other types throw error FORG0006
                throw EXPathError.FORG0006.getEncapsulatedException();
            }
            // if is not a singleton
            if (axis.hasNext()) {
                throw EXPathError.FORG0006.getEncapsulatedException();
            }
        }
    } else {
        // expression is an empty sequence -> false
        value = false;
    }
    return TypedValue.getBytes(Boolean.toString(value));
}
Also used : Type(org.sirix.service.xml.xpath.types.Type) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) Axis(org.sirix.api.Axis)

Example 64 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class FNCount method computeResult.

/**
 * {@inheritDoc}
 */
@Override
protected byte[] computeResult() {
    final Axis axis = getArgs().get(0);
    Integer count = 0;
    while (axis.hasNext()) {
        axis.next();
        count++;
    }
    return TypedValue.getBytes(count.toString());
}
Also used : Axis(org.sirix.api.Axis)

Example 65 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class FNSum method computeResult.

/**
 * {@inheritDoc}
 */
@Override
protected byte[] computeResult() {
    final Axis axis = getArgs().get(0);
    Integer count = 0;
    while (axis.hasNext()) {
        axis.next();
        count++;
    }
    return TypedValue.getBytes(count.toString());
}
Also used : Axis(org.sirix.api.Axis)

Aggregations

Axis (org.sirix.api.Axis)73 DescendantAxis (org.sirix.axis.DescendantAxis)39 FilterAxis (org.sirix.axis.filter.FilterAxis)38 ChildAxis (org.sirix.axis.ChildAxis)23 UnionAxis (org.sirix.service.xml.xpath.expr.UnionAxis)19 DupFilterAxis (org.sirix.service.xml.xpath.filter.DupFilterAxis)19 ForAxis (org.sirix.axis.ForAxis)17 PredicateFilterAxis (org.sirix.axis.filter.PredicateFilterAxis)17 ExceptAxis (org.sirix.service.xml.xpath.expr.ExceptAxis)17 IfAxis (org.sirix.service.xml.xpath.expr.IfAxis)17 IntersectAxis (org.sirix.service.xml.xpath.expr.IntersectAxis)17 RangeAxis (org.sirix.service.xml.xpath.expr.RangeAxis)17 SequenceAxis (org.sirix.service.xml.xpath.expr.SequenceAxis)17 VariableAxis (org.sirix.service.xml.xpath.expr.VariableAxis)17 AddOpAxis (org.sirix.service.xml.xpath.operators.AddOpAxis)17 DivOpAxis (org.sirix.service.xml.xpath.operators.DivOpAxis)17 IDivOpAxis (org.sirix.service.xml.xpath.operators.IDivOpAxis)17 ModOpAxis (org.sirix.service.xml.xpath.operators.ModOpAxis)17 MulOpAxis (org.sirix.service.xml.xpath.operators.MulOpAxis)17 SubOpAxis (org.sirix.service.xml.xpath.operators.SubOpAxis)17