Re: Many-to-Many table in R2RML

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.

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}";
        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}";
        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


On Fri, Jul 29, 2011 at 8:23 AM, Boris Villazon-Terrazas <
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}";
>         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}";
>         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
>
>
>

Received on Friday, 29 July 2011 13:37:28 UTC