Re: Many-to-Many table in R2RML

On 29/07/2011 14:36, Juan Sequeda wrote:
> Boris,
>
> Thanks! I should have figured it out by myself that I could have done 
> this in a SQL query.
>
> Part of me says that this is kind of a hack. Shouldn't R2RML have 
> enough expressivity to represent this, instead of writing it in a SQL 
> query? Maybe I'm wrong. I was just expecting it.
Yes, you are right, the test case we have for this is one way to do it, 
not the only one.

I'll add a new r2rml mapping for this test case, using your suggestion.

Thanks

Boris

>
> The relationship Student-Course is represented in a referencing object 
> map which is represented by exactly one rr:parentTriplesMap and it may 
> have one or more rr:joinCondition. Therefore, I could imagine seeing 
> the following:
>
> <#TriplesMap1>
>     rr:logicalTable [ rr:tableName "student"; ]
>     rr:subjectMap [
>         rr:template "http://data.example.com/student/{s_id} 
> <http://data.example.com/student/%7Bs_id%7D>";
>         rr:class ex:Student;
>     ];
>     rr:predicateObjectMap [
>         rr:predicateMap [ rr:predicate ex:name; ];
>         rr:objectMap [ rr:column "name" ];
>     ];
>     rr:predicateObjectMap [
> rr:predicateMap [ rr:predicate ex:isEnrolled ] ;
>         rr:refObjectMap [ rr:parentTriplesMap <#TriplesMap2> ];
>     ].
> <#TriplesMap2>
>     rr:logicalTable [ rr:tableName "course"; ]
>     rr:subjectMap [
>         rr:template "http://data.example.com/course/{c_id} 
> <http://data.example.com/course/%7Bc_id%7D>";
>         rr:class ex:Course;
>     ];
>     rr:predicateObjectMap [
>         rr:predicateMap [ rr:predicate ex:title; ];
>         rr:objectMap [ rr:column "title" ];
>     ];
>     rr:predicateObjectMap [
> rr:predicateMap [ rr:predicate ex:hasStudent ] ;
>         rr:refObjectMap [ rr:parentTriplesMap <#TriplesMap1> ];
>     ].
>
> And the mapping author is going to expect this to work. Is this r2rml 
> wrong? Or is this just an implementation issue?
>
> I would suggest to add the many-to-many example in the spec and if my 
> previous r2rml is not wrong, create and Test Case for it.
>
> Thanks!
>
> Juan Sequeda
> +1-575-SEQ-UEDA
> www.juansequeda.com <http://www.juansequeda.com>
>
>
> On Fri, Jul 29, 2011 at 8:23 AM, Boris Villazon-Terrazas 
> <boris.villazon@deri.org <mailto:boris.villazon@deri.org>> wrote:
>
>     Hi Juan
>
>     Thanks for asking!
>
>     We have a Test Case for this
>     http://www.w3.org/2001/sw/rdb2rdf/test-cases/TCOverview.html#D011-M2MRelations
>     It includes the Direct Graph and R2RML mapping, and it is a good
>     opportunity to check it.
>
>     The associated files to this test case are here
>     https://dvcs.w3.org/hg/rdb2rdf-tests/file/fd8f7c555644/D011-M2MRelations
>
>     Thanks
>
>     Boris
>
>
>
>
>     On 29/07/2011 14:10, Juan Sequeda wrote:
>>     Richard, all
>>
>>
>>     This may be a dumb question, but I haven't been able to figure
>>     out how to represent a many-to-many relationship in r2rml. For
>>     example:
>>
>>     Student(s_id, name)
>>     Course(c_id, title)
>>     Enrolled(s_id, c_id)
>>
>>     Where Enrolled is the many-to-many relationship.
>>
>>     These are the TripleMaps for the Student and Course table:
>>
>>     <#TriplesMap1>
>>         rr:logicalTable [ rr:tableName "student"; ]
>>         rr:subjectMap [
>>             rr:template "http://data.example.com/student/{s_id}
>>     <http://data.example.com/student/%7Bs_id%7D>";
>>             rr:class ex:Student;
>>         ];
>>         rr:predicateObjectMap [
>>             rr:predicateMap [ rr:predicate ex:name; ];
>>             rr:objectMap [ rr:column "name" ];
>>         ].
>>     <#TriplesMap2>
>>         rr:logicalTable [ rr:tableName "course"; ]
>>         rr:subjectMap [
>>             rr:template "http://data.example.com/course/{c_id}
>>     <http://data.example.com/course/%7Bc_id%7D>";
>>             rr:class ex:Course;
>>         ];
>>         rr:predicateObjectMap [
>>             rr:predicateMap [ rr:predicate ex:title; ];
>>             rr:objectMap [ rr:column "title" ];
>>         ].
>>
>>     I assume that I should add a predicateObjectMap to TriplesMap1
>>     (student) which is going to connect to TriplesMap2 (course), but
>>     the joinCondition is on the enrolled table.
>>
>>     <#TriplesMap1>
>>     rr:predicateObjectMap [
>>             rr:predicateMap [ rr:predicate ex:isEnrolled; ];
>>             rr:objectMap [
>>                 rr:parentTriplesMap <#TriplesMap2>;
>>                 rr:joinCondition [
>>                     rr:child "?????";
>>                     rr:parent "???";
>>                 ];
>>             ].
>>
>>     How is this suppose to be done? And could you add an example in
>>     the specs.
>>
>>     Thanks!
>>
>>     Juan Sequeda
>>     +1-575-SEQ-UEDA
>>     www.juansequeda.com <http://www.juansequeda.com>
>
>

Received on Friday, 29 July 2011 13:51:18 UTC