You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2012/09/25 20:21:15 UTC

svn commit: r1390037 - in /jena/trunk/jena-arq: ./ src/main/java/com/hp/hpl/jena/sparql/engine/http/ src/main/java/com/hp/hpl/jena/sparql/resultset/ src/main/java/com/hp/hpl/jena/sparql/serializer/ src/test/java/com/hp/hpl/jena/sparql/resultset/

Author: rvesse
Date: Tue Sep 25 18:21:14 2012
New Revision: 1390037

URL: http://svn.apache.org/viewvc?rev=1390037&view=rev
Log:
Adds support for parsing boolean results from TSV and CSV formats, updates QueryEngineHttp.execAsk() to use actual content type to choose parser and allow for TSV and CSV content type to be returned

Modified:
    jena/trunk/jena-arq/ReleaseNotes.txt
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java

Modified: jena/trunk/jena-arq/ReleaseNotes.txt
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/ReleaseNotes.txt?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/ReleaseNotes.txt (original)
+++ jena/trunk/jena-arq/ReleaseNotes.txt Tue Sep 25 18:21:14 2012
@@ -12,6 +12,7 @@ ChangeLog for ARQ
 + JENA-302 Add URIs for all XQuery/Xpath F&O functions for duration accessors
 + JENA-303 Add URIs for all XQuery/Xpath F&O functions where there are SPARQL functions
 + JENA-328 : implement OSGi friendly DatatypeFactory initialisation in NodeValue
++ Support for parsing boolean results from TSV and CSV inputs
 
 ==== ARQ 2.9.3
 

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java Tue Sep 25 18:21:14 2012
@@ -48,6 +48,7 @@ import com.hp.hpl.jena.sparql.ARQExcepti
 import com.hp.hpl.jena.sparql.graph.GraphFactory ;
 import com.hp.hpl.jena.sparql.resultset.CSVInput ;
 import com.hp.hpl.jena.sparql.resultset.JSONInput ;
+import com.hp.hpl.jena.sparql.resultset.TSVInput;
 import com.hp.hpl.jena.sparql.resultset.XMLInput ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.util.FileManager ;
@@ -98,7 +99,9 @@ public class QueryEngineHTTP implements 
     public static String[] supportedAskContentTypes = new String []
     		{
     			WebContent.contentTypeResultsXML,
-    			WebContent.contentTypeJSON
+    			WebContent.contentTypeJSON,
+    			WebContent.contentTypeTextTSV,
+    			WebContent.contentTypeTextCSV
     		};
     
     // Releasing HTTP input streams is important. We remember this for SELECT,
@@ -327,10 +330,14 @@ public class QueryEngineHTTP implements 
             }
         	
             //Parse the result appropriately depending on the selected content type
-            if (askContentType.equals(WebContent.contentTypeResultsXML))
+            if (actualContentType.equals(WebContent.contentTypeResultsXML))
                 return XMLInput.booleanFromXML(in) ;
-            if (askContentType.equals(WebContent.contentTypeResultsJSON))
+            if (actualContentType.equals(WebContent.contentTypeResultsJSON))
                 return JSONInput.booleanFromJSON(in) ;
