Semantic Web Developer Map: representing locations of people, research groups and projects

Author: Libby Miller, 2003-04-22

Contents

SWAD-Europe postcard showing
locations of Semantic Web developers in Europe
  1. Introduction
  2. Examples
    1. A person's nearest airport
    2. A group's nearest airport
  3. More examples
  4. Making your file known
  5. Tools
  6. Sample queries, visualizations and data
  7. Thanks to...
  8. References

Note

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.

Introduction

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.

Status and Issues

See the (editable) SemanticWebDeveloperMap document in the ESW Wiki for info on status, issues and work in progress.

Examples

Example 1: person's nearest airport (rdf)

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> 

Explaining the markup

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.

foaf:mbox_sha1sum

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:libby.miller@bristol.ac.uk"/> could be used where hiding email addresses is not a concern.

Generating the hashes

Java and perl code fragments are provided which can be used to generate the hashes. Morten Frederiksen has an online converter, as does Bill Kearney and also Leigh Dodds (the last two are javascript).

Email addresses as identifying keys for people

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.

foaf:name

A name for some thing. A proposal for more detailed name properties.

foaf:workplaceHomepage

A workplace homepage of some person; the homepage of an organization they work for.

foaf:projectHomepage (experimental)

A project homepage of some person; the homepage of a project they work on; a replacemen for foaf:currentProject.

foaf:interest

A page about a topic of interest to this person.

foaf:made

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.

nearestAirport

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, airport:iataCode, airport:icaoCode

airport:Airport is a class from the DAML aiport ontology. airport:iataCode, airport:icaoCode, are identifiers for airports from the same ontology.

pos:lat, pos:long

Latitude and longitude from the RDF Geo Vocabulary: Point/lat/long/alt as described at the RDFIG Geo vocab workspace.

Example 2: A group's nearest airport (rdf)

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> 

Explaining the markup

foaf:homepage

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.

foaf:Group (experimental)

A group. See below for an exlanation of the deliberate vagueness of this definition.

foaf:groupHomepage (experimental)

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.

More examples

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.

Making your file known

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.

Tools

Creating sha1 hashes of email addresses

Morten Frederiksen has an online converter, as does Bill Kearney and also Leigh Dodds (the last two are javascript).

Java, perl code fragments for generating sha1 hashes.

javac JavaSha1.java
java JavaSha1 "mailto:libby.miller@bristol.ac.uk"
289d4d44325d0b0218edc856c8c3904fa3fd2875

./PerlSha1.pl "mailto:libby.miller@bristol.ac.uk"
289d4d44325d0b0218edc856c8c3904fa3fd2875
Airport code lookups lookup

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.

lat/long lookup

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).

Sample queries, visualizations and data

Sample data

Example RDF data on ILRT, W3C, HP, ILRT, W3C and HP in one file.

SVG demos

Jim Ley has an SVG map of foaf data. I've extended Jim's work a little, to visualize this form of RDF url using client side SVG and javascript (uses Jim Ley's javascript RDF parser and api - may not work in some SVG clients - uses Adobe extensions):

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.

'Squish' RDF queries

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

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.

References

SWAD-Europe project
SWAD-E workpackage 3
Wp3 notes
ESW wiki
GeoInfo
GeoUrl
Space namespace
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
foaf namespace
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.