- From: David Booth <david@dbooth.org>
- Date: Sat, 12 Nov 2011 15:53:36 -0500
- To: Adrian Walker <adriandwalker@gmail.com>
- Cc: Toby Inkster <tai@g5n.co.uk>, Sampo Syreeni <decoy@iki.fi>, Semantic Web List <semantic-web@w3.org>
Hi Adrian, Indeed, you may have a performance challenges no matter what convention you use. What other solutions are you considering or using? And can you tell us a little more about the use cases that you have in mind? Thanks, David On Sat, 2011-11-12 at 15:05 -0500, Adrian Walker wrote: > Hi David, > > That certainly looks neat. > > In practice, N-ary relations often have arities in the hundreds. > > What are the performance considerations of making each row of a > 100-ary relation a list? Of 'joining' two such list-tables on an > attribute at positions 50? > > Thanks, -- Adrian > > Internet Business Logic > A Wiki and SOA Endpoint for Executable Open Vocabulary English Q/A > over SQL and RDF > Online at www.reengineeringllc.com > Shared use is free, and there are no advertisements > > Adrian Walker > Reengineering > > On Sat, Nov 12, 2011 at 2:03 PM, David Booth <david@dbooth.org> wrote: > Hi Toby, > > Extending the syntax may be useful in some cases, but bear in > mind that > there is no actual need to extend the syntax in order to > enable n-ary > relations to be recognized in RDF. They can simply be tagged > as being > n-ary relations, provided that standard n-ary-relation-tagging > URIs have > been defined. > > For example, here is one way to do it using lists: > [[ > @prefix foaf: <http://xmlns.com/foaf/0.1/> . > @prefix std: <http://standards.example.org/Nary#> . > @prefix : <http://example.com/job#> . > @prefix person: <http://example/person#> . > > ####### Using list style with positional elements: > :job a std:NaryRelation . > > person:joe foaf:name "Joe Bloggs" ; > :job ( "Bee Keeper" "W3C" ) ; > :job ( "Senior Vice-President" > "CompuGlobalHyperMeganet" ) ; > :job ( "Polar Bear Wrangler" "DHARMA Initiative" ) . > > ]] > This style has the benefit of brevity. > > And another way to do it using classes: > [[ > @prefix foaf: <http://xmlns.com/foaf/0.1/> . > @prefix std: <http://standards.example.org/Nary#> . > @prefix : <http://example.com/job#> . > @prefix person: <http://example/person#> . > > ####### Using class style with bnodes and named elements: > :Job a std:NaryRelationClass . > > person:jen foaf:name "Jen Bloggs" ; > is :employee of > [ a :Job ; > :title "Bee Keeper" ; > :employer "W3C" ] , > [ a :Job ; > :title "Senior Vice-President" ; > :employer "CompuGlobalHyperMeganet" ] , > [ a :Job ; > :title "Polar Bear Wrangler" ; > :employer "DHARMA Initiative" ] . > ]] > > One key thing that this would enable is that an RDF store that > knows the > semantics of std:NaryRelation or std:NaryRelationClass would > be licensed > to eliminate duplicate triples -- triples that it otherwise > may not be > able to recognize as duplicates, because of those pesky > bnode. (Lists > automatically create bnodes, so both examples use bnodes.) > > To further explain for the benefit of other readers who may > not be so > familiar with the semantics of RDF lists, this statement: > > person:joe :job ( "Bee Keeper" "W3C" ) . > > actually means: > > person:joe :job _:b1 . > _:b1 rdf:first "Bee Keeper" ; rdf:next _:b2 . > _:b2 rdf:first "W3C" ; rdf:next rdf:nil . > > and if that is read in twice to an RDF database then you may > get it > appearing twice (with different bnodes) in your data: > > person:joe :job _:b1 . > _:b1 rdf:first "Bee Keeper" ; rdf:next _:b2 . > _:b2 rdf:first "W3C" ; rdf:next rdf:nil . > > person:joe :job _:b3 . > _:b3 rdf:first "Bee Keeper" ; rdf:next _:b4 . > _:b4 rdf:first "W3C" ; rdf:next rdf:nil . > > because the RDF list semantics > http://www.w3.org/TR/rdf-mt/#collections > does not say that either of those entails the other. In other > words, it > would be as though the exact same n-ary relation were > appearing twice in > your database: > > person:joe :job ( "Bee Keeper" "W3C" ) . > person:joe :job ( "Bee Keeper" "W3C" ) . > > and that is *not* what one would want. The ability to > recognize :job as > a std:NaryRelation would enable the RDF store to avoid storing > duplicate > assertions like this. > > So personally, although a new syntax may be useful sometimes, > I think it > is more important to standardize a semantic tag that would > allow n-ary > relations to be recognized with or without a special syntax. > > Thanks, > David > > > On Sat, 2011-11-12 at 01:42 +0000, Toby Inkster wrote: > > On Thu, 3 Nov 2011 09:57:08 +0200 (EET) > > Sampo Syreeni <decoy@iki.fi> wrote: > > > > > As a relational minded guy, I wonder why there aren't any > genuinely > > > relational minded formats/syntaxes/data around > > > > Strikes me that N3 and SPARQL could be extended with some > pretty > > simple syntactic sugar to get this done. > > > > #### employment_history.n3x ########################### > > @prefix j: <http://example.com/job#> . > > @relation JOB; j:Job, j:Employment; (j:title j:employer) . > > > > <#joe> > > foaf:name "Joe Bloggs" ; > > is j:employee of > > JOB("Bee Keeper" "W3C") , > > JOB("Senior Vice-President" "CompuGlobalHyperMeganet") , > > JOB("Polar Bear Wrangler" "DHARMA Initiative") . > > ####################################################### > > > > The "@relation" directive would establish a relationship > identifier. (In > > the above case, "JOB".) Relationship types take a set of > classes (above, > > j:Job and j:Employment) and a list of properties. > > > > When parsing, if the relationship identifier is encountered, > the parser > > consumes this, and then consumes an RDF list, but rather > than adding > > the list to the graph, it interpolates the classes and > properties. > > > > JOB("Bee Keeper" "W3C") > > > > is treated as: > > > > [ a j:Job, j:Employment; j:title "Bee Keeper"; > j:employer "W3C" ] > > > > An extended version of SPARQL (SPARQL-R, say) could include > a similar > > facility. > > > > I've been playing with extending N3 syntax: > > > > http://www.w3.org/wiki/ShorthandRDF#RDF-TriN3_Implementation > > > http://goddamn.co.uk/svn-web/perlmods/view/RDF-TriN3/examples/vcard_ttl.pl > > > > This certainly seems like a useful idea, and I'd be happy to > experiment > > with something along these lines. > > > > -- > David Booth, Ph.D. > http://dbooth.org/ > > Opinions expressed herein are those of the author and do not > necessarily > reflect those of his employer. > > > -- David Booth, Ph.D. http://dbooth.org/ Opinions expressed herein are those of the author and do not necessarily reflect those of his employer.
Received on Saturday, 12 November 2011 20:54:02 UTC