view src/sparql/insert_datapoint_order_bar_one.sparql @ 69:94e6592eb106

modified to take into account that sia:Datapoints now have sia:vector properties which then have sia:dimVals, rather than sia:Datapoints having their own sia:dimVal properties
author stevenh
date Fri, 02 Aug 2013 11:13:10 +0100
parents 387439c076f9
children
line wrap: on
line source
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX abc: <http://example.org/abc#>
PREFIX seq: <http://example.org/seq#>
PREFIX sia: <http://example.org/sia#>

INSERT { ?datapoint1 sia:orderedIndex ?orderedIndex;
		 			 sia:memberOfOrderedSet ?dataset}
			
WHERE
{
	{
		SELECT ?datapoint1 (COUNT (?datapoint2) AS ?numSmallerDatapoints) ?dataset
		WHERE
		{
			?datapoint1 sia:vector ?vector1 .
			?vector1 a sia:Vector .
			?vector1 sia:dimVal ?dimVal1x .
			?datapoint1 sia:memberOfDataset ?dataset .
			?dimVal1x sia:dimension ?smallestDimensionMin .
			?dimVal1x sia:value ?value1x .

			?datapoint2 sia:vector ?vector2 .
			?vector2 a sia:Vector .
			?vector2 sia:dimVal ?dimVal2x .
			?dimVal2x sia:dimension ?smallestDimensionMin .
			?dimVal2x sia:value ?value2x .
			
			FILTER ( datatype(?value1x) = xsd:double && datatype(?value2x) = xsd:double )
			FILTER (?value1x > ?value2x) .
			{
				SELECT ?datapoint1 ?datapoint2 (MIN(?dimension) AS ?smallestDimensionMin)
				WHERE
				{
					?datapoint1 sia:vector ?vector1 .
					?vector1 a sia:Vector .
					?datapoint1 a sia:Datapoint .
					?datapoint1 sia:memberOfDataset ?dataset .
					?vector1 sia:dimVal ?dimVal1 .
					?dimVal1 sia:dimension ?dimension .
					?dimVal1 sia:value ?value1 .
		
					?datapoint2 sia:vector ?vector2 .
					?vector2 a sia:Vector .
					?datapoint2 a sia:Datapoint .
					?datapoint2 sia:memberOfDataset ?dataset .
					?vector2 sia:dimVal ?dimVal2 .
					?dimVal2 sia:dimension ?dimension .
					?dimVal2 sia:value ?value2 .
		
					FILTER ( datatype(?value1) = xsd:double && datatype(?value2) = xsd:double )
					FILTER (?value1 != ?value2) .
				}
				GROUP BY ?datapoint1 ?datapoint2
			}
		}
		GROUP BY ?datapoint1 ?dataset
	}
	BIND (?numSmallerDatapoints + 1 AS ?orderedIndex)
}