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 2014/03/23 18:39:21 UTC

svn commit: r1580547 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena: query/ARQ.java sparql/SystemARQ.java sparql/expr/NodeValue.java sparql/expr/nodevalue/NodeValueString.java sparql/expr/nodevalue/XSDFuncOp.java

Author: andy
Date: Sun Mar 23 17:39:21 2014
New Revision: 1580547

URL: http://svn.apache.org/r1580547
Log:
Tidy strict mode setting for testing around globals (NodeValue) 

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/SystemARQ.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueString.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java?rev=1580547&r1=1580546&r2=1580547&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java Sun Mar 23 17:39:21 2014
@@ -24,9 +24,8 @@ import org.slf4j.LoggerFactory ;
 
 import com.hp.hpl.jena.sparql.ARQConstants ;
 import com.hp.hpl.jena.sparql.SystemARQ ;
-import com.hp.hpl.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication;
+import com.hp.hpl.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication ;
 import com.hp.hpl.jena.sparql.engine.main.StageBuilder ;
-import com.hp.hpl.jena.sparql.expr.nodevalue.XSDFuncOp ;
 import com.hp.hpl.jena.sparql.lib.Metadata ;
 import com.hp.hpl.jena.sparql.mgt.ARQMgt ;
 import com.hp.hpl.jena.sparql.mgt.Explain ;
@@ -410,47 +409,63 @@ public class ARQ
      */
     public static final Symbol generateToList = ARQConstants.allocSymbol("generateToList") ;
 
-    /** Set global strict mode */
+    /** Set strict mode, including expression evaluation */
     public static void setStrictMode() { setStrictMode(ARQ.getContext()) ; }
     
-    /** Set strict mode for a given Context */
-    
+    /** Set strict mode for a given Context.
+     *  
+     *  Does not influence expression evaluation because NodeValues
+     *  are controlled globally, not per context.
+     */
     public static void setStrictMode(Context context)
     {
-        XSDFuncOp.strictDateTimeFO = true ;
-        context.set(optimization,           false) ;
+        SystemARQ.StrictDateTimeFO      = true ;
+        SystemARQ.ValueExtensions    = false ;
+        SystemARQ.SameValueAsString  = false ;
+        
+        context.set(optimization,                   false) ;
+        context.set(hideNonDistiguishedVariables,   true) ;
+        context.set(strictGraph,                    true) ;
+        context.set(strictSPARQL,                   true) ;
+        context.set(enablePropertyFunctions,        false) ;
         
-        context.set(hideNonDistiguishedVariables, true) ;
-        context.set(strictGraph,                true) ;
-        context.set(strictSPARQL,               true) ;
-        context.set(extensionValueTypes,        false) ;
-        context.set(constantBNodeLabels,        false) ;
-        context.set(enablePropertyFunctions,    false) ;
-        context.set(generateToList,             true) ;
-        context.set(regexImpl,                  xercesRegex) ;
+        context.set(extensionValueTypes,            false) ;
+        context.set(constantBNodeLabels,            false) ;
+        context.set(generateToList,                 true) ;
+        context.set(regexImpl,                      xercesRegex) ;
+        context.set(enableRomanNumerals,            false) ;
+         
         //context.set(filterPlacement,            false) ;
 //        XSDFuncOp.strictDateTimeFO = false ;
     }
-    
+
     public static boolean isStrictMode()       { return ARQ.getContext().isTrue(strictSPARQL) ; }
     
-    public static void setNormalMode() { setNormalMode(ARQ.getContext()) ; }
+    /** Set normal mode, including expression evaluation */
+    public static void setNormalMode() {
+        SystemARQ.StrictDateTimeFO      = false ;
+        SystemARQ.ValueExtensions    = true ;
+        SystemARQ.SameValueAsString  = true ;
+        setNormalMode(ARQ.getContext()) ; 
+    }
         
