[{TableOfContents title='Contenido'}]

\\

Estas son las preguntas #1 a #10 del [QALD-2 Challenge |http://greententacle.techfak.uni-bielefeld.de/~cunger/qald/index.php?x=challenge&q=2]. Todas en [QALD-2 SPARQL Queries].


!!Q#1 Give me all female Russian astronauts 

!DBpedia SPARQL Query

%%prettify
{{{
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.png]esDBpedia 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:
* [Categoría:Astronautas_de_Rusia|http://es.wikipedia.org/wiki/Categor%C3%ADa:Astronautas_de_Rusia]
* [Categoría:Astronautas_de_la_Unión_Soviética|http://es.wikipedia.org/wiki/Categor%C3%ADa:Astronautas_de_la_Uni%C3%B3n_Sovi%C3%A9tica]

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




%%prettify
{{{
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.png]esDBpedia SPARQL Query
"Dame los cumpleaños de todos los actores de la serie de televisión Charmed"\\



la query sería esta:

%%prettify
{{{
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

%%prettify 
{{{
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.png]esDBpedia SPARQL Query
"¿Con quién está casada la hija de Ingrid Bergman?"\\


se podría traducir como

%%prettify 
{{{
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

%%prettify 
{{{
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.png]esDBpedia 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"|http://mappings.dbpedia.org/server/templatestatistics/es/?template=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.png]esDBpedia 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.png]esDBpedia 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.png]esDBpedia 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.png]esDBpedia 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:

%%prettify
{{{
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.
%%prettify
{{{
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|http://es.wikipedia.org/wiki/Categor%C3%ADa:Alemania], pero no hay ninguna categoría para los lander alemanes. Si acaso, en [Anexo:Municios de Alemania|http://es.wikipedia.org/wiki/Anexo:Municipios_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.png]esDBpedia 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.png]esDBpedia 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|http://es.dbpedia.org/page/Nilo]) 
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|http://mappings.dbpedia.org/server/templatestatistics/es/?template=Ficha_de_monta%C3%B1a] 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|http://mappings.dbpedia.org/index.php/Mapping_es: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|http://mappings.dbpedia.org/index.php/Mapping_en: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|