|
From: <pm_...@us...> - 2012-03-12 08:47:57
|
Revision: 4535
http://mxquery.svn.sourceforge.net/mxquery/?rev=4535&view=rev
Author: pm_fischer
Date: 2012-03-12 08:47:44 +0000 (Mon, 12 Mar 2012)
Log Message:
-----------
- more dataflow analysis for node id support
- switch node id generation to "on-demand" (as output by data flow
analysis)
- some performance optimizations on TokenBuffer and StaX parser wrapper
Modified Paths:
--------------
trunk/MXQuery/android/src/ch/ethz/mxquery/functions/fn/Doc.java
trunk/MXQuery/src/ch/ethz/mxquery/contextConfig/Context.java
trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/expathhttp/HttpIO.java
trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/zorbaRest/HttpIO.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Parse.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Soap_call.java
trunk/MXQuery/src/ch/ethz/mxquery/iterators/ValidateIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/iterators/scripting/WSFunction.java
trunk/MXQuery/src/ch/ethz/mxquery/sms/MMimpl/TokenBufferStore.java
trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/NonValidatingStaxAdapter.java
trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/XDMImportAdapter.java
trunk/MXQuery/xqib_src/ch/ethz/mxquery/functions/fn/Doc.java
Modified: trunk/MXQuery/android/src/ch/ethz/mxquery/functions/fn/Doc.java
===================================================================
--- trunk/MXQuery/android/src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/android/src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -52,6 +52,7 @@
private final int OPERATION_UNPARSED_LINES=3;
private boolean inValidateExpression = false;
private int operation = OPERATION_DOC;
+ private int requiredOptions = 0;
private String docURI = null;
private Reader rd = null; // keep around to close
@@ -139,10 +140,12 @@
// else
// cur = XDMInputFactory.createXMLInput(context, uri, true, context.getInputValidationMode(), loc);
((XMLSource)cur).setURI(uri);
+ cur = cur.require(requiredOptions);
break;
case OPERATION_TIDY:
cur = XDMInputFactory.createTidyInput(context, rd, loc);
((XMLSource)cur).setURI(uri);
+ cur = cur.require(requiredOptions);
break;
case OPERATION_UNPARSED:
StringBuffer sb = new StringBuffer();
@@ -201,6 +204,7 @@
copy.operation = operation;
copy.setConstModePreserve(this.constModePreserve);
copy.setSubIters(subIters);
+ copy.requiredOptions = requiredOptions;
return copy;
}
@@ -258,4 +262,10 @@
else
return null;
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
+
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/contextConfig/Context.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/contextConfig/Context.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/contextConfig/Context.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -186,7 +186,7 @@
public static final int NONVALIDATED_INPUT_MODE_DOM = 3;
public static final int NONVALIDATED_INPUT_MODE_SAX_TIDY = 4;
public static final int NONVALIDATED_INPUT_MODE_STAX_PROJECTION = 5;
-
+ //public static final int NONVALIDATED_INPUT_MODE_STAX_DUMMY = 6;
public static final int NO_VALIDATION = 0;
public static final int IGNORE_DTD = 1;
@@ -496,8 +496,10 @@
holder.setIter(st.getIterator(this));
}
}
- else
- holder.setIter(iter);
+ else {
+ iter = iter.require(holder.getRequiredOptions());
+ holder.setIter(iter);
+ }
}
/*
Modified: trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/expathhttp/HttpIO.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/expathhttp/HttpIO.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/expathhttp/HttpIO.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -57,6 +57,7 @@
import ch.ethz.mxquery.iterators.SequenceTypeIterator;
import ch.ethz.mxquery.iterators.TokenIterator;
import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.DataflowAnalysis;
import ch.ethz.mxquery.model.Iterator;
import ch.ethz.mxquery.model.Wildcard;
import ch.ethz.mxquery.model.XDMIterator;
@@ -97,9 +98,10 @@
public final static QName EHC004_DYNAMIC_SRC_ATTR_INCOMPATIBLE = new QName(exPathErrorNS,"err","HC004");
public final static QName EHC005_DYNAMIC_INVALID_REQUEST_ELEM = new QName(exPathErrorNS,"err","HC005");
public final static QName EHC006_DYNAMIC_TIMEOUT = new QName(exPathErrorNS,"err","HC006");
- private boolean generateNodeIds = true;
+ private boolean generateNodeIds = false;
private static int nodeIdCount = 0;
Identifier last_identifier;
+ private int requiredOptions = 0;
private final static String uri = "http://www.mxquery.org/nodeconstruction";
static int docs = 0;
@@ -136,6 +138,7 @@
HttpIO copy = new HttpIO();
copy.setContext(context, true);
copy.setSubIters(subIters);
+ copy.requiredOptions = requiredOptions;
return copy;
}
@@ -157,6 +160,9 @@
private void init() throws MXQueryException {
+ if ((requiredOptions & DataflowAnalysis.NODEID_ORDER) != 0)
+ generateNodeIds = true;
+
Context childContext = new Context(context);
subIters[0].setResettable(true);
@@ -551,13 +557,16 @@
|| contentType.equalsIgnoreCase("application/xml")
|| contentType.equalsIgnoreCase("text/xml-external-parsed-entity")
|| contentType.equalsIgnoreCase("application/xml-external-parsed-entity")
- || contentType.indexOf("+xml") >= 0)
+ || contentType.indexOf("+xml") >= 0) {
resIts[resIts.length - 1] = XDMInputFactory.createXMLInput(
context, new StringReader(result.toString()), false,
context.getInputValidationMode(), loc);
+ resIts[resIts.length - 1].require(requiredOptions);
+ }
else if (contentType.indexOf("html") >= 0) {
resIts[resIts.length - 1] = XDMInputFactory.createTidyInput(
- context, new StringReader(result.toString()), loc);
+ context, new StringReader(result.toString()), loc);
+ resIts[resIts.length - 1].require(requiredOptions);
} else if (contentType.startsWith("text/") || contentType.equalsIgnoreCase("application/xml-dtd") || contentType.equalsIgnoreCase("application/json")) {
resIts[resIts.length - 1] = new TokenIterator(context,
new TextToken(Type.TEXT_NODE_UNTYPED_ATOMIC, createNextTokenId(3), result
@@ -826,8 +835,11 @@
context.addNamespace(httpNS, httpURI);
return super.staticInit();
}
-
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/zorbaRest/HttpIO.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/zorbaRest/HttpIO.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/extensionsModules/zorbaRest/HttpIO.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -53,6 +53,7 @@
import ch.ethz.mxquery.functions.fn.EncodeForURI;
import ch.ethz.mxquery.iterators.TokenIterator;
import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.DataflowAnalysis;
import ch.ethz.mxquery.model.Iterator;
import ch.ethz.mxquery.model.TokenSequenceIterator;
import ch.ethz.mxquery.model.XDMIterator;
@@ -79,6 +80,7 @@
private boolean generateNodeIds = true;
private static int nodeIdCount = 0;
Identifier last_identifier;
+ private int requiredOptions = 0;
private final static String uri = "http://www.mxquery.org/nodeconstruction";
static int docs = 0;
@@ -127,6 +129,7 @@
if (request_type == REQUEST_TYPE_DELETE)
copy.setOperation("delete");
copy.tidy = tidy;
+ copy.requiredOptions = requiredOptions;
return copy;
}
@@ -147,6 +150,10 @@
XDMIterator[] resIts;
private void init() throws MXQueryException {
+
+ if ((requiredOptions & DataflowAnalysis.NODEID_ORDER) != 0)
+ generateNodeIds = true;
+
String url = getStringValue(subIters[0]);
if (request_type != REQUEST_TYPE_GET && url.indexOf('?') >= 0) {
throw new DynamicException(
@@ -563,13 +570,18 @@
if (contentType.equalsIgnoreCase("text/xml")
|| contentType.equalsIgnoreCase("application/xml")
|| contentType.indexOf("+xml") >= 0)
- if (tidy)
+ if (tidy) {
resIts[resIts.length - 4] = XDMInputFactory.createTidyInput(
context, new StringReader(result.toString()), loc);
- else
+ resIts[resIts.length - 4].require(requiredOptions);
+
+ }
+ else {
resIts[resIts.length - 4] = XDMInputFactory.createXMLInput(
context, new StringReader(result.toString()), false,
context.getInputValidationMode(), loc);
+ resIts[resIts.length - 4].require(requiredOptions);
+ }
else if (contentType.indexOf("html") >= 0 && tidy) {
resIts[resIts.length - 4] = XDMInputFactory.createTidyInput(
context, new StringReader(result.toString()), loc);
@@ -729,5 +741,9 @@
return docId;
}
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -55,6 +55,7 @@
private final int OPERATION_UNPARSED_LINES=3;
private boolean inValidateExpression = false;
private int operation = OPERATION_DOC;
+ private int requiredOptions = 0;
private String docURI = null;
private Reader rd = null; // keep around to close
@@ -135,9 +136,11 @@
else
cur = XDMInputFactory.createXMLInput(context, uri, true, context.getInputValidationMode(), loc);
((XMLSource)cur).setURI(uri);
+ cur = cur.require(requiredOptions);
break;
case OPERATION_TIDY:
cur = XDMInputFactory.createTidyInput(context, rd, loc);
+ cur = cur.require(requiredOptions);
((XMLSource)cur).setURI(uri);
break;
case OPERATION_UNPARSED:
@@ -195,6 +198,7 @@
copy.setContext(context, true);
copy.setInValidateExpression(inValidateExpression);
copy.operation = operation;
+ copy.requiredOptions = requiredOptions;
copy.setConstModePreserve(this.constModePreserve);
copy.setSubIters(subIters);
return copy;
@@ -263,5 +267,9 @@
return new ObjectObjectPair(returned, new Set());
}
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Parse.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Parse.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Parse.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -33,13 +33,16 @@
public class Parse extends CurrentBasedIterator implements RequestTypeMulti{
private boolean useTidy;
+ private int requiredOptions = 0;
+
protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack)
throws MXQueryException {
Parse ret = new Parse();
ret.setSubIters(subIters);
ret.setContext(context, false);
ret.useTidy = useTidy;
+ ret.requiredOptions = requiredOptions;
return ret;
}
@@ -62,6 +65,7 @@
current = XDMInputFactory.createXMLInput(context, new StringReader(add),false,context.getInputValidationMode(),loc);
else
current = XDMInputFactory.createTidyInput(context, new StringReader(add), loc);
+ current = current.require(requiredOptions);
return;
}
public TypeInfo getStaticType() {
@@ -83,5 +87,10 @@
public void setReturnType(int type) throws MXQueryException {
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Soap_call.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Soap_call.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Soap_call.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -36,6 +36,7 @@
import ch.ethz.mxquery.xdmio.XMLSource;
public class Soap_call extends CurrentBasedIterator {
+ private int requiredOptions = 0;
public TokenInterface next() throws MXQueryException{
if (called == 0) {
init();
@@ -103,6 +104,7 @@
}
XMLSource xmlIt = XDMInputFactory.createXMLInput(context, new StringReader(soapResult), false, context.getInputValidationMode(), loc);
xmlIt.setURI(location);
+ xmlIt = (XMLSource)xmlIt.require(requiredOptions);
current = new NodeIterator(context, xmlIt,loc);
//currentToken = new TextToken(null, soapResult);
@@ -112,9 +114,16 @@
}
protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
- XDMIterator copy = new Soap_call();
+ Soap_call copy = new Soap_call();
copy.setContext(context, true);
copy.setSubIters(subIters);
+ copy.requiredOptions = requiredOptions;
return copy;
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
+
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/iterators/ValidateIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/iterators/ValidateIterator.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/iterators/ValidateIterator.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -1,123 +1,129 @@
-/* Copyright 2006 - 2009 ETH Zurich
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.mxquery.iterators;
-
-import java.io.Reader;
-import java.util.Vector;
-
-import ch.ethz.mxquery.contextConfig.Context;
-import ch.ethz.mxquery.datamodel.types.Type;
-import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
-import ch.ethz.mxquery.exceptions.DynamicException;
-import ch.ethz.mxquery.exceptions.ErrorCodes;
-import ch.ethz.mxquery.exceptions.MXQueryException;
-import ch.ethz.mxquery.exceptions.QueryLocation;
-import ch.ethz.mxquery.exceptions.TypeException;
-import ch.ethz.mxquery.model.CurrentBasedIterator;
-import ch.ethz.mxquery.model.XDMIterator;
-import ch.ethz.mxquery.util.StringReader;
-import ch.ethz.mxquery.xdmio.XDMInputFactory;
-import ch.ethz.mxquery.xdmio.XDMSerializer;
-
-public class ValidateIterator extends CurrentBasedIterator {
-
- private int mode;
-
-
- private class DetectDocIterator extends CurrentBasedIterator{
-
- public DetectDocIterator(Context ctx, XDMIterator it, QueryLocation loc) {
- super(ctx,new XDMIterator[]{it},loc);
- }
-
- private boolean isDoc = false;
- private int numRootNodes = 0;
-
- protected XDMIterator copy(Context context, XDMIterator[] subIters,
- Vector nestedPredCtxStack) throws MXQueryException {
- return new DetectDocIterator(context, subIters[0],loc);
- }
-
- public TokenInterface next() throws MXQueryException {
- if (called == 0) {
- called++;
- current = subIters[0];
- TokenInterface tok = getNext();
- if (tok.getEventType() == Type.START_DOCUMENT)
- isDoc = true;
- if (tok.getEventType() == Type.START_TAG)
- numRootNodes++;
- return tok;
- }
- TokenInterface t1 = getNext();
- if ((depth == 1 || isDoc && depth ==2)&&t1.getEventType() == Type.START_TAG) {
- numRootNodes++;
- }
- if (numRootNodes > 1 || (isDoc && depth==1 && t1.getEventType() == Type.START_DOCUMENT))
- if (isDoc && depth >1)
- throw new DynamicException(ErrorCodes.E0061_DYNAMIC_VALIDATE_MORE_THAN_ONE_ELEMENT, "Attempting to validate a document containing more than one root element. Offending element name: "+t1.getName(), loc);
- else
- throw new TypeException(ErrorCodes.E0030_TYPE_VALIDATE_MORE_THAN_ONE_ELEMENT, "Attempting to validate more than one element/document.", loc);
-
- return t1;
- }
-
- protected void resetImpl() throws MXQueryException {
- super.resetImpl();
- isDoc = false;
- numRootNodes = 0;
- }
-
- public boolean isDoc() {
- return isDoc;
- }
-
- }
-
- public ValidateIterator(int mode, Context ctx, XDMIterator[] subIters, QueryLocation loc) {
- super(ctx, subIters, loc);
- this.mode = mode;
- }
-
- protected void init() throws MXQueryException {
- XDMSerializer ip = new XDMSerializer();
- DetectDocIterator docDetect = new DetectDocIterator(context, subIters[0], loc);
- String strResult = ip.eventsToXML(docDetect);
- Reader reader = new StringReader(strResult);
- current = XDMInputFactory.createXMLInput(context, reader, docDetect.isDoc(), mode, loc);
- }
-
- protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
- return new ValidateIterator(this.mode, this.context, subIters, loc);
- }
-
- public TokenInterface next() throws MXQueryException {
- if (called == 0) {
- init();
- called++;
- }
- TokenInterface tok = current.next();
- return tok;
- }
- public boolean isExprParameter(int valueToCheck, boolean recursive) {
- if (valueToCheck == EXPR_PARAM_XDMGEN)
- return true;
- else
- return super.isExprParameter(valueToCheck, recursive);
- }
-
-
-}
+/* Copyright 2006 - 2009 ETH Zurich
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.ethz.mxquery.iterators;
+
+import java.io.Reader;
+import java.util.Vector;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.types.Type;
+import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
+import ch.ethz.mxquery.exceptions.DynamicException;
+import ch.ethz.mxquery.exceptions.ErrorCodes;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.exceptions.QueryLocation;
+import ch.ethz.mxquery.exceptions.TypeException;
+import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.XDMIterator;
+import ch.ethz.mxquery.util.StringReader;
+import ch.ethz.mxquery.xdmio.XDMInputFactory;
+import ch.ethz.mxquery.xdmio.XDMSerializer;
+
+public class ValidateIterator extends CurrentBasedIterator {
+
+ private int mode;
+ private int requiredOptions = 0;
+
+ private class DetectDocIterator extends CurrentBasedIterator{
+
+ public DetectDocIterator(Context ctx, XDMIterator it, QueryLocation loc) {
+ super(ctx,new XDMIterator[]{it},loc);
+ }
+
+ private boolean isDoc = false;
+ private int numRootNodes = 0;
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters,
+ Vector nestedPredCtxStack) throws MXQueryException {
+ return new DetectDocIterator(context, subIters[0],loc);
+ }
+
+ public TokenInterface next() throws MXQueryException {
+ if (called == 0) {
+ called++;
+ current = subIters[0];
+ TokenInterface tok = getNext();
+ if (tok.getEventType() == Type.START_DOCUMENT)
+ isDoc = true;
+ if (tok.getEventType() == Type.START_TAG)
+ numRootNodes++;
+ return tok;
+ }
+ TokenInterface t1 = getNext();
+ if ((depth == 1 || isDoc && depth ==2)&&t1.getEventType() == Type.START_TAG) {
+ numRootNodes++;
+ }
+ if (numRootNodes > 1 || (isDoc && depth==1 && t1.getEventType() == Type.START_DOCUMENT))
+ if (isDoc && depth >1)
+ throw new DynamicException(ErrorCodes.E0061_DYNAMIC_VALIDATE_MORE_THAN_ONE_ELEMENT, "Attempting to validate a document containing more than one root element. Offending element name: "+t1.getName(), loc);
+ else
+ throw new TypeException(ErrorCodes.E0030_TYPE_VALIDATE_MORE_THAN_ONE_ELEMENT, "Attempting to validate more than one element/document.", loc);
+
+ return t1;
+ }
+
+ protected void resetImpl() throws MXQueryException {
+ super.resetImpl();
+ isDoc = false;
+ numRootNodes = 0;
+ }
+
+ public boolean isDoc() {
+ return isDoc;
+ }
+
+ }
+
+ public ValidateIterator(int mode, Context ctx, XDMIterator[] subIters, QueryLocation loc) {
+ super(ctx, subIters, loc);
+ this.mode = mode;
+ }
+
+ protected void init() throws MXQueryException {
+ XDMSerializer ip = new XDMSerializer();
+ DetectDocIterator docDetect = new DetectDocIterator(context, subIters[0], loc);
+ String strResult = ip.eventsToXML(docDetect);
+ Reader reader = new StringReader(strResult);
+ current = XDMInputFactory.createXMLInput(context, reader, docDetect.isDoc(), mode, loc);
+ current = current.require(requiredOptions);
+ }
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
+ ValidateIterator val = new ValidateIterator(this.mode, this.context, subIters, loc);
+ val.requiredOptions = requiredOptions;
+ return val;
+ }
+
+ public TokenInterface next() throws MXQueryException {
+ if (called == 0) {
+ init();
+ called++;
+ }
+ TokenInterface tok = current.next();
+ return tok;
+ }
+ public boolean isExprParameter(int valueToCheck, boolean recursive) {
+ if (valueToCheck == EXPR_PARAM_XDMGEN)
+ return true;
+ else
+ return super.isExprParameter(valueToCheck, recursive);
+ }
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
+}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/iterators/scripting/WSFunction.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/iterators/scripting/WSFunction.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/iterators/scripting/WSFunction.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -64,6 +64,7 @@
private String[] paramTypes;
private QName returnName;
private String returnType;
+ private int requiredOptions;
public WSFunction(Context ctx, QueryLocation loc, QName name, String style,String soapAction, String namespace, Hashtable declaredNSs,
String encoding, String location, String[] paramNames,
@@ -238,7 +239,8 @@
soapResult = startTag+childElement+endTag;
}
XMLSource xmlIt = XDMInputFactory.createXMLInput(context, new StringReader(soapResult), false, context.getInputValidationMode(), loc);
- xmlIt.setURI(location);
+ xmlIt.setURI(location);
+ xmlIt = (XMLSource)xmlIt.require(requiredOptions);
if (this.returnType == null || this.returnType.equals("")){//the return 'part' is an element
TypeInfo stepInfo = new TypeInfo(Type.START_TAG,Type.OCCURRENCE_IND_EXACTLY_ONE,this.returnName);
@@ -319,9 +321,17 @@
}
protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
- XDMIterator copy = new WSFunction(context, loc, name.copy(), style, soapAction, namespace, declaredNSs, encoding, location, paramNames, Iterator.copyStrings(paramTypes), returnName, returnType);
+ WSFunction copy = new WSFunction(context, loc, name.copy(), style, soapAction, namespace, declaredNSs, encoding, location, paramNames, Iterator.copyStrings(paramTypes), returnName, returnType);
copy.setContext(context, true);
copy.setSubIters(subIters);
+ copy.requiredOptions = requiredOptions;
return copy;
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
+
+
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/sms/MMimpl/TokenBufferStore.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/sms/MMimpl/TokenBufferStore.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/sms/MMimpl/TokenBufferStore.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -26,6 +26,7 @@
import ch.ethz.mxquery.datamodel.MXQueryNumber;
import ch.ethz.mxquery.datamodel.Source;
import ch.ethz.mxquery.datamodel.types.Type;
+import ch.ethz.mxquery.datamodel.types.TypeDictionary;
import ch.ethz.mxquery.datamodel.xdm.NamedToken;
import ch.ethz.mxquery.datamodel.xdm.TextToken;
import ch.ethz.mxquery.datamodel.xdm.Token;
@@ -41,7 +42,7 @@
*/
public class TokenBufferStore extends FIFOStore {
- private int initialCapacity = 50;
+ private int initialCapacity = 250;
//private int initialCapacity = 1000;
@@ -90,8 +91,8 @@
public boolean isScoring;
private int scoreCapacity = nodeIndexCapacity;
+ private TypeDictionary td = Context.getDictionary();
-
//protected static int descendantCounter = 0;
protected static int nodeIdCount = 0;
@@ -308,7 +309,7 @@
break;
}
- if ( Type.isAtomicType(type, Context.getDictionary()) || type == Type.UNTYPED || type == Type.ITEM || type == Type.FUNCTION_ITEM) {
+ if ( Type.isAtomicType(type, td) || type == Type.UNTYPED || type == Type.ITEM || type == Type.FUNCTION_ITEM) {
if (level == 0) {
indexNewNode();
Modified: trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/NonValidatingStaxAdapter.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/NonValidatingStaxAdapter.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/NonValidatingStaxAdapter.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -1,232 +1,240 @@
-/* Copyright 2006 - 2009 ETH Zurich
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.ethz.mxquery.xdmio.xmlAdapters;
-
-import java.util.LinkedList;
-import java.util.Vector;
-
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import ch.ethz.mxquery.contextConfig.Context;
-import ch.ethz.mxquery.datamodel.QName;
-import ch.ethz.mxquery.datamodel.XQName;
-import ch.ethz.mxquery.datamodel.types.Type;
-import ch.ethz.mxquery.datamodel.xdm.CommentToken;
-import ch.ethz.mxquery.datamodel.xdm.ElementToken;
-import ch.ethz.mxquery.datamodel.xdm.NamedToken;
-import ch.ethz.mxquery.datamodel.xdm.ProcessingInstrToken;
-import ch.ethz.mxquery.datamodel.xdm.TextToken;
-import ch.ethz.mxquery.datamodel.xdm.Token;
-import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
-import ch.ethz.mxquery.exceptions.MXQueryException;
-import ch.ethz.mxquery.exceptions.QueryLocation;
-import ch.ethz.mxquery.model.XDMIterator;
-import ch.ethz.mxquery.util.Utils;
-
-public class NonValidatingStaxAdapter extends XDMImportAdapter {
- private XMLStreamReader reader;
-
- private LinkedList tokensList;
-
- public NonValidatingStaxAdapter(Context ctx, QueryLocation loc, XMLStreamReader reader) {
- super(ctx, loc);
- this.reader = reader;
- this.tokensList = new LinkedList();
- }
-
- private TokenInterface getNext() {
- TokenInterface tok = Token.END_SEQUENCE_TOKEN;
- if (endOfSeq)
- return tok;
- try {
- int event = reader.getEventType();
- switch (event) {
- case XMLStreamConstants.ATTRIBUTE:
- break;
- case XMLStreamConstants.DTD:
- break;
- case XMLStreamConstants.CDATA:
- case XMLStreamConstants.CHARACTERS:
- case XMLStreamConstants.SPACE:
- {
- StringBuffer mergedText = new StringBuffer();
- while (event == XMLStreamConstants.CDATA || event == XMLStreamConstants.SPACE || event == XMLStreamConstants.CHARACTERS) {
- mergedText.append(reader.getText());
- reader.next();
- event = reader.getEventType();
- }
- return new TextToken(Type.TEXT_NODE_UNTYPED_ATOMIC, createNextTokenId(Type.TEXT_NODE_UNTYPED_ATOMIC, null), mergedText.toString(),curNsScope);
- }
- case XMLStreamConstants.COMMENT:
- tok = new CommentToken(createNextTokenId(Type.COMMENT, null), reader.getText(),curNsScope);
- break;
- case XMLStreamConstants.END_DOCUMENT:
- tok = new Token(Type.END_DOCUMENT,null,curNsScope);
- break;
- case XMLStreamConstants.END_ELEMENT:
- String name = reader.getLocalName();
- String ns_uri = reader.getNamespaceURI();
- String prefix = reader.getPrefix();
- if (prefix != null && prefix.length() == 0)
- prefix = null;
- XQName tName = new QName(ns_uri, prefix, name);
- tok = new ElementToken(Type.END_TAG, null, tName, curNsScope);
- checkCloseNsScope();
- level--;
- break;
- case XMLStreamConstants.ENTITY_DECLARATION: // not used
- break;
- case XMLStreamConstants.ENTITY_REFERENCE:
- break;
- case XMLStreamConstants.NAMESPACE:
- break;
- case XMLStreamConstants.NOTATION_DECLARATION:
- tok = new TextToken(createNextTokenId(Type.NOTATION, null), reader.getText());
- break;
- case XMLStreamConstants.PROCESSING_INSTRUCTION:
- tok = new ProcessingInstrToken(createNextTokenId(Type.PROCESSING_INSTRUCTION, null), reader.getPIData(), reader.getPITarget(),curNsScope);
- break;
- case XMLStreamConstants.START_DOCUMENT:
- tok = new Token(Type.START_DOCUMENT,createNextTokenId(Type.START_DOCUMENT, null),curNsScope);
- break;
- case XMLStreamConstants.START_ELEMENT:
- level++;
-
- boolean foundId = false;
- boolean foundIdREFS = false;
-
- String xmlId = null;
- String [] xmlIdREFS = null;
-
- boolean createdNSScope = false;
- name = reader.getLocalName();
- ns_uri = reader.getNamespaceURI();
- prefix = reader.getPrefix();
-
- if (prefix != null && prefix.length() == 0)
- prefix = null;
- tName = new QName(ns_uri, prefix, name);
- tok = new ElementToken(Type.START_TAG, createNextTokenId(Type.START_TAG, tName.toString()), tName, curNsScope);
-
- for (int i = 0; i < reader.getNamespaceCount(); i++) {
- String namespacePrefix = reader.getNamespacePrefix(i);
- String namespaceUri = reader.getNamespaceURI(i);
- XQName q;
- if (namespacePrefix == null)
- q = new QName(null, "xmlns");
- else
- q = new QName("xmlns", namespacePrefix);
- boolean newOpened = checkOpenNsScopeAddNs(createdNSScope, q, namespaceUri);
- if (newOpened && !createdNSScope)
- tok = new ElementToken(Type.START_TAG, tok.getNodeId(), tName, curNsScope);
- }
-
- for (int i = 0, n = reader.getAttributeCount(); i < n; ++i) {
- javax.xml.namespace.QName qName = reader.getAttributeName(i);
- name = qName.getLocalPart();
- ns_uri = qName.getNamespaceURI();
- prefix = qName.getPrefix();
-
-
-
- if (prefix.length() == 0)
- prefix = null;
- XQName q = new QName(ns_uri, prefix, name);
- String value = reader.getAttributeValue(i);
-
- String attType = reader.getAttributeType(i);
-
- if (!foundId && (attType.equals("ID") || isXMLId(tName,q))) {
- foundId = true;
- xmlId = value;
- }
- if (!foundIdREFS && (attType.equals("IDREF") || isIDREF(tName,q))) {
- foundIdREFS = true;
- xmlIdREFS = new String[]{value};
- }
-
- if (!foundIdREFS && (attType.equals("IDREFS") || isIDREFS(tName,q))) {
- foundIdREFS = true;
- xmlIdREFS = Utils.split(value," ", false);
- }
-
-
- boolean newOpened = checkOpenNsScopeAddNs(createdNSScope, q, value);
- if (newOpened && !createdNSScope)
- tok = new ElementToken(Type.START_TAG, tok.getNodeId(), tName, curNsScope);
-
- if (q.getNamespacePrefix() == null || q.getNamespacePrefix().equals("")) {
- if (q.getLocalPart().equals("xmlns"))
- continue;
- } else if (q.getNamespacePrefix().equals("xmlns"))
- continue;
- NamedToken attToken = createAttributeToken(Type.UNTYPED_ATOMIC, value, q, curNsScope);
- tokensList.add(attToken);
-
- if (foundId) {
- NamedToken nmToken = (NamedToken) tok ;
- nmToken.setID(xmlId);
- }
- if (foundIdREFS) {
- NamedToken nmToken = (NamedToken) tok;
- nmToken.setIDREFS(xmlIdREFS);
- }
-
-
- }
- break;
- default:
- }
- if (reader.hasNext())
- reader.next();
- else {
- endOfSeq = true;
- }
- return tok;
- } catch (XMLStreamException e) {
- e.printStackTrace();
- } catch (MXQueryException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- try {
- reader.close();
- } catch (XMLStreamException se) {
- // TODO Auto-generated catch block
- se.printStackTrace();
- }
- }
- return Token.END_SEQUENCE_TOKEN;
- }
-
- public TokenInterface next() throws MXQueryException {
- if (!tokensList.isEmpty()) {
- TokenInterface tok = (TokenInterface) tokensList.removeFirst();
- return tok;//(Token) tokensList.remove();
- }
- else {
- TokenInterface tok = getNext();
- return tok;
- }
- }
-
- protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
- XDMImportAdapter res = new NonValidatingStaxAdapter(context, loc, reader);
- res.uri = uri;
- return res;
- }
-}
+/* Copyright 2006 - 2009 ETH Zurich
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.ethz.mxquery.xdmio.xmlAdapters;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Vector;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.QName;
+import ch.ethz.mxquery.datamodel.XQName;
+import ch.ethz.mxquery.datamodel.types.Type;
+import ch.ethz.mxquery.datamodel.xdm.CommentToken;
+import ch.ethz.mxquery.datamodel.xdm.ElementToken;
+import ch.ethz.mxquery.datamodel.xdm.NamedToken;
+import ch.ethz.mxquery.datamodel.xdm.ProcessingInstrToken;
+import ch.ethz.mxquery.datamodel.xdm.TextToken;
+import ch.ethz.mxquery.datamodel.xdm.Token;
+import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.exceptions.QueryLocation;
+import ch.ethz.mxquery.model.XDMIterator;
+import ch.ethz.mxquery.util.Utils;
+
+public class NonValidatingStaxAdapter extends XDMImportAdapter {
+ private XMLStreamReader reader;
+ private HashMap qNamePool = new HashMap();
+ private LinkedList tokensList;
+
+ public NonValidatingStaxAdapter(Context ctx, QueryLocation loc, XMLStreamReader reader) {
+ super(ctx, loc);
+ this.reader = reader;
+ this.tokensList = new LinkedList();
+ }
+
+ private TokenInterface getNext() {
+ TokenInterface tok = Token.END_SEQUENCE_TOKEN;
+ if (endOfSeq)
+ return tok;
+ try {
+ int event = reader.getEventType();
+ switch (event) {
+ case XMLStreamConstants.ATTRIBUTE:
+ break;
+ case XMLStreamConstants.DTD:
+ break;
+ case XMLStreamConstants.CDATA:
+ case XMLStreamConstants.CHARACTERS:
+ case XMLStreamConstants.SPACE:
+ {
+ String text = reader.getText();
+ reader.next();
+ event = reader.getEventType();
+ if (event == XMLStreamConstants.CDATA || event == XMLStreamConstants.SPACE || event == XMLStreamConstants.CHARACTERS) {
+ StringBuffer mergedText = new StringBuffer(text);
+ while (event == XMLStreamConstants.CDATA || event == XMLStreamConstants.SPACE || event == XMLStreamConstants.CHARACTERS) {
+ mergedText.append(reader.getText());
+ reader.next();
+ event = reader.getEventType();
+ }
+ text = mergedText.toString();
+ }
+ return new TextToken(Type.TEXT_NODE_UNTYPED_ATOMIC, createNextTokenId(Type.TEXT_NODE_UNTYPED_ATOMIC, null), text,curNsScope);
+ }
+ case XMLStreamConstants.COMMENT:
+ tok = new CommentToken(createNextTokenId(Type.COMMENT, null), reader.getText(),curNsScope);
+ break;
+ case XMLStreamConstants.END_DOCUMENT:
+ tok = new Token(Type.END_DOCUMENT,null,curNsScope);
+ break;
+ case XMLStreamConstants.END_ELEMENT:
+ XQName tName = transformQName(reader.getName());
+ tok = new ElementToken(Type.END_TAG, null, tName, curNsScope);
+ checkCloseNsScope();
+ level--;
+ break;
+ case XMLStreamConstants.ENTITY_DECLARATION: // not used
+ break;
+ case XMLStreamConstants.ENTITY_REFERENCE:
+ break;
+ case XMLStreamConstants.NAMESPACE:
+ break;
+ case XMLStreamConstants.NOTATION_DECLARATION:
+ tok = new TextToken(createNextTokenId(Type.NOTATION, null), reader.getText());
+ break;
+ case XMLStreamConstants.PROCESSING_INSTRUCTION:
+ tok = new ProcessingInstrToken(createNextTokenId(Type.PROCESSING_INSTRUCTION, null), reader.getPIData(), reader.getPITarget(),curNsScope);
+ break;
+ case XMLStreamConstants.START_DOCUMENT:
+ tok = new Token(Type.START_DOCUMENT,createNextTokenId(Type.START_DOCUMENT, null),curNsScope);
+ break;
+ case XMLStreamConstants.START_ELEMENT:
+ level++;
+
+ boolean foundId = false;
+ boolean foundIdREFS = false;
+
+ String xmlId = null;
+ String [] xmlIdREFS = null;
+
+ boolean createdNSScope = false;
+ tName = transformQName(reader.getName());
+ tok = new ElementToken(Type.START_TAG, createNextTokenId(Type.START_TAG, tName.toString()), tName, curNsScope);
+
+ for (int i = 0; i < reader.getNamespaceCount(); i++) {
+ String namespacePrefix = reader.getNamespacePrefix(i);
+ String namespaceUri = reader.getNamespaceURI(i);
+ XQName q;
+ if (namespacePrefix == null)
+ q = new QName(null, "xmlns");
+ else
+ q = new QName("xmlns", namespacePrefix);
+ boolean newOpened = checkOpenNsScopeAddNs(createdNSScope, q, namespaceUri);
+ if (newOpened && !createdNSScope)
+ tok = new ElementToken(Type.START_TAG, tok.getNodeId(), tName, curNsScope);
+ }
+
+ for (int i = 0, n = reader.getAttributeCount(); i < n; ++i) {
+ javax.xml.namespace.QName qName = reader.getAttributeName(i);
+ XQName q = transformQName(qName);
+ String value = reader.getAttributeValue(i);
+
+ String attType = reader.getAttributeType(i);
+
+ if (!foundId && (attType.equals("ID") || isXMLId(tName,q))) {
+ foundId = true;
+ xmlId = value;
+ }
+ if (!foundIdREFS && (attType.equals("IDREF") || isIDREF(tName,q))) {
+ foundIdREFS = true;
+ xmlIdREFS = new String[]{value};
+ }
+
+ if (!foundIdREFS && (attType.equals("IDREFS") || isIDREFS(tName,q))) {
+ foundIdREFS = true;
+ xmlIdREFS = Utils.split(value," ", false);
+ }
+
+
+ boolean newOpened = checkOpenNsScopeAddNs(createdNSScope, q, value);
+ if (newOpened && !createdNSScope)
+ tok = new ElementToken(Type.START_TAG, tok.getNodeId(), tName, curNsScope);
+
+ if (q.getNamespacePrefix() == null || q.getNamespacePrefix().equals("")) {
+ if (q.getLocalPart().equals("xmlns"))
+ continue;
+ } else if (q.getNamespacePrefix().equals("xmlns"))
+ continue;
+ NamedToken attToken = createAttributeToken(Type.UNTYPED_ATOMIC, value, q, curNsScope);
+ tokensList.add(attToken);
+
+ if (foundId) {
+ NamedToken nmToken = (NamedToken) tok ;
+ nmToken.setID(xmlId);
+ }
+ if (foundIdREFS) {
+ NamedToken nmToken = (NamedToken) tok;
+ nmToken.setIDREFS(xmlIdREFS);
+ }
+
+
+ }
+ break;
+ default:
+ }
+ if (reader.hasNext())
+ reader.next();
+ else {
+ endOfSeq = true;
+ }
+ return tok;
+ } catch (XMLStreamException e) {
+ e.printStackTrace();
+ } catch (MXQueryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ try {
+ reader.close();
+ } catch (XMLStreamException se) {
+ // TODO Auto-generated catch block
+ se.printStackTrace();
+ }
+ }
+ return Token.END_SEQUENCE_TOKEN;
+ }
+
+ public TokenInterface next() throws MXQueryException {
+ if (!tokensList.isEmpty()) {
+ TokenInterface tok = (TokenInterface) tokensList.removeFirst();
+ return tok;//(Token) tokensList.remove();
+ }
+ else {
+ TokenInterface tok = getNext();
+ return tok;
+ }
+ }
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
+ XDMImportAdapter res = new NonValidatingStaxAdapter(context, loc, reader);
+ res.uri = uri;
+ return res;
+ }
+
+ QName transformQName(javax.xml.namespace.QName qn) {
+// if (qNamePool.containsKey(qn)) {
+// return (QName)qNamePool.get(qn);
+// }
+ String prefix = qn.getPrefix();
+ if (prefix != null && prefix.length() == 0)
+ prefix = null;
+ QName q = new QName(qn.getNamespaceURI(),prefix,qn.getLocalPart());
+// qNamePool.put(qn, q);
+ return q;
+ }
+
+ protected void freeResources(boolean restartable)
+ throws MXQueryException {
+ super.freeResources(restartable);
+ if (!restartable)
+ qNamePool.clear();
+ }
+
+}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/XDMImportAdapter.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/XDMImportAdapter.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/src/ch/ethz/mxquery/xdmio/xmlAdapters/XDMImportAdapter.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -58,6 +58,7 @@
import ch.ethz.mxquery.datamodel.xdm.YearMonthDurAttrToken;
import ch.ethz.mxquery.exceptions.MXQueryException;
import ch.ethz.mxquery.exceptions.QueryLocation;
+import ch.ethz.mxquery.model.DataflowAnalysis;
import ch.ethz.mxquery.model.Iterator;
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.util.Stack;
@@ -72,7 +73,7 @@
protected String uri;
protected short level = 0;
protected Identifier last_id;
- private boolean generateNodeIds = true;
+ private boolean generateNodeIds = false;
protected String systemid = null;
protected String publicid = null;
protected String dtdRootElem = null;
@@ -307,4 +308,13 @@
public void setProjectionPaths(Vector paths) {
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ if ((requiredOptions & DataflowAnalysis.NODEID_ORDER) != 0)
+ generateNodeIds = true;
+ return super.require(requiredOptions);
+ }
+
+
+
}
Modified: trunk/MXQuery/xqib_src/ch/ethz/mxquery/functions/fn/Doc.java
===================================================================
--- trunk/MXQuery/xqib_src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 07:31:44 UTC (rev 4534)
+++ trunk/MXQuery/xqib_src/ch/ethz/mxquery/functions/fn/Doc.java 2012-03-12 08:47:44 UTC (rev 4535)
@@ -55,7 +55,8 @@
private boolean inValidateExpression = false;
private boolean tidyInput = false;
private String docURI = null;
- private NodeStoreIterator baseIterator = null;
+ private NodeStoreIterator baseIterator = null;
+ private int requiredOptions = 0;
//private Reader rd = null; // keep around to close
public Doc() {
@@ -138,6 +139,7 @@
copy.setTidyInput(this.tidyInput);
copy.setConstModePreserve(this.constModePreserve);
copy.setSubIters(subIters);
+ copy.requiredOptions = requiredOptions;
return copy;
}
@@ -188,5 +190,10 @@
else
return null;
}
+
+ public XDMIterator require(int requiredOptions) throws MXQueryException {
+ this.requiredOptions = requiredOptions;
+ return super.require(requiredOptions);
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|