+    /** Explicitly set the values for normal operation.
+     *  Does not influence expression evaluation.
+     */
     public static void setNormalMode(Context context)
     {
-        XSDFuncOp.strictDateTimeFO = false ;
-        context.unset(optimization) ;
-
-        //context.set(hideNonDistiguishedVariables, true) ;
-        context.set(strictSPARQL,                  false) ; 
-        context.set(constantBNodeLabels,           true) ;
-        context.set(enablePropertyFunctions,       true) ;
-        context.set(strictGraph,                   false) ;
+        context.set(optimization,                   true) ;
+        context.set(hideNonDistiguishedVariables,   false) ;
+        context.set(strictGraph,                    false) ;
+        context.set(strictSPARQL,                   false) ;
+        context.set(enablePropertyFunctions,        true) ;
+        
+        context.set(extensionValueTypes,            true) ;
+        context.set(constantBNodeLabels,            true) ;
+        context.set(generateToList,                 false) ;
+        context.set(regexImpl,                      javaRegex) ;
+        context.set(enableRomanNumerals,            true) ;
         
-        //context.set(useSAX,                        false) ;
-        context.set(enableRomanNumerals,           false) ;
-        // enableBlankNodeLabels() ;
-        context.set(regexImpl,                     javaRegex) ;
 //        if (  getContext().isTrue(romanNumeralsAsFirstClassDatatypes) )
 //            RomanNumeralDatatype.enableAsFirstClassDatatype() ; // Wires into the TypeMapper.
     }
@@ -496,6 +511,7 @@ public class ARQ
                 return ;
             initialized = true ;
             globalContext = defaultSettings() ;
+            
             RIOT.init() ;
             StageBuilder.init() ;
             ARQMgt.init() ;         // After context and after PATH/NAME/VERSION/BUILD_DATE are set
@@ -514,10 +530,22 @@ public class ARQ
     // Force a call
     static { init() ; }
     
-    private static Context defaultSettings()    
+    private static Context defaultSettings()
     {
+        SystemARQ.StrictDateTimeFO      = false ;
+        SystemARQ.ValueExtensions    = true ;
+        SystemARQ.SameValueAsString  = true ;
+
         Context context = new Context() ;
-        setNormalMode(context) ;
+        context.unset(optimization) ;
+        //context.set(hideNonDistiguishedVariables, true) ;
+        context.set(strictSPARQL,                  false) ; 
+        context.set(constantBNodeLabels,           true) ;
+        context.set(enablePropertyFunctions,       true) ;
+        context.set(strictGraph,                   false) ;
+        context.set(enableRomanNumerals,           false) ;
+        context.set(regexImpl,                     javaRegex) ;
+
         return context ; 
     }
 

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/SystemARQ.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/SystemARQ.java?rev=1580547&r1=1580546&r2=1580547&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/SystemARQ.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/SystemARQ.java Sun Mar 23 17:39:21 2014
@@ -38,6 +38,26 @@ import com.hp.hpl.jena.sparql.mgt.System
 
 public class SystemARQ
 {
+    // NodeValues work without the context so something only have global settings.
+    
+    /** Control whether eadditon datattypes, over and above strict, minimal SPARQL compliance, are handled.
+     *  Examples incldue xsd;date and simple literal/xsd:string.
+     */
+    public static boolean ValueExtensions       = true ;
+    /** Control whether simple literals, string literals without datatype orlanguage tag, 
+     *  are created sameValueAs xsd:string.  Normally true. 
+     *  Some testing for pre-RDF-1.1 assumes otherwise.    
+     */
+    public static boolean SameValueAsString     = true ;
+    /**
+     * Under strict F&O, dateTimes and dates with no timezone have one magically applied. 
+     * This default timezone is implementation dependent and can lead to different answers
+     * to queries depending on the timezone. Normally, ARQ uses XMLSchema dateTime comparions,
+     * which an yield "indeterminate", which in turn is an evaluation error. 
+     * F&O insists on true/false and so can lead to false positves and negatives. 
+     */
+    public static boolean StrictDateTimeFO      = false ;
+
     /** Sync a Model if it provides the underlying graph provides sync . Do nothing otherwise. */
     public static void sync(Model model)
     {
@@ -123,4 +143,5 @@ public class SystemARQ
     {
         return versions.iterator() ;
     }
+
 }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java?rev=1580547&r1=1580546&r2=1580547&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/NodeValue.java Sun Mar 23 17:39:21 2014
@@ -53,6 +53,7 @@ import com.hp.hpl.jena.graph.impl.Litera
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.rdf.model.AnonId ;
 import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
+import com.hp.hpl.jena.sparql.SystemARQ ;
 import com.hp.hpl.jena.sparql.engine.ExecutionContext ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.expr.nodevalue.* ;
@@ -118,8 +119,6 @@ public abstract class NodeValue extends 
     public static boolean VerboseWarnings = true ;
     public static boolean VerboseExceptions = false ;
     
-    private static boolean VALUE_EXTENSIONS = ARQ.getContext().isTrueOrUndef(ARQ.extensionValueTypes) ;
-    private static boolean sameValueAsString = VALUE_EXTENSIONS ;
     
     private static RefBoolean enableRomanNumerals = new RefBoolean(ARQ.enableRomanNumerals, false) ;
     //private static RefBoolean strictSPARQL = new RefBoolean(ARQ.strictSPARQL, false) ;
@@ -565,7 +564,7 @@ public abstract class NodeValue extends 
                 Node node1 = nv1.getNode() ;
                 Node node2 = nv2.getNode() ;
                 
-                if ( ! VALUE_EXTENSIONS )
+                if ( ! SystemARQ.ValueExtensions )
                     // No value extensions => raw rdfTermEquals
                     return NodeFunctions.rdfTermEquals(node1, node2) ;
 
@@ -592,7 +591,7 @@ public abstract class NodeValue extends 
             
             case VSPACE_DIFFERENT:
                 // Known to be incompatible.
-                if ( ! VALUE_EXTENSIONS && ( nv1.isLiteral() && nv2.isLiteral() ) )
+                if ( ! SystemARQ.ValueExtensions && ( nv1.isLiteral() && nv2.isLiteral() ) )
                     raise(new ExprEvalException("Incompatible: "+nv1+" and "+nv2)) ;
                 return false ;
         }
