Datamodel
We maken gebruik van de standaard op https://data.vlaanderen.be/doc/applicatieprofiel/cultuurparticipatie/ Die standaard definieert een aantal concepten, eigenschappen en relaties. Die aspecten van de standaard kunnen we implementeren in deze knowledge graph aan de hand van kernitems en -properties.
Kernitems en -properties
In elk data model is het van belang om de entiteiten te definiëren, en te weten welke relaties er tussen die entiteiten moeten kunnen gelegd worden. De entiteiten zijn Activiteiten (residenties, tentoonstellingen, podiumvoorstellingen, concerten, muziekreleases, ...), maar ook Agenten (uitvoerders en organisatoren). Dat gaat dan bijvoorbeeld om makers, kunstenaars, muzikanten, artiesten, concertzalen, kunstgaleries, theaterzalen, repetitieruimtes, etc. Au fond zijn het allemaal "actoren" in dat veld, die "activiteiten" ontplooien.
De oplijsting hieronder is abstract. Bekijk de pagina's modellering van actoren en modellering van activiteiten om dit concreet te maken.
In de kern van het data model zitten een beperkt aantal "core items" (objecten of types van objecten, bv. "Activiteit" en "ActiviteitType") en "core properties" (relaties tussen items, bv. "gebruikt werk" en "gebracht door"). Je krijgt een overzicht van die kernitems en kernproperties:
- Kernitems: [naar pagina met entiteiten van type Core Item]
- Kernproperties: [naar pagina met core properties]
Hoe voer ik een XXXXX in?
Het datamodel wordt uitgelegd op de pagina's modellering van actoren en modellering van activiteiten, maar dat blijft natuurlijk relatief abstract. Om het wat concreet te maken, bieden we ook een aantal concrete voorbeelden aan:
- Hoe voer je een muziekuitgave in?
- Hoe voer je een dansvoorstelling in?
- Hoe voer je een groepstentoonstelling in?
En dan wat complexer:
- Hoe voer je een editie van een theaterfestival in?
- Hoe voer je een editie van een kunstbeurs in?
- Hoe voer ik een voorprogramma van een concert in?
- Hoe voer je een concerttournee in?
- Hoe voer je een toonmoment bij een resident in?
- ...
Hoe ziet de data eruit?
Invoeren is 1 zaak, maar hoe haal je het er weer uit? Hieronder enkele voorbeelden.
Dansers en choreografen
Welke dansers en choreografen enzo werkten tussen 1980 en 2000 samen aan meer dan 10 verschillende werken?
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT DISTINCT ?creditA ?creditALabel (COUNT(?werk) AS ?werkCount) ?creditB ?creditBLabel WHERE { ?werk kpt:P17 ?begindatum. FILTER (?begindatum >= "1980-01-01T00:00:0+00:00"^^xsd:dateTime && ?begindatum < "2000-01-01T00:00:00+00:00"^^xsd:dateTime) ?werk kpt:P8 ?discipline. FILTER(?discipline IN (kp:Q68584,kp:Q68551,kp:Q68559,kp:Q68558,kp:Q68571,kp:Q68586,kp:Q68597,kp:Q68613,kp:Q68626,kp:Q68630,kp:Q68635,kp:Q68641,kp:Q68652,kp:Q68687,kp:Q68713,kp:Q68716,kp:Q68726,kp:Q68756,kp:Q68763,kp:Q68779,kp:Q68786,kp:Q68790)) ?activiteit kpt:P4 ?werk. ?activiteit kpp:P42 ?statementA. ?statementA kppq:P15 ?roleA. FILTER(?roleA IN (kp:Q69028,kp:Q69752,kp:Q69029,kp:Q69030,kp:Q68959,kp:Q69051,kp:Q69052,kp:Q69053,kp:Q69068,kp:Q69069,kp:Q69070,kp:Q69071,kp:Q69135,kp:Q69136,kp:Q69360,kp:Q68983,kp:Q68984,kp:Q69080,kp:Q69081,kp:Q69083,kp:Q69084,kp:Q69289,kp:Q69536,kp:Q69537,kp:Q69436,kp:Q69437,kp:Q69438,kp:Q69439,kp:Q69534,kp:Q69006,kp:Q69007,kp:Q69008,kp:Q69036,kp:Q69037,kp:Q69291,kp:Q69292,kp:Q69479,kp:Q69480,kp:Q69481,kp:Q69482,kp:Q69252)) ?statementA kpps:P42 ?creditA. ?activiteit kpp:P42 ?statementB. ?statementB kppq:P15 ?roleB. FILTER(?roleB IN (kp:Q69028,kp:Q69752,kp:Q69029,kp:Q69030,kp:Q68959,kp:Q69051,kp:Q69052,kp:Q69053,kp:Q69068,kp:Q69069,kp:Q69070,kp:Q69071,kp:Q69135,kp:Q69136,kp:Q69360,kp:Q68983,kp:Q68984,kp:Q69080,kp:Q69081,kp:Q69083,kp:Q69084,kp:Q69289,kp:Q69536,kp:Q69537,kp:Q69436,kp:Q69437,kp:Q69438,kp:Q69439,kp:Q69534,kp:Q69006,kp:Q69007,kp:Q69008,kp:Q69036,kp:Q69037,kp:Q69291,kp:Q69292,kp:Q69479,kp:Q69480,kp:Q69481,kp:Q69482,kp:Q69252)) ?statementB kpps:P42 ?creditB. FILTER(?creditA != ?creditB) SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?creditA ?creditALabel ?creditB ?creditBLabel HAVING (?werkCount >= 10)
Releases en hun contributors
Een overzicht van jazz/folk/wereldmuziek albums in de databank, met de contributors:
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpp:<https://kg.kunsten.be/prop/direct/> SELECT DISTINCT ?release ?releaseLabel ?contributor ?contributorLabel WHERE { ?release kpp:P13 kp:Q58532. ?release kpp:P8 kp:Q68897. ?track kpp:P43 ?release. ?track kpp:P4 ?work. {?release kpp:P42 ?contributor. } UNION { { ?track kpp:P42 ?contributor. } UNION { ?work kpp:P42 ?contributor. } } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . }} ORDER BY ASC(?releaseLabel)
Gegevens over een carrier als geheel
We zoeken de gegevens op van The Music of Bert Joris:
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> SELECT DISTINCT ?carriertitel ?carrierbeschrijving (GROUP_CONCAT(distinct ?genreLabel; separator=",") AS ?genres) (year(xsd:dateTime(?releasedatum)) as ?releasejaar) ?formatLabel ?conceptLabel ?roleLabel ?creditLabel ?media WHERE { kp:Q630931 rdfs:label ?carriertitel FILTER(LANGMATCHES(LANG(?carriertitel), 'nl')) kp:Q630931 schema:description ?carrierbeschrijving FILTER(LANGMATCHES(LANG(?carrierbeschrijving), 'nl')) kp:Q630931 kpt:P17 ?releasedatum. kp:Q630931 kpt:P8 ?genre. ?genre rdfs:label ?genreLabel. kp:Q630931 kpt:P71 ?media. FILTER(LANGMATCHES(LANG(?genreLabel), 'nl')) kp:Q630931 kpt:P36 ?format. kp:Q630931 kpt:P68 ?concept. kp:Q630931 kpp:P42 ?statement. ?statement kppq:P15 ?role; kpps:P42 ?credit. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?carriertitel ?carrierbeschrijving ?releasedatum ?formatLabel ?conceptLabel ?roleLabel ?creditLabel ?media
Tracklist
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> SELECT DISTINCT ?carrierlabel ?track ?trackLabel ?volgnummer (GROUP_CONCAT(distinct ?trackcreditlabel; separator=",") AS ?trackcreditlabels) WHERE { ?track kpt:P43 kp:Q630931 . kp:Q630931 rdfs:label ?carrierlabel. FILTER(LANGMATCHES(LANG(?carrierlabel), 'nl')) ?track kpp:P43 ?carrierstatement. ?carrierstatement kppq:P38 ?volgnummer. OPTIONAL{?track kpt:P42 ?trackcredit. ?trackcredit rdfs:label ?trackcreditlabel.} FILTER(LANGMATCHES(LANG(?trackcreditlabel), 'nl')) SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?carrierlabel ?track ?trackLabel ?volgnummer ORDER BY ASC(?track)
Credits voor een Track op een Carrier
Credits specifiek voor de track
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> SELECT DISTINCT ?carrier ?carrierLabel ?track ?trackcredit ?trackcreditLabel (GROUP_CONCAT(distinct ?trackroleLabel; separator=",") AS ?trackroles) WHERE { kp:Q1296397 rdfs:label ?track FILTER(LANGMATCHES(LANG(?track), 'nl')) kp:Q1296397 kpp:P42 ?trackstatement. ?trackstatement kppq:P15 ?trackrole; kpps:P42 ?trackcredit. ?trackrole rdfs:label ?trackroleLabel. kp:Q1296397 kpt:P43 ?carrier. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?carrier ?carrierLabel ?track ?trackcredit ?trackcreditLabel
Credits voor de carrier
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> SELECT DISTINCT ?carrier ?carrierLabel ?track ?volgnummer ?carriercredit ?carriercreditLabel (GROUP_CONCAT(distinct ?carrierroleLabel; separator=",") AS ?carrierroles) WHERE { kp:Q1296397 rdfs:label ?track FILTER(LANGMATCHES(LANG(?track), 'nl')) kp:Q1296397 kpt:P43 ?carrier. kp:Q1296397 kpp:P43 ?carrierstatement. ?carrierstatement kppq:P38 ?volgnummer; kpps:P43 ?carrier. ?carrier kpp:P42 ?carriercreditstatement. ?carriercreditstatement kppq:P15 ?carrierrole; kpps:P42 ?carriercredit. ?carrierrole rdfs:label ?carrierroleLabel. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?carrier ?carrierLabel ?track ?volgnummer ?carriercredit ?carriercreditLabel
Credits voor het gebruikte werk
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> SELECT DISTINCT ?carrier ?carrierLabel ?track ?werkcredit ?werkcreditLabel (GROUP_CONCAT(distinct ?werkrollabel; separator=",") AS ?werkroles) WHERE { kp:Q1296397 rdfs:label ?track FILTER(LANGMATCHES(LANG(?track), 'nl')) kp:Q1296397 kpt:P43 ?carrier. kp:Q1296397 kpp:P43 ?carrierstatement. ?carrierstatement kppq:P38 ?volgnummer; kpps:P43 ?carrier. kp:Q1296397 kpt:P4 ?werk. ?werk kpp:P42 ?werkstatement. ?werkstatement kppq:P15 ?werkrol; kpps:P42 ?werkcredit. ?werkrol rdfs:label ?werkrollabel. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } GROUP BY ?carrier ?carrierLabel ?track ?werkcredit ?werkcreditLabel
Bands die samen concerten brachten
Hier bv. vanuit het perspectief van Ulrikes Dream:
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpt:<https://kg.kunsten.be/prop/direct/> PREFIX kpp:<https://kg.kunsten.be/prop/> PREFIX kppq:<https://kg.kunsten.be/prop/qualifier/> PREFIX kpps:<https://kg.kunsten.be/prop/statement/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT DISTINCT ?bandA ?bandALabel ?bandB ?bandBLabel WHERE { ?activiteit kpt:P13 kp:Q58533. ?activiteit kpt:P42 kp:Q601279. ?activiteit kpt:P42 ?bandA. ?activiteit kpt:P42 ?bandB. FILTER(?bandA != ?bandB) SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } }
Tijdslijn van activiteiten
#defaultView:Timeline PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpp:<https://kg.kunsten.be/prop/direct/> SELECT DISTINCT ?datum ?activiteitLabel WHERE { ?activiteit kpp:P42 kp:Q141532 ; kpp:P17 ?datum. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } } ORDER BY ?datum
Federated queries
Federated query to get GPS for musea in Flanders
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpp:<https://kg.kunsten.be/prop/direct/> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> SELECT DISTINCT ?agent ?agentLabel ?wikidata ?gps WHERE { ?agent kpp:P41 kp:Q157598. # entities that are of type museum for contemporary art in flanders ?agent kpp:P75 ?wikidata. BIND(URI(CONCAT(STR(wd:), ?wikidata)) AS ?wd) SERVICE <https://query.wikidata.org/sparql> { ?wd wdt:P625 ?gps. } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } }
Federated query to get a map of participatory art organisations in Flanders
PREFIX kp:<https://kg.kunsten.be/entity/> PREFIX kpp:<https://kg.kunsten.be/prop/direct/> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX wdt: <http://www.wikidata.org/prop/direct/> SELECT DISTINCT ?agent ?agentLabel ?wikidata ?gps WHERE { ?agent kpp:P41 ?agenttype. FILTER(?agenttype IN (kp:Q1581534, kp:Q1581551, kp:Q1581565)). OPTIONAL { ?agent kpp:P75 ?wikidata. BIND(URI(CONCAT(STR(wd:), ?wikidata)) AS ?wd) SERVICE <https://query.wikidata.org/sparql> { OPTIONAL { ?wd wdt:P625 ?gps }. } } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en" . } }