Gebruik van programmeertaal
Incorporeer onze data in je eigen applicatie
In deze tutorial leggen we je uit hoe je ons endpoint kunt gebruiken vanuit je eigen applicatie en favoriete programmeertaal.
SPARQL Tutorial
Doel van deze module
Na deze module, stap 4 van de tutorial, kun je aan je collega’s uitleggen:
- Hoe je een SPARQL endpoint kunt benaderen met Python
- Hoe dit zich vertaald naar andere programmeertalen
Bevragen van een SPARQL endpoint middels HTTPS
SPARQL endpoint zijn te benaderen volgens het HTTPS protocol. Zo kun je de resultaten simpelweg opvragen met een GET operatie.
GET https://api.labs.kadaster.nl/datasets/kadaster/kg/services/default/sparql?query=<query>
Alternatief kan de query ook als parameter in de body van een POST request worden bijgevoegd.
Onze SPARQL endpoints accepteren de volgende Accept headers:
- application/json (standaard)
- application/sparql-results+xml
- application/sparql-results+json
- text/csv
Bevragen van ons SPARQL endpoint middels Python
Een SPARQL endpoint is op basis van praktisch iedere programmeertaal te benaderen. In de meeste talen zijn er al standaard libraries ontwikkeld waarmee een SPARQL endpoint gemakkelijk bevraagt kan worden. Neem bijvoorbeeld python. Daar kunnen we gebruik maken van de open library sparqlwrapper. Begin door deze library te installeren.
pip install sparqlwrapper
Wanneer de library is geïnstalleerd kunnen we hem toepassen. Neem een query en sla deze op als .rq (de officiële file extension voor SPARQL files) of neem de query rechtstreeks als string op in je code. Daarna kun je het endpoint een request sturen. Middels returnFormat (een wrapper om de accept-header) kun je bepalen in welk formaat (Bijv. JSON, XML, CSV) je de gegevens wil ophalen.
from SPARQLWrapper import SPARQLWrapper, JSON
if __name__ == "__main__":
query = """
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX sdo: <https://schema.org/>
PREFIX bag: <https://bag2.basisregistraties.overheid.nl/bag/def/>
PREFIX wkb: <https://data.labs.kadaster.nl/cbs/wbk/vocab/>
PREFIX typeGebouw: <https://brt.basisregistraties.overheid.nl/brt/id/typeGebouw/>
SELECT ?naamWoonplaats ?buurtNaam ?polygon (MIN(?naamPlace) as ?adres) (SUM(?oppervlakte) as ?totaleOppervlakte)
WHERE { ?woonplaats a sdo:AdministrativeArea ;
sdo:additionalType bag:Woonplaats ;
sdo:name "Rotterdam"@nl ;
sdo:name ?naamWoonplaats;
sdo:containsPlace ?places .
?places sdo:name ?naamPlace ;
sdo:dateCreated ?bouwjaar ;
sdo:floorSize ?oppervlakte ;
sdo:geo ?geoObjects;
sdo:additionalType typeGebouw:politiebureau.
?geoObjects a sdo:GeoShape ;
sdo:name "BRT geometrie" ;
sdo:polygon ?polygon .
?buurtVanPlace sdo:containsPlace ?places ;
sdo:additionalType wkb:Buurt ;
sdo:name ?buurtNaam .
}
GROUP BY ?naamWoonplaats ?buurtNaam ?polygon
ORDER BY ASC(?buurtNaam)
LIMIT 200
"""
ENDPOINT = "https://api.labs.kadaster.nl/datasets/kadaster/kg/services/default/sparql"
wrapper = SPARQLWrapper(ENDPOINT, returnFormat=JSON)
wrapper.setQuery(query)
results = wrapper.query().convert()