|
From: <mrp...@us...> - 2013-10-25 16:27:04
|
Revision: 7483
http://bigdata.svn.sourceforge.net/bigdata/?rev=7483&view=rev
Author: mrpersonick
Date: 2013-10-25 16:26:56 +0000 (Fri, 25 Oct 2013)
Log Message:
-----------
fixed ticket 761: Cardinality problem with ArbitraryLengthPathOp
Modified Paths:
--------------
branches/BIGDATA_RELEASE_1_3_0/bigdata/src/java/com/bigdata/bop/paths/ArbitraryLengthPathOp.java
Added Paths:
-----------
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/TestPropertyPaths.java
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.srx
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.srx
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.ttl
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.srx
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-4.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-5.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.srx
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.rq
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.srx
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.ttl
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths.ttl
Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata/src/java/com/bigdata/bop/paths/ArbitraryLengthPathOp.java
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata/src/java/com/bigdata/bop/paths/ArbitraryLengthPathOp.java 2013-10-25 13:20:15 UTC (rev 7482)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata/src/java/com/bigdata/bop/paths/ArbitraryLengthPathOp.java 2013-10-25 16:26:56 UTC (rev 7483)
@@ -27,10 +27,12 @@
package com.bigdata.bop.paths;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
@@ -265,9 +267,10 @@
while (sitr.hasNext()) {
final IBindingSet[] chunk = sitr.next();
-
- for (IBindingSet bs : chunk)
- processChunk(new IBindingSet[] { bs });
+ processChunk(chunk);
+
+// for (IBindingSet bs : chunk)
+// processChunk(new IBindingSet[] { bs });
}
@@ -320,12 +323,51 @@
log.debug("gearing: " + gearing);
}
+ final boolean noInput = chunkIn == null || chunkIn.length == 0 ||
+ (chunkIn.length == 1 && chunkIn[0].isEmpty());
+
+ final IVariable<?> joinVar = gearing.inVar != null ?
+ gearing.inVar :
+ (gearing.outVar != null ? gearing.outVar : null);
+
+ if (log.isDebugEnabled()) {
+ log.debug("join var: " + joinVar);
+ }
+
+ /*
+ * Fix cardinality problem here
+ */
+ final Map<IConstant<?>, List<IBindingSet>> chunkInBySolutionKey =
+ noInput ? null :
+ new LinkedHashMap<IConstant<?>, List<IBindingSet>>();
+
+ if (!noInput) {
+
+ for (IBindingSet parentSolutionIn : chunkIn) {
+
+ final IConstant<?> key = joinVar != null ? parentSolutionIn.get(joinVar) : null; //newSolutionKey(gearing, parentSolutionIn);
+
+ if (log.isDebugEnabled()) {
+ log.debug("adding parent solution for joining: " + parentSolutionIn);
+ log.debug("join key: " + key);
+ }
+
+ if (!chunkInBySolutionKey.containsKey(key)) {
+ chunkInBySolutionKey.put(key, new ArrayList<IBindingSet>());
+ }
+
+ chunkInBySolutionKey.get(key).add(parentSolutionIn);
+
+ }
+
+ }
+
for (IBindingSet parentSolutionIn : chunkIn) {
if (log.isDebugEnabled())
log.debug("parent solution in: " + parentSolutionIn);
- IBindingSet childSolutionIn = parentSolutionIn.clone();
+ final IBindingSet childSolutionIn = parentSolutionIn.clone();
/*
* The seed is either a constant on the input side of
@@ -405,6 +447,9 @@
try {
+ /*
+ * TODO replace with code that does the PipelineJoins manually
+ */
runningSubquery = queryEngine.eval(subquery,
nextRoundInput.toArray(new IBindingSet[nextRoundInput.size()]));
@@ -550,103 +595,322 @@
}
} // fixed point for loop
-
+
/*
- * Do some final filtering and then send the solutions
- * down the pipeline.
+ * Handle the case where there is a constant on the output side of
+ * the subquery. Make sure the solution's transitive output
+ * variable matches. Filter out solutions where tVarOut != outConst.
*/
- final Iterator<Map.Entry<SolutionKey, IBindingSet>> it =
- solutionsOut.entrySet().iterator();
-
- while (it.hasNext()) {
-
- final Map.Entry<SolutionKey, IBindingSet> entry = it.next();
-
- final IBindingSet bs = entry.getValue();
-
- if (log.isDebugEnabled()) {
- log.debug("considering possible solution: " + bs);
- }
-
- if (gearing.outConst != null) {
-
+ if (gearing.outConst != null) {
+
+ final Iterator<Map.Entry<SolutionKey, IBindingSet>> it =
+ solutionsOut.entrySet().iterator();
+
+ while (it.hasNext()) {
+
+ final IBindingSet bs = it.next().getValue();
+
/*
- * Handle the case where there is a constant on the
- * output side of the subquery. Make sure the
- * solution's transitive output variable matches.
*/
if (!bs.get(gearing.tVarOut).equals(gearing.outConst)) {
if (log.isDebugEnabled()) {
log.debug("transitive output does not match output const, dropping");
+ log.debug(bs.get(gearing.tVarOut));
+ log.debug(gearing.outConst);
}
it.remove();
+ }
+
+ }
+
+ }
+
+ if (lowerBound == 0 && (gearing.inVar != null && gearing.outVar != null)) {
+
+ final Map<SolutionKey, IBindingSet> zlps = new LinkedHashMap<SolutionKey, IBindingSet>();
+
+ for (IBindingSet bs : solutionsOut.values()) {
+
+ // is this right??
+ if (bs.isBound(gearing.outVar)) {
+
continue;
}
+
+ { // left to right
+
+ final IBindingSet zlp = bs.clone();
+
+ zlp.set(gearing.tVarOut, zlp.get(gearing.inVar));
+
+ final SolutionKey key = newSolutionKey(gearing, zlp);
+
+ if (!solutionsOut.containsKey(key)) {
+
+ zlps.put(key, zlp);
+
+ }
+
+ }
+
+ { // right to left
+
+ final IBindingSet zlp = bs.clone();
+
+ zlp.set(gearing.inVar, zlp.get(gearing.tVarOut));
+
+ final SolutionKey key = newSolutionKey(gearing, zlp);
+
+ if (!solutionsOut.containsKey(key)) {
+
+ zlps.put(key, zlp);
+
+ }
+
+ }
+
+ }
+
+ solutionsOut.putAll(zlps);
+
+ }
+
+ /*
+ * We can special case when there was no input (and
+ * thus no join is required).
+ */
+ if (noInput) {
- } else { // outVar != null
-
- /*
- * Handle the case where the gearing.outVar was bound
- * coming in. Again, make sure it matches the
- * transitive output variable.
- */
- if (bs.isBound(gearing.outVar)) {
+ for (IBindingSet bs : solutionsOut.values()) {
+
+ /*
+ * Set the binding for the outVar if necessary.
+ */
+ if (gearing.outVar != null) {
- if (!bs.get(gearing.tVarOut).equals(bs.get(gearing.outVar))) {
-
- if (log.isDebugEnabled()) {
- log.debug("transitive output does not match incoming binding for output var, dropping");
- }
-
- it.remove();
-
- continue;
-
- }
-
- } else {
-
- /*
- * Handle the normal case - when we simply
- * need to copy the transitive output over to
- * the real output.
- */
bs.set(gearing.outVar, bs.get(gearing.tVarOut));
}
+ /*
+ * Clear the intermediate variables before sending the output
+ * down the pipeline.
+ */
+ bs.clear(gearing.tVarIn);
+ bs.clear(gearing.tVarOut);
+
}
- if (log.isDebugEnabled()) {
- log.debug("solution accepted");
- }
+ final IBindingSet[] chunkOut =
+ solutionsOut.values().toArray(
+ new IBindingSet[solutionsOut.size()]);
+
+ if (log.isDebugEnabled()) {
+ log.debug("final output to sink:\n" + Arrays.toString(chunkOut).replace("}, ", "},\n"));
+ }
+
+ // copy accepted binding sets to the default sink.
+ context.getSink().add(chunkOut);
- /*
- * Should we drop the intermediate variables now?
- */
- bs.clear(gearing.tVarIn);
- bs.clear(gearing.tVarOut);
-
- }
+ } else {
- final IBindingSet[] chunkOut =
- solutionsOut.values().toArray(
- new IBindingSet[solutionsOut.size()]);
-
- if (log.isDebugEnabled()) {
- log.debug("final output to sink:\n" + Arrays.toString(chunkOut));
+ final ArrayList<IBindingSet> finalOutput = new ArrayList<IBindingSet>();
+
+ final Iterator<Map.Entry<SolutionKey, IBindingSet>> it =
+ solutionsOut.entrySet().iterator();
+
+ while (it.hasNext()) {
+
+ final Map.Entry<SolutionKey, IBindingSet> entry = it.next();
+
+ final IBindingSet bs = entry.getValue();
+
+ if (log.isDebugEnabled()) {
+ log.debug("considering possible solution: " + bs);
+ }
+
+ final IConstant<?> key = joinVar != null ? bs.get(joinVar) : null;
+
+ if (key != null && chunkInBySolutionKey.containsKey(key)) {
+
+ final List<IBindingSet> parentSolutionsIn = chunkInBySolutionKey.get(key);
+
+ if (log.isDebugEnabled()) {
+ log.debug("join key: " + key);
+ log.debug("parent solutions to join: " + parentSolutionsIn);
+ }
+
+ for (IBindingSet parentSolutionIn : parentSolutionsIn) {
+
+ if (gearing.outConst != null) {
+
+ /*
+ * No need to clone, since we are not modifying the
+ * incoming parent solution in this case. The ALP
+ * is simply acting as a filter.
+ */
+ finalOutput.add(parentSolutionIn);
+
+ } else { // outVar != null
+
+ /*
+ * Handle the case where the gearing.outVar was bound
+ * coming in. Again, make sure it matches the
+ * transitive output variable.
+ */
+ if (parentSolutionIn.isBound(gearing.outVar)) {
+
+ // do this later now
+
+ if (!bs.get(gearing.tVarOut).equals(parentSolutionIn.get(gearing.outVar))) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("transitive output does not match incoming binding for output var, dropping");
+ }
+
+ continue;
+
+ } else {
+
+ /*
+ * No need to clone, since we are not modifying the
+ * incoming parent solution in this case. The ALP
+ * is simply acting as a filter.
+ */
+ finalOutput.add(parentSolutionIn);
+
+ }
+
+ } else {
+
+ /*
+ * Handle the normal case - when we simply
+ * need to copy the transitive output over to
+ * the real output.
+ */
+ // bs.set(gearing.outVar, bs.get(gearing.tVarOut));
+
+ /*
+ * Clone, modify, and accept.
+ */
+ final IBindingSet join = parentSolutionIn.clone();
+
+ join.set(gearing.outVar, bs.get(gearing.tVarOut));
+
+ finalOutput.add(join);
+
+ }
+
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("solution accepted");
+ }
+
+ }
+
+ }
+
+ /*
+ * Always do the null solutions if there are any.
+ */
+ if (chunkInBySolutionKey.containsKey(null)) {
+
+ /*
+ * Join the null solutions. These solutions represent
+ * a cross product (no shared variables with the ALP node).
+ */
+ final List<IBindingSet> nullSolutions = chunkInBySolutionKey.get(null);
+
+ if (log.isDebugEnabled()) {
+ log.debug("null solutions to join: " + nullSolutions);
+ }
+
+ for (IBindingSet nullSolution : nullSolutions) {
+
+ final IBindingSet solution;
+
+ // if ((gearing.inVar != null && !nullSolution.isBound(gearing.inVar)) ||
+ // (gearing.outVar != null && !nullSolution.isBound(gearing.outVar))) {
+ if (gearing.inVar != null || gearing.outVar != null) {
+
+ solution = nullSolution.clone();
+
+ } else {
+
+ solution = nullSolution;
+
+ }
+
+ if (gearing.inVar != null) {
+
+ if (solution.isBound(gearing.inVar)) {
+
+ /*
+ * This should never happen.
+ */
+ throw new RuntimeException();
+
+ } else {
+
+ solution.set(gearing.inVar, bs.get(gearing.inVar));
+
+ }
+
+ }
+
+ if (gearing.outVar != null) {
+
+ if (solution.isBound(gearing.outVar)) {
+
+ /*
+ * This should never happen.
+ */
+ throw new RuntimeException();
+ // if (!bs.get(gearing.tVarOut).equals(solution.get(gearing.outVar))) {
+ //
+ // // discard this solution;
+ // continue;
+ //
+ // }
+
+ } else {
+
+ solution.set(gearing.outVar, bs.get(gearing.tVarOut));
+
+ }
+
+ }
+
+ finalOutput.add(solution);
+
+ if (log.isDebugEnabled()) {
+ log.debug("solution accepted");
+ }
+
+ }
+
+ }
+
+ }
+
+ final IBindingSet[] chunkOut = finalOutput.toArray(new IBindingSet[finalOutput.size()]);
+ // solutionsOut.values().toArray(
+ // new IBindingSet[solutionsOut.size()]);
+
+ if (log.isDebugEnabled()) {
+ log.debug("final output to sink:\n" + Arrays.toString(chunkOut).replace("}, ", "},\n"));
+ }
+
+ // copy accepted binding sets to the default sink.
+ context.getSink().add(chunkOut);
+
}
-
- // copy accepted binding sets to the default sink.
- context.getSink().add(chunkOut);
- // done.
-// return runningSubquery;
-
} // processChunk method
/**
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/TestPropertyPaths.java
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/TestPropertyPaths.java (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/TestPropertyPaths.java 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,152 @@
+/**
+
+Copyright (C) SYSTAP, LLC 2013. All rights reserved.
+
+Contact:
+ SYSTAP, LLC
+ 4501 Tower Road
+ Greensboro, NC 27410
+ lic...@bi...
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; version 2 of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+package com.bigdata.rdf.sparql.ast.eval;
+
+
+
+public class TestPropertyPaths extends AbstractDataDrivenSPARQLTestCase {
+
+ /**
+ *
+ */
+ public TestPropertyPaths() {
+ }
+
+ /**
+ * @param name
+ */
+ public TestPropertyPaths(String name) {
+ super(name);
+ }
+
+// private void property_path_test(String name) throws Exception {
+//
+// new TestHelper(
+// "property-path-734-" + name, // testURI,
+// "property-path-734-" + name + ".rq", // queryFileURL
+// "property-path-734.ttl", // dataFileURL
+// "property-path-734.srx" // resultFileURL,
+// ).runTest();
+// }
+//
+// private void property_path_using_workaround_test(String name) throws Exception {
+//
+// new TestHelper(
+// "property-path-734-B-" + name, // testURI,
+// "property-path-734-B-" + name + ".rq", // queryFileURL
+// "property-path-734-B.ttl", // dataFileURL
+// "property-path-734-B.srx" // resultFileURL,
+// ).runTest();
+// }
+
+ public void test_inVar_outConst_notBound() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-1.rq", // queryFileURL
+ "property-paths-2.ttl", // dataFileURL
+ "property-paths-1.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outConst_inBound() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-1.rq", // queryFileURL
+ "property-paths.ttl", // dataFileURL
+ "property-paths-1.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outVar_inBound() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-2.rq", // queryFileURL
+ "property-paths.ttl", // dataFileURL
+ "property-paths-2.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outVar_outBound() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-3.rq", // queryFileURL
+ "property-paths-2.ttl", // dataFileURL
+ "property-paths-3.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outVar_bothBound() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-3.rq", // queryFileURL
+ "property-paths.ttl", // dataFileURL
+ "property-paths-3.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inConst_outConst() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-4.rq", // queryFileURL
+ "property-paths.ttl", // dataFileURL
+ "property-paths-3.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outVar_noSharedVars() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-6.rq", // queryFileURL
+ "property-paths.ttl", // dataFileURL
+ "property-paths-6.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+ public void test_inVar_outVar_someSharedVars() throws Exception {
+
+ new TestHelper(
+ "property-paths", // testURI,
+ "property-paths-7.rq", // queryFileURL
+ "property-paths-7.ttl", // dataFileURL
+ "property-paths-7.srx" // resultFileURL,
+ ).runTest();
+
+ }
+
+}
Property changes on: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/TestPropertyPaths.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,11 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val
+WHERE {
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?A rdf:type / rdfs:subClassOf *
+ <os:ClassA> ;
+}
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.srx
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.srx (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-1.srx 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<sparql
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+ xmlns="http://www.w3.org/2005/sparql-results#" >
+ <head>
+ <variable name="A"/>
+ </head>
+ <results>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ </result>
+ </results>
+</sparql>
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,10 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type
+WHERE {
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?A rdf:type / rdfs:subClassOf * ?type .
+}
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.srx
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.srx (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.srx 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<sparql
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+ xmlns="http://www.w3.org/2005/sparql-results#" >
+ <head>
+ <variable name="A"/>
+ </head>
+ <results>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ </results>
+</sparql>
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.ttl
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.ttl (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-2.ttl 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,26 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<os:0> rdf:type <os:ClassA> .
+<os:1> rdf:type <os:ClassB> .
+<os:2> rdf:type <os:ClassC> .
+<os:3> rdf:type <os:ClassD> .
+<os:4> rdf:type <os:ClassE> .
+
+<os:ClassB> rdfs:subClassOf <os:ClassA> .
+<os:ClassC> rdfs:subClassOf <os:ClassA> .
+<os:ClassD> rdfs:subClassOf <os:ClassB> .
+<os:ClassE> rdfs:subClassOf <os:ClassX> .
+
+<os:0> <os:prop> <os:P>.
+<os:1> <os:prop> <os:P>.
+<os:2> <os:prop> <os:Q>.
+<os:3> <os:prop> <os:Q>.
+<os:4> <os:prop> <os:P>.
+
+<os:0> rdf:value "x" .
+<os:0> rdf:value "y" .
+<os:1> rdf:value "z" .
+<os:2> rdf:value "foo" .
+<os:3> rdf:value "foo" .
+<os:4> rdf:value "foo" .
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,13 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type
+WHERE {
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?A rdf:type / rdfs:subClassOf * ?type .
+}
+BINDINGS ?type {
+ (<os:ClassA>)
+}
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.srx
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.srx (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-3.srx 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<sparql
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+ xmlns="http://www.w3.org/2005/sparql-results#" >
+ <head>
+ <variable name="A"/>
+ </head>
+ <results>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ </results>
+</sparql>
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-4.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-4.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-4.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,14 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type
+WHERE {
+ <os:ClassB> rdfs:subClassOf * <os:ClassA> .
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?A rdf:type / rdfs:subClassOf * ?type .
+}
+BINDINGS ?type {
+ (<os:ClassA>)
+}
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-5.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-5.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-5.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,12 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type
+WHERE {
+ hint:Group hint:optimizer "None" .
+ <os:ClassB> rdfs:subClassOf * <os:ClassA> .
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?A rdf:type / rdfs:subClassOf * ?type .
+}
\ No newline at end of file
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,10 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type1 ?type2
+WHERE {
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ ?type1 rdfs:subClassOf * ?type2 .
+}
\ No newline at end of file
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.srx
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.srx (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-6.srx 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,477 @@
+<?xml version="1.0"?>
+<sparql
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+ xmlns="http://www.w3.org/2005/sparql-results#" >
+ <head>
+ <variable name="A"/>
+ </head>
+ <results>
+
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassA</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassD</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassE</uri>
+ </binding>
+ </result>
+
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassA</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassD</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassE</uri>
+ </binding>
+ </result>
+
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassA</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassD</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassE</uri>
+ </binding>
+ </result>
+
+ </results>
+</sparql>
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.rq
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.rq (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.rq 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,16 @@
+
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?A ?val ?type1 ?type2
+WITH {
+ select ?A ?val ?type1 where {
+ ?A <os:prop> <os:P> .
+ ?A rdf:value ?val .
+ optional { ?A rdf:type ?type1 } .
+ }
+} as %ns1
+WHERE {
+ include %ns1 .
+ ?type1 rdfs:subClassOf * ?type2 .
+}
\ No newline at end of file
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.srx
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.srx (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.srx 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,351 @@
+<?xml version="1.0"?>
+<sparql
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema#"
+ xmlns="http://www.w3.org/2005/sparql-results#" >
+ <head>
+ <variable name="A"/>
+ </head>
+ <results>
+
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:1</uri>
+ </binding>
+ <binding name="val">
+ <literal>z</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassA</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassD</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>x</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassE</uri>
+ </binding>
+ </result>
+
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassA</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassA</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassB</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassB</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassC</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassC</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassD</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassD</uri>
+ </binding>
+ </result>
+ <result>
+ <binding name="A">
+ <uri>os:0</uri>
+ </binding>
+ <binding name="val">
+ <literal>y</literal>
+ </binding>
+ <binding name="type1">
+ <uri>os:ClassE</uri>
+ </binding>
+ <binding name="type2">
+ <uri>os:ClassE</uri>
+ </binding>
+ </result>
+
+ </results>
+</sparql>
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.ttl
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.ttl (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths-7.ttl 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,20 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+#<os:0> rdf:type <os:ClassA> .
+<os:1> rdf:type <os:ClassB> .
+<os:2> rdf:type <os:ClassC> .
+<os:3> rdf:type <os:ClassD> .
+<os:4> rdf:type <os:ClassE> .
+
+<os:ClassB> rdfs:subClassOf <os:ClassA> .
+<os:ClassC> rdfs:subClassOf <os:ClassA> .
+<os:ClassD> rdfs:subClassOf <os:ClassB> .
+<os:ClassE> rdfs:subClassOf <os:ClassC> .
+
+<os:0> <os:prop> <os:P>.
+<os:1> <os:prop> <os:P>.
+
+<os:0> rdf:value "x" .
+<os:0> rdf:value "y" .
+<os:1> rdf:value "z" .
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths.ttl
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths.ttl (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/eval/property-paths.ttl 2013-10-25 16:26:56 UTC (rev 7483)
@@ -0,0 +1,20 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+
+<os:0> rdf:type <os:ClassA> .
+<os:1> rdf:type <os:ClassB> .
+<os:2> rdf:type <os:ClassC> .
+<os:3> rdf:type <os:ClassD> .
+<os:4> rdf:type <os:ClassE> .
+
+<os:ClassB> rdfs:subClassOf <os:ClassA> .
+<os:ClassC> rdfs:subClassOf <os:ClassA> .
+<os:ClassD> rdfs:subClassOf <os:ClassB> .
+<os:ClassE> rdfs:subClassOf <os:ClassC> .
+
+<os:0> <os:prop> <os:P>.
+<os:1> <os:prop> <os:P>.
+
+<os:0> rdf:value "x" .
+<os:0> rdf:value "y" .
+<os:1> rdf:value "z" .
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|