Xsparql is an easy method of using sparql queries with an xquery syntax. I thought I would give this a go with a data scrape from the schema.org markup on my own walks blog. The specific page I chose was The South West Coast Path - Marazion to Porthleven walk. I wasnt going to do anything complicated, just attempt to pull out the co-ordinates and names of the places featured in the walk posting.
First I needed an implementation of the xsparql specification, this I found at http://xsparql.deri.org/.
Then I needed an rdf source, this was created by scraping my blog posting mentioned above using Apache Any23 - Anything To Triples - Live Service Demo and requesting xml/rdf output which was saved as any23.org.rdf.
The xsparql code was then put together - it seemed to be white space sensitive in some instances and took a few attempts to get working. The code below was used and saved to a file named query.xs:
declare namespace place = "http://schema.org/Place/";
declare namespace geo = "http://schema.org/GeoCoordinates/";
<places>
{ for $Place $Name from <any23.org.rdf>
where { $Place place:name $Name }
order by $Name
return <place obj="{$Place}" name="{$Name}" >
{ for $Name $Geo $lat $long from <any23.org.rdf>
where { $Place place:geo $Geo.
$Place place:name $Name.
$Geo geo:latitude $lat.
$Geo geo:longitude $long}
return <geo>
<lat>{ $lat }</lat>
<long>{$long}</long>
</geo>
}
</place>
}
</places>
The implementation was then invoked with the following command line:
java -jar cli-0.5-jar-with-dependencies.jar query.xs -f result.xml
Which generateed the result document:
<places>
<place name="Marazion" obj="b0">
<geo>
<lat>50.118267</lat>
<long>-5.4776716</long>
</geo>
</place>
<place name="Porthleven" obj="b1">
<geo>
<lat>50.118267</lat>
<long>-5.4776716</long>
</geo>
</place>
<place name="Prussia Cove Smugglers" obj="b2">
<geo>
<lat>50.101272</lat>
<long>-5.4157501</long>
</geo>
</place>
<place name="St Michael's Mount" obj="b3">
<geo>
<lat>50.116836</lat>
<long>-5.4779291</long>
</geo>
</place>
</places>
Funky stuff!
No comments:
Post a Comment