GDD-Nantes / FedShop

Code for FedShop: The Federated Shop Benchmark
GNU General Public License v3.0
8 stars 0 forks source link

Wrong source selection for Q04 #35

Closed momo54 closed 1 year ago

momo54 commented 1 year ago

The q04 ARQ query is wrong (RSFB/experiments/bsbm/benchmark/evaluation/arq/q04/instance_5/batch_6/attempt_3/service.sparql):

SELECT DISTINCT ?product ?label ?propertyTextual WHERE {                                                          
    VALUES ( ?bgp1 ?bgp2 ) { ( <http://localhost:34202/sparql/?default-graph-uri=http://www.vendor9.fr/> <http://\
localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://localhost:34202/sparql/?default-graph-uri=http://www.r\
atingsite52.fr/> <http://localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://localhost:34202/sparql/?defau\
lt-graph-uri=http://www.vendor44.fr/> <http://localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://localhos\
t:34202/sparql/?default-graph-uri=http://www.ratingsite48.fr/> <http://localhost:34202/sparql/?default-graph-uri=\
nan> ) ( <http://localhost:34202/sparql/?default-graph-uri=http://www.vendor17.fr/> <http://localhost:34202/sparq\
l/?default-graph-uri=nan> ) ( <http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite33.fr/> <htt\
p://localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://localhost:34202/sparql/?default-graph-uri=http://w\
ww.ratingsite64.fr/> <http://localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://localhost:34202/sparql/?d\
efault-graph-uri=http://www.ratingsite61.fr/> <http://localhost:34202/sparql/?default-graph-uri=nan> ) ( <http://\
localhost:34202/sparql/?default-graph-uri=nan> <http://localhost:34202/sparql/?default-graph-uri=http://www.vendo\
r15.fr/> ) ( <http://localhost:34202/sparql/?default-graph-uri=nan> <http://localhost:34202/sparql/?default-graph\
-uri=http://www.vendor68.fr/> ) ( <http://localhost:34202/sparql/?default-graph-uri=nan> <http://localhost:34202/\
sparql/?default-graph-uri=http://www.vendor7.fr/> ) ( <http://localhost:34202/sparql/?default-graph-uri=nan> <htt\
p://localhost:34202/sparql/?default-graph-uri=http://www.vendor26.fr/> ) ( <http://localhost:34202/sparql/?defaul\
t-graph-uri=nan> <http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite2.fr/> ) ( <http://localh\
ost:34202/sparql/?default-graph-uri=nan> <http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite6\
1.fr/> ) }
    {
        SERVICE ?bgp1 {
            ?product rdfs:label ?label .
            # const!* bsbm:ProductType597
            ?product rdf:type ?localProductType .
            ?localProductType owl:sameAs bsbm:ProductType597 .
            # const!* bsbm:ProductFeature18499
            ?product bsbm:productFeature ?localProductFeature1 .
            ?localProductFeature1 owl:sameAs bsbm:ProductFeature18499.
            # const** bsbm:ProductFeature19842 != bsbm:ProductFeature18499
            ?product bsbm:productFeature ?localProductFeature2 .
            ?localProductFeature2 owl:sameAs bsbm:ProductFeature19842.
            ?product bsbm:productPropertyTextual1 ?propertyTextual .
            ?product bsbm:productPropertyNumeric1 ?p1 .
            # const** "1002.0"^^xsd:double < ?p1
            FILTER ( ?p1 > "1002.0"^^xsd:double )
        }
    } UNION {
        SERVICE ?bgp2 {
            ?product rdfs:label ?label .
            # const!* bsbm:ProductType597
            ?product rdf:type ?localProductType .
            ?localProductType owl:sameAs bsbm:ProductType597 .
            # const!* bsbm:ProductFeature18499
            ?product bsbm:productFeature ?localProductFeature1 .
            ?localProductFeature1 owl:sameAs bsbm:ProductFeature18499 .
            # const* bsbm:ProductFeature27760 != bsbm:ProductFeature19842, bsbm:ProductFeature18499
            ?product bsbm:productFeature ?localProductFeature3 .
            ?localProductFeature3 owl:sameAs bsbm:ProductFeature27760 .
            ?product bsbm:productPropertyTextual1 ?propertyTextual .
...

A correct source selection for a union query should be like that:

VALUES ( ?bgp1 ?bgp2 ) {  (s1 none) (s2 none) (s3 none) (none s2) (none S3)}

another correct and more efficient rewriting can be:

select *
{ values ?bgp1 = {s1 s2 s3}
  service ?bgp1 {...}
} Union {
 values ?bgp2 = {s3 s3}
 service ?bgp2 {...}
}  
mhoangvslev commented 1 year ago

SELECT DISTINCT ?product ?label ?propertyTextual WHERE { VALUES ( ?bgp1 ?bgp2 ) { ( http://localhost:34202/sparql/?default-graph-uri=http://www.vendor9.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite52.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.vendor44.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite48.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.vendor17.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite33.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite64.fr/ UNDEF ) ( http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite61.fr/ UNDEF ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.vendor15.fr/ ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.vendor68.fr/ ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.vendor7.fr/ ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.vendor26.fr/ ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite2.fr/ ) ( UNDEF http://localhost:34202/sparql/?default-graph-uri=http://www.ratingsite61.fr/ ) } { SERVICE ?bgp1 { ?product rdfs:label ?label .

const!* bsbm:ProductType597

        ?product rdf:type ?localProductType .
        ?localProductType owl:sameAs bsbm:ProductType597 .
        # const!* bsbm:ProductFeature18499
        ?product bsbm:productFeature ?localProductFeature1 .
        ?localProductFeature1 owl:sameAs bsbm:ProductFeature18499.
        # const** bsbm:ProductFeature19842 != bsbm:ProductFeature18499
        ?product bsbm:productFeature ?localProductFeature2 .
        ?localProductFeature2 owl:sameAs bsbm:ProductFeature19842.
        ?product bsbm:productPropertyTextual1 ?propertyTextual .
        ?product bsbm:productPropertyNumeric1 ?p1 .
        # const** "1002.0"^^xsd:double < ?p1
        FILTER ( ?p1 > "1002.0"^^xsd:double )
    } 
} UNION {
    SERVICE ?bgp2 {
        ?product rdfs:label ?label .
        # const!* bsbm:ProductType597
        ?product rdf:type ?localProductType .
        ?localProductType owl:sameAs bsbm:ProductType597 .
        # const!* bsbm:ProductFeature18499
        ?product bsbm:productFeature ?localProductFeature1 .
        ?localProductFeature1 owl:sameAs bsbm:ProductFeature18499 .
        # const* bsbm:ProductFeature27760 != bsbm:ProductFeature19842, bsbm:ProductFeature18499
        ?product bsbm:productFeature ?localProductFeature3 .
        ?localProductFeature3 owl:sameAs bsbm:ProductFeature27760 .
        ?product bsbm:productPropertyTextual1 ?propertyTextual .
        ?product bsbm:productPropertyNumeric2 ?p2 .
        # const "656.0"^^xsd:double < ?p2
        FILTER ( ?p2 > "656.0"^^xsd:double ) 
    } 
}

} ORDER BY ?product ?label ?propertyTextual

OFFSET 5

LIMIT 10

mhoangvslev commented 1 year ago

Regarding your remark on "it returns too much data, " I think you are referring to querying against http://localhost:34202/sparql/?default-graph-uri= which is a combination of all graphs. If so, we are querying against http://localhost:34202/sparql/?default-graph-uri=nan, a non-existent endpoint that gives no results.