We now have a PDF Semantic Developer map of Europe, and an interactive SVG version. Further versions will be published as more developers appear on the map.
The purpose of this document is to write up a simple way of including geographical markup in RDF files for the purposes of mapping the locations of Semantic Web developers, researchers, groups and projects. It is written in the spirit of showing what can be done and provoking discussion rather than arguing that there is one correct way to do it, although the aim is also to persuade people and groups to create data. Here the relationships are not specified in much detail - instead the focus is on specifying identifying characteristics of these things such as airport codes, email addresses, homepages, to make tools that answer useful questions such as
Jump straight to sample queries and visualizations to show some of the things that can be done with this kind of information, with SVG demos courtesy of Jim Ley.
One explicit aim is to provide the means to start to map the geographical location of Semantic Web researchers and groups. This forms part of the SWAD-Europe project's dissemination workpackage (WP 3). More information about WP3 and code fragments and RDF examples are available.
The eventual aim is to represent the location of people and groups more accurately using lat/long coordinates: however the nearestAirport usage has the advantages of
It is hoped that this simple case can be extended later. Work is continuing on ways of describing locations in RDF. See GeoInfo on the ESW wiki for more links and information.
See the (editable) SemanticWebDeveloperMap document in the ESW Wiki for info on status, issues and work in progress.
Below is an example which describes the nearest airport to a person called Libby Miller. It links to the person's workplace's homepage and their project homepage, and an interest - the Semantic Web. It uses the foaf (friend of a friend) namespace among others. Using nearestAirport is a simple way of identifying a person's locality without being too specific. Airport codes and latitudes and longitudes are provided by Jim Ley (example query for Bristol airport). This is based on the DAML site airport lookup service, but differs in that it uses the RDF interest group geo vocab instead of the DAML airport-specific latitiude and longitide properties.
<rdf:RDF xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#" xmlns:airport="http://www.daml.org/2001/10/html/airport-ont#" xmlns:pos='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wordnet="http://xmlns.com/wordnet/1.6/" > <!-- example with hashed mailbox --> <foaf:Person> <foaf:mbox_sha1sum>289d4d44325d0b0218edc856c8c3904fa3fd2875</foaf:mbox_sha1sum> <foaf:name>Libby Miller</foaf:name> <foaf:workplaceHomepage rdf:resource="http://www.ilrt.bristol.ac.uk"/> <foaf:projectHomepage rdf:resource="http://www.w3.org/2001/sw/Europe/"/> <foaf:interest rdf:resource="http://www.w3.org/2001/sw/" /> <foaf:made rdf:resource="http://bla@@" /> <contact:nearestAirport> <airport:Airport rdf:about='http://www.daml.org/cgi-bin/airport?BRS'> <airport:iataCode>BRS</airport:iataCode> <airport:icaoCode>EGGD</airport:icaoCode> <pos:lat>51.383333333333</pos:lat> <pos:long>-2.7166666666667</pos:long> </airport:Airport> </contact:nearestAirport> </foaf:Person> </rdf:RDF>
Where these properties are in the foaf schema, definitions are taken from that page. Some properties and classes in foaf are experimental, and may not appear in the schema.
The sha1sum of the URI of an Internet mailbox associated with exactly one owner, the first owner of the mailbox.
In the example, the email address is hidden, using a one-way Sha1 hash. Markup such as <foaf:mbox rdf:resource="mailto:firstname.lastname@example.org"/> could be used where hiding email addresses is not a concern.
Hashed email addresses (or cleartext ones) are used as a key to identify individuals, which means that they cannot be ommitted. This is not to be confused with assigning uris to people:
This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox (from foaf homepage)
daml:unambiguousProperty is a different name for the same purpose as owl:inverseFunctionalProperty. Both foaf:mbox and foaf:mbox_sha1sum are owl:inverseFunctionalProperty and daml:unambiguousProperty.
A name for some thing. A proposal for more detailed name properties.
A workplace homepage of some person; the homepage of an organization they work for.
A project homepage of some person; the homepage of a project they work on; a replacemen for foaf:currentProject.
A page about a topic of interest to this person.
Something that was made by this agent. rdfs:seeAlso is another alternative for pointing to more information, and is commonly used for pointing to RDF files.
Does what it says on the pack; it should be an airport with an IATA code.
There are a number of difficulties with using the nearestAirport property for connecting people and locations. for example:
The ideal thing would be to have nearestAirport (or some other measure of geographical location) of something that doesn't usually move around, for example, a building. However, nearestAirport is useful, connecting two identifiable things: a person (identified by their hashed mailbox) and a location (identified by the IATA and ICAO codes). This usefulness means that it is worth making this data available, despite issues with the way it is modelled. There are interesting questions that could be answered by such data, along the lines of
Work is ongoing on representing travel arrangements and journeys: see the ESW wiki GeoInfo page.
airport:Airport is a class from the DAML aiport ontology. airport:iataCode, airport:icaoCode, are identifiers for airports from the same ontology.
Latitude and longitude from the RDF Geo Vocabulary: Point/lat/long/alt as described at the RDFIG Geo vocab workspace.
An aim of this work was to be able to identify machine readable outputs of groups, projects or individuals working on the Semantic Web. Identifying the RSS channels of groups, projects or individuals would be a cheap way to find out what is going on where, and answer questions like:
Describing groups and their relationships to organisations, people and projects is not straightforward. Here, the focus is on identifying things: people, places, projects, groups and organisations, and not describing the detail of the relationships between them.
<rdf:RDF xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#" xmlns:airport="http://www.daml.org/2001/10/html/airport-ont#" xmlns:pos='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wordnet="http://xmlns.com/wordnet/1.6/" > <!-- example with group and homepage. some groups won't have a nearest airport either... --> <foaf:Group> <foaf:homepage rdf:resource="http://ilrt.org/discovery/"/> <foaf:interest rdf:resource="http://www.w3.org/2001/sw/" /> <foaf:name>ILRT Semantic Web Group</foaf:name> <foaf:made rdf:resource="http://ilrt.org/discovery/2003/03/rss/2003.rss" /> <foaf:made rdf:resource="http://ilrt.org/discovery/2003/03/rss/2002.rss" /> <foaf:made rdf:resource="http://ilrt.org/discovery/2003/03/rss/2001.rss" /> <foaf:made rdf:resource="http://ilrt.org/discovery/2003/03/rss/2000.rss" /> <contact:nearestAirport> <airport:Airport rdf:about='http://www.daml.org/cgi-bin/airport?BRS'> <airport:iataCode>BRS</airport:iataCode> <airport:icaoCode>EGGD</airport:icaoCode> <pos:lat>51.383333333333</pos:lat> <pos:long>-2.7166666666667</pos:long> </airport:Airport> </contact:nearestAirport> </foaf:Group> <!-- a person in the group (one of many) --> <foaf:Person> <foaf:mbox_sha1sum>289d4d44325d0b0218edc856c8c3904fa3fd2875</foaf:mbox_sha1sum> <foaf:name>Libby Miller</foaf:name> <foaf:workplaceHomepage rdf:resource="http://www.ilrt.bristol.ac.uk"/> <foaf:projectHomepage rdf:resource="http://www.w3.org/2001/sw/Europe/"/> <foaf:groupHomepage rdf:resource="http://ilrt.org/discovery/" /> <foaf:interest rdf:resource="http://www.w3.org/2001/sw/" /> </foaf:Person> </rdf:RDF>
A homepage for some thing.
Where a person is identified by their personal email address, a group has one or more homepages. foaf:homepage is an owl:InverseFunctionalProperty, like mbox and sha1_mbox.
A group. See below for an exlanation of the deliberate vagueness of this definition.
A group homepage of some person; the homepage of a group they work with. See some examples of how it might be used. In some cases it is difficult to distinguish between a group and a project.
Notice that the person is connected to the group only in this way:
Group homepage http://ilrt.org/discovery/ Person groupHomepage http://ilrt.org/discovery/
Here we have explictly described the Group as a thing, because we want to say more about it, for example where it is located (roughly), and the RSS feeds it produces (foaf:made). Note that a Person has a projectHomepage, a group does not have a projectHomepage. This is because ambiguities are introduced if we do the latter: not every member of a group may be working on a certain project.
The detailed relationships between organisations and groups within them and the projects they do can be very complex. These have been ommitted in the example above, but the example can be extended to use ontologies or vocabularies that do describe the relationships.
The notion of a group is itself a tricky thing to define, e.g. Danbri's description of the handling of groups in foaf. The Aktors portal ontology defines a number of useful concepts. An Affiliated-Person is connected to an Organization via an affiliated-person property. A project-involves-organization-unit property connects Project and Organization Unit. Has-sub-unit connects Organization and Organization-Unit.
As an example we might have
Organization-Unit ILRT has-sub-unit Semantic Web Group; Semantic Web Group affiliated-person Libby Miller; Semantic Web Group nearestAirport BRS; Project SWAD-Europe project-involves-organization-unit Semantic Web Group.
A worked-through example is available on the ESW wiki SemanticWebDeveloperMap page.
The cyc vocabulary also contains thousands of useful concepts including concepts enabling the descrition of times and places (for example cyc geography vocab) and their relationships with great precision. An example of using the cyc ontology for people, places and times.
There is a great deal of work going on in similar areas, for example about the best ways of connecting addresses to points and areas using GPS coordinates: the ESW wiki GeoInfo page has lots of links, and the ESW wiki GeoVcard page has some examples using the space namespace and the lat/long vocab.
There is a page on the wiki called AnRdfHarvesterStartingPoint that allows you to link to your RDF file. It is based on Leigh Dodd's suggestion for a FOAFBulletinBoard.
Java, perl code fragments for generating sha1 hashes.
javac JavaSha1.java java JavaSha1 "mailto:email@example.com" 289d4d44325d0b0218edc856c8c3904fa3fd2875 ./PerlSha1.pl "mailto:firstname.lastname@example.org" 289d4d44325d0b0218edc856c8c3904fa3fd2875
These examples use Jim Ley's airport IATA code serivce (example query for BRS), based on Airport IATA and ICAO codes lookup from Mike Dean.
GeoURL's resources page is the best place to look for ways of finding out non-airport locations (for example post and zip codes, streetnames, cities).
Example RDF data on ILRT, W3C, HP, ILRT, W3C and HP in one file.
Visualize an RDF url using server side java and an RDF database
and SVG (uses inkling query
system; the SVG code is based as before on Jim Ley's code ):
view SVG, see query used.
Query: find me the locations of any thing or person with an interest in the semantic web.
Query: find me things made by any thing or person with an interest in the semantic web.
Query: find people in groups interested in the Semantic Web [note: using this simple query language (BNF) we can't find location in one query as some groups don't have a location and some people don't - so we can only find the locations of people or groups].
Query: find people who are in two groups who have an interest in the Semantic Web (note that this uses an experimental 'ne' constraint).
Thanks in particular to Dan Brickley for many comments and Jim Ley for SVG visualizations. This document draws on many different sources of information, including many links from the ESW wiki on GeoInfo; also GeoUrl, Space namespace, lat long vocab page and workspace, kind help from people on the #foaf and #rdfig IRC channels, the nearestAirport examples used by Jim Ley's code, and as discussed on the webont working group mailing list and as written up in Eric Vitiello's weblog.
SWAD-E workpackage 3
lat long vocab page
#foaf IRC channel
#rdfig IRC channel
Jim Ley's SVG nearest airport viewer
webont working group mailing list
DAML airport code lookup
GeoInfo Wiki page
$Log: intro.html,v $ Revision 1.31 2003/06/11 18:20:14 lmiller link checking Revision 1.30 2003/05/17 20:52:03 lmiller tidying up Revision 1.29 2003/05/17 20:33:28 lmiller updated site to show postcard Revision 1.28 2003/04/26 11:48:20 lmiller fixing html Revision 1.27 2003/04/26 11:05:51 lmiller fixed link to jim's site Revision 1.26 2003/04/25 22:10:31 lmiller small edits Revision 1.25 2003/04/23 21:14:27 lmiller adding notes about properties and classes used Revision 1.24 2003/04/22 15:28:01 lmiller fixed RDF buglets Revision 1.23 2003/04/22 15:03:21 lmiller fixed example RDF Revision 1.22 2003/04/22 14:51:12 lmiller tidied up, added examples and queries Revision 1.21 2003/04/21 12:53:50 lmiller moved to foaf:name, added an all groups file Revision 1.20 2003/04/21 12:45:24 lmiller added condepiction link Revision 1.19 2003/04/18 18:10:14 lmiller added another query Revision 1.18 2003/04/18 17:52:05 lmiller corrected urls Revision 1.17 2003/04/18 17:32:05 lmiller added some queries Revision 1.16 2003/04/18 13:12:53 lmiller adding queries Revision 1.15 2003/04/17 16:39:08 lmiller typos Revision 1.14 2003/04/17 12:31:22 lmiller tidying, clarifying Revision 1.13 2003/04/15 15:01:25 lmiller tweaking Revision 1.12 2003/04/15 14:56:09 lmiller typos Revision 1.11 2003/04/15 12:30:10 lmiller tidying Revision 1.10 2003/04/14 15:52:44 lmiller typos and other small ommissions Revision 1.9 2003/04/14 15:34:49 lmiller updated to add groups, and a link to http://esw.w3.org/topic/AnRdfHarvesterStartingPoint. Now I need to check out that the group thing is plausible Revision 1.8 2003/04/08 13:58:31 lmiller cleaned up: removed lat/long to esw.geoVcard. added projects. added interests. Revision 1.7 2003/04/07 21:25:18 lmiller added morten's online sha1 converter Revision 1.6 2003/04/07 21:14:38 lmiller added author Revision 1.5 2003/04/07 21:11:04 lmiller status, changed currentProjectHomepage to projectHomepage Revision 1.4 2003/04/07 14:51:09 lmiller typo Revision 1.3 2003/04/07 14:49:11 lmiller typo Revision 1.2 2003/04/07 14:44:17 lmiller updated intro.html - references, exmaples, tools.