Wikipedia:GLAM/Koninklijke Bibliotheek en Nationaal Archief/Topstukken/Hergebruik/Voorbeelden/Smoelenboek bijdragers AAJH
Nieuws | Over onze samenwerking met Wikimedia | Projecten | Evenementen & bijeenkomsten | KPIs | Archief (2013-2014) | Alle pagina's |
Topstukken | Alba amicorum | Algemeen Letterkundig Lexicon |
Home | Overzichten van topstukken | Wikipedia-artikelen | Hergebruik (werk in uitvoering) | Publicaties, presentaties etc. | Meehelpen |
Wikimedia Commons (beelden) | Wikidata (data) | Wikipedia (teksten) | Github | Voorbeelden |
Smoelenboek van de bijdragers aan het vriendenboek van Jacob Heyblocq
bewerkenAan het 17e eeuwse Vriendenboek van Jacob Heyblocq hebben tientallen personen (onderaan, bij Index op auteursnamen) bijgedragen. We willen graag een fotogalerij/smoelenboek van deze personen maken, voor zover er afbeeldingen van die personen bekend zijn (op Commons).
We kunnen dit op meerdere manieren doen.
Zie ook de corresponderende pagina op Github voor alle Python-scripts en HTML-pagina's die hieronder besproken worden, en Engelstalige uitleg.
1) Category op Wikimedia Commons
bewerkenAlle 141 bijdragers aan dit album zijn verzameld in Wikimedia Commons, in (de beelden en subcategorieën van) Category:Contributors to the album amicorum Jacobus Heyblocq. Daarvan hebben er 55 een afbeelding (dd 31-12-2020).
- Voordeel van deze aanpak: dit is een makkelijke/passieve manier om dit smoelenboek te bekijken, er hoeven immers geen APIs of SPARQL-services voor aangeroepen te worden, en/of geprogrammeerd voor te worden.
- Nadeel van deze aanpak: Wikimedianen kunnen naar eigen inzicht categoriseringen op Commons aanpassen. Hierdoor kunnen afbeeldingen uit deze categorie verdwijnen, of er kunnen meerdere beelden van 1 bepaalde bijdrager in komen te staan. Het aantal beelden in deze categorie kan m.a.w. veranderen, zonder dat je daar erg in hebt.
2) Commons API
bewerkenWe kunnen de Category:Contributors to the album amicorum Jacobus Heyblocq uitvragen via de API op Wikimedia Commons. We kunnen na gelang onze behoeften de respons in diverse formaten opvragen:
- JSON: https://commons.wikimedia.org/w/api.php?action=query&generator=categorymembers&gcmlimit=500&gcmnamespace=6&gcmtitle=Category:Contributors_to_the_album_amicorum_Jacobus_Heyblocq&format=json
- XML
- PHP (HTML-rendering)
- Hierbij vragen we alleen de beelden (gcmnamespace=6) op.
We gebruiken bovenstaande respons in JSON-formaat, we kunnen deze nu m.b.v. dit Python-script omzetten in een eenvoudige HTML-fotogalerij/smoelenboek, dat er zo uit ziet:
Nadeel van deze aanpak: Wikimedianen kunnen naar eigen inzicht categoriseringen op Commons aanpassen. Hierdoor kunnen afbeeldingen uit bovengenoemde API-call verdwijnen, of er kunnen meerdere beelden van 1 bepaalde bijdrager in de JSON-respons komen te staan. Het aantal beelden in het resulterende smoelenboek kan m.a.w. veranderen, zonder dat je daar erg in hebt.
3) SPARQL-query op Wikidata
bewerkenIn het Wikidata-item Album amicorum van Jacobus Heyblocq (1623-1690), rector van de Latijnse school te Amsterdam (Q72752496) zijn in de property bijdrager (P767) alle bijdragers aan dit album opgenomen. Daardoor kunnen we al die personen d.m.v. onderstaande SPARQL query bij elkaar zoeken en vervolgens hun afbeeldingen/smoelen weergeven in een kant-en-klare galerij in de Wikidata-interface
#defaultView:ImageGrid{"hide":["?gender","?portrait"]}
SELECT DISTINCT ?contributorDescription ?contributor ?contributorLabel ?gender ?portrait WHERE {
BIND(wd:Q72752496 as ?album)
?album wdt:P767 ?contributor.
?contributor wdt:P21 ?gender.
OPTIONAL{?contributor wdt:P18 ?image.}
BIND (wd:Q82985930 as ?maledummy)
BIND (wd:Q82992173 as ?femaledummy)
?maledummy wdt:P18 ?maledummyimage.
?femaledummy wdt:P18 ?femaledummyimage.
BIND(IF(?gender=wd:Q6581072,?femaledummyimage,?maledummyimage) as ?dummyimage). #Choose the dummyimage dependent on gender (female/male)
BIND(IF(BOUND(?image), ?image,?dummyimage) as ?portrait). #If no image is known, substitute the dummy image
SERVICE wikibase:label { bd:serviceParam wikibase:language "en,nl". }
}
ORDER BY DESC (?image)
Hierbij worden via Q82985930 + ?maledummyimage en Q82992173 + ?femaledummyimage mannelijke en vrouwelijke dummy-images ingevoegd voor de mannelijke resp. vrouwelijke albumbijdragers van wie geen afbeelding bekend is in Wikimedia Commons
Het smoelenboek als resultaat van bovenstaande query ziet er als volgt uit:
4) SPARQL-query op Wikidata met JSON-respons
bewerkenAls we een SPARQL-query in de Wikidata query interface doen, kunnen we het resultaat direct (kant-en-klaar) in die interface laten tonen, zoals hierboven gedaan wordt. We kunnen er ook echter voor kiezen om het zoekresultaat als JSON-respons op te vragen en er dan zelf een interface mee te bouwen. Dat doen we als volgt:
1) Via onderstaande SPARQL query vragen we eerst een aantal gegevens van de bijdragers direct in de Wikidata-interface op
SELECT DISTINCT ?contributor ?contributorLabel ?contributorDescription ?image ?commonscat ?wparticleNL WHERE {
BIND(wd:Q72752496 as ?album)
?album wdt:P767 ?contributor.
?contributor wdt:P18 ?image.
OPTIONAL{?contributor wdt:P373 ?commonscat.}
OPTIONAL{?wparticleNL schema:about ?contributor.
?wparticleNL schema:isPartOf <https://nl.wiki.x.io/>.}
SERVICE wikibase:label { bd:serviceParam wikibase:language "nl". }
}
ORDER BY ?contributorLabel
We vragen hierbij dus
- het Wikidata Q-nummer (?contributor),
- de naam, de Nederlandstalige beschrijving en de afbeelding (maar nu zonder de dummy images),
- het Nederlandstalige Wikipedia-artikel en de Commons-category (indien beschikbaar)
van de bijdragers op, want deze gegevens willen we in de zelfbouw-interface gaan weergeven.
2) Als we gecontroleerd hebben dat de query en de zoekresultaten er goed uit zien, vragen we dezelfde respons in JSON op :
https://query.wikidata.org/sparql?query=SELECT%20DISTINCT%20%3Fcontributor%20%3FcontributorLabel%20%3FcontributorDescription%20%3Fimage%20%3Fcommonscat%20%3FwparticleNL%20WHERE%20%7B%20%0A%20%20BIND(wd%3AQ72752496%20as%20%3Falbum)%0A%20%20%3Falbum%20wdt%3AP767%20%3Fcontributor.%0A%20%20%3Fcontributor%20wdt%3AP18%20%3Fimage.%0A%20%20OPTIONAL%7B%3Fcontributor%20wdt%3AP373%20%3Fcommonscat.%7D%0A%20%20OPTIONAL%7B%3FwparticleNL%20schema%3Aabout%20%3Fcontributor.%0A%20%20%20%20%20%20%20%20%20%20%20%3FwparticleNL%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fnl.wiki.x.io%2F%3E.%7D%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22nl%22.%20%7D%0A%7D%20%0AORDER%20BY%20%3FcontributorLabel&format=json
3) Met deze JSON kunnen we nu m.b.v. dit Python-script dit eenvoudige HTML-fotogalerij/smoelenboek maken. Dat zie er zo uit:
5) Wikidata SPARQL + HTML-embed via iframe
bewerkenHet hierboven bij 3) gemaakte smoelenboek kan ook ingebed worden in een HTML pagina d.m.v. een HTML-iframe. De basale code ziet er dan als volgt uit:
<!DOCTYPE html>
<html>
<head>
<title>Smoelenboek van de bijdragers aan het vriendenboek van Jacob Heyblocq - Wikidata SPARQL + HTML iframe</title>
</head>
<body>
<h1>Smoelenboek van de bijdragers aan het vriendenboek van Jacob Heyblocq - Wikidata SPARQL + HTML iframe</h1>
<iframe style="position: absolute; height: 100%; width: 100%; border: none" src="https://query.wikidata.org/embed.html#%23defaultView%3AImageGrid%7B%22hide%22%3A%5B%22%3Fgender%22%2C%22%3Fportrait%22%5D%7D%0ASELECT%20DISTINCT%20%3FcontributorDescription%20%3Fcontributor%20%3FcontributorLabel%20%3Fgender%20%3Fportrait%20WHERE%20%7B%20%0A%20%20BIND(wd%3AQ72752496%20as%20%3Falbum)%0A%20%0A%20%20%3Falbum%20wdt%3AP767%20%3Fcontributor.%0A%20%20%3Fcontributor%20wdt%3AP21%20%3Fgender.%0A%20%20OPTIONAL%7B%3Fcontributor%20wdt%3AP18%20%3Fimage.%7D%0A%0A%20%20BIND%20(wd%3AQ82985930%20as%20%3Fmaledummy)%20%0A%20%20BIND%20(wd%3AQ82992173%20as%20%3Ffemaledummy)%20%20%0A%20%20%3Fmaledummy%20wdt%3AP18%20%3Fmaledummyimage.%0A%20%20%3Ffemaledummy%20wdt%3AP18%20%3Ffemaledummyimage.%0A%20%20BIND(IF(%3Fgender%3Dwd%3AQ6581072%2C%3Ffemaledummyimage%2C%3Fmaledummyimage)%20as%20%3Fdummyimage).%20%23Choose%20the%20dummyimage%20dependent%20on%20gender%20(female%2Fmale)%0A%20%20%20%0A%20%20BIND(IF(BOUND(%3Fimage)%2C%20%3Fimage%2C%3Fdummyimage)%20as%20%3Fportrait).%20%23If%20no%20image%20is%20known%2C%20substitute%20the%20dummy%20image%0A%20%20%20%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%2Cnl%22.%20%7D%0A%7D%20%0AORDER%20BY%20DESC%20(%3Fimage)" referrerpolicy="origin" sandbox="allow-scripts allow-same-origin allow-popups"></iframe>
</body>
</html>
Dit 'kale' smoelenboek is op Github te zien en ziet er zo uit:
Vormgeving kb.nl
bewerkenWe kunnen deze HTML-iframe-aanpak verder uitwerken tot een vormgeving die naadloos bij de pagina's over het vriendenboek op de KB-website aansluit. Dat ziet er dan als volgt uit:
Naast dit smoelenboek kunnen we ook een lijst en een beroepenwolk van de albumbijdragers maken in de vormgeving van kb.nl, wederom o.b.v. ingebedde HTML-iframes die Wikidata SPARQL queries bevatten:
-
Screenshot van deze lijst van bijdragers in de vormgeving van kb.nl o.b.v. een ingebed HTML <iframe> die deze Wikidata SPARQL query bevat.
-
Screenshot van deze beroepenwolk van bijdragers in de vormgeving van kb.nl o.b.v. een ingebed HTML <iframe> die deze Wikidata SPARQL query bevat.
6) API call op Wikidata via P18 en dat verweerken met Python tot HTML-gallery
bewerkenCode Matt Miller API Data enpojnt
- https://www.youtube.com/watch?v=SzfC3KFqmPs&t=20s
- https://gist.github.com/thisismattmiller/42c9d5981ee233c6288194af234ac6e4
import requests
import json
url = "https://www.wikidata.org/wiki/Special:EntityData/"
qnumbers = ['Q72752496'] # Album amicorum Jacob Heyblocq
all_properties = {}
for qnum in qnumbers:
useurl = url + qnum + '.json'
headers = {
'Accept' : 'application/json',
'User-Agent': 'User OlafJanssen - AAJH'
}
r = requests.get(useurl, headers=headers)
data = json.loads(r.text)
# print(data)
# print(data['entities'][qnum]['claims'])
properties = list(data['entities'][qnum]['claims'].keys())
print(properties)
for p in properties:
if p not in all_properties:
all_properties[p] = 0
all_properties[p]+=1
print(all_properties)