You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ca...@apache.org on 2011/09/02 11:07:53 UTC
svn commit: r1164417 - in /incubator/jena/Jena2/ARQ/trunk:
src-test/com/hp/hpl/jena/sparql/algebra/optimize/
src/com/hp/hpl/jena/query/ src/com/hp/hpl/jena/sparql/algebra/optimize/
testing/ARQ/Optimization/
Author: castagna
Date: Fri Sep 2 09:07:53 2011
New Revision: 1164417
URL: http://svn.apache.org/viewvc?rev=1164417&view=rev
Log:
JENA-90
A simple optimisation to replace (distinct (order (...) ...) with (reduced (order (...) ...).
This way we avoid to keep an in-memory data structure for the already seen bindings for DISTINCT-ORDER BY queries.
Added:
incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java (with props)
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.rq
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.srj
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.rq
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.srj
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.rq
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.srj
Modified:
incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/query/ARQ.java
incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/manifest.ttl
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java?rev=1164417&r1=1164416&r2=1164417&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java Fri Sep 2 09:07:53 2011
@@ -9,6 +9,7 @@ package com.hp.hpl.jena.sparql.algebra.o
import org.junit.Test ;
import org.openjena.atlas.junit.BaseTest ;
+import com.hp.hpl.jena.query.ARQ ;
import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.QueryFactory ;
import com.hp.hpl.jena.sparql.algebra.Algebra ;
@@ -127,8 +128,9 @@ public class TestOptimizer extends BaseT
check(queryString, opExpectedString) ;
}
- @Test public void query_topn_01()
+ @Test public void slice_order_to_topn_01()
{
+ assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" ;
String opExpectedString =
"(top (42 ?p ?o)\n" +
@@ -136,8 +138,9 @@ public class TestOptimizer extends BaseT
check(queryString, opExpectedString) ;
}
- @Test public void query_topn_02()
+ @Test public void slice_order_to_topn_02()
{
+ assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 4242" ;
String opExpectedString =
"(slice _ 4242\n" +
@@ -145,6 +148,49 @@ public class TestOptimizer extends BaseT
" (bgp (triple ?s ?p ?o))))" ;
check(queryString, opExpectedString) ;
}
+
+ @Test public void slice_order_to_topn_03()
+ {
+ try {
+ ARQ.setFalse(ARQ.optTopNSorting) ;
+ assertTrue(ARQ.isFalse(ARQ.optTopNSorting)) ;
+ String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" ;
+ String opExpectedString =
+ "(slice _ 42\n" +
+ " (order (?p ?o)\n" +
+ " (bgp (triple ?s ?p ?o))))" ;
+ check(queryString, opExpectedString) ;
+ } finally {
+ ARQ.unset(ARQ.optTopNSorting) ;
+ }
+ }
+
+ @Test public void distinct_to_reduced_01()
+ {
+ assertTrue(ARQ.isTrueOrUndef(ARQ.optDistinctToReduced)) ;
+ String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o" ;
+ String opExpectedString =
+ "(reduced \n" +
+ " (order (?p ?o)\n" +
+ " (bgp (triple ?s ?p ?o))))" ;
+ check(queryString, opExpectedString) ;
+ }
+
+ @Test public void distinct_to_reduced_02()
+ {
+ try {
+ ARQ.setFalse(ARQ.optDistinctToReduced) ;
+ assertTrue(ARQ.isFalse(ARQ.optDistinctToReduced)) ;
+ String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o" ;
+ String opExpectedString =
+ "(distinct \n" +
+ " (order (?p ?o)\n" +
+ " (bgp (triple ?s ?p ?o))))" ;
+ check(queryString, opExpectedString) ;
+ } finally {
+ ARQ.unset(ARQ.optDistinctToReduced) ;
+ }
+ }
private static void check(String queryString, String opExpectedString)
{
Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/query/ARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/query/ARQ.java?rev=1164417&r1=1164416&r2=1164417&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/query/ARQ.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/query/ARQ.java Fri Sep 2 09:07:53 2011
@@ -239,6 +239,12 @@ public class ARQ
*/
public static final Symbol optTopNSorting = ARQConstants.allocSymbol("optTopNSorting") ;
+ /**
+ * Context key controlling whether a DISTINCT-ORDER BY query is done replacing the distinct with a reduced.
+ * Default is "true" - the reduced operator does not need to keep a data structure with all previously seen bindings.
+ */
+ public static final Symbol optDistinctToReduced = ARQConstants.allocSymbol("optDistinctToReduced") ;
+
@Deprecated
/** @deprecated Use optFilterPlacement */
public static final Symbol filterPlacement = optFilterPlacement ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java?rev=1164417&r1=1164416&r2=1164417&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java Fri Sep 2 09:07:53 2011
@@ -108,7 +108,7 @@ public class Optimize implements Rewrite
/** Alternative name for compatibility only */
public static final Symbol filterPlacement2 = ARQConstants.allocSymbol("filterPlacement") ;
- @SuppressWarnings("deprecation")
+ @SuppressWarnings("all")
public Op rewrite(Op op)
{
if ( context.get(ARQConstants.sysOptimizer) == null )
@@ -176,6 +176,9 @@ public class Optimize implements Rewrite
if ( context.isTrueOrUndef(ARQ.optTopNSorting) )
op = apply("TopN Sorting", new TransformTopN(), op) ;
+ if ( context.isTrueOrUndef(ARQ.optDistinctToReduced) )
+ op = apply("Distinct replaced with reduced", new TransformDistinctToReduced(), op) ;
+
op = apply("Path flattening", new TransformPathFlattern(), op) ;
// Mark
if ( false )
Added: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java (added)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java Fri Sep 2 09:07:53 2011
@@ -0,0 +1,38 @@
+/**
+ * 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 com.hp.hpl.jena.sparql.algebra.optimize;
+
+import com.hp.hpl.jena.sparql.algebra.Op ;
+import com.hp.hpl.jena.sparql.algebra.TransformCopy ;
+import com.hp.hpl.jena.sparql.algebra.op.OpDistinct ;
+import com.hp.hpl.jena.sparql.algebra.op.OpOrder ;
+import com.hp.hpl.jena.sparql.algebra.op.OpReduced ;
+
+public class TransformDistinctToReduced extends TransformCopy {
+
+ @Override
+ public Op transform(OpDistinct opDistinct, Op subOp) {
+ if ( subOp instanceof OpOrder ) {
+ return OpReduced.create(subOp) ;
+ }
+ return super.transform(opDistinct, subOp) ;
+ }
+
+}
+
Propchange: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/manifest.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/manifest.ttl?rev=1164417&r1=1164416&r2=1164417&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/manifest.ttl (original)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/manifest.ttl Fri Sep 2 09:07:53 2011
@@ -230,4 +230,29 @@
qt:data <data-2.ttl> ] ;
mf:result <opt-top-10.srj>
]
+
+ [ mf:name "opt-distinct-to-reduced-01" ;
+ rdf:type mfx:TestQuery ;
+ mf:action
+ [ qt:query <opt-distinct-to-reduced-01.rq> ;
+ qt:data <data-2.ttl> ] ;
+ mf:result <opt-distinct-to-reduced-01.srj>
+ ]
+
+ [ mf:name "opt-distinct-to-reduced-02" ;
+ rdf:type mfx:TestQuery ;
+ mf:action
+ [ qt:query <opt-distinct-to-reduced-02.rq> ;
+ qt:data <data-2.ttl> ] ;
+ mf:result <opt-distinct-to-reduced-02.srj>
+ ]
+
+ [ mf:name "opt-distinct-to-reduced-03" ;
+ rdf:type mfx:TestQuery ;
+ mf:action
+ [ qt:query <opt-distinct-to-reduced-03.rq> ;
+ qt:data <data-2.ttl> ] ;
+ mf:result <opt-distinct-to-reduced-03.srj>
+ ]
+
).
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.rq?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.rq Fri Sep 2 09:07:53 2011
@@ -0,0 +1,5 @@
+PREFIX : <http://example/>
+
+SELECT DISTINCT ?v
+{ ?x :p ?v }
+ORDER BY ?v
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.srj?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-01.srj Fri Sep 2 09:07:53 2011
@@ -0,0 +1,69 @@
+{
+ "head": {
+ "vars": [ "v" ]
+ } ,
+ "results": {
+ "bindings": [
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "1" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "2" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "3" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "4" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "5" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "6" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "7" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "8" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "9" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "10" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "11" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "12" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "13" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "14" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "15" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "16" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "17" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "18" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "19" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "20" }
+ }
+ ]
+ }
+}
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.rq?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.rq Fri Sep 2 09:07:53 2011
@@ -0,0 +1,6 @@
+PREFIX : <http://example/>
+
+SELECT DISTINCT ?v
+{ ?x :p ?v }
+ORDER BY ?v
+LIMIT 6
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.srj?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-02.srj Fri Sep 2 09:07:53 2011
@@ -0,0 +1,27 @@
+{
+ "head": {
+ "vars": [ "v" ]
+ } ,
+ "results": {
+ "bindings": [
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "1" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "2" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "3" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "4" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "5" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "6" }
+ }
+ ]
+ }
+}
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.rq?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.rq Fri Sep 2 09:07:53 2011
@@ -0,0 +1,5 @@
+PREFIX : <http://example/>
+
+SELECT DISTINCT ?v
+{ ?x :p ?v }
+ORDER BY ?x
Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.srj?rev=1164417&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Optimization/opt-distinct-to-reduced-03.srj Fri Sep 2 09:07:53 2011
@@ -0,0 +1,69 @@
+{
+ "head": {
+ "vars": [ "v" ]
+ } ,
+ "results": {
+ "bindings": [
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "1" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "10" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "11" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "12" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "13" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "14" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "15" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "16" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "17" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "18" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "19" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "2" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "20" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "3" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "4" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "5" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "6" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "7" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "8" }
+ } ,
+ {
+ "v": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "9" }
+ }
+ ]
+ }
+}