@@ -858,7 +857,7 @@ public abstract class NodeValue extends 
         if ( nv.isGMonthDay() )     return VSPACE_G_MONTHDAY ;
         if ( nv.isGDay() )          return VSPACE_G_DAY ;
         
-        if ( VALUE_EXTENSIONS && nv.isDate() )
+        if ( SystemARQ.ValueExtensions && nv.isDate() )
             return VSPACE_DATE ;
         
         if ( nv.isString())         return VSPACE_STRING ;
@@ -866,7 +865,7 @@ public abstract class NodeValue extends 
         
         if ( ! nv.isLiteral() )     return VSPACE_NODE ;
 
-        if ( VALUE_EXTENSIONS && nv.getNode() != null &&
+        if ( SystemARQ.ValueExtensions && nv.getNode() != null &&
              nv.getNode().isLiteral() &&
              ! nv.getNode().getLiteralLanguage().equals("") )
             return VSPACE_LANG ;
@@ -1032,7 +1031,7 @@ public abstract class NodeValue extends 
 
         try { // DatatypeFormatException - should not happen
             
-            if ( sameValueAsString && XSDstring.isValidLiteral(lit) ) 
+            if ( SystemARQ.SameValueAsString && XSDstring.isValidLiteral(lit) ) 
                     // String - plain or xsd:string
                 return new NodeValueString(lit.getLexicalForm(), node) ;
             

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueString.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueString.java?rev=1580547&r1=1580546&r2=1580547&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueString.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeValueString.java Sun Mar 23 17:39:21 2014
@@ -26,8 +26,7 @@ import com.hp.hpl.jena.sparql.util.FmtUt
 
 public class NodeValueString extends NodeValue
 {
-    // A plain string - no lang tag, no datatype.
-    // If there is a lang tag, the node in the super class handled it.
+    // A plain string, no language tag or xsd:string.
     
     private String string ; 
     

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java?rev=1580547&r1=1580546&r2=1580547&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/XSDFuncOp.java Sun Mar 23 17:39:21 2014
@@ -53,6 +53,7 @@ import com.hp.hpl.jena.datatypes.xsd.XSD
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.graph.NodeFactory ;
 import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
+import com.hp.hpl.jena.sparql.SystemARQ ;
 import com.hp.hpl.jena.sparql.expr.* ;
 import com.hp.hpl.jena.sparql.util.DateTimeStruct ;
 /**
@@ -854,18 +855,9 @@ public class XSDFuncOp
     //  dateTimeCompare
     // works for dates as well because they are implemented as dateTimes on their start point.
 
-    /**
-     * Under strict F&O, dateTimes and dates with no timezone have one magically applied. 
-     * This default timezone is implementation dependent and can lead to different answers
-     * to queries depending on the timezone. Normally, ARQ uses XMLSchema dateTime comparions,
-     * which an yield "indeterminate", which in turn is an evaluation error. 
-     * F&O insists on true/false and so can lead to false positves and negatives. 
-     */
-    public static boolean strictDateTimeFO = false ;
-
     public static int compareDateTime(NodeValue nv1, NodeValue nv2)
     { 
-        if ( strictDateTimeFO )
+        if ( SystemARQ.StrictDateTimeFO )
             return compareDateTimeFO(nv1, nv2) ;
         return compareXSDDateTime(nv1.getDateTime(), nv2.getDateTime()) ;
     }