You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/05/04 14:15:20 UTC
svn commit: r1333898 - in /incubator/jena/Jena2/ARQ/trunk:
src/main/java/com/hp/hpl/jena/sparql/expr/
src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/
src/main/java/com/hp/hpl/jena/sparql/util/
src/test/java/com/hp/hpl/jena/sparql/expr/ testing/ARQ/
Author: andy
Date: Fri May 4 12:15:19 2012
New Revision: 1333898
URL: http://svn.apache.org/viewvc?rev=1333898&view=rev
Log:
Rework date/time handling - use javax.xml.datattype.XMLGregorianCalendar
Added:
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDT.java
Removed:
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDate.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDateTime.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueGDay.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueGMonth.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueGMonthDay.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueGYear.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueGYearMonth.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueTime.java
Modified:
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueVisitor.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DateTimeStruct.java
incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions2.java
incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeValue.java
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/blank_manifest.ttl
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java Fri May 4 12:15:19 2012
@@ -18,6 +18,22 @@
package com.hp.hpl.jena.sparql.expr;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSD ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDboolean ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdate ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdateTime ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdecimal ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdouble ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDduration ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDfloat ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgDay ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgMonth ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgMonthDay ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgYear ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgYearMonth ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDinteger ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDstring ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDtime ;
import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_BOOLEAN ;
import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_DATE ;
import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_DATETIME ;
@@ -48,6 +64,7 @@ import java.util.Calendar ;
import javax.xml.datatype.DatatypeConfigurationException ;
import javax.xml.datatype.DatatypeFactory ;
import javax.xml.datatype.Duration ;
+import javax.xml.datatype.XMLGregorianCalendar ;
import org.openjena.atlas.lib.StrUtils ;
import org.openjena.atlas.logging.Log ;
@@ -70,7 +87,6 @@ import com.hp.hpl.jena.sparql.graph.Node
import com.hp.hpl.jena.sparql.graph.NodeTransform ;
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
import com.hp.hpl.jena.sparql.util.* ;
-import com.hp.hpl.jena.vocabulary.XSD ;
public abstract class NodeValue extends ExprNode
{
@@ -135,15 +151,15 @@ public abstract class NodeValue extends
public static final BigInteger IntegerZERO = BigInteger.ZERO ;
public static final BigDecimal DecimalZERO = BigDecimal.ZERO ;
- public static final NodeValue TRUE = NodeValue.makeNode("true", XSDDatatype.XSDboolean) ;
- public static final NodeValue FALSE = NodeValue.makeNode("false", XSDDatatype.XSDboolean) ;
+ public static final NodeValue TRUE = NodeValue.makeNode("true", XSDboolean) ;
+ public static final NodeValue FALSE = NodeValue.makeNode("false", XSDboolean) ;
public static final NodeValue nvZERO = NodeValue.makeNode(NodeConst.nodeZero) ;
public static final NodeValue nvONE = NodeValue.makeNode(NodeConst.nodeOne) ;
- public static final NodeValue nvNaN = NodeValue.makeNode("NaN", XSDDatatype.XSDdouble) ;
- public static final NodeValue nvINF = NodeValue.makeNode("INF", XSDDatatype.XSDdouble) ;
- public static final NodeValue nvNegINF = NodeValue.makeNode("-INF",XSDDatatype.XSDdouble) ;
+ public static final NodeValue nvNaN = NodeValue.makeNode("NaN", XSDdouble) ;
+ public static final NodeValue nvINF = NodeValue.makeNode("INF", XSDdouble) ;
+ public static final NodeValue nvNegINF = NodeValue.makeNode("-INF",XSDdouble) ;
public static final NodeValue nvEmptyString = NodeValue.makeString("") ;
@@ -151,6 +167,8 @@ public abstract class NodeValue extends
private static final String strForUnNode = "node value nothing" ;
public static final NodeValue nvNothing = NodeValue.makeNode(Node.createAnon(new AnonId("node value nothing"))) ;
+ public static final String xsdNamespace = XSD+"#" ;
+
private static DatatypeFactory datatypefactory = null ;
static
{
@@ -222,32 +240,42 @@ public abstract class NodeValue extends
{ return new NodeValueDecimal(BigDecimal.valueOf(d)) ; }
public static NodeValue makeDecimal(String lexicalForm)
- { return NodeValue.makeNode(lexicalForm, XSDDatatype.XSDdecimal) ; }
+ { return NodeValue.makeNode(lexicalForm, XSDdecimal) ; }
public static NodeValue makeDateTime(String lexicalForm)
- { return NodeValue.makeNode(lexicalForm, XSDDatatype.XSDdateTime) ; }
+ { return NodeValue.makeNode(lexicalForm, XSDdateTime) ; }
+
+ public static NodeValue makeDate(String lexicalForm)
+ { return NodeValue.makeNode(lexicalForm, XSDdate) ; }
- // Deprecate calendar operations?
- // makeDateTime(Calendar)
- // makeDate(Calendar)
- @Deprecated
public static NodeValue makeDateTime(Calendar cal)
{
- XSDDateTime xdt = new XSDDateTime(cal) ;
- return new NodeValueDateTime(xdt) ; }
+ String lex = Utils.calendarToXSDDateTimeString(cal) ;
+ return NodeValue.makeNode(lex, XSDdateTime) ;
+ }
+
+ public static NodeValue makeDateTime(XMLGregorianCalendar cal)
+ {
+ String lex = cal.toXMLFormat() ;
+ Node node = Node.createLiteral(lex, XSDdateTime) ;
+ return new NodeValueDT(lex, node) ;
+ }
- public static NodeValue makeDate(String lexicalForm)
- { return NodeValue.makeNode(lexicalForm, XSDDatatype.XSDdate) ; }
-
- @Deprecated
public static NodeValue makeDate(Calendar cal)
{
- XSDDateTime xdt = new XSDDateTime(cal) ;
- return new NodeValueDate(xdt) ;
+ String lex = Utils.calendarToXSDDateString(cal) ;
+ return NodeValue.makeNode(lex, XSDdate) ;
}
+ public static NodeValue makeDate(XMLGregorianCalendar cal)
+ {
+ String lex = cal.toXMLFormat() ;
+ Node node = Node.createLiteral(lex, XSDdate) ;
+ return new NodeValueDT(lex, node) ;
+ }
+
public static NodeValue makeDuration(String lexicalForm)
- { return NodeValue.makeNode(lexicalForm, XSDDatatype.XSDduration) ; }
+ { return NodeValue.makeNode(lexicalForm, XSDduration) ; }
public static NodeValue makeBoolean(boolean b)
{ return b ? NodeValue.TRUE : NodeValue.FALSE ; }
@@ -307,55 +335,55 @@ public abstract class NodeValue extends
public static NodeValue makeNodeBoolean(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, null, XSD.xboolean.getURI()) ;
+ NodeValue nv = makeNode(lexicalForm, null, XSDboolean.getURI()) ;
return nv ;
}
public static NodeValue makeNodeInteger(long v)
{
- NodeValue nv = makeNode(Long.toString(v), null, XSD.integer.getURI()) ;
+ NodeValue nv = makeNode(Long.toString(v), null, XSDinteger.getURI()) ;
return nv ;
}
public static NodeValue makeNodeInteger(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, null, XSD.integer.getURI()) ;
+ NodeValue nv = makeNode(lexicalForm, null, XSDinteger.getURI()) ;
return nv ;
}
public static NodeValue makeNodeFloat(float f)
{
- NodeValue nv = makeNode(Utils.stringForm(f), null, XSD.xfloat.getURI()) ;
+ NodeValue nv = makeNode(Utils.stringForm(f), null, XSDfloat.getURI()) ;
return nv ;
}
public static NodeValue makeNodeFloat(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, null, XSD.xdouble.getURI()) ;
+ NodeValue nv = makeNode(lexicalForm, null, XSDdouble.getURI()) ;
return nv ;
}
public static NodeValue makeNodeDouble(double v)
{
- NodeValue nv = makeNode(Utils.stringForm(v), null, XSD.xdouble.getURI()) ;
+ NodeValue nv = makeNode(Utils.stringForm(v), null, XSDdouble.getURI()) ;
return nv ;
}
public static NodeValue makeNodeDouble(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, null, XSD.xdouble.getURI()) ;
+ NodeValue nv = makeNode(lexicalForm, null, XSDdouble.getURI()) ;
return nv ;
}
public static NodeValue makeNodeDecimal(BigDecimal decimal)
{
- NodeValue nv = makeNode(Utils.stringForm(decimal), null, XSD.decimal.getURI()) ;
+ NodeValue nv = makeNode(Utils.stringForm(decimal), null, XSDdecimal.getURI()) ;
return nv ;
}
public static NodeValue makeNodeDecimal(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, null, XSD.decimal.getURI()) ;
+ NodeValue nv = makeNode(lexicalForm, null, XSDdecimal.getURI()) ;
return nv ;
}
@@ -368,13 +396,13 @@ public abstract class NodeValue extends
public static NodeValue makeNodeDateTime(Calendar date)
{
String lex = Utils.calendarToXSDDateTimeString(date) ;
- NodeValue nv = makeNode(lex, XSDDatatype.XSDdateTime) ;
+ NodeValue nv = makeNode(lex, XSDdateTime) ;
return nv ;
}
public static NodeValue makeNodeDateTime(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, XSDDatatype.XSDdateTime) ;
+ NodeValue nv = makeNode(lexicalForm, XSDdateTime) ;
return nv ;
}
@@ -382,13 +410,13 @@ public abstract class NodeValue extends
{
//XSDDateTime dt = new XSDDateTime(date) ;
String lex = Utils.calendarToXSDDateString(date) ;
- NodeValue nv = makeNode(lex, XSDDatatype.XSDdate) ;
+ NodeValue nv = makeNode(lex, XSDdate) ;
return nv ;
}
public static NodeValue makeNodeDate(String lexicalForm)
{
- NodeValue nv = makeNode(lexicalForm, XSDDatatype.XSDdate) ;
+ NodeValue nv = makeNode(lexicalForm, XSDdate) ;
return nv ;
}
@@ -894,10 +922,8 @@ public abstract class NodeValue extends
public BigDecimal getDecimal() { raise(new ExprEvalTypeException("Not a decimal: "+this)) ; return null ; }
public float getFloat() { raise(new ExprEvalTypeException("Not a float: "+this)) ; return Float.NaN ; }
public double getDouble() { raise(new ExprEvalTypeException("Not a double: "+this)) ; return Double.NaN ; }
- public XSDDateTime getDateTime() { raise(new ExprEvalTypeException("No DateTime value: "+this)) ; return null ; }
-// public XSDDateTime getDate() { raise(new ExprEvalException("Not a date: "+this)) ; return null ; }
-// public XSDDateTime getTime() { raise(new ExprEvalException("Not a time: "+this)) ; return null ; }
-//
+ // Value representation for all date and time values.
+ public XMLGregorianCalendar getDateTime() { raise(new ExprEvalTypeException("No DateTime value: "+this)) ; return null ; }
// /*
// gYearMonth dddd-mm
// gYear dddd
@@ -905,11 +931,6 @@ public abstract class NodeValue extends
// gDay ---DD
// gMonth --MM
// */
-// public XSDDateTime getGYear() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
-// public XSDDateTime getGYearMonth() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
-// public XSDDateTime getGMonth() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
-// public XSDDateTime getGMonthDay() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
-// public XSDDateTime getGDay() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
public Duration getDuration() { raise(new ExprEvalTypeException("Not a duration: "+this)) ; return null ; }
@@ -971,13 +992,26 @@ public abstract class NodeValue extends
// Returns null for unrecognized literal.
private static NodeValue _setByValue(Node node)
{
+ if ( NodeUtils.hasLang(node) )
+ // Check for RDF 1.1!
+ return null ;
LiteralLabel lit = node.getLiteral() ;
-
- // 50% of the time of this method is in isValidLiteral and the lexical form parsing.
-
+ String lex = lit.getLexicalForm() ;
+ RDFDatatype datatype = lit.getDatatype() ;
+
+ // Quick check.
+ // Only XSD supported.
+ // And (for testing) roman numerals.
+ String datatypeURI = datatype.getURI() ;
+ if ( ! datatypeURI.startsWith(xsdNamespace) && ! enableRomanNumerals.getValue() )
+ {
+ // Not XSD.
+ return null ;
+ }
+
try { // DatatypeFormatException - should not happen
- if ( sameValueAsString && XSDDatatype.XSDstring.isValidLiteral(node.getLiteral()) )
+ if ( sameValueAsString && XSDstring.isValidLiteral(lit) )
// String - plain or xsd:string
return new NodeValueString(lit.getLexicalForm(), node) ;
@@ -991,9 +1025,10 @@ public abstract class NodeValue extends
// Order here is promotion order integer-decimal-float-double
- if ( ! node.getLiteralDatatype().equals(XSDDatatype.XSDdecimal) )
+ if ( ! datatype.equals(XSDdecimal) )
{
- if ( XSDDatatype.XSDinteger.isValidLiteral(lit) )
+ // XSD integer and derived types
+ if ( XSDinteger.isValidLiteral(lit) )
{
String s = node.getLiteralLexicalForm() ;
if ( s.startsWith("+") )
@@ -1006,13 +1041,13 @@ public abstract class NodeValue extends
}
}
- if ( XSDDatatype.XSDdecimal.isValidLiteral(lit) )
+ if ( datatype.equals(XSDdecimal) && XSDdecimal.isValidLiteral(lit) )
{
BigDecimal decimal = new BigDecimal(lit.getLexicalForm()) ;
return new NodeValueDecimal(decimal, node) ;
}
- if ( XSDDatatype.XSDfloat.isValidLiteral(lit) )
+ if ( datatype.equals(XSDfloat) && XSDfloat.isValidLiteral(lit) )
{
// NB If needed, call to floatValue, then assign to double.
// Gets 1.3f != 1.3d right
@@ -1020,66 +1055,66 @@ public abstract class NodeValue extends
return new NodeValueFloat(f, node) ;
}
- if ( XSDDatatype.XSDdouble.isValidLiteral(lit) )
+ if ( datatype.equals(XSDdouble) && XSDdouble.isValidLiteral(lit) )
{
double d = ((Number)lit.getValue()).doubleValue() ;
return new NodeValueDouble(d, node) ;
}
- if ( XSDDatatype.XSDdateTime.isValidLiteral(lit) )
+ if ( datatype.equals(XSDdateTime) && XSDdateTime.isValidLiteral(lit) )
{
XSDDateTime dateTime = (XSDDateTime)lit.getValue() ;
- return new NodeValueDateTime(dateTime, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDdate.isValidLiteral(lit) )
+ if ( datatype.equals(XSDdate) && XSDdate.isValidLiteral(lit) )
{
// Jena datatype support works on masked dataTimes.
XSDDateTime dateTime = (XSDDateTime)lit.getValue() ;
- return new NodeValueDate(dateTime, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDtime.isValidLiteral(lit) )
+ if ( datatype.equals(XSDtime) && XSDtime.isValidLiteral(lit) )
{
// Jena datatype support works on masked dataTimes.
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueTime(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDgYear.isValidLiteral(lit) )
+ if ( datatype.equals(XSDgYear) && XSDgYear.isValidLiteral(lit) )
{
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueGYear(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDgYearMonth.isValidLiteral(lit) )
+ if ( datatype.equals(XSDgYearMonth) && XSDgYearMonth.isValidLiteral(lit) )
{
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueGYearMonth(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDgMonth.isValidLiteral(lit) )
+ if ( datatype.equals(XSDgMonth) && XSDgMonth.isValidLiteral(lit) )
{
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueGMonth(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDgMonthDay.isValidLiteral(lit) )
+ if ( datatype.equals(XSDgMonthDay) && XSDgMonthDay.isValidLiteral(lit) )
{
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueGMonthDay(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDgDay.isValidLiteral(lit) )
+ if ( datatype.equals(XSDgDay) && XSDgDay.isValidLiteral(lit) )
{
XSDDateTime time = (XSDDateTime)lit.getValue() ;
- return new NodeValueGDay(time, node) ;
+ return new NodeValueDT(lex, node) ;
}
- if ( XSDDatatype.XSDduration.isValidLiteral(lit) )
+ if ( datatype.equals(XSDduration) && XSDduration.isValidLiteral(lit) )
{
//XSDDuration duration = (XSDDuration)lit.getValue() ;
Duration jduration = createDuration(lit.getLexicalForm()) ;
return new NodeValueDuration(jduration, node) ;
}
- if ( XSDDatatype.XSDboolean.isValidLiteral(lit) )
+ if ( datatype.equals(XSDboolean) && XSDboolean.isValidLiteral(lit) )
{
boolean b = ((Boolean)lit.getValue()).booleanValue() ;
return new NodeValueBoolean(b, node) ;
Added: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDT.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDT.java?rev=1333898&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDT.java (added)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDT.java Fri May 4 12:15:19 2012
@@ -0,0 +1,100 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 com.hp.hpl.jena.sparql.expr.nodevalue;
+
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdate ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDdateTime ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgDay ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgMonth ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgMonthDay ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgYear ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDgYearMonth ;
+import static com.hp.hpl.jena.datatypes.xsd.XSDDatatype.XSDtime ;
+
+import javax.xml.datatype.DatatypeConfigurationException ;
+import javax.xml.datatype.DatatypeFactory ;
+import javax.xml.datatype.XMLGregorianCalendar ;
+
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
+import com.hp.hpl.jena.sparql.expr.NodeValue ;
+
+public class NodeValueDT extends NodeValue
+{
+ private static DatatypeFactory datatypefactory = null ;
+ static
+ {
+ try { datatypefactory = DatatypeFactory.newInstance() ; }
+ catch (DatatypeConfigurationException ex)
+ { throw new ARQInternalErrorException("Can't create a javax.xml DatatypeFactory") ; }
+ }
+
+ final XMLGregorianCalendar datatime ;
+
+ public NodeValueDT(String lex, Node n)
+ {
+ super(n) ;
+ // Java bug : Java6 gMonth with a timezone of Z causes IllegalArgumnentException
+ if ( isGMonth() )
+ {
+ if ( lex.endsWith("Z") )
+ {
+ lex = lex.substring(0, lex.length()-1) ;
+ datatime = datatypefactory.newXMLGregorianCalendar(lex) ;
+ datatime.setTimezone(0) ;
+ return ;
+ }
+ }
+ datatime = datatypefactory.newXMLGregorianCalendar(lex) ;
+ }
+
+ // Look at datatype.
+ // By doing this here, the check of valid lexical form must have been done to create the node.
+ @Override
+ public boolean isDateTime() { return XSDdateTime.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isDate() { return XSDdate.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isTime() { return XSDtime.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isGYear() { return XSDgYear.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isGYearMonth() { return XSDgYearMonth.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isGMonth() { return XSDgMonth.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isGMonthDay() { return XSDgMonthDay.equals(getNode().getLiteralDatatype()) ; }
+ @Override
+ public boolean isGDay() { return XSDgDay.equals(getNode().getLiteralDatatype()) ; }
+
+ @Override
+ public XMLGregorianCalendar getDateTime() { return (XMLGregorianCalendar)datatime.clone() ; }
+
+
+ @Override
+ protected Node makeNode()
+ {
+ return null ;
+ }
+
+ @Override
+ public void visit(NodeValueVisitor visitor)
+ { visitor.visit(this) ; }
+}
+
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueVisitor.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueVisitor.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueVisitor.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueVisitor.java Fri May 4 12:15:19 2012
@@ -21,20 +21,21 @@ package com.hp.hpl.jena.sparql.expr.node
public interface NodeValueVisitor
{
public void visit(NodeValueBoolean nv) ;
- public void visit(NodeValueDate nv) ;
- public void visit(NodeValueDateTime nv) ;
+// public void visit(NodeValueDate nv) ;
+// public void visit(NodeValueDateTime nv) ;
public void visit(NodeValueDecimal nv) ;
public void visit(NodeValueDouble nv) ;
public void visit(NodeValueFloat nv) ;
public void visit(NodeValueInteger nv) ;
public void visit(NodeValueNode nv) ;
public void visit(NodeValueString nv) ;
- public void visit(NodeValueTime nv) ;
+ public void visit(NodeValueDT nv) ;
+// public void visit(NodeValueTime nv) ;
public void visit(NodeValueDuration nodeValueDuration);
- public void visit(NodeValueGYear nv) ;
- public void visit(NodeValueGYearMonth nv) ;
- public void visit(NodeValueGMonth nv) ;
- public void visit(NodeValueGMonthDay nv) ;
- public void visit(NodeValueGDay nv) ;
+// public void visit(NodeValueGYear nv) ;
+// public void visit(NodeValueGYearMonth nv) ;
+// public void visit(NodeValueGMonth nv) ;
+// public void visit(NodeValueGMonthDay nv) ;
+// public void visit(NodeValueGDay nv) ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java Fri May 4 12:15:19 2012
@@ -34,6 +34,7 @@ import java.util.regex.Pattern ;
import javax.xml.datatype.DatatypeConstants ;
import javax.xml.datatype.Duration ;
+import javax.xml.datatype.XMLGregorianCalendar ;
import org.openjena.atlas.lib.StrUtils ;
import org.openjena.atlas.logging.Log ;
@@ -889,8 +890,8 @@ public class XSDFuncOp
private static int compareDateTimeFO(NodeValue nv1, NodeValue nv2)
{
- XSDDateTime dt1 = nv1.getDateTime() ;
- XSDDateTime dt2 = nv2.getDateTime() ;
+ XMLGregorianCalendar dt1 = nv1.getDateTime() ;
+ XMLGregorianCalendar dt2 = nv2.getDateTime() ;
int x = compareXSDDateTime(dt1, dt2) ;
@@ -899,7 +900,7 @@ public class XSDFuncOp
NodeValue nv3 = fixupDateTime(nv1) ;
if ( nv3 != null )
{
- XSDDateTime dt3 = nv3.getDateTime() ;
+ XMLGregorianCalendar dt3 = nv3.getDateTime() ;
x = compareXSDDateTime(dt3, dt2) ;
if ( x == XSDDateTime.INDETERMINATE )
throw new ARQInternalErrorException("Still get indeterminate comparison") ;
@@ -909,7 +910,7 @@ public class XSDFuncOp
nv3 = fixupDateTime(nv2) ;
if ( nv3 != null )
{
- XSDDateTime dt3 = nv3.getDateTime() ;
+ XMLGregorianCalendar dt3 = nv3.getDateTime() ;
x = compareXSDDateTime(dt1, dt3) ;
if ( x == XSDDateTime.INDETERMINATE )
throw new ARQInternalErrorException("Still get indeterminate comparison") ;
@@ -926,8 +927,8 @@ public class XSDFuncOp
// This only differs by some "dateTime" => "date"
private static int compareDateFO(NodeValue nv1, NodeValue nv2)
{
- XSDDateTime dt1 = nv1.getDateTime() ;
- XSDDateTime dt2 = nv2.getDateTime() ;
+ XMLGregorianCalendar dt1 = nv1.getDateTime() ;
+ XMLGregorianCalendar dt2 = nv2.getDateTime() ;
int x = compareXSDDateTime(dt1, dt2) ; // Yes - compareDateTIme
if ( x == XSDDateTime.INDETERMINATE )
@@ -935,7 +936,7 @@ public class XSDFuncOp
NodeValue nv3 = fixupDate(nv1) ;
if ( nv3 != null )
{
- XSDDateTime dt3 = nv3.getDateTime() ;
+ XMLGregorianCalendar dt3 = nv3.getDateTime() ;
x = compareXSDDateTime(dt3, dt2) ;
if ( x == XSDDateTime.INDETERMINATE )
throw new ARQInternalErrorException("Still get indeterminate comparison") ;
@@ -945,7 +946,7 @@ public class XSDFuncOp
nv3 = fixupDate(nv2) ;
if ( nv3 != null )
{
- XSDDateTime dt3 = nv3.getDateTime() ;
+ XMLGregorianCalendar dt3 = nv3.getDateTime() ;
x = compareXSDDateTime(dt1, dt3) ;
if ( x == XSDDateTime.INDETERMINATE )
throw new ARQInternalErrorException("Still get indeterminate comparison") ;
@@ -981,7 +982,7 @@ public class XSDFuncOp
return nv ;
}
- private static int compareXSDDateTime(XSDDateTime dt1 , XSDDateTime dt2)
+ private static int compareXSDDateTime(XMLGregorianCalendar dt1 , XMLGregorianCalendar dt2)
{
// Returns codes are -1/0/1 but also 2 for "Indeterminate"
// which occurs when one has a timezone and one does not
@@ -1098,7 +1099,7 @@ public class XSDFuncOp
if ( ! nv.hasDateTime() )
throw new ExprEvalTypeException("Not a date/time type: "+nv) ;
- XSDDateTime xsdDT = nv.getDateTime() ;
+ XMLGregorianCalendar xsdDT = nv.getDateTime() ;
if ( XSDDatatype.XSDdateTime.equals(xsd) )
{
@@ -1106,7 +1107,7 @@ public class XSDFuncOp
if ( nv.isDateTime() ) return nv ;
if ( ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:dateTime: "+nv) ;
// DateTime with time 00:00:00
- String x = String.format("%04d-%02d-%02dT00:00:00", xsdDT.getYears(), xsdDT.getMonths(),xsdDT.getDays()) ;
+ String x = String.format("%04d-%02d-%02dT00:00:00", xsdDT.getYear(), xsdDT.getMonth(),xsdDT.getDay()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1115,7 +1116,7 @@ public class XSDFuncOp
// ==> Date
if ( nv.isDate() ) return nv ;
if ( ! nv.isDateTime() ) throw new ExprEvalTypeException("Can't cast to XSD:date: "+nv) ;
- String x = String.format("%04d-%02d-%02d", xsdDT.getYears(), xsdDT.getMonths(),xsdDT.getDays()) ;
+ String x = String.format("%04d-%02d-%02d", xsdDT.getYear(), xsdDT.getMonth(),xsdDT.getDay()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1127,8 +1128,8 @@ public class XSDFuncOp
// Careful foratting
DecimalFormat nf = new DecimalFormat("00.####") ;
nf.setDecimalSeparatorAlwaysShown(false) ;
- String x = nf.format(xsdDT.getSeconds()) ;
- x = String.format("%02d:%02d:%s", xsdDT.getHours(), xsdDT.getMinutes(),x) ;
+ String x = nf.format(xsdDT.getSecond()) ;
+ x = String.format("%02d:%02d:%s", xsdDT.getHour(), xsdDT.getMinute(),x) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1137,7 +1138,7 @@ public class XSDFuncOp
// ==> Year
if ( nv.isGYear() ) return nv ;
if ( ! nv.isDateTime() && ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:gYear: "+nv) ;
- String x = String.format("%04d", xsdDT.getYears()) ;
+ String x = String.format("%04d", xsdDT.getYear()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1146,7 +1147,7 @@ public class XSDFuncOp
// ==> YearMonth
if ( nv.isGYearMonth() ) return nv ;
if ( ! nv.isDateTime() && ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:gYearMonth: "+nv) ;
- String x = String.format("%04d-%02d", xsdDT.getYears(), xsdDT.getMonths()) ;
+ String x = String.format("%04d-%02d", xsdDT.getYear(), xsdDT.getMonth()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1155,7 +1156,7 @@ public class XSDFuncOp
// ==> Month
if ( nv.isGMonth() ) return nv ;
if ( ! nv.isDateTime() && ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:gMonth: "+nv) ;
- String x = String.format("--%02d", xsdDT.getMonths()) ;
+ String x = String.format("--%02d", xsdDT.getMonth()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1164,7 +1165,7 @@ public class XSDFuncOp
// ==> MonthDay
if ( nv.isGMonthDay() ) return nv ;
if ( ! nv.isDateTime() && ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:gMonthDay: "+nv) ;
- String x = String.format("--%02d-%02d", xsdDT.getMonths(), xsdDT.getDays()) ;
+ String x = String.format("--%02d-%02d", xsdDT.getMonth(), xsdDT.getDay()) ;
return NodeValue.makeNode(x, xsd) ;
}
@@ -1173,7 +1174,7 @@ public class XSDFuncOp
// Day
if ( nv.isGDay() ) return nv ;
if ( ! nv.isDateTime() && ! nv.isDate() ) throw new ExprEvalTypeException("Can't cast to XSD:gDay: "+nv) ;
- String x = String.format("---%02d", xsdDT.getDays()) ;
+ String x = String.format("---%02d", xsdDT.getDay()) ;
return NodeValue.makeNode(x, xsd) ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DateTimeStruct.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DateTimeStruct.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DateTimeStruct.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/DateTimeStruct.java Fri May 4 12:15:19 2012
@@ -22,28 +22,6 @@ package com.hp.hpl.jena.sparql.util;
public class DateTimeStruct
{
- // V2
- // Does gregorian stuff
-
- // "2001Z" gYear
- // "2001-01Z" gYearMonth
- // "--01Z" gMonth
- // "--01-30Z" gMonthDay
- // "---30Z" gDay
-
-
-// private static final int idxNeg = 0 ;
-// private static final int idxYear = 1 ;
-// private static final int idxMonth = 2 ;
-// private static final int idxDay = 3 ;
-//
-// private static final int idxHour = 4 ;
-// private static final int idxMinute = 5 ;
-// private static final int idxSecond = 6 ;
-// private static final int idxTimezone = 7 ;
-//
-// private String data[] = new String[8] ;
-
public boolean xsdDateTime ;
public String neg = null ; // Null if none.
public String year = null ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions2.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions2.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions2.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestExpressions2.java Fri May 4 12:15:19 2012
@@ -49,9 +49,9 @@ public class TestExpressions2 extends As
@Test public void gregorian_eq_08() { eval("'1999-01'^^xsd:gYearMonth != '2001Z'^^xsd:gYear", true) ; }
@Test public void gregorian_eq_09() { eval("'1999-01'^^xsd:gYearMonth != '2001Z'^^xsd:gYear", true) ; }
- @Test public void gregorian_cmp_01() { eval("'1999'^^xsd:gYear < '2000'^^xsd:gYear", true) ; }
- @Test public void gregorian_cmp_02() { eval("'1999'^^xsd:gYear > '2000'^^xsd:gYear", false) ; }
- @Test public void gregorian_cmp_03() { eval("'1999'^^xsd:gYear < '2000+01:00'^^xsd:gYear", true) ; }
+ @Test public void gregorian_cmp_01() { eval("'1999'^^xsd:gYear < '2001'^^xsd:gYear", true) ; }
+ @Test public void gregorian_cmp_02() { eval("'1999'^^xsd:gYear > '2001'^^xsd:gYear", false) ; }
+ @Test public void gregorian_cmp_03() { eval("'1999'^^xsd:gYear < '2001+01:00'^^xsd:gYear", true) ; }
@Test (expected=ExprEvalException.class)
public void gregorian_cmp_04() { eval("'1999'^^xsd:gYear < '1999+05:00'^^xsd:gYear") ; }
Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeValue.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeValue.java?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeValue.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeValue.java Fri May 4 12:15:19 2012
@@ -178,8 +178,8 @@ public class TestNodeValue extends TestC
assertTrue("Not a dateTime: "+v, v.isDateTime()) ;
assertFalse("A date: "+v, v.isDate()) ;
assertTrue("Not a node: "+v, v.hasNode()) ;
- Calendar cal2 = v.getDateTime().asCalendar() ;
- assertEquals("Not equal: "+v, cal1, cal2) ;
+ Calendar cal2 = v.getDateTime().toGregorianCalendar() ;
+ assertEquals("Not equal: "+v, 0, cal1.compareTo(cal2)) ;
}
@Test public void testDateTime5()
@@ -240,8 +240,8 @@ public class TestNodeValue extends TestC
assertTrue("Not a date: "+v, v.isDate()) ;
assertFalse("A dateTime: "+v, v.isDateTime()) ;
assertTrue("Not a node: "+v, v.hasNode()) ;
- Calendar cal2 = v.getDateTime().asCalendar() ;
- assertEquals("Not equal: "+v, cal1, cal2) ;
+ Calendar cal2 = v.getDateTime().toGregorianCalendar() ;
+ assertEquals("Not equal: "+v, 0, cal1.compareTo(cal2)) ;
}
@Test public void testDate5()
Modified: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/blank_manifest.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/blank_manifest.ttl?rev=1333898&r1=1333897&r2=1333898&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/blank_manifest.ttl (original)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/blank_manifest.ttl Fri May 4 12:15:19 2012
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .