För att skapa en karta över alla glasbruk med SPARQL, behöver du data med geografisk information för varje glasbruk. Om du har den informationen kan du använda följande SPARQL-fråga för att hämta data och plotta dem på en karta:
rubyPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX schema: <http://schema.org/>
SELECT ?name ?lat ?long WHERE {
?glassFactory rdf:type schema:ManufacturingPlant ;
schema:industry "Glass" ;
schema:name ?name ;
geo:lat ?lat ;
geo:long ?long .
}
Detta kommer att hämta alla fabriker som har typen schema:ManufacturingPlant
, är av industrin "Glass", och har en namn, latitude, och longitud definierad. Om du sparar resultatet i en CSV-fil kan du använda en karta-mjukvara för att plotta punkterna på en karta, som till exempel Google Maps, Leaflet eller OpenStreetMap.
Om du vill ha en karta direkt i SPARQL-resultaten, kan du lägga till ytterligare en rad som anger datatypen för lat
och long
och använda ST_AsText
för att hämta en textrepresentation av geopositionen. Till exempel:
csharpPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX schema: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT ?name ?lat ?long WHERE {
?glassFactory rdf:type schema:ManufacturingPlant ;
schema:industry "Glass" ;
schema:name ?name ;
geo:lat ?lat ;
geo:long ?long .
FILTER (datatype(?lat) = xsd:decimal && datatype(?long) = xsd:decimal)
}
Sedan kan du använda geof:asWKT
för att konvertera positionen till en WKT-sträng, och geof:parseWKT
för att tolka WKT-strängen som en geometri. Slutligen kan du använda geof:asWKT
för att skapa en RDF-literal som representerar geometrin och lägga till det som ett nytt resultat i din SPARQL-fråga. Till exempel:
bashPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX schema: <http://schema.org/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT ?name ?lat ?long (geof:asWKT(geof:parseWKT(CONCAT("POINT(", ?long, " ", ?lat, ")"))) AS ?wkt) WHERE {
?glassFactory rdf:type schema:ManufacturingPlant ;
schema:industry
För att visa alla glasbruk i Wikidata med SPARQL kan du använda följande fråga:
rubySELECT ?factory ?factoryLabel ?location ?locationLabel ?country ?countryLabel
WHERE {
?factory wdt:P31/wdt:P279* wd:Q3263111 . # hitta alla instanser av glasbruk
?factory rdfs:label ?factoryLabel . # hämta namnet på glasbruket
FILTER (lang(?factoryLabel) = "sv") . # filtrera efter namn på svenska
OPTIONAL {
?factory wdt:P276 ?location . # hämta platsen för glasbruket
?location rdfs:label ?locationLabel . # hämta namnet på platsen
FILTER (lang(?locationLabel) = "sv") . # filtrera efter namn på svenska
OPTIONAL {
?location wdt:P17 ?country . # hämta landet för platsen
?country rdfs:label ?countryLabel . # hämta namnet på landet
FILTER (lang(?countryLabel) = "sv") . # filtrera efter namn på svenska
}
}
}
Denna fråga hämtar alla instanser av wd:Q3263111
, som representerar glasbruk i Wikidata. För varje glasbruk hämtas också dess namn (rdfs:label
) och plats (wdt:P276
). Om platsen finns, hämtas också landet (wdt:P17
). Slutligen används FILTER
för att filtrera resultaten på språket för de svenska namnen. Resultaten visas som en tabell med kolumnerna factory
, factoryLabel
, location
, locationLabel
och countryLabel
.
Observera att inte alla glasbruk i världen kan finnas i Wikidata och att informationen för vissa glasbruk kan vara ofullständig eller felaktig.