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);
}
}
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));
}
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);
}
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));
}
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)));
}
Aggregations