In OxPoints – Providing geodata for the University of Oxford I told you about the old OxPoints system which is currently providing geolinking information for the University of Oxford and talked about what is wrong with it and why we want to start from scratch to create a new OxPoints.
Before we start talking about solutions let’s start off by defining what we want the new system to look like:
As we have seen, the old OxPoints system stores geo- and some additional information (such as for example images and postal addresses) on all 38 colleges and the other important university entities. It is able to export its information as KML (an XML based language for expressing geographic annotations) which can be imported into, for example, Google Maps or Google Earth. A simple frontend allows users to query the data and display the results directly in either Google Maps or Google Earth, or as KML.
But even though it wouldn’t tell you, the old system is already a bit more powerful than that. Let’s have a look at a typical OxPoints record like the one on Blackfriars:
<place type="college" xml:id="blac"> <placeName>Blackfriars</placeName> <event when="1221" type="officialstatus"> <label>Foundation</label> </event> <event when="1921" type="officialstatus"> <label>refounded</label> </event> <location type="address"> <address> <addrLine>Blackfriars Priory, Oxford</addrLine> <postCode>OX1 3LY</postCode> </address> </location> <trait type="url"> <desc> <ptr target="http://www.bfriars.ox.ac.uk/"/> </desc> </trait> <place subtype="primary" type="building"> <placeName>Lodge</placeName> <location when="2007-05-22T11:50:22.34+01:00"> <geo rend="90">-1.2603700160980225 51.756916532903084</geo> <note> recorded by Janet McKnight</note> </location> </place> </place>
In lines 3 and 6 we see two event-tags. These tell us that Blackfriars was founded in 1221 and refounded 700 years later in 1921. Although the data is there, the system does not allow you to query for it (unless of course you bother to take a look at the XML directly). However, if this data was queriable this would already allow for some cool applications like creating historic maps (“Show all colleges that were present in 1600″) or even the creation of dynamic maps displaying the development of the University of Oxford over time.
The minimum requirements for the new OxPoints system are therefore:
- Have all the information of the old system, and
- allow for the information that was in the old system but that was not queriable to be queried.
But we do not want to stop here. As I have described in OxPoints – Providing geodata for the University of Oxford we would like to model usage of buildings and rooms. That is, to be able to say which rooms and buildings are used by which university entity. We want to store more events, like construction dates for buildings or when they were purchased by the university. And finally, we want to be able to model any kind of complex relationship between all entities stored in OxPoints (buildings, rooms, places etc. and colleges, units, research projects, departments etc.) and not just to reflect the current state (as in: “The University of Oxford consists of 38 colleges”) but to reflect it over time (as in: “In 1300 the University of Oxford consisted of 3 colleges: University College, Balliol, and Merton”). And while we’re at it, why shouldn’t it be possible for others to store data on entities stored in OxPoints in such a way that it can be easily mashed up? Well, since we do not know and we think this would be rather cool, we want to provide for it.
At first, the problem sounds as if a rather simple relational data model might be sufficient. Have one table for places, one for units and then a couple of relationship tables. But what if we want to add new relationship types in a year’s time that we have not yet thought of? And how are we going to handle the time dimension? And how is this data to be mashed up?
Using relational data models always feels like we have to predetermine either too much or too little which would probably result in changing the data model quite frequently (for each new relationship that we want to model), or in having a very loose schema which would make querying it a very tedious task.
After trying different relational approaches, not being happy with any of them, we took one step back and thought about a completely different approach. What we want to do is to make assertions on entities (A college was founded in, The name of a building is, etc.); which is, when you think about it, exactly what the Semantic Web is about.
The idea behind the Semantic Web is to make all information on the web, which at the moment mostly comes in the form of simple text documents, machine-readable by using technologies such as RDF (Resource Description Framework) or OWL (Web Ontology Language). RDF and OWL were developed and are maintained by the W3C (World Wide Web Consortium) and provide means to describe resources (anything that can be uniquely identified) in a subject, predicate, object kind of way. A simple RDF triple could look like this:
oxp:college_123 oxp:hasName "Balliol" .
In plain English this could mean: “The resource identified by oxp:college_123 has a property called oxp:hasName and the property’s value is Balliol”.
We believe that Semantic Web technologies offer us almost everything we need for the new OxPoints system, and hence, we plan to go ahead with it. Before getting into any implementation details and problems I will give you (and me, since I am also rather new to the Semantic Web :-} ) an introduction to RDF, OWL and maybe some other related technologies.
I hope to see you back soon and I am, as always, happy for comments.