Grupo de Facebook DBpedia en español
Notify Twitter


Estas son las preguntas #1 a #10 del QALD-2 Challenge. Todas en QALD-2 SPARQL Queries.

Q#1 Give me all female Russian astronauts #

DBpedia SPARQL Query#

PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?uri WHERE { 
   ?uri rdf:type yago:RussianCosmonauts . 
   ?uri rdf:type yago:FemaleAstronauts . 
}

Que tiene por resultado:

uri
http://dbpedia.org/resource/Yelena_Serova
http://dbpedia.org/resource/Valentina_Tereshkova
http://dbpedia.org/resource/Yelena_Kondakova

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"Dame todas las astronautas rusas"

es esDBpedia no tenemos las categorías YAGO, por lo que esta query no se puede realizar tal cual está.

Pero podemos usar las categorías Wikipedia. Buscando en esWikipedia encontramos estas categorías:

Podríamos hacer una query que sacase los astronautas cualquiera de estas categorías, o de la unión de ambas, pero en cualquier caso no tenemos manera de saber si son hombres o mujeres. Por ejemplo, esta consulta saca las uris de los astronautas de la unión soviética (hombre y mujeres):

SELECT * WHERE{
   ?person dcterms:subject <http://es.dbpedia.org/resource/Categoría:Astronautas_de_la_Unión_Soviética>
}

Por otra parte, como está mapeada la ficha Astronauta, podríamos sacar las uris de los astronautas y sus nacionalidades:

SELECT ?person ?v WHERE{
   ?person rdf:type <http://dbpedia.org/ontology/Astronaut> .
   ?person <http://es.dbpedia.org/property/nacionalidad> ?v
}

Q#2 Give me the birthdays of all actors of the television show Charmed#

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://dbpedia.org/resource/> 
SELECT DISTINCT ?date WHERE {
   res:Charmed dbo:starring ?actor . 
   ?actor dbo:birthDate ?date . 
}

Que tiene por resultado:

date
1985-11-30
1985-11-30
1968-07-27
1968-07-27
1969-02-01
1969-02-01
1969-02-08
1969-02-08
1971-01-26
1971-01-26
1972-12-19
1972-12-19
1971-04-12
1971-04-12
1973-12-03
1973-09-05
1973-09-05

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"Dame los cumpleaños de todos los actores de la serie de televisión Charmed"

la query sería esta:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
SELECT DISTINCT ?date WHERE {
   esres:Charmed dbo:starring ?actor .
   ?actor esdbp:fechaDeNacimiento ?date .
}

pero lo resultados son bastante malos:

date
"--04-12"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"30"^^<http://www.w3.org/2001/XMLSchema#int>
"--12-03"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"--07-27"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"--12-19"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"--09-05"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"--02-01"^^<http://www.w3.org/2001/XMLSchema#gMonthDay>
"19"^^<http://www.w3.org/2001/XMLSchema#int>

Q#3 Who is the daughter of Ingrid Bergman married to? #

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?uri WHERE { 
   res:Ingrid_Bergman dbo:child ?child .
   ?child dbp:spouse ?uri .
}

Con resultado:

uri
"Joseph Daly"@en
"John Carley"@en
"Fuller Earle Callaway, III"@en
http://dbpedia.org/resource/Martin_Scorsese
"Jonathan Wiedemann"@en

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"¿Con quién está casada la hija de Ingrid Bergman?"

se podría traducir como

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?uri WHERE { 
   esres:Ingrid_Bergman dbo:child ?child .
   ?child esdbp:cónyuge ?uri .
}
que tiene por resultado
uri
http://es.dbpedia.org/resource/David_Lynch
http://es.dbpedia.org/resource/Martin_Scorsese
http://es.dbpedia.org/resource/Gary_Oldman
"Jon Wiedemann"@es

(cuatro entradas en lugar de las 5 de la versión inglesa)

hay que notar que si en lugar de dbo:child pongo esdbp:hijos NO obtengo ningún resultado, y que si en lugar de esdbp:cónyuge pongo dbo:spouse obtengo 3 resultados (las uris de David Lynch, Martin Scorsese y Gary_Oldman). El motivo...Iconos/ico40_mistery.png

Q#4 Which river does the Brooklyn Bridge cross? #

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?uri ?string WHERE { 
   res:Brooklyn_Bridge dbo:crosses ?uri . 
   OPTIONAL { ?uri rdfs:label ?string. FILTER (lang(?string) = 'en') } 
}

Iconos/ico30_tic_yes.pngesDBpedia SPARQL Query#

"¿Qué río cruza el prunte de Brooklyn?"

Esta query inglesa, lanzada sobre esDBpedia no da resultados.

Para ver todo lo que tenemos en esDBpedia del Puente de Brooklyn hacemos la siguiente consulta

PREFIX esres: <http://es.dbpedia.org/resource/> 
SELECT *  WHERE { 
   esres:Puente_de_Brooklyn ?p ?v . 
}

Vemos que una de la propiedades es "cruza", por lo que podemos hacer la query

PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
SELECT *  WHERE { 
   esres:Puente_de_Brooklyn esdbp:cruza ?v . 
}
Que da como resultado "http://es.dbpedia.org/resource/Río_Este" (East River).

Podemos poner algo estructuralmente muy similar

PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
SELECT DISTINCT ?uri ?string WHERE { 
   esres:Puente_de_Brooklyn esdbp:cruza ?uri . 
   OPTIONAL { ?uri rdfs:label ?string. FILTER (lang(?string) = 'es')}
}

Para obtener el resultado correcto (aunque la cadena no sale, el recurso está OK).

Hay que observar que aunque está mapeada la clase Bridge (ficha de puente), se ha declarado ERRÓNEAMENTE el mapeo de la propiedad, ya que se ha mapeado la info-propiedad "cruces" (en lugar de "Cruza")--> crosses.

¿De dónde ha salido la propiedad esdbp:cruza? Podemos ver que en la página wikipedia (http://es.wikipedia.org/wiki/Puente_de_Brooklyn) está la propiedad "Cruza" en el infobox. Sin embargo, en el mapeo (ficha de puente) no está definido mapeo para la propiedad Cruza, pero sí para "cruces".

En las estadísticas de "ficha de puente" se puede ver que hay muchas páginas wikipedia con la propiedad "Cruza" (232), pero ninguna con la propiedad "cruces".

Concluyo (MRA) que, aunque se puede llegar a la solución, convendría arreglar el mapeo.

Q#5 How many monarchical countries are there in Europe?#

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT COUNT(DISTINCT ?uri) WHERE {
  ?uri rdf:type yago:EuropeanCountries .
  ?uri dbo:governmentType ?govern .
  FILTER regex(?govern,'monarchy') . 
}

Con resultado: 6

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"¿Cuántos países con monarquía hay en Europa?"

La traducción directa no es posible porque en esDBpedia no está la clasificación YAGO.

Q#6 In which city did John F. Kennedy die?#

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?uri WHERE { 
  res:John_F._Kennedy dbo:deathPlace ?uri .
  ?uri rdf:type dbo:City . 
}

Con resultado: http://dbpedia.org/resource/Dallas

Iconos/ico30_tic_yes.pngesDBpedia SPARQL Query#

"¿En qué ciudad murió John F. Kennedy?"

La traducción directa sería algo así:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?uri WHERE { 
  esres:John_F._Kennedy dbo:deathPlace ?uri .
  ?uri rdf:type dbo:City . 
}
que no devuelve resultados.

Trasteando vemos que esta sí funciona (cambiando dbo:deathPlace por esdbp:lugarmuerte y sin exigir que la uri sea ciudad ):

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT * WHERE { 
  esres:John_F._Kennedy esdbp:lugarmuerte ?v 
}

con resultado: "Dallas, Texas,"@es

Q#7 Is the wife of president Obama called Michelle?#

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
ASK WHERE { res:Barack_Obama dbo:spouse ?spouse . 
            ?spouse rdfs:label ?name . 
            FILTER(regex(?name,'Michelle')) 
}

Con resultado: true

Iconos/ico30_tic_yes.pngesDBpedia SPARQL Query#

"¿Se llama Michelle la esposa del presidente Obama?"

La traducción directa sería algo así:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
ASK WHERE { esres:Barack_Obama esdbp:cónyuge ?spouse . 
            ?spouse rdfs:label ?name . 
            FILTER(regex(?name,'Michelle')) 
}

Que devuelve false Pero si usamos foaf:name en lugar de rdfs:label obtenemos esta query:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
ASK WHERE { esres:Barack_Obama esdbp:cónyuge ?spouse . 
            ?spouse foaf:name ?name . 
            FILTER(regex(?name,'Michelle')) 
}
que sí devuelve el resultado correcto.

Q#8 Which states of Germany are governed by the Social Democratic Party?#

DBpedia SPARQL Query#

PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?uri ?string WHERE { 
  ?uri rdf:type yago:StatesOfGermany .
     { ?uri dbp:rulingParty 'SPD'@en . } UNION
     { ?uri dbp:rulingParty res:Social_Democratic_Party_of_Germany . }
  OPTIONAL { ?uri rdfs:label ?string.
             FILTER (lang(?string) = 'en') }
} 

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"¿Qué estados alemanes están gobernados por el partido socialdemócrata?"

En esDBpedia no están las categorías YAGO, por lo que no podemos buscar cosas yago:StatesOfGermany

Si intentamos adapatar la query, podemos sacar los estados alemanes (sacamos la property viendo una de la regiones) con la query:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://es.dbpedia.org/resource/> 
SELECT *  WHERE { 
  ?r rdf:type dbo:AdministrativeRegion . 
  ?r dbo:country res:Alemania
} 

Ninguno de estos estados tiene una propiedad relacionada con el partido político. En la wikipedia inglesa hay una ficha GermanState que tiene la propiedad ruling_party1 y ruling_party2. En la wikipedia española está la ficha Entidad Subnacional que no tiene nada de partidos, como mucho lider.

Si miramos Berlín, vemos que tiene la propiedad dirigente. Esta query saca los políticos de las regiones administrativas alemanas.

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX res: <http://es.dbpedia.org/resource/> 
PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT * WHERE { 
  ?r <http://es.dbpedia.org/property/dirigente> ?nombre .
  ?r rdf:type dbo:AdministrativeRegion .
  ?r dbo:country res:Alemania
} 

Pero no podemos avanzar mucho más. Igual su hubiese una lista de políticos de cada partido...

Si buscamos Categorías Wikipedia podemos explorar la Categoría:Alemania, pero no hay ninguna categoría para los lander alemanes. Si acaso, en Anexo:Municios de Alemania, pero no está estructurado :-(

Q#9 Which U.S. states possess gold minerals? #

DBpedia SPARQL Query#

PREFIX yago: <http://dbpedia.org/class/yago/> 
PREFIX dbp: <http://dbpedia.org/property/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT DISTINCT ?uri WHERE { 
   ?uri rdf:type yago:StatesOfTheUnitedStates .
   ?uri dbp:mineral ?mineral .
   FILTER (regex(?mineral,'gold','i')) 
}

Con resultado http://dbpedia.org/resource/California

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"¿Qué estados de EEUU tienen minerales de oro?"

Como usa las categorías YAGO, no es posible la traducción directa. No he podido encontrar (MRA) ninguna Categoría wikipedia que liste los estados. Hay alguna tabla que los lista, pero no está mapeada.

Q#10 In which country does the Nile start?#

DBpedia SPARQL Query#

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX res: <http://dbpedia.org/resource/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT DISTINCT ?uri ?string WHERE {
  res:Nile dbo:sourceCountry ?uri .
  OPTIONAL { ?uri rdfs:label ?string. 
             FILTER (lang(?string) = 'en') } 
}

