2012-01-17 16 views
8

Digamos que tengo una consulta SPARQL como éste, en busca de recursos que tienen alguna propiedad compartida con un recurso focal, y también conseguir algunas otras declaraciones sobre el recurso focal:¿Cómo puedo limitar el número de resultados para una variable específica en una consulta SPARQL?

CONSTRUCT { 
    ?focal pred:icate ?shared . 
    ?other pred:icate ?shared . 
} 
WHERE { 
    ?focal pred:icate ?shared ; 
     more:info ?etc ; 
     a "foobar" . 
    ?other pred:icate ?shared . 
} 
LIMIT 500 

Si hay más de 500 otra recursos, ese LÍMITE podría excluir esa declaración y el objeto more:info. Entonces, ¿hay alguna manera de decir "solo quiero como máximo 500 de ?other", o tengo que dividir esta consulta en varias partes?

Respuesta

9

Puede limitar el uso de subconsultas, es decir, algo así como lo siguiente:

CONSTRUCT { 
    ?focal pred:icate ?shared . 
    ?other pred:icate ?shared . 
} 
WHERE { 
    ?focal pred:icate ?shared ; 
      more:info ?etc ; 
      a "foobar" . 
    { 
     SELECT ?shared { 
     ?other pred:icate ?shared . 
     } 
     LIMIT 500 
    } 
} 
1

http://www.w3.org/TR/2012/WD-sparql11-query-20120105/#modResultLimit

La cláusula LIMIT pone un límite superior en el número de soluciones devueltos. Si se aplica el número de soluciones reales, después de aplicar OFFSET, es mayor que el límite, como máximo se devolverá el número límite de soluciones .

Solo puede limitar el número de soluciones a su consulta, no un subconjunto específico de la misma. Sin embargo, puede usar una subconsulta con una cláusula LIMIT: http://www.w3.org/TR/sparql-features/#Subqueries.

Cuestiones relacionadas