Subido por fjaavf

QuerysSparql

Anuncio
Propuesta de actividades y ejemplos valiosos:
1. Consultas sobre Dbpedia:
• Pruebe las siguientes consultas sobre Dbpedia. Preferentemente en
http://dbpedia.org/sparql o bien en http://dbpedia.org/snorql .
• Trate de comprender porqué se han obtenido esos resultados, a la
vista de la sintaxis de las consultas
• Ensaye o práctique con ligeras modificaciones.
2. Esta query muestra cómo manejar uniones (parciales), así como un filtro
entre un rango de fechas: “Personas que murieron de alguna enfermedad en
Estados Unidos y España en el siglo XX”:
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX : <http://dbpedia.org/resource/>
SELECT ?disease ?person ?deathDate
WHERE {
?disease a dbpedia-owl:Disease .
?person a dbpedia-owl:Person ;
dbpedia2:deathCause ?disease;
dbpedia2:deathDate ?deathDate .
{ ?person dbpedia-owl:deathPlace :United_States . }
UNION
{ ?person dbpedia-owl:deathPlace :Spain . }
FILTER ( ?deathDate >= "1900-01-01"^^xsd:date &&
?deathDate <= "2000-01-01"^^xsd:date ) .
} ORDER BY DESC(?disease)
Si se quiere, esta query se puede concretar más para mostrar, por ejemplo, a la gente que ha muerto
de un accidente cerebro-vascular en el último siglo, de la siguiente manera:
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX : <http://dbpedia.org/resource/>
SELECT ?person ?deathDate
WHERE {
?person a dbpedia-owl:Person ;
dbpedia2:deathCause :Stroke;
dbpedia2:deathDate ?deathDate .
{ ?person dbpedia-owl:deathPlace :United_States . }
UNION
{ ?person dbpedia-owl:deathPlace :Spain . }
FILTER ( ?deathDate >= "1900-01-01"^^xsd:date &&
?deathDate <= "2000-01-01"^^xsd:date ) .
}
3. La siguiente query muestra el manejo de la cláusula OPTIONAL, es decir,
datos que podrían no estar presentes: “Lista de personas que consiguieron
algún tipo de premio nobel, mostrando su nacionalidad y tipo de premio”.
Al igual que la query anterior, se podría refinar aún más para sacar, por ejemplo, sólo los premios
nobeles en física.
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX : <http://dbpedia.org/resource/>
SELECT ?persona ?nacionalidad ?nombrePremio WHERE {
?persona a dbpedia-owl:Person .
?persona dbpedia-owl:award ?premio .
?premio dcterms:subject <http://dbpedia.org/resource/Category:Nobel_Prize> ;
dbpedia2:name ?nombrePremio .
OPTIONAL { ?persona dbpedia2:nationality ?nacionalidad . }
OPTIONAL { ?persona dbpedia-owl:nationality ?nacionalidad . }
FILTER ( lang(?nombrePremio) = "en" )
FILTER (regex(?nombrePremio, "Nobel", "i"))
}
3. Esta query muestra alguna de las funciones que se pueden emplear para
el manejo de fechas, como es la función year(), que extrae el año de una
fecha dada, o la función now() que devuelve la fecha actual del sistema:
“Volcanes activos que han entrado en erupción en los últimos 10 años”.
También podemos ver el uso de la función datatype(), muy útil para averiguar el tipo de dato de
cierta propiedad.
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT ?volcan ?lastEruptionYear WHERE {
?volcan dcterms:subject <http://dbpedia.org/resource/Category:Active_volcanoes> .
?volcan dbpedia2:lastEruption ?lastEruptionYear .
FILTER ( datatype(?lastEruptionYear ) = xsd:int
&& ?lastEruptionYear >= (year(now())-10)
&& ?lastEruptionYear <= year(now()) )
}
4. La siguiente query nos muestra los sitios que contiene la wikipedia que
están a un radio de 2km de la Puerta del Sol de Madrid: “Sitios cercanos a un
lugar dado”.
Es totalmente válida si, en vez de proporcionar el lugar, proporcionamos unas coordenadas gps. En
la query se muestra comentada la primera opción, utilizándose, por tanto, la opción de poner las
coordenadas gps directamente. También se podría cambiar el radio de búsqueda, quizá para
restringir más la búsqueda, a sólo 1km cambiando su valor por 0.01.
Además, se muestra el uso de la cláusula BIND(), muy útil para asignar valores a variables de
sparql, así como el uso de LIMIT para limitar los resultados de la búsqueda a un número dado. En
conjunción con la cláusla OFFSET se podría hacer una paginación de los resultados.
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?lugar ?lat ?long WHERE {
?lugar a dbpedia-owl:Place .
?lugar geo:lat ?lat .
?lugar geo:long ?long .
#:Puerta_del_Sol geo:lat ?miLat .
#:Puerta_del_Sol geo:long ?miLong .
BIND(-3.703347 as ?miLong) .
BIND(40.41713 as ?miLat) .
BIND(0.02 as ?radio) .
FILTER(xsd:double(?lat) - xsd:double(?miLat) <= ?radio &&
xsd:double(?miLat) - xsd:double(?lat) <= ?radio &&
xsd:double(?long) - xsd:double(?miLong) <= ?radio &&
xsd:double(?miLong) - xsd:double(?long) <= ?radio
)
} LIMIT 20
5. Con la siguiente query se pretende enseñar el funcionamiento de otro tipo
de consultas a dbpedia: “Pregunta a dbpedia sobre si el PIB en Estados
Unidos es mayor que el de España”.
Este tipo de consultas nos van a devolver sólo true o false, dependiendo de si se cumple o no la
condición de búsqueda.
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
ASK WHERE {
:United_States dbpedia2:gdpNominal ?gdpUS ;
dbpedia2:gdpNominalYear ?gdpUSYear .
:Spain dbpedia2:gdpNominal ?gdpS ;
dbpedia2:gdpNominalYear ?gdpSYear .
FILTER ( ?gdpUSYear = ?gdpSYear && xsd:float(?gdpUS) > xsd:float(?gdpS) )
}
6. Con esta query se pretende mostrar el uso de las funciones de agregado
para poder agrupar por categorías, contar los resultados, etc.: “Clases de
animales contenidas en la wikipedia ordenadas por número de familias
diferentes”.
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?clase COUNT(?sujeto) as ?numero WHERE {
?sujeto a dbpedia-owl:Animal .
?sujeto dbpedia-owl:class ?clase .
}
GROUP BY ?clase
HAVING COUNT(?sujeto) > 100
ORDER BY DESC(?numero)
Descargar