- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Fri, 18 Jun 2010 07:41:53 -0700
- To: Juan Sequeda <jsequeda@cs.utexas.edu>
- Cc: Freddy Priyatna <fpriyatna@delicias.dia.fi.upm.es>, public-rdb2rdf-wg@w3.org
On Fri, Jun 18, 2010 at 8:54 AM, Freddy Priyatna <
fpriyatna@delicias.dia.fi.upm.es> wrote:
> Dear All,
>
> I've just read the document "Use Cases & Requirements for Mapping
> Relational Databases to RDF". There is a question I would like to ask
> regarding the figure on page 4.
>
> The figure depicts that the SPARQL is posed on the RDF graph generated by
> RDB2RDF. The impression I got is, the RDF graph has to be generated first as
> a result of RDB2RDF before we can pose the SPARQL query. However, there is a
> possibility that the RDF graph is the result of RDB2RDF + SPARQL. Is this
> accommodated in the requirement?
>
> I am missing something here? Sorry if this issue has been discussed before.
The requirement SQLGEN
http://www.w3.org/TR/2010/WD-rdb2rdf-ucr-20100608/#SQLGEN
is intended to stipulate that the mapping language enable the
translation of SPARQL queries to SQL. Following 2.1.1 "Queries Over
the RDF Graph", we commented out a section, meant to illustrate a
transformation to SQL:
[[
<!-- div3 id="RDF_Graphs_as_Non-materialized_Views">
* RDF Graphs as Non-materialized Views *
The RDF graphs defined by a mapping over a relational database need
not be materialised. Indeed, queries or inference may be expressed in
terms of a notional representation of relational data, but executed
over the original relational store. Executing the following SQL query
over any data in the relational tables should give results identical
to a SPARQL query over the RDF graph mapped from that relational data:
SELECT R_patient.ID AS patient, R_patient.DateOfBirth AS dob, R__0_sexEntry.EntryName AS sex
FROM Person AS R_patient
INNER JOIN Sex_DE AS R_sexEntry
INNER JOIN Item_Medication AS R_indicItem
INNER JOIN Medication AS R_indicMed
INNER JOIN Medication_DE AS R_indicDE
INNER JOIN NDCcodes AS R_indicCode
LEFT OUTER JOIN (
SELECT 6 AS _DISJOINT_, R_disqualMed.MedDictDE AS disqualDE,
R_disqualItem.PerformedDTTM AS disqualDate, R_disqualItem.ID AS disqualItem,
R_disqualMed.ID AS disqualMed, R_disqualDE.NDC AS disqualNDC,
R_disqualItem.PatientID AS patient, R_disqualItem.EntryName AS takes
FROM Item_Medication AS R_disqualItem
INNER JOIN Medication AS R_disqualMed
INNER JOIN Medication_DE AS R_disqualDE
INNER JOIN NDCcodes AS R_disqualCode
WHERE (R_disqualCode.NDC=R_disqualDE.NDC)
AND (R_disqualCode.ingredient=11289)
AND (R_disqualDE.ID=R_disqualMed.MedDictDE)
AND (R_disqualItem.EntryName IS NOT NULL)
AND (R_disqualItem.PatientID IS NOT NULL)
AND (R_disqualItem.PerformedDTTM IS NOT NULL)
AND (R_disqualMed.ID IS NOT NULL)
AND (R_disqualMed.ItemID=R_disqualItem.ID)
) AS G_opt6 ON (G_opt6.patient=R_patient.ID)
AND (G_opt6.takes=R_indicItem.EntryName)
WHERE (R_indicCode.NDC=R_indicDE.NDC)
AND (R_indicCode.ingredient=6809)
AND (R_indicDE.ID=R_indicMed.MedDictDE)
AND (R_indicItem.EntryName IS NOT NULL)
AND (R_indicItem.PatientID=R_patient.ID)
AND (R_indicItem.PerformedDTTM IS NOT NULL)
AND (R_indicMed.ID IS NOT NULL)
AND (R_indicMed.ItemID=R_indicItem.ID)
AND (R_patient.DateOfBirth IS NOT NULL)
AND (R_patient.MiddleName IS NOT NULL)
AND (R_sexEntry.EntryName IS NOT NULL)
AND (R_sexEntry.ID=R_patient.SexDE);
This query is not a normative representation of the earlier SPARQL
query; it is included here only to illustrate the ability of R2RML
tools to produce efficient SQL queries.
</div3 -->
]]
This section can be uncommented if it would help the use cases
document.
I believe the majority of the implementations that are informing this
work translate SPARQL queries over this virtual RDF graph to SQL
queries over the native store, so this is certainly a priority for us.
> Regards
>
> Freddy
--
-ericP
Received on Friday, 18 June 2010 14:42:39 UTC