Con resultado:

uri string
http://dbpedia.org/resource/Ethiopia "Ethiopia"@en
http://dbpedia.org/resource/Rwanda "Rwanda"@en

Iconos/ico30_tic_no.pngesDBpedia SPARQL Query#

"¿En qué país nace el río Nilo?" No sabemos nada del Nilo porque en la wikipedia española el Nilo es un Curso de agua, que no estaba mapeado cuando se extrajeron los datos (los datos son de abril 2012, y el mapeo de diciembre 2012). Solución: mapear Curso de agua.

Sin embargo, si buscamos qué sabemos del Nilo (página de datos de Nilo en esDBpedia) salen bastantes datos asociados a propiedades como "caudalMedio", "lugarDesembocadura", o "lugarNacimiento".

Podemos hacer una estimación de qué clases usan esas propiedades mediante queries como esta (para caudalMedio):

SELECT count (?s), ?t WHERE { 
?s  <http://es.dbpedia.org/property/caudalMedio> ?v .
?s  rdf:type ?t
}

En el resultado sale:

  • la clase Mountain y sus ascendentes/descendentes NaturalPlace y Place: podemos ver en ficha de Montaña que NO tiene la propiedad caudalMedio
  • la clase Road y sus ascendentes/descendentes RouteOfTransportation, Infrastucture, ArchitecturalStructure y Place: que no está mapeada.
  • la clase WorldHeritageSite y su ascendente/descendente Place: está mapeada a "ficha de patrimonio de la humanidad": parece que no mapea la propiedad caudalMedio (al ver qué propiedades mapea/noMapea salta un error).

¿De dónde ha salido el dato de caudalMedio?Iconos/ico40_mistery.png.

La query

PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
SELECT *  WHERE { 
   esres:Nilo esdbp:lugarNacimiento ?v . 
}

saca lo que indica el infobox de la página wikipedia (del español) de Nilo: que nace en el río Kagera. En el infobox de la página wikipedia del inglés dice que nace en Rwanda

Es curioso ver cómo están mapeados los ríos en inglés: en la wikipedia del inglés, la página de Nile no tiene un infobox sino un "Geobox|River". Podemos ver que el mapeo de Geobox es un mapeo condicional que sirve para muchas clases (Monument, Building, Bridge, Valley, etc.), entre ellas River. En la parte común se define el mapeo para la propiedad dbpedia sourceCountry (infobox-prop source_country). De este mapeo es de donde sale el dato en la dbpedia del idioma inglés (Rwanda), pero ¿de dónde sale Ethiopia?Iconos/ico40_mistery.png.

La query más parecida a la versión inglesa sería esta:

PREFIX esres: <http://es.dbpedia.org/resource/> 
PREFIX esdbp: <http://es.dbpedia.org/property/> 
SELECT ?uri ?string  WHERE { 
  esres:Nilo esdbp:lugarNacimiento ?uri  .
  OPTIONAL { ?uri rdfs:label ?string. 
             FILTER (lang(?string) = 'en') } 

}
Que produce como resultado:
uri string
"Río Kagera"@es