Search in sources :

Example 21 with Axis

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

the class DBNode method expandString.

/**
 * Filter text nodes.
 *
 * @return concatenated String of text node values
 */
private String expandString() {
    final StringBuilder buffer = new StringBuilder();
    final Axis axis = new DescendantAxis(mRtx);
    while (axis.hasNext()) {
        axis.next();
        if (mRtx.isText()) {
            buffer.append(mRtx.getValue());
        }
    }
    return buffer.toString();
}
Also used : DescendantAxis(org.sirix.axis.DescendantAxis) AllTimeAxis(org.sirix.axis.temporal.AllTimeAxis) PrecedingAxis(org.sirix.axis.PrecedingAxis) Axis(org.sirix.api.Axis) FirstAxis(org.sirix.axis.temporal.FirstAxis) AbstractTemporalAxis(org.sirix.axis.AbstractTemporalAxis) ChildAxis(org.sirix.axis.ChildAxis) LastAxis(org.sirix.axis.temporal.LastAxis) AttributeAxis(org.sirix.axis.AttributeAxis) PastAxis(org.sirix.axis.temporal.PastAxis) FollowingAxis(org.sirix.axis.FollowingAxis) AncestorAxis(org.sirix.axis.AncestorAxis) FutureAxis(org.sirix.axis.temporal.FutureAxis) NonStructuralWrapperAxis(org.sirix.axis.NonStructuralWrapperAxis) NextAxis(org.sirix.axis.temporal.NextAxis) PreviousAxis(org.sirix.axis.temporal.PreviousAxis) DescendantAxis(org.sirix.axis.DescendantAxis)

Example 22 with Axis

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

the class XPathParser method parsePathExpr.

/**
 * Parses the the rule PathExpr according to the following production rule:
 * <p>
 * [25] PathExpr ::= ("/" RelativePathExpr?) | ("//" RelativePathExpr) | RelativePathExpr .
 * </p>
 *
 * @throws SirixXPathException
 */
private void parsePathExpr() throws SirixXPathException {
    if (is(TokenType.SLASH, true)) {
        // path expression starts from the root
        mPipeBuilder.addStep(new DocumentNodeAxis(getTransaction()));
        final TokenType type = mToken.getType();
        if (type != TokenType.END && type != TokenType.COMMA) {
            // all immediately following keywords or '*' are nametests, not
            // operators
            // leading-lone-slash constrain
            parseRelativePathExpr();
        }
    } else if (is(TokenType.DESC_STEP, true)) {
        // path expression starts from the root with a descendant-or-self
        // step
        mPipeBuilder.addStep(new DocumentNodeAxis(getTransaction()));
        final Axis mAxis = new DescendantAxis(getTransaction(), IncludeSelf.YES);
        mPipeBuilder.addStep(mAxis);
        parseRelativePathExpr();
    } else {
        parseRelativePathExpr();
    }
}
Also used : DocumentNodeAxis(org.sirix.service.xml.xpath.filter.DocumentNodeAxis) DescendantAxis(org.sirix.axis.DescendantAxis) 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 23 with Axis

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

the class XPathParser method parseForwardAxis.

/**
 * Parses the the rule ForwardAxis according to the following production rule:
 * <p>
 * [30] ForwardAxis ::= <"child" "::"> | <"descendant" "::"> | <"attribute" "::"> | <"self" "::">
 * | <"descendant-or-self" "::"> | <"following-sibling" "::"> | <"following" "::"> | <"namespace"
 * "::"> .
 * </p>
 *
 * @return axis
 * @throws SirixXPathException
 */
