Tengo una consulta sparql que devuelve duplicados, y quiero que los limpie solo en uno de los valores (subjectID). A diferencia de DISTINCT que parece encontrar un valor único para la combinación de valores seleccionados, en lugar de solo para uno de los parámetros. Vi a alguien aquí proponer un grupo, pero eso solo parece aplicable si enumero todos los parámetros después de agrupar (mi punto final sparql se queja, por ejemplo, variable de clave no grupal en SELECCIONAR:? Ocupación). He intentado ejecutar una selección interna, pero no parece funcionar para esta consulta específica. Entonces, ¿podría ser un problema con la consulta en sí misma (los valores de la opción de aliveIn parecen estar causando el duplicado)?Teclas Sparql contra valores distintos
Si bien estamos lo suficientemente contentos con los DB relacionales al principio de la curva de aprendizaje con SPARQL, ¡así que no dude en explicar lo obvio para los que no están iniciados! :)
select distinct
?subjectID ?englishName ?sex ?locatedIn15Name
?dob ?dod ?dom ?bornLocationName ?occupation
where {
?person a hc:Person ;
hc:englishName ?englishName ;
hc:sex ?sex;
hc:subjectID ?subjectID;
optional { ?person hc:livedIn11 ?livedIn11 .
?livedIn11 hc:englishName ?lived11LocationName .
?livedIn11 hc:locatedIn11 ?locatedIn11 .
?locatedIn11 hc:englishName ?locatedIn11Name .
?locatedIn11 hc:locatedIn15 ?locatedIn15 .
?locatedIn15 hc:englishName ?locatedIn15Name .
} .
optional {?person hc:born ?dob } .
optional {?person hc:dateOfDeath ?dod } .
optional {?person hc:dateOfMarriage ?dom } .
optional { ?person hc:bornIn ?bornIn .
?bornIn hc:englishName ?bornLocationName .
?bornIn hc:easting ?easting .
?bornIn hc:northing ?northing } .
optional { ?person hc:occupation ?occupation }
FILTER regex(?englishName, "^FirstName LastName")
}
GROUP BY
?subjectID ?englishName ?sex
?locatedIn15Name ?dob ?dod ?dom
?bornLocationName ?occupation
+1 para el uso (muy poco ortodoxo) de SAMPLE. –
Gracias Rob, ¡eso es muy útil! Supongo que es un muestreo un tanto no determinista, para ser usado con precaución. :) – Nava
PD Votará una vez que gane un poco más de reputación. – Nava