- From: Mark Cidade <marxidad@marxidad.com>
- Date: Sun, 6 Jan 2008 21:12:01 -0500
- To: "'Andrew Newman'" <andrewfnewman@gmail.com>, "'Frank Manola'" <fmanola@acm.org>, "'SWIG'" <semantic-web@w3.org>
I think that RDF model is best seen as a subset of the relational model where there are only binary relationships. Therefore, in an normalized RDBMS, there is one table per predicate with only two columns each: one for the subject, the other for the object of the predicate (as Frank already alluded to in this thread). If you wanted to declare the existence of a resource without saying anything about it, you could enter values (<ex:whatever>, <rdf:Resource>) into the rdf:type table. In RDF, every predicate is a one-to-many relationship (not including OWL restrictions). For two triples, <ex:book1> <dc:subject> "semantic web" <ex:book1> <dc:subject> "database" you would have at least one table with two rows: (table) dc:subject .-----------------------------. |rdf:subject | rdf:object | |------------ + --------------| |ex:book1 | "semantic web"| |ex:book1 | "database" | `-----------------------------' In this case, there can never be any conflict between RDF and the relational model (as one is a subset of the other). The primary key for each table will always consist of both the subject and object columns. Any relational data can fit into the RDF model this way, provided it is first converted to the 6th normal form. It's analogous to currying a multi-argument function. To ensure that a property has only one value, you'd have to use owl:cardinality for that. Also, a book with two instances of <dc:subject> doesn't necessarily mean that it always has those two subjects in the same context. It can be unambiguous if reified: <ex:Amazon> <ex:hasListing> [<ex:book1> <dc:subject> "semantic web"]. <ex:library1> <ex:hasListing> [<ex:book1> <dc:subject> "database"]. <ex:person1> <ex:insistsThat> [<ex:book1> <dc:subject> "semantic web"]. Mark
Received on Monday, 7 January 2008 02:13:24 UTC