2012-05-08 22 views
8

parece ser posible contar una sola entidad usando¿Cómo consultar el número de tuplas distintas utilizando SPARQL 1.1?

(COUNT(DISTINCT ?x) as ?count) 

y para el número de tuplas distintas para todas las variables en la consulta utilizando

(COUNT(DISTINCT *) as ?count) 

Sin embargo, no puedo encontrar la manera de recuento tuplas específicas (distintas). Algo así como

(COUNT(DISTINCT ?a ?b ?c) as ?count) 

parece que no funciona. ¿Lo estoy haciendo mal o esto no está permitido en SPARQL 1.1? ¿O se supone que funciona y no es compatible con Sesame 2.6.0 que estoy usando para probar esto?

Respuesta

9

¡Bienvenido a StackOverflow!

Asegúrese de que el resultado intermedio sólo contiene las tres variables ?a ?b ?c que le interesan.

Una forma de hacer esto es utilizar una subconsulta. La subconsulta solo proyecta las tres variables deseadas. Algo como esto:

SELECT (COUNT(*) AS ?count) { 
    SELECT DISTINCT ?a ?b ?c { 
     … 
    } 
} 

(no estoy seguro de si es compatible con sésamo subconsultas.)

Otra forma es simplemente asegurarse de que su consulta sólo contiene las tres variables. Si necesita más variables dentro de la consulta, puede reemplazarlas con nodos en blanco. Los nodos en blanco en los patrones de gráficos SPARQL funcionan como "variables anónimas". Sin embargo, hay algunos problemas de alcance divertidos con esto, por lo que el enfoque de subconsulta es probablemente mejor.

+1

Solo para confirmar que Sesame 2.6 admite subconsultas. Sin embargo, actualizar a 2.6.5 podría ser una buena idea: ha habido varias correcciones de errores en la evaluación de subconsulta desde 2.6.0. –

+0

Gracias, esto parece un buen truco para lograr esto. Como dijiste, Sesame sí permite subconsultas, así que esto será factible. Su respuesta también parece implicar que, de hecho, la definición del lenguaje SPARQL no permite formular esto dentro de una expresión de conteo de forma explícita. – Johsm

+0

No puede tener más de una variable dentro de 'COUNT'. Es 'COUNT (*)' o 'COUNT (? Var)', con 'DISTINCT' opcional. – cygri

Cuestiones relacionadas