Fix (again!) the expansion of works and instances
authorHeikki Levanto <heikki@indexdata.dk>
Fri, 8 May 2015 09:33:53 +0000 (11:33 +0200)
committerHeikki Levanto <heikki@indexdata.dk>
Fri, 8 May 2015 09:33:53 +0000 (11:33 +0200)
Exclude triplets that start from a derived work/inst, but
keep those that lead to such

bibframe/triplestore.xml

index 95e5735..000f8ce 100644 (file)
                     %u ?rel ?wobj1 .
 
                     OPTIONAL {
-                        ?wobj ?wrel1 ?wobj1
+                        ?wobj1 ?wrel2 ?wobj2
                         MINUS { ?wobj1 a bf:Work }
                         MINUS { ?wobj1 a bf:Instance }
                         OPTIONAL {
-                            ?wobj1 ?wrel2 ?wobj2
+                            ?wobj2 ?wrel3 ?wobj3
                             MINUS { ?wobj2 a bf:Work }
                             MINUS { ?wobj2 a bf:Instance }
-                            OPTIONAL {
-                                ?wobj2 ?wrel3 ?wobj3
-                                MINUS { ?wobj3 a bf:Work }
-                                MINUS { ?wobj3 a bf:Instance }
-                            }
                         }
                     }
                     <!-- Link to the instance(s) -->
                     OPTIONAL {
-                        ?inst bf:instanceOf %u
-                        OPTIONAL { <!-- and expand the instance -->
-                            ?inst ?irel1 ?iobj1
+                        ?inst bf:instanceOf %u .
+                        ?inst ?irel1 ?iobj1
+                        OPTIONAL {
+                            ?iobj1 ?irel2 ?iobj2
+                            MINUS { ?iobj1 a bf:Work }
+                            MINUS { ?iobj1 a bf:Instance }
                             OPTIONAL {
-                                ?iobj1 ?irel2 ?iobj2
-                                OPTIONAL {
-                                    ?iobj2 ?irel3 ?iobj3
-                                }
+                                ?iobj2 ?irel3 ?iobj3
+                                MINUS { ?iobj2 a bf:Work }
+                                MINUS { ?iobj2 a bf:Instance }
                             }
                         }
                     }
 
                     OPTIONAL {
                         %u bf:instanceOf ?work
+                        ?work ?wrel1 ?wobj1
                         OPTIONAL {
-                            ?work ?wrel1 ?wobj1
+                            ?wobj1 ?wrel2 ?wobj2
                             MINUS { ?wobj1 a bf:Work }
                             MINUS { ?wobj1 a bf:Instance }
                             OPTIONAL {
-                                ?wobj1 ?wrel2 ?wobj2
+                                ?wobj2 ?wrel3 ?wobj3
                                 MINUS { ?wobj2 a bf:Work }
                                 MINUS { ?wobj2 a bf:Instance }
-                                OPTIONAL {
-                                    ?wobj2 ?wrel3 ?wobj3
-                                    MINUS { ?wobj3 a bf:Work }
-                                    MINUS { ?wobj3 a bf:Instance }
-                                }
                             }
                         }
                     }