- From: ashok malhotra <ashok.malhotra@oracle.com>
- Date: Tue, 08 Jun 2010 02:53:05 -0700
- To: Richard Cyganiak <richard@cyganiak.de>
- CC: "Eric Prud'hommeaux" <eric@w3.org>, RDB2RDF WG <public-rdb2rdf-wg@w3.org>
I agree with Richard's suggestion re. notation. A few explanatory words would make the exposition more accessible. All the best, Ashok Richard Cyganiak wrote: > Hi Eric, > > That's a good start. > > On 7 Jun 2010, at 16:49, Eric Prud'hommeaux wrote: >> In order to get some common terminology, I've created a draft of a >> Direct Mapping. > > Maybe start by defining what a database is in your notation? "A > database db is a set of relations R_1...R_i" etc? > >> This defines a Direct Graph and demonstrates how this >> definition can be extended. >> >> The crux of it is still: >> >> directDB(db) ≝ { directR(r) ∀ r ∈ db } >> directR(R) ≝ { directT(R, T) ∀ T ∈ R.Body } >> directT(R, T) ≝ { directL(R, S, A) ∀ A ∈ scalar(T) } >> ∪ { directN(R, S, A) ∀ A ∈ reference(T) } > > What are scalar(T) and reference(T)? > >> ∣ S = nodemap(R, pk(T)) >> directL(R, S, A) ≝ triple(S, predicatemap(R, A), literalmap(A)) > > What's literalmap? > >> directN(R, S, A) ≝ triple(S, predicatemap(R, A), nodemap(R, A)) >> >> nodemap(R, A) ≝ IRI(stem + "/" + R.name "/" A.name + "." + >> A.value + "#_") >> predicatemap(R, A) ≝ IRI(stem + "/" + R.name "#" A.name) > > What's the logic for uses hashes in some places and slashes in others? > > Shouldn't there be an rdf:type triple somewhere? If not, then how do > you SPARQL for all records in a single DB? > > To be really useful, this direct mapping should define a URI for the > DB itself, for each relation, and for each attribute in the relations. > >> I'm still playing with the notation. > > I'd prefer classical mathematical sets, so where you have: > > directDB(db) ≝ { directR(r) ∀ r ∈ db } > > I'd rather see: > > directDB(db) = { directR(r) | r ∈ db } > > General note: "succinct" and "clear" are correlated, but not the same. > The latter should be the goal, not the former. > > Best, > Richard > > > > >> It's currently a pretty classic >> notation: >> >> 3.1 Notation for Types >> A : a type >> A ⊔ B : disjoint union of A and B >> ( A, B ) : tuple (Cartesian product) of types A and B >> [ A ] : list of elements of type A >> { A } : set of elements of type A >> { A→B } : map of elements of type A to elements of type B >> 3.2 Notation for Injectors >> a : an instance of an A >> ( a1, b1 ) : a tuple with elements a1 and b1 >> [ a1, a2 ] : list with elements a1 and a2 >> { a1, a2 } : set with elements a1 and a2 >> { a1→b1, a2→b2 } : map with elements with key a1 mapped to b1 and >> key a2 mapped to b2 >> 3.3 Supporting Functions >> AB[a] : in a map of A to B, the instance of B for a given A* >> >> We can get more type-safety if we use something like a scala notation, >> but I'm not sure how to tersely express things like disjoint union. >> >> 3.1 Notation for Types >> x:X : x is an element in the set X >> A ?? B : disjoint union of A and B (normally case classes >> extending an abstract class, e.g.: >> abstract class AB; A extends AB; B extends AB; >> ) >> ( A, B ) : tuple (Cartesian product) of types A and B >> List[ A ] : list of elements of type A >> Set[ A ] : set of elements of type A >> Map[ A, B ] : map of elements of type A to elements of type B >> 3.2 Notation for Injectors >> a : an instance of an A >> ( a1, b1 ) : a tuple with elements a1 and b1 >> List( a1, a2 ) : list with elements a1 and a2 >> Set( a1, a2 ) : set with elements a1 and a2 >> Map( a1→b1, a2→b2 ) : map with elements with key a1 mapped to b1 >> and key a2 mapped to b2 >> 3.3 Supporting Functions >> AB(a) : in a map of A to B, the instance of B for a given A* >> >> -- >> -ericP >> > >
Received on Tuesday, 8 June 2010 09:55:55 UTC