2011-05-11 28 views
10

Ok, así que tiene esta consultaContar en SPARQL

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT DISTINCT (COUNT(?instance) AS ?count) WHERE { 
?instance a <http://dbpedia.org/ontology/Ambassador> . 
} 

y el resultado es 286. fresca. Ahora quiero obtener el número de embajadores que tienen la propiedad http://dbpedia.org/property/name. Pero

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT DISTINCT (COUNT(?instance) AS ?count) WHERE { 
?instance a <http://dbpedia.org/ontology/Ambassador> . 
?instance <http://dbpedia.org/property/name> ?name 
} 

resultados en 533 :(. Por lo tanto, es contar más porque hay personas que tienen esta propiedad una o más veces. Pero ¿cómo consigo el número de embajadores que tienen esta propiedad, independientemente de cuántas veces lo tienen ¿se puede hacer esto en una sola consulta

Gracias

+1

Como muestra la solución de Jonathan, su problema no es la duplicación, sino el hecho de que ha dicho que se obtienen recuentos distintos, en lugar de contar instancias distintas. El problema de nombres múltiples solo aparecería si incluyera tanto? Instance como? Name en su SELECT ... –

Respuesta

14

es posible que desee probar esto:.?.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT (COUNT(DISTINCT ?instance) AS ?count) WHERE { 
?instance a <http://dbpedia.org/ontology/Ambassador>; 
      <http://dbpedia.org/property/name> ?name 
} 

me está dando un resultado de 283, WH Ich podría o no estar bien :).

+2

Tenga en cuenta que está utilizando las características de SPARQL 1.1: COUNT() - aggregation - y variables en SELECT. – dajobe