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/04/29 17:53:30 UTC
svn commit: r1331929 - in
/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr:
Expr.java NodeValue.java ValueSpaceClassification.java
nodevalue/NodeValueDouble.java nodevalue/NodeValueDuration.java
nodevalue/XSDFuncOp.java
Author: andy
Date: Sun Apr 29 15:53:30 2012
New Revision: 1331929
URL: http://svn.apache.org/viewvc?rev=1331929&view=rev
Log:
Switch to using javax.xml.datattypes.Duration, not Jena's XSDDuration, as internal value of a NodeValueDuration.
More arthimetic can be supported this way.
(But then normally, Java uses it's built in Xerces so it is different route to same heritiage.)
Modified:
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java
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/ValueSpaceClassification.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDouble.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDuration.java
incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java?rev=1331929&r1=1331928&r2=1331929&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java Sun Apr 29 15:53:30 2012
@@ -21,6 +21,8 @@ package com.hp.hpl.jena.sparql.expr;
import java.util.Collection ;
import java.util.Set ;
+import javax.xml.datatype.DatatypeConstants ;
+
import com.hp.hpl.jena.sparql.core.Var ;
import com.hp.hpl.jena.sparql.engine.binding.Binding ;
import com.hp.hpl.jena.sparql.function.FunctionEnv ;
@@ -28,12 +30,12 @@ import com.hp.hpl.jena.sparql.graph.Node
public interface Expr
{
- public static final int CMP_GREATER = +1 ;
- public static final int CMP_EQUAL = 0 ;
- public static final int CMP_LESS = -1 ;
+ public static final int CMP_GREATER = DatatypeConstants.GREATER ;
+ public static final int CMP_EQUAL = DatatypeConstants.EQUAL ;
+ public static final int CMP_LESS = DatatypeConstants.LESSER ;
public static final int CMP_UNEQUAL = -9 ;
- public static final int CMP_INDETERMINATE = 2 ;
+ public static final int CMP_INDETERMINATE = DatatypeConstants.INDETERMINATE ;
/** Test whether a Constraint is satisfied, given a set of bindings
* Includes error propagtion and Effective Boolean Value rules.
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=1331929&r1=1331928&r2=1331929&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 Sun Apr 29 15:53:30 2012
@@ -18,20 +18,45 @@
package com.hp.hpl.jena.sparql.expr;
-import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.* ;
+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 ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_DIFFERENT ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_DURATION ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_G_DAY ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_G_MONTH ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_G_MONTHDAY ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_G_YEAR ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_G_YEARMONTH ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_LANG ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_NODE ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_NUM ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_STRING ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_TIME ;
+import static com.hp.hpl.jena.sparql.expr.ValueSpaceClassification.VSPACE_UNKNOWN ;
+import static javax.xml.datatype.DatatypeConstants.DAYS ;
+import static javax.xml.datatype.DatatypeConstants.HOURS ;
+import static javax.xml.datatype.DatatypeConstants.MINUTES ;
+import static javax.xml.datatype.DatatypeConstants.MONTHS ;
+import static javax.xml.datatype.DatatypeConstants.SECONDS ;
+import static javax.xml.datatype.DatatypeConstants.YEARS ;
import java.math.BigDecimal ;
import java.math.BigInteger ;
import java.util.Calendar ;
+import javax.xml.datatype.DatatypeConfigurationException ;
+import javax.xml.datatype.DatatypeFactory ;
+import javax.xml.datatype.Duration ;
+
import org.openjena.atlas.lib.StrUtils ;
+import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.datatypes.DatatypeFormatException ;
import com.hp.hpl.jena.datatypes.RDFDatatype ;
import com.hp.hpl.jena.datatypes.TypeMapper ;
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ;
import com.hp.hpl.jena.datatypes.xsd.XSDDateTime ;
-import com.hp.hpl.jena.datatypes.xsd.XSDDuration ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.impl.LiteralLabel ;
import com.hp.hpl.jena.query.ARQ ;
@@ -44,13 +69,7 @@ import com.hp.hpl.jena.sparql.function.F
import com.hp.hpl.jena.sparql.graph.NodeConst ;
import com.hp.hpl.jena.sparql.graph.NodeTransform ;
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
-import org.openjena.atlas.logging.Log ;
-import com.hp.hpl.jena.sparql.util.FmtUtils ;
-import com.hp.hpl.jena.sparql.util.NodeUtils ;
-import com.hp.hpl.jena.sparql.util.RefBoolean ;
-import com.hp.hpl.jena.sparql.util.RomanNumeral ;
-import com.hp.hpl.jena.sparql.util.RomanNumeralDatatype ;
-import com.hp.hpl.jena.sparql.util.Utils ;
+import com.hp.hpl.jena.sparql.util.* ;
import com.hp.hpl.jena.vocabulary.XSD ;
public abstract class NodeValue extends ExprNode
@@ -744,10 +763,10 @@ public abstract class NodeValue extends
throw new ARQInternalErrorException("Compare failure "+nv1+" and "+nv2) ;
}
- private static ValueSpaceClassification classifyValueOp(NodeValue nv1, NodeValue nv2)
+ public static ValueSpaceClassification classifyValueOp(NodeValue nv1, NodeValue nv2)
{
- ValueSpaceClassification c1 = classifyValueSpace(nv1) ;
- ValueSpaceClassification c2 = classifyValueSpace(nv2) ;
+ ValueSpaceClassification c1 = nv1.getValueSpace() ;
+ ValueSpaceClassification c2 = nv2.getValueSpace() ;
if ( c1 == c2 ) return c1 ;
if ( c1 == VSPACE_UNKNOWN || c2 == VSPACE_UNKNOWN )
return VSPACE_UNKNOWN ;
@@ -756,6 +775,8 @@ public abstract class NodeValue extends
return VSPACE_DIFFERENT ;
}
+ public ValueSpaceClassification getValueSpace() { return classifyValueSpace(this) ; }
+
private static ValueSpaceClassification classifyValueSpace(NodeValue nv)
{
if ( nv.isNumber() ) return VSPACE_NUM ;
@@ -833,6 +854,22 @@ public abstract class NodeValue extends
public boolean isTime() { return false ; }
public boolean isDuration() { return false ; }
+ public boolean isYearMonth()
+ {
+ if ( ! isDuration() ) return false ;
+ Duration dur = getDuration() ;
+ return ( dur.isSet(YEARS) || dur.isSet(MONTHS) ) &&
+ ! dur.isSet(DAYS) && ! dur.isSet(HOURS) && ! dur.isSet(MINUTES) && ! dur.isSet(SECONDS) ;
+ }
+
+ boolean isDayTime()
+ {
+ if ( ! isDuration() ) return false ;
+ Duration dur = getDuration() ;
+ return !dur.isSet(YEARS) && ! dur.isSet(MONTHS) &&
+ ( dur.isSet(DAYS) || dur.isSet(HOURS) || dur.isSet(MINUTES) || dur.isSet(SECONDS) );
+ }
+
public boolean isGYear() { return false ; }
public boolean isGYearMonth() { return false ; }
public boolean isGMonth() { return false ; }
@@ -865,7 +902,7 @@ public abstract class NodeValue extends
// public XSDDateTime getGDay() { raise(new ExprEvalException("Not a dateTime: "+this)) ; return null ; }
- public XSDDuration getDuration() { raise(new ExprEvalTypeException("Not a duration: "+this)) ; return null ; }
+ public Duration getDuration() { raise(new ExprEvalTypeException("Not a duration: "+this)) ; return null ; }
// ----------------------------------------------------------------
// ---- Setting : used when a node is used to make a NodeValue
@@ -1027,8 +1064,9 @@ public abstract class NodeValue extends
if ( XSDDatatype.XSDduration.isValidLiteral(lit) )
{
- XSDDuration duration = (XSDDuration)lit.getValue() ;
- return new NodeValueDuration(duration, node) ;
+ //XSDDuration duration = (XSDDuration)lit.getValue() ;
+ Duration jduration = createDuration(lit.getLexicalForm()) ;
+ return new NodeValueDuration(jduration, node) ;
}
if ( XSDDatatype.XSDboolean.isValidLiteral(lit) )
@@ -1068,6 +1106,19 @@ public abstract class NodeValue extends
// ----------------------------------------------------------------
+ private static DatatypeFactory df = null ;
+ static
+ {
+ try { df = DatatypeFactory.newInstance() ; }
+ catch (DatatypeConfigurationException ex)
+ { throw new ARQInternalErrorException("Can't create a javax.xml DatatypeFactory") ; }
+ }
+
+ private static Duration createDuration(String lex)
+ {
+ return df.newDuration(lex) ;
+ }
+
// Point to catch all exceptions.
public static void raise(ExprException ex)
{
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/ValueSpaceClassification.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/ValueSpaceClassification.java?rev=1331929&r1=1331928&r2=1331929&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/ValueSpaceClassification.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/ValueSpaceClassification.java Sun Apr 29 15:53:30 2012
@@ -18,7 +18,7 @@
package com.hp.hpl.jena.sparql.expr;
-enum ValueSpaceClassification {
+public enum ValueSpaceClassification {
VSPACE_NODE,
VSPACE_NUM,
VSPACE_DATETIME,
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDouble.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDouble.java?rev=1331929&r1=1331928&r2=1331929&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDouble.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDouble.java Sun Apr 29 15:53:30 2012
@@ -28,7 +28,7 @@ import com.hp.hpl.jena.sparql.util.Utils
public class NodeValueDouble extends NodeValue
{
- double value = Double.NaN ;
+ double value = Double.NaN ;
public NodeValueDouble(double d) { super() ; value = d ; }
public NodeValueDouble(double d, Node n) { super(n) ; value = d ; }
Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDuration.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDuration.java?rev=1331929&r1=1331928&r2=1331929&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDuration.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueDuration.java Sun Apr 29 15:53:30 2012
@@ -18,35 +18,30 @@
package com.hp.hpl.jena.sparql.expr.nodevalue;
+import javax.xml.datatype.Duration ;
+
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ;
-import com.hp.hpl.jena.datatypes.xsd.XSDDuration ;
import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.sparql.expr.ExprException ;
import com.hp.hpl.jena.sparql.expr.NodeValue ;
-/** XSD Duration (which is unrelated to XSD dateTime in the datatype hierarchy) */
+/** XSD Duration */
public class NodeValueDuration extends NodeValue
{
- XSDDuration duration ;
+ Duration duration ;
- public NodeValueDuration(XSDDuration dt)
+ public NodeValueDuration(Duration dt)
{
duration = dt ;
- if (dt.getDays() != 0 && dt.getMonths() !=0 && dt.getYears() != 0) {
- throw new ExprException("Illegal time: "+dt) ;
- }
- if ( dt.getTimePart() == 0 )
- throw new ExprException("Illegal time: "+dt) ;
}
- public NodeValueDuration(XSDDuration dt, Node n) { super(n) ; duration = dt ; }
+ public NodeValueDuration(Duration dt, Node n) { super(n) ; duration = dt ; }
@Override
public boolean isDuration() { return true ; }
@Override
- public XSDDuration getDuration() { return duration ; }
-
+ public Duration getDuration() { return duration ; }
+
@Override
protected Node makeNode()
{
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=1331929&r1=1331928&r2=1331929&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 Sun Apr 29 15:53:30 2012
@@ -32,13 +32,15 @@ import java.util.List ;
import java.util.Set ;
import java.util.regex.Pattern ;
+import javax.xml.datatype.DatatypeConstants ;
+import javax.xml.datatype.Duration ;
+
import org.openjena.atlas.lib.StrUtils ;
import org.openjena.atlas.logging.Log ;
import com.hp.hpl.jena.datatypes.RDFDatatype ;
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ;
import com.hp.hpl.jena.datatypes.xsd.XSDDateTime ;
-import com.hp.hpl.jena.datatypes.xsd.XSDDuration ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
import com.hp.hpl.jena.sparql.expr.* ;
@@ -862,7 +864,7 @@ public class XSDFuncOp
public static int compareDuration(NodeValue nv1, NodeValue nv2)
{
- return compareXSDDuration(nv1.getDuration(), nv2.getDuration()) ;
+ return compareDuration(nv1.getDuration(), nv2.getDuration()) ;
}
public static int compareGYear(NodeValue nv1, NodeValue nv2)
@@ -947,7 +949,7 @@ public class XSDFuncOp
if ( nv3 != null )
{
XSDDateTime dt3 = nv3.getDateTime() ;
- x = compareXSDDateTime(dt1, dt3) ;
+ x = compareXSDDateTime(dt1, dt3) ;
if ( x == XSDDateTime.INDETERMINATE )
throw new ARQInternalErrorException("Still get indeterminate comparison") ;
return x ;
@@ -991,34 +993,31 @@ public class XSDFuncOp
// F&O has an "implicit timezone" - this code implements the XMLSchema compare algorithm.
int x = dt1.compare(dt2) ;
- if ( x == XSDDateTime.EQUAL )
- return Expr.CMP_EQUAL ;
- if ( x == XSDDateTime.LESS_THAN )
- return Expr.CMP_LESS ;
- if ( x == XSDDateTime.GREATER_THAN )
- return Expr.CMP_GREATER ;
- if ( x == XSDDateTime.INDETERMINATE )
- return Expr.CMP_INDETERMINATE ;
- throw new ARQInternalErrorException("Unexpected return from XSDDateTime.compare: "+x) ;
+ return convertComparison(x) ;
}
- private static int compareXSDDuration(XSDDuration duration1 , XSDDuration duration2)
+ private static int compareDuration(Duration duration1 , Duration duration2)
{
// Returns codes are -1/0/1 but also 2 for "Indeterminate"
// Not fully sure when Indeterminate is returned with regards to a duration
int x = duration1.compare(duration2) ;
- if ( x == XSDDuration.EQUAL )
+ return convertComparison(x) ;
+ }
+
+ private static int convertComparison(int x)
+ {
+ if ( x == DatatypeConstants.EQUAL )
return Expr.CMP_EQUAL ;
- if ( x == XSDDuration.LESS_THAN )
+ if ( x == DatatypeConstants.LESSER )
return Expr.CMP_LESS ;
- if ( x == XSDDuration.GREATER_THAN )
+ if ( x == DatatypeConstants.GREATER )
return Expr.CMP_GREATER ;
- if ( x == XSDDuration.INDETERMINATE )
+ if ( x == DatatypeConstants.INDETERMINATE )
return Expr.CMP_INDETERMINATE ;
throw new ARQInternalErrorException("Unexpected return from XSDDuration.compare: "+x) ;
}
-
+
// --------------------------------
// Boolean operations