private Axis parseForwardAxis() throws SirixXPathException {
    final Axis axis;
    if (is("child", true)) {
        axis = new ChildAxis(getTransaction());
    } else if (is("descendant", true)) {
        axis = new DescendantAxis(getTransaction());
    } else if (is("descendant-or-self", true)) {
        axis = new DescendantAxis(getTransaction(), IncludeSelf.YES);
    } else if (is("attribute", true)) {
        axis = new AttributeAxis(getTransaction());
    } else if (is("self", true)) {
        axis = new SelfAxis(getTransaction());
    } else if (is("following", true)) {
        axis = new FollowingAxis(getTransaction());
    } else if (is("following-sibling", true)) {
        axis = new FollowingSiblingAxis(getTransaction());
    } else {
        is("namespace", true);
        throw EXPathError.XPST0010.getEncapsulatedException();
    }
    consume(TokenType.COLON, true);
    consume(TokenType.COLON, true);
    return axis;
}
Also used : ChildAxis(org.sirix.axis.ChildAxis) SelfAxis(org.sirix.axis.SelfAxis) FollowingSiblingAxis(org.sirix.axis.FollowingSiblingAxis) FollowingAxis(org.sirix.axis.FollowingAxis) AttributeAxis(org.sirix.axis.AttributeAxis) DescendantAxis(org.sirix.axis.DescendantAxis) 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 24 with Axis

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

the class XPathParser method parseRelativePathExpr.

/**
 * Parses the the rule RelativePathExpr according to the following production rule:
 * <p>
 * [26] RelativePathExpr ::= StepExpr (("/" | "//") StepExpr)* .
 * </p>
 *
 * @throws SirixXPathException
 */
private void parseRelativePathExpr() throws SirixXPathException {
    parseStepExpr();
    while (mToken.getType() == TokenType.SLASH || mToken.getType() == TokenType.DESC_STEP) {
        if (is(TokenType.DESC_STEP, true)) {
            final Axis axis = new DescendantAxis(getTransaction(), IncludeSelf.YES);
            mPipeBuilder.addStep(axis);
        } else {
            // in this case the slash is just a separator
            consume(TokenType.SLASH, true);
        }
        parseStepExpr();
    }
}
Also used : DescendantAxis(org.sirix.axis.DescendantAxis) 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 25 with Axis

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

the class MultipleCommitTest method testAttributeRemove.

@Test
public void testAttributeRemove() throws SirixException {
    DocumentCreater.create(holder.getWriter());
    holder.getWriter().commit();
    holder.getWriter().moveToDocumentRoot();
    final AbstractAxis postorderAxis = new PostOrderAxis(holder.getWriter());
    while (postorderAxis.hasNext()) {
        postorderAxis.next();
        if (holder.getWriter().getKind() == Kind.ELEMENT && holder.getWriter().getAttributeCount() > 0) {
            for (int i = 0, attrCount = holder.getWriter().getAttributeCount(); i < attrCount; i++) {
                holder.getWriter().moveToAttribute(i);
                holder.getWriter().remove();
            }
        }
    }
    holder.getWriter().commit();
    holder.getWriter().moveToDocumentRoot();
    int attrTouch = 0;
    final Axis descAxis = new DescendantAxis(holder.getWriter());
    while (descAxis.hasNext()) {
        descAxis.next();
        if (holder.getWriter().getKind() == Kind.ELEMENT) {
            for (int i = 0, attrCount = holder.getWriter().getAttributeCount(); i < attrCount; i++) {
                if (holder.getWriter().moveToAttribute(i).hasMoved()) {
                    attrTouch++;
                } else {
                    throw new IllegalStateException("Should never occur!");
                }
            }
        }
    }
    assertEquals(0, attrTouch);
}
Also used : PostOrderAxis(org.sirix.axis.PostOrderAxis) AbstractAxis(org.sirix.axis.AbstractAxis) DescendantAxis(org.sirix.axis.DescendantAxis) Axis(org.sirix.api.Axis) PostOrderAxis(org.sirix.axis.PostOrderAxis) DescendantAxis(org.sirix.axis.DescendantAxis) AbstractAxis(org.sirix.axis.AbstractAxis) Test(org.junit.Test)

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