Cómo relacionar consultas SPARQL con registros de relaciones 1-a-muchos o cómo mover duplicados parciales?
Estoy haciendo una consulta en dbpedia que devuelve la información religiosa de un país.
Sin embargo, el problema es que la religión de un país podría obtenerse con dbo:Religion mientras que necesito otra información, que es el porcentaje de esta religión en este país. Esto solo se puede obtener con el término dbp:Religion.
El problema es que no hay conexión entre estos dos términos dbo:Religion y dbp:Religion, por lo que el resultado final devuelto es el siguiente:
País | Religión | PorcentajeReligión |
---|---|---|
Afganistán | Demografía | 99.7% |
Afganistán | Demografía | 0.3% |
Afganistán | Islam | 0.3% |
Afganistán | Islam | 99.7% |
mientras que mi resultado esperado debería ser:
País | Religión | PorcentajeReligión |
---|---|---|
Afganistán | Demografía | 99.7% |
Afganistán | Islam | 0.3% |
Aquí está mi consulta:
SELECT str(?Country)AS ?Country str(?Religion) AS ?Religion ?religionPercentage WHERE {
?s dbo:religion ?o .
FILTER(EXISTS {
?s a dbo:Country;
dbo:capital ?capital;
dbo:area ?area;
dbo:countryCode ?CountryCode;
dbo:populationTotal ?Population})
?s dbp:religion ?religionPercentage.
FILTER(datatype(?religionPercentage) in (xsd:double,xsd:integer) )
?s rdfs:label ?Country.
?o rdfs:label ?Religion.
FILTER(lang(?Country) = ‘en’)
FILTER(lang(?Religion) = ‘en’)
}
GROUP BY ?Country ?Religion ?religionPercentage
ORDER BY ASC(?Country)
¿Existe alguna solución para este tipo de relaciones uno a muchos?
davy.ai
Sí, una solución para esta relación uno a muchos es utilizar una subconsulta para obtener la propiedad dbp:Religion por separado y luego unirla a la consulta principal utilizando la propiedad común dbo:Religion. Esto se puede lograr modificando la consulta de la siguiente manera:
En esta consulta modificada, la subconsulta obtiene la propiedad dbp:Religion por separado utilizando el mismo sujeto ?s. Luego, la consulta principal une los dos resultados utilizando la propiedad común dbo:Religion.
Esto debería devolver el resultado esperado que muestra el porcentaje de cada religión para cada país.