blob: c2175e741bc2a9392de3da7380c85ca1ccef11db [file] [log] [blame]
/*
* 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 org.apache.jena.query.spatial.pfunction;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.jena.atlas.lib.StrUtils;
import org.apache.jena.query.spatial.AbstractTestDatasetWithSpatialIndex;
import org.junit.Test;
public abstract class AbstractTestIsNearByPF extends AbstractTestDatasetWithSpatialIndex {
@Test
public void testOneSimpleResult() {
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + "testOneSimpleResult>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ", ".");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'miles' -1) .", "}");
Set<String> expectedURIs = (new HashSet<>());
expectedURIs
.addAll(Arrays
.asList((new String[] { "http://example.org/data/resource/testOneSimpleResult" })));
doTestSearch(turtle, queryString, expectedURIs);
}
@Test
public void testMultipleResults() {
String label = "testMultipleResults";
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + label + "1>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ;" , ".",
"<" + RESOURCE_BASE + label + "2>",
" geo:lat '51.3967'^^xsd:float ;",
" geo:long '-3.34333'^^xsd:float ;", ".");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'miles' -1) .", "}");
Set<String> expectedURIs = (new HashSet<>());
expectedURIs.addAll(Arrays.asList((new String[] {
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2" })));
doTestSearch(turtle, queryString, expectedURIs);
}
@Test
public void testArgumentListSize() {
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + "testArgumentListSize>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ", ".");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000) .", "}");
doTestSearchThrowException(turtle, queryString);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100 'miles' 1 'another argument') .", "}");
doTestSearchThrowException(turtle, queryString);
}
@Test
public void testSearchLimitsResults() {
String label = "testSearchLimitsResults";
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + label + "1>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ;" , ".",
"<" + RESOURCE_BASE + label + "2>",
" geo:lat '51.3967'^^xsd:float ;",
" geo:long '-3.34333'^^xsd:float ;", ".");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 1) .", "}");
Set<String> expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2"
}
)));
doTestSearch(turtle, queryString, expectedURIs, 1);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 -1) .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 3) .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'something not an integer') .", "}");
expectedURIs = (new HashSet<>());
doTestSearch(turtle, queryString, expectedURIs);
}
@Test
public void testDistanceUnits() {
String label = "testDistanceUnits";
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + label + "1>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ;" , ".",
"<" + RESOURCE_BASE + label + "2>",
" geo:lat '51.3967'^^xsd:float ;",
" geo:long '-3.34333'^^xsd:float ;", ".",
"<" + RESOURCE_BASE + label + "3>",
" geo:lat '52.4539'^^xsd:float ;",
" geo:long '-1.74803'^^xsd:float ;", ".");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'miles') .", "}");
Set<String> expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2",
"http://example.org/data/resource/" + label + "3"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'mi') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2",
"http://example.org/data/resource/" + label + "3"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'kilometres') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'km') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1",
"http://example.org/data/resource/" + label + "2"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 10000.0 'metres') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 10000.0 'm') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 1000000.0 'centimetres') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 1000000.0 'cm') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 10000000.0 'millimetres') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 10000000.0 'mm') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 0.09 'degrees') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 0.09 'de') .", "}");
expectedURIs = (new HashSet<>());
expectedURIs.addAll( Arrays.asList((
new String[]
{
"http://example.org/data/resource/" + label + "1"
}
)));
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 1 'mi') .", "}");
expectedURIs = (new HashSet<>());
doTestSearch(turtle, queryString, expectedURIs);
queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" ?s spatial:nearby (51.3000 -2.71000 100.0 'other unsupported unit' -1) .", "}");
expectedURIs = (new HashSet<>());
doTestSearch(turtle, queryString, expectedURIs);
}
@Test
public void testLatLongBound() {
final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
+ RESOURCE_BASE + "testLatLongBound>",
" geo:lat '51.3827'^^xsd:float ;",
" geo:long '-2.71909'^^xsd:float ", ". ",
"<" + RESOURCE_BASE + "center>",
" geo:lat '51.3000'^^xsd:float ;",
" geo:long '-2.71000'^^xsd:float ", ". ");
String queryString = StrUtils.strjoinNL(QUERY_PROLOG, "SELECT ?s",
"WHERE {",
" :center geo:lat ?lat .",
" :center geo:long ?long .",
" ?s spatial:nearby (?lat ?long 100.0 'miles' -1) .", "}");
Set<String> expectedURIs = (new HashSet<>());
expectedURIs
.addAll(Arrays
.asList((new String[] { "http://example.org/data/resource/testLatLongBound", "http://example.org/data/resource/center" })));
doTestSearch(turtle, queryString, expectedURIs);
}
}