Friday, March 4, 2011

From Typed Links to Annotations in Ancient Geography

I've been participating in the discusions of the Pelagios Project's plans to establish semantic web/linked data conventions for linking geographic information in the ancient world. is listed as a partner and it's a good group of people who are coming together to think about the issue.

As always, the individuals and projects involved don't want to re-invent the wheel. And, also as always, some new work - even if it's just establishing a domain-specific use for existing standards - is necessary. That last is what I'm thinking about right now.

I mean the title of this post to establish an axis of complexity when it comes to relating a web-based resource to a geographic entity. A "typed link" is basically plain-old HTML with a little bit of RDF-sugar to say that the end-point is a geographic entity. I've already spoken about doing this in earlier posts. Here, let me start with the RDF/Turtle:

@prefix dcterms: <> .
@prefix geo: <> .
@prefix powder: <> .
@prefix rdfs: <> .

[] a dcterms:Location,geo:SpatialThing;
powder:describedby <>;
rdfs:label "Rome" .
This is the RDFa:

<a href="" typeof="dcterms:Location geo:SpatialThing" rel="powder:describedby" property="rdfs:label">Rome</a>

Again, that's pretty simple html that adds a little in-place information that the link is to a geographic entity that is defined at a particular URL. There are many tools that can parse that link and do interesting things like show a map. Hence the term I'm using here, "typed link". And I include as an "interesting thing" the now prosaic ability of a user to click on that link when it's rendered by a browser. Human readable and machine actionable. Win, win.

To be clear, with this post I am suggesting to my Pelagios colleagues that we use this or a similarly "light-weight" convention for the simple case of a link to a geographic entity. And yes, I don't mind if you use dcterms:Location, geo:SpatialThing or both. Those are the most widespread RDF Classes for indicating that a resource is a geographic entity.

An "annotation" is something different. The source document is trying to say something about the geographic entity. In this case, consensus seems to be building around the Open Annotation Consortium. That's a good thing on the "use existing work" principle. This time I'll start with a sentence: "Rome was the capital of the Roman Empire". Trivial, I know, but the point is to focus on the markup.

In RDF/Turtle, I want to say something like:

@prefix dcterms: <> .
@prefix geo: <> .
@prefix oac: <> .
@prefix rdfs: <> .

_:oacEx a oac:Annotation ;
oac:hasTarget <>;
oac:hasBody “was the capital of the Roman Empire” .

# choose one or both of dcterms:Location or geo:SpatialThing
<> a dcterms:Location, geo:SpatialThing ;
rdfs:label "Rome" .

The top level concept is oac:Annotation , a class that encapsulates the relationship between a body (the thing annotating) and a target (the thing annotated). This RDF/Turtle basically says "There's a location 'Rome' that 'was the capital of the Roman empire'. In RDFa, that's:
<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns:dcterms=""
<span id="annotation1" typeof="oac:Annotation" about="#annotation1" >
<a rel="oac:hasTarget" href="">Rome</a> <span property="oac:hasBody">was the capital of the Roman Empire.</span>
<span style="display:none" about="" typeof="dcterms:Location geo:SpatialThing"></span>

This is a first crack at the RDFa so note the 'hidden' span that says the Pleiades URI is a dctermsLocation/geo:SpatialThing. I'm guessing I or somebody else can do better than that.

But the real point of this post is to propose that ladder of complexity. Use a combination of 'powder:describedby' along with dcterms:Location and/or geo:SpatialThing when that will suffice. Open Annotation is for more complex situations. Reactions?

No comments: