<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://b-kaempgen.de/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://b-kaempgen.de/index.php?action=history&amp;feed=atom&amp;title=Slicer</id>
		<title>Slicer - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://b-kaempgen.de/index.php?action=history&amp;feed=atom&amp;title=Slicer"/>
		<link rel="alternate" type="text/html" href="http://b-kaempgen.de/index.php?title=Slicer&amp;action=history"/>
		<updated>2026-04-29T11:19:45Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.22.2</generator>

	<entry>
		<id>http://b-kaempgen.de/index.php?title=Slicer&amp;diff=629&amp;oldid=prev</id>
		<title>Benedikt Kämpgen: 1 revision: From LD-Cubes</title>
		<link rel="alternate" type="text/html" href="http://b-kaempgen.de/index.php?title=Slicer&amp;diff=629&amp;oldid=prev"/>
				<updated>2023-01-04T13:24:17Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision: From LD-Cubes&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 13:24, 4 January 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Benedikt Kämpgen</name></author>	</entry>

	<entry>
		<id>http://b-kaempgen.de/index.php?title=Slicer&amp;diff=628&amp;oldid=prev</id>
		<title>Benedikt Kämpgen at 13:30, 26 August 2015</title>
		<link rel="alternate" type="text/html" href="http://b-kaempgen.de/index.php?title=Slicer&amp;diff=628&amp;oldid=prev"/>
				<updated>2015-08-26T13:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Motivation==&lt;br /&gt;
* Google is not able to answer questions such as &amp;quot;population of females in Germany 2014&amp;quot;.&lt;br /&gt;
* Wolfram Alpha does that but is commercial and hard-coded knowledge base.&lt;br /&gt;
* Statistical Linked Data (see olap4ld, ldcx [http://www.aifb.kit.edu/web/Inproceedings3420], fios [http://www.aifb.kit.edu/web/Inproceedings3413]) allows to have purely machine-readable representations of datasets that however are seldomly indexed by search engines.&lt;br /&gt;
* In Statistical Linked Data such questions can be answered by &amp;quot;slices&amp;quot; (note, in OLAP terms, &amp;quot;slices&amp;quot; are actually &amp;quot;dices&amp;quot;, but we stick to this term since QB [http://www.w3.org/TR/vocab-data-cube/] uses the term slices)&lt;br /&gt;
* The goal of this work is to allow browsing and search over all possible slices of arbitrary datasets.&lt;br /&gt;
* Eurostat is used for evaluation, but any datasets should in theory be discoverable.&lt;br /&gt;
&lt;br /&gt;
==Info==&lt;br /&gt;
* Demo: http://141.52.218.13:8080/QB-Slicer/ (unfortunately, not online, any more)&lt;br /&gt;
* Requirements&lt;br /&gt;
** QB-Slicer GUI: https://code.google.com/p/qb-slicer/ (read only, migration to GitHub would be great)&lt;br /&gt;
** [[olap4ld]]&lt;br /&gt;
&lt;br /&gt;
==Aim / Research questions==&lt;br /&gt;
* We want to create a test case that queries an arbitrary dataset.&lt;br /&gt;
* It uses a LinkedDataEngine such as EmbeddedSesame (or inf no aggregation needed Qcrumb.com)&lt;br /&gt;
* It logs the SPARQL queries&lt;br /&gt;
* It computes all possible 1- and 2-dimensional slices (dices) via a logical olap query trees.&lt;br /&gt;
* It computes (no aggregation needed) the values via qcrumb (and returns the sparql query)&lt;br /&gt;
* Browsing of slices&lt;br /&gt;
* How to represent and generate the URIs? We need a suitable URI scheme for identifying all slices of a dataset (e.g., bit-map encoded dimensions and dimension members, e.g., ?dsd={uri}&amp;amp;from{uri}..., e.g., encoding of query in URI)&lt;br /&gt;
** Possibly, we first create the slices in RDF in an offline-fashion, then allow browsing through such slices in HTML. &lt;br /&gt;
&lt;br /&gt;
===Further aims===&lt;br /&gt;
* For an arbitrary Eurostat dataset, link all possible 1-Dimensional slices&lt;br /&gt;
* Add 2-dimensional slices&lt;br /&gt;
* Search-engine optimised (including Human-readable, but possibly also machine-readable) representation of slices&lt;br /&gt;
* More-dimensional slices &lt;br /&gt;
* Evaluation on other datasets, e.g., Edgar [http://edgarwrap.ontologycentral.com/], Yahoo! [http://yahoofinancewrap.appspot.com/], more datasets see at [http://wiki.planet-data.eu/web/Datasets] and [[LDCX]] demo.&lt;br /&gt;
* Possibly &amp;quot;real&amp;quot; slices, i.e., no dices but slices created by roll-ups.&lt;br /&gt;
* Possibly integrated datasets (for browsing of useful comparisons)&lt;br /&gt;
* Possibly verbalisation of anomalies in the data (e.g., an &amp;quot;anomolous high value of a population&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==We have two possibilities to generate all 1- and 2-dimensional queries for slices==&lt;br /&gt;
# We create an olap4ld connection and use olap4j metadata (multidimensional objects, rows) to generate the olap queries and to issue those to the olap4ld connection&lt;br /&gt;
# We directly issue metadata queries to an olap4ld Linked Data Engine to generate the olap queries and to issue those queries to the LD Engine.&lt;br /&gt;
&lt;br /&gt;
It seems more intuitive to use the OLAP Linked Data Engine, directly.&lt;br /&gt;
&lt;br /&gt;
The problem is that olap operators use metadata objects from olap4j.&lt;br /&gt;
&lt;br /&gt;
If we try to avoid the use of olap4j, we may try to only use primitive objects for olap operators:&lt;br /&gt;
&lt;br /&gt;
* RollUp: Needs rollups. Every rollup needs dimensionProperty, levelURI, levelHeight.&lt;br /&gt;
&lt;br /&gt;
* SliceOp: Nothing&lt;br /&gt;
&lt;br /&gt;
* DiceOp: Needs dices. Every dice needs list of members. Every member needs diceslevelHeight, dimensioProperty, memberType, levelURI, memberResource, hierarchyLevels.size, memberDepth.&lt;br /&gt;
&lt;br /&gt;
* ProjectionOp: Needs projected measures. Every measure needs aggregator, measureUniqueName.&lt;br /&gt;
&lt;br /&gt;
* BaseCubeOp: Needs cube. Cube needs dsURI.&lt;br /&gt;
&lt;br /&gt;
==Problem: Operators so far get as input multidimensional elements and NOT uris, only==&lt;br /&gt;
* Operators should anyhow get as input primitive objects.&lt;br /&gt;
* From a logial olap query tree, a sparql query should directly be possible.&lt;br /&gt;
* Solution: &lt;br /&gt;
** Linked Data Engine should be working independently from olap4ld driver.&lt;br /&gt;
** Metadata queries: We have specific methods for each metadata query. They have as input a restriction object, which however could also have been a simple String[] array. They return List&amp;lt;Node[]&amp;gt; using the columns of the respective Connection.metadataRequest.&lt;br /&gt;
** OLAP queries: We have one method for olap queries. An olap query plan is given. Every olap operator gets as input a simple String[] array using the columns of the outputs of the respective Connection.metadataRequest outputs of metadata results. For restrictions, olap4j uses String[] representation that first mentions the column name, then the column value (A 1-dim list), outputs of metadata objects return ResultSet, or List&amp;lt;MetadataObject&amp;gt;, or List&amp;lt;Node[]&amp;gt;. Since we do not know, yet, whether we always want to insert only one metadata object at a time or several, we use the output List&amp;lt;Node[]&amp;gt; as an input to the olap operators.&lt;br /&gt;
* We have methods that translate a List&amp;lt;Node[]&amp;gt; representation of a metadata object into the object (Connection.Handlers). Similarly, we should have methods that translate metadata objects into List&amp;lt;Node[]&amp;gt; representation.&lt;br /&gt;
* We now have methods that translate metadata objets into List&amp;lt;Node[]&amp;gt; representation that are used by CellSet to create an OLAP Operator Query tree from an MDX parse tree.&lt;br /&gt;
&lt;br /&gt;
==Problems==&lt;br /&gt;
===Problem: Calculate number of slices===&lt;br /&gt;
* Calculate number of 1-dim and 2-dim slices for a dataset? Verify.&lt;br /&gt;
* Index calculation for slices:&lt;br /&gt;
** 1-dim slices: n-times n-1 cubes: Sum di in D Prod D\di |dj|&lt;br /&gt;
** 2-dim slices: n time n-1 times n-2 cubes: Sum di,dj in D Prod D\di,dj |dk|&lt;br /&gt;
** This is the number, but index cannot be computed since we do not have a multidim coordinates. Instead, for every slice schema we have multidim. coordinates.&lt;br /&gt;
** Therefore, in our demo, we cannot give in only an ordinal. We need to set the dimensions, then, the fixation can be ordinal, e.g., ?dim1=0&amp;amp;dim2=0&amp;amp;ordinal=0&lt;br /&gt;
* One could easily create a Slicer demo with a (dynamically crawled) set of triples. Would be another demo. Only do it for Eurostat Unemployment Rate per sex.&lt;br /&gt;
* Calculate the number of slices. Check your function.&lt;br /&gt;
&lt;br /&gt;
===Problem: How to create all 1-dimensional queries===&lt;br /&gt;
* Test-Case with DS as input. Queries any LD Engine for metadata of cube.&lt;br /&gt;
* Then we create all 1-dimensional (2-dimensional) queries, i.e. we select one dimension for rollup and all others we fix to one of their values&lt;br /&gt;
* algorithm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
input: dsuri, lde&lt;br /&gt;
output: List&amp;lt;LogicalOlapQueryTree&amp;gt; output&lt;br /&gt;
begin&lt;br /&gt;
List&amp;lt;LogicalOlapQueryPlan&amp;gt; output&lt;br /&gt;
List&amp;lt;Node[]&amp;gt; measures = lde.getMeasures(dsuri);&lt;br /&gt;
List&amp;lt;Node[]&amp;gt; dimensions = lde.getDimensions(dsuri);&lt;br /&gt;
// 1-dim&lt;br /&gt;
for each dimensions as dim2rollup {&lt;br /&gt;
  // fix all other dim&lt;br /&gt;
  List&amp;lt;List&amp;lt;Node[]&amp;gt;&amp;gt; membercombination&lt;br /&gt;
  List&amp;lt;Node[]&amp;gt; fixeddims&lt;br /&gt;
  for each dimensions as dim2fix {&lt;br /&gt;
    if (dim2fix != dim2rollup) {&lt;br /&gt;
      List&amp;lt;Node[]&amp;gt; members = lde.getMembers(dsuri,dim2fix.uri);&lt;br /&gt;
      // After, every List&amp;lt;Node&amp;gt; in membercombinations is one possible query&lt;br /&gt;
      membercombinations = cartesian_product(membercombinations, members);&lt;br /&gt;
      fixeddims.add(dim2fix);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Query 1-dim&lt;br /&gt;
  for each membercombinations as membercombination {&lt;br /&gt;
    LogicalOlapOp basecube = new BaseCubeOp(cube);&lt;br /&gt;
    LogicalOlapOp projection = new ProjectionOp(basecube, measures);&lt;br /&gt;
    List&amp;lt;Node[]&amp;gt; hierarchysignature &lt;br /&gt;
    for each membercombination as membercombined {&lt;br /&gt;
      List&amp;lt;Node[]&amp;gt; hierarchies = lde.getHierarchies(dsuri, membercombined.uri);&lt;br /&gt;
      hierarchysignature.add(hierarchies.get(1));&lt;br /&gt;
    }&lt;br /&gt;
    LogicalOlapOp dice = new DiceOp(projection, hierarchysignature, membercombination);&lt;br /&gt;
    LogicalOlapOp slice = new SliceOp(dice, {});&lt;br /&gt;
&lt;br /&gt;
    // Watch out, should only be one&lt;br /&gt;
    List&amp;lt;Node[]&amp;gt; rollupsignature = lde.getHierarchies(dim2fix.uri);&lt;br /&gt;
    List&amp;lt;Node[]&amp;gt; rollups = lde.getLevels(dim2fix.uri);&lt;br /&gt;
    LogicalOlapOp rollup = new RollupOp(slice, rollupssignature, rollups);&lt;br /&gt;
    LogicalOlapQueryPlan myplan = new LogicalOlapQueryPlan(rollup);&lt;br /&gt;
    output.add(myplan);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// What to test on?&lt;br /&gt;
for each output as myplan {&lt;br /&gt;
  Sysout(--------------);&lt;br /&gt;
  Sysout(myplan.toString());&lt;br /&gt;
  List&amp;lt;Node[]&amp;gt; result = lde.executeOlapQuery(myplan);&lt;br /&gt;
  Sysout(result.toString());&lt;br /&gt;
  Sysout(--------------);&lt;br /&gt;
}&lt;br /&gt;
return output;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Problem: Why is output always null?===&lt;br /&gt;
* Example&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select   ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  (avg(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost)  where {  ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_suppkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_custkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_orderdate&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_partkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0.  FILTER ( ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#customer_3&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#date_19940601&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#part_3&amp;gt; ) ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_discount&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_extendedprice&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_quantity&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_revenue&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_supplycost&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost.} group by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  order by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0 &lt;br /&gt;
Nov 5, 2013 3:37:40 PM org.olap4j.driver.olap4ld.linkeddata.EmbeddedSesameEngine executeOlapQuery&lt;br /&gt;
INFO: Create and execute physical query plan: SparqlSesame: PREFIX dc: &amp;lt;http://purl.org/dc/elements/1.1/&amp;gt; &lt;br /&gt;
PREFIX rdfs: &amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt; &lt;br /&gt;
PREFIX sdmx-measure: &amp;lt;http://purl.org/linked-data/sdmx/2009/measure#&amp;gt; &lt;br /&gt;
PREFIX skosclass: &amp;lt;http://ddialliance.org/ontologies/skosclass#&amp;gt; &lt;br /&gt;
PREFIX eus: &amp;lt;http://ontologycentral.com/2009/01/eurostat/ns#&amp;gt; &lt;br /&gt;
PREFIX owl: &amp;lt;http://www.w3.org/2002/07/owl#&amp;gt; &lt;br /&gt;
PREFIX rdf: &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt; &lt;br /&gt;
PREFIX qb: &amp;lt;http://purl.org/linked-data/cube#&amp;gt; &lt;br /&gt;
PREFIX skos: &amp;lt;http://www.w3.org/2004/02/skos/core#&amp;gt; &lt;br /&gt;
PREFIX dcterms: &amp;lt;http://purl.org/dc/terms/&amp;gt; &lt;br /&gt;
select   ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  (avg(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost)  where {  ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_suppkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_custkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_orderdate&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_partkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0.  FILTER ( ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#customer_3&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#date_19940601&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#part_3&amp;gt; ) ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_discount&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_extendedprice&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_quantity&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_revenue&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_supplycost&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost.} group by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  order by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0 &lt;br /&gt;
Nov 5, 2013 3:37:40 PM org.olap4j.driver.olap4ld.linkeddata.EmbeddedSesameEngine executeOlapQuery&lt;br /&gt;
INFO: Create and execute physical query plan: finished in 16ms.&lt;br /&gt;
Physical plan:SparqlSesame: PREFIX dc: &amp;lt;http://purl.org/dc/elements/1.1/&amp;gt; &lt;br /&gt;
PREFIX rdfs: &amp;lt;http://www.w3.org/2000/01/rdf-schema#&amp;gt; &lt;br /&gt;
PREFIX sdmx-measure: &amp;lt;http://purl.org/linked-data/sdmx/2009/measure#&amp;gt; &lt;br /&gt;
PREFIX skosclass: &amp;lt;http://ddialliance.org/ontologies/skosclass#&amp;gt; &lt;br /&gt;
PREFIX eus: &amp;lt;http://ontologycentral.com/2009/01/eurostat/ns#&amp;gt; &lt;br /&gt;
PREFIX owl: &amp;lt;http://www.w3.org/2002/07/owl#&amp;gt; &lt;br /&gt;
PREFIX rdf: &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&amp;gt; &lt;br /&gt;
PREFIX qb: &amp;lt;http://purl.org/linked-data/cube#&amp;gt; &lt;br /&gt;
PREFIX skos: &amp;lt;http://www.w3.org/2004/02/skos/core#&amp;gt; &lt;br /&gt;
PREFIX dcterms: &amp;lt;http://purl.org/dc/terms/&amp;gt; &lt;br /&gt;
select   ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  (avg(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue) (sum(?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost) as ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost)  where {  ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_suppkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_custkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_orderdate&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0. ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_partkey&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0.  FILTER ( ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllocustkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#customer_3&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloorderdate0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#date_19940601&amp;gt;  &amp;amp;&amp;amp;  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllopartkey0 = &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#part_3&amp;gt; ) ?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_discount&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_extendedprice&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_quantity&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_revenue&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue.?obs &amp;lt;http://olap4ld.googlecode.com/git/OLAP4LD-trunk/tests/ssb001/ttl/example.ttl#lo_supplycost&amp;gt; ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost.} group by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0  order by  ?httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0 &lt;br /&gt;
Result:&lt;br /&gt;
httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosuppkey0; httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllodiscount; httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloextendedprice; httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettlloquantity; httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllorevenue; httpolap4ldgooglecodecomgitOLAP4LDtrunktestsssb001ttlexamplettllosupplycost; &lt;br /&gt;
null; 0.0; 0; 0; 0; 0; &lt;br /&gt;
--------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* It seems, it all works fine, only the dataset does not contain values for every possible combination.&lt;br /&gt;
&lt;br /&gt;
===Problem: How to create Webservice to QB-Slicer?===&lt;br /&gt;
* We follow [http://www.torsten-horn.de/techdocs/jee-rest.htm#JaxRsMitEclipse-Tomcat-Eclipse]&lt;br /&gt;
* Uses Jersey [https://jersey.java.net/download.html]&lt;br /&gt;
* Status: Works for now&lt;br /&gt;
* URL encoded dataset URI via post.&lt;br /&gt;
* Only return: Dataseturl, Logical query plan, SPARQL query, result&lt;br /&gt;
* google code project: https://code.google.com/p/qb-slicer/&lt;br /&gt;
&lt;br /&gt;
===Problem: How to verbalize SPARQL queries?===&lt;br /&gt;
* Use Verbaliser by Basil Ell et al.&lt;br /&gt;
* Use http://km.aifb.kit.edu/projects/spartiqulator/v4/verbalize_only.pl?sparql=PREFIX+dbo%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0D%0APREFIX+dbp%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fproperty%2F%3E%0D%0APREFIX+rdf%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0ASELECT+DISTINCT+%3Furi+%3Fstring+WHERE%0D%0A{+%0D%0A%09%3Furi+rdf%3Atype+dbo%3ACountry++.%0D%0A++++++++%3Furi+dbp%3AofficialLanguages+%3Flanguage+.%0D%0A%09OPTIONAL+{+%3Furi+rdfs%3Alabel+%3Fstring+.+FILTER+%28lang%28%3Fstring%29+%3D+%27en%27%29+}%09%09+++++%0D%0A}+%0D%0AORDER+BY+DESC%28COUNT%28%3Flanguage%29%29+LIMIT+1&amp;amp;result=verbalization&lt;br /&gt;
* Other possibility: http://sparql2nl.aksw.org/demo&lt;br /&gt;
&lt;br /&gt;
==Related Work==&lt;br /&gt;
* Towards Question Answering on Statistical Linked Data http://delivery.acm.org/10.1145/2670000/2660521/p61-hoffner.pdf (e.g., see Question Corpus, Table 1)&lt;/div&gt;</summary>
		<author><name>Benedikt Kämpgen</name></author>	</entry>

	</feed>