- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Mon, 31 May 2010 08:45:52 +0200
- To: public-rdb2rdf-wg@w3.org
Noting Irina Astrova's "Rules for Mapping SQL Relational Databases to
OWL Ontologies", I suspect it would be useful to write down a base
case transformation from relations to RDF, analogous to D2R's minimal
configuration for relations with single primary keys. Following is an
algebra and an explaination for that:
Suppose we want to RDF-ize a relation R:
R:relation := (name:string, data:set(T:tuple))†
T := set (A:attribute)
attributes := (name:string, value:string, function:null|pk|reference|scalar)
meaning attributes are SQL NULL, a primary key, a foreign key, or
scalar values. (Yes, this minimal mapping precludes attributes from
being both primary AND foreign keys.)
RDFr(R) := set (RDFt(T) for each T in R.data)
RDFt(T) := set (RDFl(S, A) for each scalar A in T)
+ set (RDFn(S, A) for each reference A in T) | S = nodemap(pk(T))
RDFl(S, A) := triple (S, predicatemap(A), literalmap(A))
RDFn(S, A) := triple (S, predicatemap(A), nodemap(A))
literalmap produces RDF literal with XSD datatypes with this type
mapping TM:
SQL XSD
INT http://www.w3.org/TR/xmlschema-2/#integer
FLOAT http://www.w3.org/TR/xmlschema-2/#float
DATE http://www.w3.org/TR/xmlschema-2/#date
TIME http://www.w3.org/TR/xmlschema-2/#time
TIMESTAMP http://www.w3.org/TR/xmlschema-2/#dateTime
CHAR http://www.w3.org/TR/xmlschema-2/#string
VARCHAR http://www.w3.org/TR/xmlschema-2/#string
STRING http://www.w3.org/TR/xmlschema-2/#string
literalmap := rdfLiteral(A,value, TM(A.type))
nodemap and predicate map are lexical transformations producing IRIs,
either hash
nodemap(A):IRI = IRI(stemURI + "/" + R.name "/" A.name + "." + A.value + "#_")
predicatemap(A):IRI = IRI(stemURI + "/" + R.name "#" A.name)
or slash-compatible:
nodemap(A):IRI = IRI(stemURI + "/" + R.name "/" A.name + "/" + A.value)
predicatemap(A):IRI = IRI(stemURI + "/" + R.name "/" A.name)
† A variant of this algebra with the traditional relation definition
R:relation := (name:string, header:set(D:definition), data:multiset(T:tuple))
was implemented in scala
https://dvcs.w3.org/hg/stemGraph/file/4ace3eb848d4/src/main/scala/Main.scala
but the extra rigor ensuring consistent attributes provides more noise
than value to this application.
I'd like to get this into a forum for disucssion with rdb2rdf WG and
the broader community. If folks here are interested in this material,
I'll draw up a WG-publishable document. If not, I can make it available
elsewhere. Either way, the feedback will be useful to us.
--
-ericP
Received on Monday, 31 May 2010 06:46:30 UTC