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

io.sirix.service.xml.xpath.XPathAxis Maven / Gradle / Ivy

/**
 * Copyright (c) 2011, University of Konstanz, Distributed Systems Group All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted
 * provided that the following conditions are met: * Redistributions of source code must retain the
 * above copyright notice, this list of conditions and the following disclaimer. * Redistributions
 * in binary form must reproduce the above copyright notice, this list of conditions and the
 * following disclaimer in the documentation and/or other materials provided with the distribution.
 * * Neither the name of the University of Konstanz nor the names of its contributors may be used to
 * endorse or promote products derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL  BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package io.sirix.service.xml.xpath;

import io.sirix.api.Axis;
import io.sirix.api.xml.XmlNodeReadOnlyTrx;
import io.sirix.service.xml.xpath.parser.XPathParser;
import io.sirix.exception.SirixXPathException;
import io.sirix.settings.Fixed;

import static java.util.Objects.requireNonNull;

/**
 * 

* Evaluates a given XPath query. *

*

* Axis to iterate over the items (more precisely the item keys) of the query's result sequence. * XPathAxis extends sirixs IAxis that extends the well-known Java * Iterator<Long> and Iterable<Long> interfaces. *

*

User Example

*

* In order to use it, at first a sirix session has to be bound to the XML document in question or * an tnk file and a ReadTransaction with an INodeList as argument has to * be started on it. (For more information how to do that, see the sirix documentation.) Then the * XPathAxis can be used like this: *

*
 *   ...
 *   IReadTransaction rtx = session.beginReadTransaction(new ItemList());
 *
 *   final String query =
 *   "for $a in /articles/article[@name = \"book\"] return $a/price";
 *
 *   final IAxis axis = new XPathAxis(rtx, query);
 *   while (axis.hasNext()) {
 *     // Move transaction cursor to do something.
 *     axis.next();
 *     System.out.println(rtx.getValueAsInt()););
 *   }
 *   ...
 * 
* *
 *   ...
 *   for (final long key : new XPathAxis(rtx, query)) {
 *      ...
 *   }
 *   ...
 * 
* * */ public final class XPathAxis extends AbstractAxis { /** Declares if the evaluation is compatible to XPath 1.0 or not. */ public static final boolean XPATH_10_COMP = true; /** Axis holding the consecutive query execution plans of the query. */ private Axis mPipeline; /** *

* Constructor initializing internal state. *

*

* Starts the query scanning and parsing and retrieves the builded query execution plan from the * parser. *

*

* Deprecated: Use the the brackit-binding. *

* * @param pRtx Transaction to operate with. * @param pQuery XPath query to process. * @throws SirixXPathException throw a sirix xpath exception. */ @Deprecated public XPathAxis(final XmlNodeReadOnlyTrx pRtx, final String pQuery) throws SirixXPathException { super(pRtx); // /** Initializing executor service with fixed thread pool. */ // EXECUTOR = Executors.newFixedThreadPool(THREADPOOLSIZE); // start parsing and get execution plans final XPathParser parser = new XPathParser(pRtx, requireNonNull(pQuery)); parser.parseQuery(); mPipeline = parser.getQueryPipeline(); } @Override protected long nextKey() { if (mPipeline.hasNext()) { return mPipeline.next(); } else { return Fixed.NULL_NODE_KEY.getStandardProperty(); } } // @Override // public boolean hasNext() { // resetToLastKey(); // // if (mPipeline.hasNext()) { // mKey = mPipeline.next(); // return true; // } else { // resetToStartKey(); // return false; // } // } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy