Querying and query answering example on DB2 RDF

We considered the following six-atoms query (below in SPARQL syntax), on the LUBM^\exists 15M dataset:

SELECT DISTINCT ?U ?I ?N ?E ?T

WHERE  { ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#AssistantProfessor>. ?U <http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus> ?X. ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#researchInterest> ?I. ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#name> ?N. ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress> ?E. ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#telephone> ?T. }”

The SQL syntax of the query as translated by DB2 RDF store into SQL is:

SELECT DISTINCT  ?U ?I ?N ?E ?T

WHERE

{ ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#AssistantProfessor> .

?U <http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus> ?X .

?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#researchInterest> ?I .

?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#name> ?N .

?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress> ?E .

?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#telephone> ?T

}

| Cache hit : false |  67 | 113 | 0 | 4888 |

WITH Q1 AS (SELECT entry AS entry, T.gid AS gid,

CASE  WHEN T.prop1 = ‘http://www.w3.org/1999/02/22-rdf-syntax-ns#type‘ THEN T.val1

ELSE NULL END AS val0

FROM lubm15m_RPH AS T

WHERE T.entry = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#AssistantProfessor‘ AND (T.typ=’20’) AND T.gid = ‘DEF’ AND

(( T.PROP1= ‘http://www.w3.org/1999/02/22-rdf-syntax-ns#type’))) ,

QS1 AS ( SELECT COALESCE(S0.elem,T.val0) AS X

FROM  Q1 AS T

LEFT OUTER JOIN lubm15m_RS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’),

Q2 AS (SELECT DISTINCT QS1.X AS X, T.gid AS gid,

CASE  WHEN T.prop0 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus‘ THEN T.val0

WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus‘ THEN T.val4

WHEN T.prop1 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus‘ THEN T.val1

ELSE NULL END AS val0

FROM QS1,lubm15m_RPH AS T

WHERE QS1.X=T.entry AND T.gid = ‘DEF’ AND

(( T.PROP0= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus‘ OR

T.PROP4= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus‘ OR

T.PROP1= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#hasAlumnus’))) ,

QS2 AS ( SELECT DISTINCT  T.X AS X,COALESCE(S0.elem,T.val0) AS U

FROM  Q2 AS T

LEFT OUTER JOIN lubm15m_RS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’),

Q3 AS (SELECT DISTINCT QS2.X AS X, T.gid AS gid,

CASE  WHEN T.prop8 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#telephone‘ THEN T.val8

ELSE NULL END AS val0,

CASE  WHEN T.prop8 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#telephone‘ THEN T.typ8

ELSE NULL END AS typ0,

CASE  WHEN T.prop7 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress‘ THEN T.val7

ELSE NULL END AS val1,

CASE  WHEN T.prop7 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress‘ THEN T.typ7

ELSE NULL END AS typ1,

CASE  WHEN T.prop10 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#name‘ THEN T.val10

ELSE NULL END AS val2,

CASE  WHEN T.prop10 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#name‘ THEN T.typ10

ELSE NULL END AS typ2,

CASE  WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#researchInterest‘ THEN T.val4

ELSE NULL END AS val3,

CASE  WHEN T.prop4 = ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#researchInterest‘ THEN T.typ4

ELSE NULL END AS typ3,QS2.U AS U

FROM QS2,lubm15m_DPH AS T

WHERE QS2.X=T.entry AND T.gid = ‘DEF’ AND

(( T.PROP8= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#telephone) AND

( T.PROP7= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#emailAddress‘) AND

( T.PROP10= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#name‘) AND

( T.PROP4= ‘http://swat.cse.lehigh.edu/onto/univ-bench.owl#researchInterest’))) ,

QS3 AS ( SELECT DISTINCT  T.X AS X,COALESCE(S0.elem,T.val0) AS T,COALESCE(S0.typ,T.typ0) AS T_typ,

COALESCE(S1.elem,T.val1) AS E,COALESCE(S1.typ,T.typ1) AS E_typ,

COALESCE(S2.elem,T.val2) AS N,COALESCE(S2.typ,T.typ2) AS N_typ,

COALESCE(S3.elem,T.val3) AS I,COALESCE(S3.typ,T.typ3) AS I_typ,T.U AS U

FROM  Q3 AS T

LEFT OUTER JOIN lubm15m_DS AS S0 ON T.val0=S0.list_id AND T.val0 LIKE ‘lid:%’

LEFT OUTER JOIN lubm15m_DS AS S1 ON T.val1=S1.list_id AND T.val1 LIKE ‘lid:%’

LEFT OUTER JOIN lubm15m_DS AS S2 ON T.val2=S2.list_id AND T.val2 LIKE ‘lid:%’

LEFT OUTER JOIN lubm15m_DS AS S3 ON T.val3=S3.list_id AND T.val3 LIKE ‘lid:%’)

SELECT  DISTINCT I AS I,I_typ AS I_typ,N AS N,N_typ AS N_typ,U AS U,T AS T,T_typ AS T_typ,E AS E,E_typ AS E_typ FROM QS3

The syntax of the UCQ reformulation can be found here: https://team.inria.fr/cedar/ucq-reformulation-of-sparql-query-on-the-db2-rdf-store/

Comments are closed.