- From: Juan Sequeda <juanfederico@gmail.com>
- Date: Tue, 1 Jun 2010 09:25:02 -0500
- To: ashok.malhotra@oracle.com
- Cc: public-rdb2rdf-wg@w3.org
- Message-ID: <AANLkTincvL11Ve9k0Bto1maXiA9NwZbVwZQeAx2a4p6d@mail.gmail.com>
I'm not proposing a single default mapping. Eric proposed to create base case transformations. yes, there are several direct mapping approaches, all of which I survey, and basically all of which are practically the same. However, none of the existing approaches have been formalized (they have just been expository examples). Our work presented a formal representation in datalog. I know the survey paper can be a bit long but I think it's worth the skim, or at least the survey section (because some proposed transformations are very domain dependent or sometimes even false). Juan Sequeda +1-575-SEQ-UEDA www.juansequeda.com On Tue, Jun 1, 2010 at 9:18 AM, ashok malhotra <ashok.malhotra@oracle.com>wrote: > Juan: > In your earlier work I thought you had identified several direct mapping > approaches. > Now we are discussing a single default mapping. So, I'm confused! What is > special about > this mapping? > > All the best, Ashok > > > Juan Sequeda wrote: > >> Eric, >> >> >> I think the principle difference is that sql2sw maps to OWL where the >> directGraph stuff maps to RDF. >> >> >> Once you have the OWL (or RDFS), the RDF (the data) becomes immediate >> instances of the ontology. That is trivial to produce >> >> As an illustration, sql2sw states that >> >> ┌┤Employee├──┬──────┐ ┌┤Address├────┬────────┐ >> │ ID │ name │ addr │ │ ID │ street │ number │ >> │ 11 │ Alice │ 18 │ │ 18 │ Elm │ 353 │ >> └────┴───────┴──────┘ └────┴────────┴────────┘ >> >> defines an ontology with e.g. an object property implied by the addr >> attribute and datatype properties implied by the name street and >> number attributes, directGraph takes a more pedestrian approach of >> emitting triples, e.g. >> >> <stem+Employee/ID.11#_> <stem+Employee#name> "Alice" . >> <stem+Employee/ID.11#_> <stem+Employee#addr> <stem+Address/ID.18#_> . >> <stem+Address/ID.18#_> <stem+Employee#street> "Elm" . >> <stem+Address/ID.18#_> <stem+Employee#number> 353 . >> >> In effect, sql2sw produces an ontology that describes the output of >> directGraph. >> >> >> What is >> <stem+Employee#name> >> >> <stem+Employee#addr> >> >> Name is a datatype property with domain Employee and range string >> Addr is a object property with domain Employee and range Address >> >> You are implicitly creating the ontology. This needs to be explicit. We >> need to know what is the ontology so other people know how to query our >> dataset, or how to map it to other ontologies. >> >> >> > BTW, in the charter, aren't we suppose to have a RIF >> representation of the >> > mapping language. We should be able to easily translate datalog >> to RIF, so >> > this should be a done deal. >> > >> > Cheers, >> > >> > Juan Sequeda >> > +1-575-SEQ-UEDA >> > www.juansequeda.com <http://www.juansequeda.com> >> >> > >> > >> > On Mon, May 31, 2010 at 1:45 AM, Eric Prud'hommeaux <eric@w3.org >> <mailto:eric@w3.org>> wrote: >> > >> > > 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 >> > > >> > > >> >> -- >> -ericP >> >> >> >
Received on Tuesday, 1 June 2010 14:25:36 UTC