Open jrub opened 9 years ago
Personalmente esto me parece grave, hace que el SPARQL "pierda todo su poder".
En LaAgendica estamos reordenando en cliente (navegador) lo cual hace que todo sea aún más lento, y la petición del SPARQL de por sí ya eran 3 segundos, que para una app móvil es demasiado. Eso sin contar la descarga de (las gigantes) imágenes, que se merece issue aparte.
Si estás buscando eventos con subeventos que tienen que cumplir esas condiciones la query que debes usar es la siguiente:
SELECT DISTINCT *
WHERE {
?uri a s:Event;
dcterms:identifier ?id;
rdfs:label ?title;
rdfs:comment ?description.
OPTIONAL {?uri s:subEvent ?subEvent.
?subEvent s:startDate ?startDate.
?subEvent s:endDate ?endDate.
?subEvent s:startTime ?startTime.
?subEvent s:endTime ?endTime.
?subEvent s:openingHours ?horario.}
OPTIONAL{ ?uri s:image ?image}.
OPTIONAL {?uri geo:geometry ?geo.
?geo geo:lat ?latitud.
?geo geo:long ?longitud.}
?uri <http://vocab.linkeddata.es/datosabiertos/def/cultura-ocio/agenda#programa> ?programa.
FILTER (REGEX(STR(?programa), "Fiestas del Pilar", "i"))
FILTER (xsd:date(?startDate) < "2015-10-12"^^xsd:date and xsd:date(?endDate) > "2015-10-12"^^xsd:date)
}
order by ?startTime
Esto es porque al poner un OPTIONAL para cada tripleta del subevento está haciendo un "producto cartesiano" de todas las opciones. Dime si esto es lo que estabas buscando
De hecho, acabo de ver que el startDate está dentro del OPTIONAL, por lo que debería ser:
SELECT DISTINCT *
WHERE {
?uri a s:Event;
dcterms:identifier ?id;
rdfs:label ?title;
rdfs:comment ?description.
OPTIONAL {?uri s:subEvent ?subEvent.
?subEvent s:startDate ?startDate.
?subEvent s:endDate ?endDate.
?subEvent s:startTime ?startTime.
?subEvent s:endTime ?endTime.
?subEvent s:openingHours ?horario.
FILTER (xsd:date(?startDate) < "2015-10-12"^^xsd:date and xsd:date(?endDate) > "2015-10-12"^^xsd:date)
}
OPTIONAL{ ?uri s:image ?image}.
OPTIONAL {?uri geo:geometry ?geo.
?geo geo:lat ?latitud.
?geo geo:long ?longitud.}
?uri <http://vocab.linkeddata.es/datosabiertos/def/cultura-ocio/agenda#programa> ?programa.
FILTER (REGEX(STR(?programa), "Fiestas del Pilar", "i"))
}
order by ?startTime
@ocorcho si pruebas a correr la última query en el Virtuoso, verás que devuelve la imagen //zaragoza.es/cont/paginas/actividades/imagen/aytod178.JPG
125 veces
Los
orderBy
provocan que se devuelvan resultados con las misma imágen repetida para muchos eventos, en vez de la imágen correcta, así como muchos eventos sin imagen.Ejemplo:
Si la ejecutáis en el Virtuoso, veréis que en este ejemplo se devuelve como 20 veces la imágen
"//zaragoza.es/cont/paginas/actividades/imagen/PixelFlyerB.jpg"