<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- $This file is distributed under the terms of the license in LICENSE$ -->

<!-- See guidelines at https://wiki.duraspace.org/x/eYXVAw -->

<list-view-config>
    <query-select>

        PREFIX bibo:  &lt;http://purl.org/ontology/bibo/&gt;
        PREFIX vivo:  &lt;http://vivoweb.org/ontology/core#&gt;
        PREFIX owl:   &lt;http://www.w3.org/2002/07/owl#&gt;
        PREFIX rdfs:  &lt;http://www.w3.org/2000/01/rdf-schema#&gt;
        PREFIX vitro: &lt;http://vitro.mannlib.cornell.edu/ns/vitro/0.7#&gt;
        PREFIX event: &lt;http://purl.org/NET/c4dm/event.owl#&gt;

        SELECT DISTINCT
            <collated>?subclass</collated>
            ?role ?roleLabel
            ?event1 ?event1Name ?event1Label
            ?event2 ?event2Label
            ?event3 ?event3Label
            ?series ?seriesLabel
            ?dateTimeStart
            ?dateTimeEnd
        WHERE {
            ?subject ?property ?role .
            ?role a vivo:AttendeeRole .
            OPTIONAL {
                <precise-subquery>?subject ?property ?role .
                ?role a vivo:AttendeeRole .</precise-subquery>
                ?role rdfs:label ?roleLabel .
            }
            OPTIONAL {
                <precise-subquery>?subject ?property ?role .
                ?role a vivo:AttendeeRole .</precise-subquery>
                ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                <collated>
                ?event1 vitro:mostSpecificType ?subclass .
                {
                <precise-subquery>
                    ?subject ?property ?role .
                    ?role a vivo:AttendeeRole .
                    ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                    ?event1 vitro:mostSpecificType ?subclass .
                </precise-subquery>
                ?subclass rdfs:subClassOf event:Event .
                } UNION {
                <precise-subquery>
                    ?subject ?property ?role .
                    ?role a vivo:AttendeeRole .
                    ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                    ?event1 vitro:mostSpecificType ?subclass .
                </precise-subquery>
                ?subclass  owl:equivalentClass event:Event .
                }
                </collated>

                LET (?event1Name := REPLACE(STR(?event1),"^.*(#)(.*)$", "$2"))

                OPTIONAL {
                    <precise-subquery>
                    ?subject ?property ?role .
                    ?role a vivo:AttendeeRole .
                    ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                    </precise-subquery>
                    ?event1 rdfs:label ?event1Label .
                }
                OPTIONAL {
                    {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event2 .
                        ?event2 a event:Event .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event2 .
                            </precise-subquery>
                            ?event2 rdfs:label ?event2Label .
                        }
                    }  UNION {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event2 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                        ?event2 a event:Event .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?event2 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                            </precise-subquery>
                            ?event2 rdfs:label ?event2Label .
                        }
                    }
                }
                OPTIONAL {
                    {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event3 .
                        ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event2 .
                        ?event3 rdfs:label ?event3Label .
                    }  UNION {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event2 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event3 .
                        ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                        ?event3 rdfs:label ?event3Label .
                    }
                }
                OPTIONAL {
                    {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?series .
                        ?series a vivo:EventSeries .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?series .
                            ?series a vivo:EventSeries .
                            </precise-subquery>
                            ?series rdfs:label ?seriesLabel .
                        }
                    }  UNION {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?series &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                        ?series a vivo:EventSeries .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?series &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                            ?series a vivo:EventSeries .
                            </precise-subquery>
                            ?series rdfs:label ?seriesLabel .
                        }
                    }
                }
                OPTIONAL {
                    {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event3 .
                        ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?series .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?event1 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?event3 .
                            ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000050&gt; ?series .
                            </precise-subquery>
                            ?series rdfs:label ?seriesLabel .
                        }
                    }  UNION {
                        <precise-subquery>
                        ?subject ?property ?role .
                        ?role a vivo:AttendeeRole .
                        ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                        </precise-subquery>
                        ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                        ?series &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event3 .
                        OPTIONAL {
                            <precise-subquery>
                            ?subject ?property ?role .
                            ?role a vivo:AttendeeRole .
                            ?role &lt;http://purl.obolibrary.org/obo/BFO_0000054&gt; ?event1 .
                            ?event3 &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event1 .
                            ?series &lt;http://purl.obolibrary.org/obo/BFO_0000051&gt; ?event3 .
                            </precise-subquery>
                            ?series rdfs:label ?seriesLabel .
                        }
                    }
                }
            }
            OPTIONAL {
                <precise-subquery>?subject ?property ?role .
                ?role a vivo:AttendeeRole .</precise-subquery>
                ?role vivo:dateTimeInterval ?dateTimeInterval .
                OPTIONAL {
                    <precise-subquery>
                    ?subject ?property ?role .
                    ?role a vivo:AttendeeRole .
                    ?role vivo:dateTimeInterval ?dateTimeInterval .
                    </precise-subquery>
                    ?dateTimeInterval vivo:start ?dateTimeStartValue .
                    ?dateTimeStartValue vivo:dateTime ?dateTimeStart .
                }
                OPTIONAL {
                    <precise-subquery>
                    ?subject ?property ?role .
                    ?role a vivo:AttendeeRole .
                    ?role vivo:dateTimeInterval ?dateTimeInterval .
                    </precise-subquery>
                    ?dateTimeInterval vivo:end ?dateTimeEndValue .
                    ?dateTimeEndValue vivo:dateTime ?dateTimeEnd .
                }
            }

            <critical-data-required>
            FILTER ( bound(?event1) )
            </critical-data-required>
        } ORDER BY <collated>?subclass</collated> DESC(?dateTime) ?event1Label ?event1Name
    </query-select>

    <template>propStatement-hasAttendeeRole.ftl</template>
</list-view-config>
