Skip to content


More on defining patterns in RDF

Having looked a bit more at foaf:PersonalProfileDocument I am now not sure if the best way to indicate a pattern in RDF is by adding an attribute to a URI or to the document which described that URI.

The problem I’m trying to solve, by the way, is that we are about to see a proliferation of organisations and events publishing Open Linked Data. This will be far more useful if the organisation can publish a description of what standard datasets it makes available. For each dataset there are two key ways to describe it, both valuable. One is to say what information it contains and the other is the way in which that information is structured.

My initial thought was that this should be done via semantics attached to the URI for an organisation (or other entity). eg.

 <data.example.ac.uk/ExampleUni> <rdf:type> <foo:OpenOrg> .

After having slept on it I think the above is probably wrong. It feels wrong. For the eprints:Repository example wasn’t too bad, but for  other things it feels a bit off attaching publishing pattern information to the entity. Looking at foaf:PersonalProfileDocument I noticed it’s not a propety of the person, but rather the document. This makes a lot more sense. Having refined the previous idea, I am now imagining something like this next example as what you would reasonably expect from resolving the URI of a large organisation providing Open Linked Data.

<http://data.example.ac.uk/ExampleUni.rdf> rdf:type foo:OpenOrgDocument ;
  foaf:primaryTopic <http://data.example.ac.uk/ExampleUni> .
<http://data.example.ac.uk/ExmpleUni> rdf:type foaf:Organisation ;
  openorg:hasDataset <http://finance.data.example.ac.uk/dataset ;
  openorg:hasDataset <http://eprints.example.ac.uk/id/repository ;
  openorg:hasDataset <http://data.example.ac.uk/location .
<http://finance.data.example.ac.uk/dataset>
  rdf:type openorg:FinanceDataset ;
  rdfs:label "Example University Open Finances Data" .
<http://finance.data.example.ac.uk/dataset.rdf>
  rdf:type <http://unit4.co.uk/id/AgressoOpenFinanceDocument> ;
  foaf:primaryTopic <http://finance.data.example.ac.uk/dataset> .
<http://eprints.example.ac.uk/id/repository>
  rdf:type <http://eprints.org/ontology/Repository> ;
  rdfs:label "Example University EPrints Repository" .
<http://eprints.example.ac.uk/cgi/export/repository/RDFXML/repository.rdf>
  rdf:type <http://eprints.org/ontology/RepositoryDescriptionDocument> ;
  foaf:primaryTopic <http://eprints.example.ac.uk/id/repository> .
<http://data.example.ac.uk/location>
  rdf:type openorg:LocationDataset ;  
  rdfs:label "Example University Buildings Dataset" .
<http://data.example.ac.uk/location.rdf>
  rdf:type openorg:LocationsDescriptionDocument ;
  foaf:primaryTopic <http://data.example.ac.uk/location> .
...etc...

So here’s an example of why this is useful. If I’m going to visit Example Uni. I want to know where to drive to, and when I get there I want to know which public carpark is best for building X23. Given a tool that understands the “openorg:LocationsDescriptionDocument” and “foo:OpenOrgDocument” patterns, it can confidently find the building with X23 in the name and tell me the lat & long, plus look at the lat & long of all carparks, find the nearest and see if its got a postcode listed to give to my satnav. If it doesn’t it could get a postcode from some other webservice.

The most simple format for a document is one which includes all the information from the dataset in a single RDF document. Where it gets trickier is when the first document does not contain all the information available, but a standard pattern should at least make that easier. For example, if an org has too many buildings and locations to be listed in a single document then you could search for items which match a parameter.

  http://data.example.ac.uk/location?q=X23

…which would return RDF or HTML depending on the accept header. The key thing is to define some standard useful ways of publishing this stuff so people have some basic starting places.

Posted in RDF.


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.



Some HTML is OK

or, reply to this post via trackback.