Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

XQuery/DBpedia with SPARQL - Stadium locations

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

At the risk of being repetitious, here is another script which mashes up data from DBpedia with GoogleMaps, this time to show the location of all venues in a supplied Wikipedia Category of venues. Examples Football Venues in England kml GoogleMap Football Venues in Scotland kml GoogleMap Script (: This accepts a category of stadiums and generates a kml map of all stadiums :) declare namespace r = "http://www.w3.org/2005/sparql-results#"; declare variable $query := " PREFIX p: <http://dbpedia.org/property/> PREFIX skos: <http://www.w3.org/2004/02/skos/core#> PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT * WHERE {?ground skos:subject <http://dbpedia.org/resource/Category:Football_venues_in_England>. ?ground geo:long ?long. ?ground geo:lat ?lat. ?ground rdfs:label ?groundname. OPTIONAL {?ground foaf:depiction ?image .}. OPTIONAL {?club p:ground ?ground. ?club rdfs:label ?clubname . FILTER (lang(?clubname) = 'en')}. OPTIONAL {?ground foaf:page ?wiki.}. FILTER (lang(?groundname) ='en'). } "; declare function local:execute-sparql($query as xs:string) { let $sparql := concat("http://dbpedia.org/sparql?format=xml&default-graph-uri=http://dbpedia.org&query=", encode-for-uri($query) ) return doc($sparql) }; declare function local:sparql-to-tuples($rdfxml) { for $result in $rdfxml//r:result return <tuple> { for $binding in $result/r:binding return if ($binding/r:uri) then element {$binding/@name} { attribute type {"uri"} , string($binding/r:uri) } else element {$binding/@name} { attribute type {$binding/@datatype}, string($binding/r:literal) } } </tuple> }; declare option exist:serialize "method=xhtml media-type=application/vnd.google-earth.kml+xml highlight-matches=none"; let $category := request:get-parameter("category","Football_venues_in_England") let $queryx := replace($query,"Football_venues_in_England",$category) let $result:= local:execute-sparql($queryx) let $tuples := local:sparql-to-tuples($result) let $x := response:set-header('Content-disposition','Content-disposition: inline;filename=stadiums.kml;') return <Document> <name>{replace($category,"_"," ")}</name> <Style id="stadium"> <IconStyle> <Icon><href>http://maps.google.com/mapfiles/kml/shapes/ranger_station.png</href> </Icon> </IconStyle> </Style> { for $groundid in distinct-values($tuples/ground) let $groundTuples := $tuples[ground=$groundid] let $ground := $groundTuples [1] let $name := string($ground/groundname) let $lat := xs:decimal($ground/lat) let $long := xs:decimal($ground/long) let $clubs := string-join($groundTuples/clubname,", ") let $wiki := string($ground/wiki) let $description := <div> Ground of {$clubs} {if ($ground/image) then (<br/>,<img src="{$ground/image}"/>) else () } <br/> <a href='{$groundid}'>DBpedia</a> <a href='{$wiki}'>Wikipedia</a> <a href="http://images.google.co.uk/images?q=stadium+{$name}">Google Images</a> </div> return <Placemark> <name>{$name}</name> <description> {util:serialize($description,"method=xhtml")} </description> <Point> <coordinates>{concat($long, ",",$lat,",0")}</coordinates> </Point> <styleUrl>#stadium</styleUrl> </Placemark> } </Document>