+            if (actualContentType.equals(WebContent.contentTypeTextTSV))
+            	return TSVInput.booleanFromTSV(in);
+            if (actualContentType.equals(WebContent.contentTypeTextCSV))
+            	return CSVInput.booleanFromCSV(in);
             throw new QueryException("Endpoint returned Content-Type: " + actualContentType + " which is not currently supported for ASK queries");
         } finally {
             // Ensure connection is released

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java Tue Sep 25 18:21:14 2012
@@ -43,7 +43,14 @@ import com.hp.hpl.jena.sparql.engine.Res
  *  </li>
  *  CSV is RFC 4180, but there are many variations. 
  *  </ul>
- *  This code read the file and treats everything as strings. 
+ *  This code read the file and treats everything as strings.
+ *  <p>
+ *  The code also allows for parsing boolean results where we expect the header to be a single string
+ *  from the set: true yes false no
+ *  </p>
+ *  <p>
+ *  Any other value is considered an error for parsing a boolean results and anything past the first line is ignored
+ *  </p>
  */
 public class CSVInput
 {
@@ -55,14 +62,13 @@ public class CSVInput
         List<Var> vars = new ArrayList<Var>();
         List<String> varNames = new ArrayList<String>();
 
-        boolean first = true;
         String str = null;
         try 
         {
             //Here we try to parse only the Header Row
             str = reader.readLine();
             if (str == null ) 
-                throw new ARQException("CSV Results malformed - input is empty (no header row)") ;
+                throw new ARQException("CSV Results malformed, input is empty (no header row)") ;
             
             if ( ! str.isEmpty() )
             {
@@ -85,4 +91,29 @@ public class CSVInput
         //This will parse actual result rows as needed thus minimising memory usage
         return new ResultSetStream(varNames, null, new CSVInputIterator(reader, vars));
     }
+    
+    public static boolean booleanFromCSV(InputStream in)
+    {
+    	BufferedReader reader = IO.asBufferedUTF8(in);
+    	String str = null;
+    	try
+    	{
+    		str = reader.readLine();
+    		if (str == null) throw new ARQException("CSV Results malformed, input is empty");
+    		str = str.trim(); //Remove extraneous white space
+    		if (str.toLowerCase().equals("true") || str.toLowerCase().equals("yes")) {
+    			return true;
+    		} else if (str.toLowerCase().equals("false") || str.toLowerCase().equals("no")) {
+    			return false;
+    		} else if (str.startsWith("?") || str.contains(",")) {
+    			throw new ARQException("CSV Boolean Results malformed, appears to be a normal result set header, use CSVInput.fromCSV() to parse a ResultSet");
+    		} else {
+    			throw new ARQException("CSV Boolean Results malformed, expected one of - true yes false no - but got " + str);
+    		}
+    	}
+    	catch (IOException ex)
+    	{
+    		throw new ARQException(ex);
+    	}
+    }
 }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java Tue Sep 25 18:21:14 2012
@@ -44,6 +44,7 @@ public class TSVInput {
 	
 	/**
 	 * Reads SPARQL Results from TSV format into a {@link ResultSet} instance
+	 * @param in Input Stream
 	 */
     public static ResultSet fromTSV(InputStream in)
     {
@@ -57,7 +58,7 @@ public class TSVInput {
         	//Here we try to parse only the Header Row
         	str = reader.readLine();
         	if (str == null ) 
-        	    throw new ARQException("TSV Results malformed - input is empty (no header row)") ;
+        	    throw new ARQException("TSV Results malformed, input is empty (no header row)") ;
         	if ( ! str.isEmpty() )
         	{
         	    String[] tokens = pattern.split(str,-1);
@@ -67,9 +68,9 @@ public class TSVInput {
         	        try {
         	            v = NodeFactory.parseNode(token) ;
         	            if ( v == null || ! v.isVariable())
-        	                throw new ResultSetException("TSV Results malformed - not a variable: "+token);
+        	                throw new ResultSetException("TSV Results malformed, not a variable: "+token);
         	        } catch (RiotException ex)
-        	        { throw new ResultSetException("TSV Results malformed - variable names must begin with a ? in the header: "+token); }
+        	        { throw new ResultSetException("TSV Results malformed, variable names must begin with a ? in the header: "+token); }
 
         	        Var var = Var.alloc(v);
         	        vars.add(var);
@@ -86,4 +87,34 @@ public class TSVInput {
         //This will parse actual result rows as needed thus minimising memory usage
         return new ResultSetStream(varNames, null, new TSVInputIterator(reader, vars));
     }
+    
+    /**
+     * Reads SPARQL Boolean result from TSV
+     * @param in Input Stream
+     * @return
+     */
+    public static boolean booleanFromTSV(InputStream in)
+    {
+    	BufferedReader reader = IO.asBufferedUTF8(in);
+    	String str = null;
+    	try
+    	{
+    		str = reader.readLine();
+    		if (str == null) throw new ARQException("TSV Boolean Results malformed - input is empty");
+    		str = str.trim(); //Remove extraneous white space
+    		if (str.toLowerCase().equals("true") || str.toLowerCase().equals("yes")) {
+    			return true;
+    		} else if (str.toLowerCase().equals("false") || str.toLowerCase().equals("no")) {
+    			return false;
+    		} else if (str.startsWith("?") || str.contains("\t")) {
+    			throw new ARQException("TSV Boolean Results malformed, appears to be a normal result set header, use TSVInput.fromTSV() to parse a ResultSet");
+    		} else {
+    			throw new ARQException("TSV Boolean Results malformed, expected one of - true yes false no - but got " + str);
+    		}
+    	}
+    	catch (IOException ex)
+    	{
+    		throw new ARQException(ex);
+    	}
+    }
  }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java Tue Sep 25 18:21:14 2012
@@ -26,6 +26,8 @@ import org.openjena.atlas.io.IndentedWri
 import com.hp.hpl.jena.query.Query ;
 import com.hp.hpl.jena.query.Syntax ;
 import org.openjena.atlas.logging.Log ;
+
+import com.hp.hpl.jena.sparql.core.Prologue;
 import com.hp.hpl.jena.sparql.util.NodeToLabelMapBNode ;
 
 
@@ -141,18 +143,31 @@ public class Serializer
         
         Log.warn(Serializer.class, "Unknown syntax: "+outSyntax) ;
     }
-     
-    static public void serializeARQ(Query query, IndentedWriter writer)
+    
+    static public void serializeARQ(Query query, Prologue p, IndentedWriter writer)
     {
         // For the query pattern
-        SerializationContext cxt1 = new SerializationContext(query, new NodeToLabelMapBNode("b", false) ) ;
+        SerializationContext cxt1 = new SerializationContext(p, new NodeToLabelMapBNode("b", false) ) ;
         // For the construct pattern
-        SerializationContext cxt2 = new SerializationContext(query, new NodeToLabelMapBNode("c", false)  ) ;
+        SerializationContext cxt2 = new SerializationContext(p, new NodeToLabelMapBNode("c", false)  ) ;
+        
+        Prologue orig = null;
+        if ((Prologue)query != p) {
+        	orig = query.copy();
+        	query.usePrologueFrom(p);
+        }
         
         serializeARQ(query, writer, 
                      new FormatterElement(writer, cxt1),
                      new FmtExprSPARQL(writer, cxt1),
                      new FmtTemplate(writer, cxt2)) ;
+        
+        if (orig != null) query.usePrologueFrom(orig);
+    }
+     
+    static public void serializeARQ(Query query, IndentedWriter writer)
+    {
+    	serializeARQ(query, query, writer);
     }
     
     static private void serializeARQ(Query query, 

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java?rev=1390037&r1=1390036&r2=1390037&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java Tue Sep 25 18:21:14 2012
@@ -20,6 +20,8 @@ package com.hp.hpl.jena.sparql.resultset
 
 import java.io.ByteArrayInputStream ;
 
+import junit.framework.Assert;
+
 import org.junit.Test ;
 import org.openjena.atlas.lib.StrUtils ;
 
@@ -131,6 +133,102 @@ public class TestResultSetFormat2
         String x = "?x\n<http://example/>    \n";
         parseTSV(x);
     }
+    
+    @Test
+    public void resultset_tsv_boolean_01()
+    {
+    	// true is valid
+    	String x = "true";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_02()
+    {
+    	// true is valid regardless of case
+    	String x = "TRUE";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_03()
+    {
+    	// true is valid regardless of case
+    	String x = "tRuE";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_04()
+    {
+    	// yes is valid
+    	String x = "yes";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_05()
+    {
+    	// yes is valid regardless of case
+    	String x = "YES";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_06()
+    {
+    	// yes is valid regardless of case
+    	String x = "yEs";
+    	parseTSVAsBoolean(x, true);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_07()
+    {
+    	// false is valid
+    	String x = "false";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_08()
+    {
+    	// false is valid regardless of case
+    	String x = "FALSE";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_09()
+    {
+    	// false is valid regardless of case
+    	String x = "fAlSe";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_10()
+    {
+    	// no is valid
+    	String x = "no";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_11()
+    {
+    	// no is valid regardless of case
+    	String x = "NO";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test
+    public void resultset_tsv_boolean_12()
+    {
+    	// no is valid regardless of case
+    	String x = "nO";
+    	parseTSVAsBoolean(x, false);
+    }
 
     @Test (expected=ResultSetException.class) 
     public void resultset_bad_tsv_01()
@@ -186,7 +284,6 @@ public class TestResultSetFormat2
         parseTSV(x);
     }
 
-
     @Test (expected=ResultSetException.class)
     public void resultset_bad_tsv_08()
     {
@@ -200,6 +297,30 @@ public class TestResultSetFormat2
     	String x = "x\n<http://example.com>";
     	parseTSV(x);
     }
+    
+    @Test (expected=ARQException.class)
+    public void resultset_bad_tsv_boolean_01()
+    {
+    	//Not in allowed set of true yes false no
+    	String x = "blah";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test (expected=ARQException.class)
+    public void resultset_bad_tsv_boolean_02()
+    {
+    	//A normal result set header
+    	String x = "?x\n";
+    	parseTSVAsBoolean(x, false);
+    }
+    
+    @Test (expected=ARQException.class)
+    public void resultset_bad_tsv_boolean_03()
+    {
+    	//A normal result set header
+    	String x = "?x\t?y\n";
+    	parseTSVAsBoolean(x, false);
+    }
 
     public void parseTSV(String x)
     {
@@ -213,4 +334,13 @@ public class TestResultSetFormat2
         }
     }
     
+    public void parseTSVAsBoolean(String x, boolean expected)
+    {
+    	byte[] b = StrUtils.asUTF8bytes(x);
+    	ByteArrayInputStream in = new ByteArrayInputStream(b);
+    	boolean actual = TSVInput.booleanFromTSV(in);
+    	
+    	Assert.assertEquals(expected, actual);
+    }
+    
 }



Re: Boolean TSV, CSV results.

Posted by Andy Seaborne <an...@apache.org>.
On 27/09/12 17:02, Rob Vesse wrote:
> Yes I'm aware the specification doesn't cover this
>
> What I put in was simply parsing for what TSVOutput and CSVOutput
> currently produce so it can be round tripped
>
> Some magic variable name in the header row might be preferable

Ah - looking at the history on TSVOutput and CSVOutput, it looks like 
some code was needed to fulfil the interface contract.

	Andy

>
> Rob
>
>
>
> On 9/26/12 11:57 AM, "Andy Seaborne" <an...@apache.org> wrote:
>
>> Rob,
>>
>> Could you say a little more about this?
>>
>>
>> In legal TSV the header line is required so only a header line is a bit
>> confusing.
>>
>> In CSV, while header lines are not required, it is by SPARQL.
>>
>> The SPARQL result set formats don't define boolean results so maybe it's
>> better to fit as a magically understood result set.  The current format
>> would be read as a result of zero rows and one column.  Instead what do
>> you think about:
>>
>> TSV:
>> ----------
>> ?_askResult
>> true
>> ----------
>>
>> CSV:
>> ----------
>> _askResult
>> false
>> ----------
>>
>> then it will work for Fuseki, say, serving results to a general purpose
>> SPARQL results parser using content negotiation.
>>
>> And IIRC it's what 4store does.
>>
>> 	Andy
>>
>>
>> On 25/09/12 19:21, rvesse@apache.org wrote:
>>> Author: rvesse
>>> Date: Tue Sep 25 18:21:14 2012
>>> New Revision: 1390037
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1390037&view=rev
>>> Log:
>>> Adds support for parsing boolean results from TSV and CSV formats,
>>> updates QueryEngineHttp.execAsk() to use actual content type to choose
>>> parser and allow for TSV and CSV content type to be returned
>>>
>>> Modified:
>>>       jena/trunk/jena-arq/ReleaseNotes.txt
>>>
>>> jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Quer
>>> yEngineHTTP.java
>>>
>>> jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInp
>>> ut.java
>>>
>>> jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInp
>>> ut.java
>>>
>>> jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Seria
>>> lizer.java
>>>
>>> jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestRe
>>> sultSetFormat2.java
>>
>


Re: Boolean TSV, CSv results.

Posted by Rob Vesse <rv...@yarcdata.com>.
Yes I'm aware the specification doesn't cover this

What I put in was simply parsing for what TSVOutput and CSVOutput
currently produce so it can be round tripped

Some magic variable name in the header row might be preferable

Rob



On 9/26/12 11:57 AM, "Andy Seaborne" <an...@apache.org> wrote:

>Rob,
>
>Could you say a little more about this?
>
>
>In legal TSV the header line is required so only a header line is a bit
>confusing.
>
>In CSV, while header lines are not required, it is by SPARQL.
>
>The SPARQL result set formats don't define boolean results so maybe it's
>better to fit as a magically understood result set.  The current format
>would be read as a result of zero rows and one column.  Instead what do
>you think about:
>
>TSV:
>----------
>?_askResult
>true
>----------
>
>CSV:
>----------
>_askResult
>false
>----------
>
>then it will work for Fuseki, say, serving results to a general purpose
>SPARQL results parser using content negotiation.
>
>And IIRC it's what 4store does.
>
>	Andy
>
>
>On 25/09/12 19:21, rvesse@apache.org wrote:
>> Author: rvesse
>> Date: Tue Sep 25 18:21:14 2012
>> New Revision: 1390037
>>
>> URL: http://svn.apache.org/viewvc?rev=1390037&view=rev
>> Log:
>> Adds support for parsing boolean results from TSV and CSV formats,
>>updates QueryEngineHttp.execAsk() to use actual content type to choose
>>parser and allow for TSV and CSV content type to be returned
>>
>> Modified:
>>      jena/trunk/jena-arq/ReleaseNotes.txt
>>      
>>jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/Quer
>>yEngineHTTP.java
>>      
>>jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInp
>>ut.java
>>      
>>jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInp
>>ut.java
>>      
>>jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Seria
>>lizer.java
>>      
>>jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestRe
>>sultSetFormat2.java
>


Boolean TSV, CSv results.

Posted by Andy Seaborne <an...@apache.org>.
Rob,

Could you say a little more about this?


In legal TSV the header line is required so only a header line is a bit 
confusing.

In CSV, while header lines are not required, it is by SPARQL.

The SPARQL result set formats don't define boolean results so maybe it's 
better to fit as a magically understood result set.  The current format 
would be read as a result of zero rows and one column.  Instead what do 
you think about:

TSV:
----------
?_askResult
true
----------

CSV:
----------
_askResult
false
----------

then it will work for Fuseki, say, serving results to a general purpose 
SPARQL results parser using content negotiation.

And IIRC it's what 4store does.

	Andy


On 25/09/12 19:21, rvesse@apache.org wrote:
> Author: rvesse
> Date: Tue Sep 25 18:21:14 2012
> New Revision: 1390037
>
> URL: http://svn.apache.org/viewvc?rev=1390037&view=rev
> Log:
> Adds support for parsing boolean results from TSV and CSV formats, updates QueryEngineHttp.execAsk() to use actual content type to choose parser and allow for TSV and CSV content type to be returned
>
> Modified:
>      jena/trunk/jena-arq/ReleaseNotes.txt
>      jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java
>      jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java
>      jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/TSVInput.java
>      jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/serializer/Serializer.java
>      jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java