Search in sources :

Example 46 with Axis

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

the class WikipediaImport method parseStartTag.

/**
 * Parses a start tag.
 *
 * @param startTagEvent current StAX {@link XMLEvent}
 * @param timestamp timestamp start tag {@link StartElement}
 * @param wikiPage wikipedia page start tag {@link StartElement}
 * @param revision revision start tag {@link StartElement}
 * @param pageID page-ID start tag {@link StartElement}
 * @param dateRange date range, the following values are possible:
 *        <dl>
 *        <dt>h</dt>
 *        <dd>hourly revisions</dd>
 *        <dt>d</dt>
 *        <dd>daily revisions</dd>
 *        <dt>w</dt>
 *        <dd>weekly revisions (currently unsupported)</dd>
 *        <dt>m</dt>
 *        <dd>monthly revisions</dd>
 *        </dl>
 * @throws XMLStreamException In case of any XML parsing errors.
 * @throws SirixException In case of any sirix errors.
 */
private void parseStartTag(final XMLEvent startTagEvent, final StartElement timestamp, final StartElement wikiPage, final StartElement revision, final StartElement pageID, final DateBy dateRange) throws XMLStreamException, SirixException {
    XMLEvent event = startTagEvent;
    if (checkStAXStartElement(event.asStartElement(), pageID)) {
        event = mReader.nextEvent();
        mPageEvents.add(event);
        if (!mIsRev) {
            mIdText = event.asCharacters().getData();
        }
    } else if (checkStAXStartElement(event.asStartElement(), timestamp)) {
        // Timestamp start tag found.
        event = mReader.nextEvent();
        mPageEvents.add(event);
        final String currTimestamp = event.asCharacters().getData();
        // Timestamp.
        if (mTimestamp == null) {
            mTimestamp = parseTimestamp(dateRange, currTimestamp);
        } else if (!parseTimestamp(dateRange, currTimestamp).equals(mTimestamp)) {
            mTimestamp = parseTimestamp(dateRange, currTimestamp);
            mWtx.commit();
            mWtx.close();
            mWtx = mResourceManager.beginNodeWriteTrx();
        }
        assert mIdText != null;
        // Search for existing page.
        final QName page = wikiPage.getName();
        final QName id = pageID.getName();
        final String query = "//" + qNameToString(page) + "[fn:string(" + qNameToString(id) + ") = '" + mIdText + "']";
        mWtx.moveToDocumentRoot();
        final Axis axis = new XPathAxis(mWtx, query);
        // Determines if page is found in shreddered file.
        mFound = false;
        // Counts found page.
        int resCounter = 0;
        long key = mWtx.getNodeKey();
        while (axis.hasNext()) {
            axis.next();
            // Page is found.
            mFound = true;
            // Make sure no more than one page with a unique id is found.
            resCounter++;
            assert resCounter == 1;
            // Make sure the transaction is on the page element found.
            assert mWtx.getName().getLocalName().equals(wikiPage.getName().getLocalPart());
            key = mWtx.getNodeKey();
        }
        mWtx.moveTo(key);
    }
}
Also used : XPathAxis(org.sirix.service.xml.xpath.XPathAxis) QName(javax.xml.namespace.QName) XMLEvent(javax.xml.stream.events.XMLEvent) Axis(org.sirix.api.Axis) XPathAxis(org.sirix.service.xml.xpath.XPathAxis)

Example 47 with Axis

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

the class PipelineBuilder method addOrExpression.

/**
 * Adds a or expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 */
public void addOrExpression(final XdmNodeReadTrx mTransaction) {
    assert getPipeStack().size() >= 2;
    final Axis mOperand2 = getPipeStack().pop().getExpr();
    final Axis mOperand1 = getPipeStack().pop().getExpr();
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(new OrExpr(mTransaction, mOperand1, mOperand2));
}
Also used : ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis) OrExpr(org.sirix.service.xml.xpath.expr.OrExpr)

Example 48 with Axis

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

the class PipelineBuilder method addCompExpression.

/**
 * Adds a comparison expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 * @param mComp Comparator type.
 */
public void addCompExpression(final XdmNodeReadTrx mTransaction, final String mComp) {
    assert getPipeStack().size() >= 2;
    final XdmNodeReadTrx rtx = mTransaction;
    final Axis paramOperandTwo = getPipeStack().pop().getExpr();
    final Axis paramOperandOne = getPipeStack().pop().getExpr();
    final CompKind kind = CompKind.fromString(mComp);
    final Axis axis = AbstractComparator.getComparator(rtx, paramOperandOne, paramOperandTwo, kind, mComp);
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(axis);
}
Also used : CompKind(org.sirix.service.xml.xpath.comparators.CompKind) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Example 49 with Axis

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

the class PipelineBuilder method addIfExpression.

/**
 * Adds a if expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 */
public void addIfExpression(final XdmNodeReadTrx mTransaction) {
    assert getPipeStack().size() >= 3;
    final XdmNodeReadTrx rtx = mTransaction;
    final Axis elseExpr = getPipeStack().pop().getExpr();
    final Axis thenExpr = getPipeStack().pop().getExpr();
    final Axis ifExpr = getPipeStack().pop().getExpr();
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(new IfAxis(rtx, ifExpr, thenExpr, elseExpr));
}
Also used : IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Example 50 with Axis

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

the class PipelineBuilder method addUnionExpression.

/**
 * Adds a union expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 */
public void addUnionExpression(final XdmNodeReadTrx mTransaction) {
    assert getPipeStack().size() >= 2;
    final Axis mOperand2 = getPipeStack().pop().getExpr();
    final Axis mOperand1 = getPipeStack().pop().getExpr();
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(new DupFilterAxis(mTransaction, new UnionAxis(mTransaction, mOperand1, mOperand2)));
}
Also used : DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis)

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