Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Popup enrichment from wikidata #31

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"plugins": [
"@babel/plugin-syntax-optional-chaining"
]
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
.env.development.local
.env.test.local
.env.production.local
.vscode

.cache
dist
Expand Down
62 changes: 61 additions & 1 deletion README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,64 @@ It is intended to make a survey of information on streets, avenues, passages, ro

The project was officially presented within the framework of International Women's Day, on March 8.


## Wikidata

When clicking or hovering the mouse over women streets with Wikipedia or Wikidata details, the application will perform queries to Wikidata. If the streets has only a Wikipedia link, it will first query to get the equivalent Wikidata identifier. When the street has the Wikidata identifier explicitly or through the mentioned query, a segond query to Wikidata will try to get a few details of the women that will show up in the pop-up window.:

* Name
* Short description
* Birth and death dates
* Occupations
* Link to a picture

## Wikidata identifier from name

This query expects a name of a Wikipedia article as a parameter, and will return the corresponding Wikidata item identifier. [Executing](https://query.wikidata.org/#SELECT%20%3Fid%0AWHERE%20%7B%0A%20%20%20%20VALUES%20%3FwikiTitle%20%7B%22Clara%20Campoamor%22%40es%7D%0A%20%20%20%20%3Fwiki%20schema%3Aabout%20%3Fid%3B%0A%20%20%20%20%20%20%20%20%20%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fes.wikipedia.org%2F%3E%3B%0A%20%20%20%20%20%20%20%20%20%20schema%3Aname%20%3FwikiTitle.%0A%7D) this query with `Clara Campoamor` the Wikidata item [`Q3321142`](https://www.wikidata.org/wiki/Q3321142) is returned.

```sparql
SELECT ?id
WHERE {
VALUES ?wikiTitle {"Clara Campoamor"@es}
?wiki schema:about ?id;
schema:isPartOf <https://es.wikipedia.org/>;
schema:name ?wikiTitle.
}
```

### Details from Wikidata identifier

This query has a Wikidata identifier as a parameter and will try to get back a few details that are optional for the item (`OPTIONAL`). Sometimes a subject has listed several death or birth dates or pictures, so we pick one of them randomly (`SAMPLE`). Additionally, it will aggregate the different occupations, unfortunately using the Spanish male nouns. When [executing](https://query.wikidata.org/#SELECT%20%0A%20%20%3Fid%20%28%3FidLabel%20AS%20%3Fname%29%20%0A%20%20%3Fdescription%20%0A%20%20%28%3FgenderLabel%20AS%20%3Fgender%29%20%0A%20%20%28SAMPLE%28%3Fbirths%29%20AS%20%3Fbirth%29%20%0A%20%20%28SAMPLE%28%3Fdeaths%29%20AS%20%3Fdeath%29%20%0A%20%20%28SAMPLE%28%3Fpic%29%20AS%20%3Fpicture%29%20%0A%20%20%28GROUP_CONCAT%28DISTINCT%20%3FoccupationsLabel%3B%20SEPARATOR%20%3D%20%22%2C%20%22%29%20AS%20%3Foccupations%29%20%0AWHERE%20%7B%0A%20%20VALUES%20%3Fid%20%7B%0A%20%20%20%20wd%3AQ3321142%0A%20%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP21%20%3Fgender.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP569%20%3Fbirths.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP570%20%3Fdeaths.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP106%20%3Foccupations.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP18%20%3Fpic.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20schema%3Adescription%20%3Fdesc.%20%7D%0A%20%20FILTER%28%28LANG%28%3Fdesc%29%29%20%3D%20%22es%22%29%0A%20%20BIND%28COALESCE%28%3Fdesc%2C%20%22%22%29%20AS%20%3Fdescription%29%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22es%22.%0A%20%20%20%20%3Fid%20rdfs%3Alabel%20%3FidLabel.%0A%20%20%20%20%3Fgender%20rdfs%3Alabel%20%3FgenderLabel.%0A%20%20%20%20%3Foccupations%20rdfs%3Alabel%20%3FoccupationsLabel.%0A%20%20%7D%0A%7D%0AGROUP%20BY%20%3Fid%20%3FidLabel%20%3Fdescription%20%3FgenderLabel%20%3Fwiki) this query with the identifier from the previous example we get all the desired details from Clara Campoamor.

```sparql
SELECT
?id (?idLabel AS ?name)
?description
(?genderLabel AS ?gender)
(SAMPLE(?births) AS ?birth)
(SAMPLE(?deaths) AS ?death)
(SAMPLE(?pic) AS ?picture)
(GROUP_CONCAT(DISTINCT ?occupationsLabel; SEPARATOR = ", ") AS ?occupations)
WHERE {
VALUES ?id {
wd:Q3321142
}
OPTIONAL { ?id wdt:P21 ?gender. }
OPTIONAL { ?id wdt:P569 ?births. }
OPTIONAL { ?id wdt:P570 ?deaths. }
OPTIONAL { ?id wdt:P106 ?occupations. }
OPTIONAL { ?id wdt:P18 ?pic. }
OPTIONAL { ?id schema:description ?desc. }
FILTER((LANG(?desc)) = "es")
BIND(COALESCE(?desc, "") AS ?description)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "es".
?id rdfs:label ?idLabel.
?gender rdfs:label ?genderLabel.
?occupations rdfs:label ?occupationsLabel.
}
}
GROUP BY ?id ?idLabel ?description ?genderLabel ?wiki
```
### Current state

The project is still under development. The idea is to gradually expand the number of mapped cities, which so far are:
Expand Down Expand Up @@ -79,6 +136,9 @@ Join our slack channel [#lascallesdelasmujeres](https://join.slack.com/t/geochic

* **Horacio Castellaro** (*Argentina*)

* **Jorge Sanz** (*España*)



## Allied organizations

Expand Down
60 changes: 60 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,64 @@ Se pretende hacer una encuesta de información sobre calles, avenidas, pasajes,

El proyecto fue presentado oficialmente en el marco del Día Internacional de la Mujer, el 8 de marzo.

## Utilización de Wikidata

Al pasar el ratón sobre las calles con información en Wikipedia o Wikidata, la aplicación hace dos consultas distintas a Wikidata. Si la calle tiene enlace a Wikipedia en primer lugar se busca la entrada de esa mujer en Wikidata a partir del enlace. Una vez obtenido el identificador explícitamente o bien vía el enlace a Wikipedia, se realiza otra consulta a Wikidata que trata de extraer información relevante que se mostrará en la ventana emergente (_pop-up_):

* Nombre
* Descripción corta
* Fechas de nacimiento y fallecimiento
* Ocupaciones
* Enlace a una fotografía

### Identificador de Wikidata a partir del nombre

Esta consulta espera el nombre de una mujer que aparece en la Wikipedia en Español y devolverá el identificador de Wikidata al que se refiere. Al [ejecutar](https://query.wikidata.org/#SELECT%20%3Fid%0AWHERE%20%7B%0A%20%20%20%20VALUES%20%3FwikiTitle%20%7B%22Clara%20Campoamor%22%40es%7D%0A%20%20%20%20%3Fwiki%20schema%3Aabout%20%3Fid%3B%0A%20%20%20%20%20%20%20%20%20%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fes.wikipedia.org%2F%3E%3B%0A%20%20%20%20%20%20%20%20%20%20schema%3Aname%20%3FwikiTitle.%0A%7D) esta consulta con `Clara Campoamor` obtenemos el identificador [`Q3321142`](https://www.wikidata.org/wiki/Q3321142).

```sparql
SELECT ?id
WHERE {
VALUES ?wikiTitle {"Clara Campoamor"@es}
?wiki schema:about ?id;
schema:isPartOf <https://es.wikipedia.org/>;
schema:name ?wikiTitle.
}
```

### Datos a partir de un identificador de Wikidata

Esta consulta tiene como parámetro el identificador de una entrada y busca obtener algunos datos que pueden aparecer en la entrada de manera opcional (`OPTIONAL`). A veces algunas entradas tienen varias fechas de nacimiento o fallecimiento o imágenes, por lo que la consulta obtendrá uno de esos valores aleatoriamente (`SAMPLE`). Además, agregará las distintas ocupaciones listadas para el personaje. Por desgracia, las ocupaciones vienen en género masculino. Al [ejecutar](https://query.wikidata.org/#SELECT%20%0A%20%20%3Fid%20%28%3FidLabel%20AS%20%3Fname%29%20%0A%20%20%3Fdescription%20%0A%20%20%28%3FgenderLabel%20AS%20%3Fgender%29%20%0A%20%20%28SAMPLE%28%3Fbirths%29%20AS%20%3Fbirth%29%20%0A%20%20%28SAMPLE%28%3Fdeaths%29%20AS%20%3Fdeath%29%20%0A%20%20%28SAMPLE%28%3Fpic%29%20AS%20%3Fpicture%29%20%0A%20%20%28GROUP_CONCAT%28DISTINCT%20%3FoccupationsLabel%3B%20SEPARATOR%20%3D%20%22%2C%20%22%29%20AS%20%3Foccupations%29%20%0AWHERE%20%7B%0A%20%20VALUES%20%3Fid%20%7B%0A%20%20%20%20wd%3AQ3321142%0A%20%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP21%20%3Fgender.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP569%20%3Fbirths.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP570%20%3Fdeaths.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP106%20%3Foccupations.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20wdt%3AP18%20%3Fpic.%20%7D%0A%20%20OPTIONAL%20%7B%20%3Fid%20schema%3Adescription%20%3Fdesc.%20%7D%0A%20%20FILTER%28%28LANG%28%3Fdesc%29%29%20%3D%20%22es%22%29%0A%20%20BIND%28COALESCE%28%3Fdesc%2C%20%22%22%29%20AS%20%3Fdescription%29%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22es%22.%0A%20%20%20%20%3Fid%20rdfs%3Alabel%20%3FidLabel.%0A%20%20%20%20%3Fgender%20rdfs%3Alabel%20%3FgenderLabel.%0A%20%20%20%20%3Foccupations%20rdfs%3Alabel%20%3FoccupationsLabel.%0A%20%20%7D%0A%7D%0AGROUP%20BY%20%3Fid%20%3FidLabel%20%3Fdescription%20%3FgenderLabel%20%3Fwiki) esta consulta con el identificador del ejemplo anterior obtenemos los detalles referidos a Clara Campoamor.

```sparql
SELECT
?id (?idLabel AS ?name)
?description
(?genderLabel AS ?gender)
(SAMPLE(?births) AS ?birth)
(SAMPLE(?deaths) AS ?death)
(SAMPLE(?pic) AS ?picture)
(GROUP_CONCAT(DISTINCT ?occupationsLabel; SEPARATOR = ", ") AS ?occupations)
WHERE {
VALUES ?id {
wd:Q3321142
}
OPTIONAL { ?id wdt:P21 ?gender. }
OPTIONAL { ?id wdt:P569 ?births. }
OPTIONAL { ?id wdt:P570 ?deaths. }
OPTIONAL { ?id wdt:P106 ?occupations. }
OPTIONAL { ?id wdt:P18 ?pic. }
OPTIONAL { ?id schema:description ?desc. }
FILTER((LANG(?desc)) = "es")
BIND(COALESCE(?desc, "") AS ?description)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "es".
?id rdfs:label ?idLabel.
?gender rdfs:label ?genderLabel.
?occupations rdfs:label ?occupationsLabel.
}
}
GROUP BY ?id ?idLabel ?description ?genderLabel ?wiki
```

### Estado actual

Expand Down Expand Up @@ -80,6 +138,8 @@ Contacta con nostras a través de twitter: [@geochicasosm](https://twitter.com/G

* **Horacio Castellaro** (*Argentina*)

* **Jorge Sanz** (*España*)


## Organizaciones Aliadas

Expand Down
Loading