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. |