Strabon

changeset 919:6c8b5e31d7fe

addresses bug #31 (empty literals with wktLiteral datatype are regarded as empty geometries, i.e., MULTIPOLYGON EMPTY)
author Babis Nikolaou <charnik@di.uoa.gr>
date Mon Mar 25 00:04:09 2013 +0200 (2013-03-25)
parents 454a685fbf10
children 167bc144ef2f
files evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java
line diff
     1.1 --- a/evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java	Sun Mar 24 23:39:50 2013 +0200
     1.2 +++ b/evaluation/src/main/java/org/openrdf/query/algebra/evaluation/function/spatial/AbstractWKT.java	Mon Mar 25 00:04:09 2013 +0200
     1.3 @@ -22,6 +22,19 @@
     1.4   */
     1.5  public class AbstractWKT {
     1.6  
     1.7 +	/**
     1.8 +	 * WKT representation for an empty geometry
     1.9 +	 * 
    1.10 +	 * When used with POINT instead of MULTIPOLYGON, JTS throws an
    1.11 +	 * Illegal argument exception, since empty geometries for points
    1.12 +	 * are not represented in WKB (see 
    1.13 +	 * http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/io/WKBWriter.html).
    1.14 +	 * 
    1.15 +	 * EMPTY_GEOM is present here to address Req. 13 of GeoSPARQL for empty geometries.
    1.16 +	 * However, we act in the same way for strdf:WKT.
    1.17 +	 */
    1.18 +	protected final String EMPTY_GEOM = "MULTIPOLYGON EMPTY"; 
    1.19 +	
    1.20  	/** 
    1.21  	 * The datatype of this WKT literal
    1.22  	 * 
    1.23 @@ -67,6 +80,10 @@
    1.24  	 * @param literalValue
    1.25  	 */
    1.26  	private void parsestRDFWKT(String literalValue) {
    1.27 +		if (wkt.trim().length() == 0) {
    1.28 +			wkt = EMPTY_GEOM;
    1.29 +		}
    1.30 +		
    1.31  		// we already have this case in {@link WKTHelper}
    1.32  		wkt = WKTHelper.getWithoutSRID(literalValue);
    1.33  		srid = WKTHelper.getSRID(literalValue);
    1.34 @@ -77,6 +94,10 @@
    1.35  		// FIXME: the default value for wktLiteral
    1.36  		srid = GeoConstants.defaultSRID;
    1.37  		
    1.38 +		if (wkt.length() == 0) { // empty geometry
    1.39 +			wkt = EMPTY_GEOM;
    1.40 +		}
    1.41 +		
    1.42  		if (wkt.charAt(0) == '<') {// if a CRS URI is specified
    1.43  			int uriIndx = wkt.indexOf('>');
    1.44  			URI crs = URI.create(wkt.substring(1, uriIndx));
     2.1 --- a/generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java	Sun Mar 24 23:39:50 2013 +0200
     2.2 +++ b/generaldb/src/main/java/org/openrdf/sail/generaldb/managers/LiteralManager.java	Mon Mar 25 00:04:09 2013 +0200
     2.3 @@ -17,8 +17,6 @@
     2.4  import org.openrdf.sail.generaldb.model.XMLGSDatatypeUtil;
     2.5  import org.openrdf.sail.generaldb.schema.LiteralTable;
     2.6  import org.openrdf.sail.rdbms.model.RdbmsLiteral;
     2.7 -import org.slf4j.Logger;
     2.8 -import org.slf4j.LoggerFactory;
     2.9  
    2.10  /**
    2.11   * Manages RDBMS Literals. Including creation, id lookup, and inserting them
    2.12 @@ -29,7 +27,7 @@
    2.13   */
    2.14  public class LiteralManager extends ValueManagerBase<RdbmsLiteral> {
    2.15  
    2.16 -	private static Logger logger = LoggerFactory.getLogger(org.openrdf.sail.generaldb.managers.LiteralManager.class);
    2.17 +	//private static Logger logger = LoggerFactory.getLogger(org.openrdf.sail.generaldb.managers.LiteralManager.class);
    2.18  	
    2.19  	private static TimeZone Z = TimeZone.getTimeZone("GMT");
    2.20  
    2.21 @@ -97,9 +95,6 @@
    2.22  			
    2.23  			try {
    2.24  				if (XMLGSDatatypeUtil.isNumericDatatype(datatype)) {
    2.25 -//					if (logger.isDebugEnabled()) {
    2.26 -//						logger.debug("about to insert double value: {}", literal.doubleValue());
    2.27 -//					}
    2.28  					table.insertNumeric(id, label, dt, literal.doubleValue());
    2.29  				}
    2.30  				else if (XMLGSDatatypeUtil.isCalendarDatatype(datatype)) {