March 28, 2009
Sensible Linked Data URI Patterns
[Before we get into the meat of this blog entry, I want to assert that the relationship between Linked Data and domain modeling patterns are more important than URI patterns. The explanation for this jumble of words will need to wait for another day, though.]
For now, let's imagine that a single easy set of URI patterns for Linked Data can be prescribed for arbitrary use cases. (Hash URIs for Real World Objects are considerably less functional, so they are ignored in this analysis.) These are the most important patterns:
http://{domainName}/{className}/{instanceName} (Real World Object identifier returning a 303 redirect to...)
http://(domainName}/{className}/{instanceName}/ (Generic Document identifier that negotiates a representation identified by...)
http://{domainName}/{className}/{instanceName}/{operationName} (Web Document that contains information about the Real World Object.)
Here are some examples that we can compare with alternatives:
domainName = www.example.com
className = Person
instanceName = alice
operationName = about.html and foaf.rdf
http://www.example.com/Person/alice (Real World Object)
http://www.example.com/Person/alice/ (Generic Document)
http://www.example.com/Person/alice/about.html (Web Document)
http://www.example.com/Person/alice/foaf.rdf (Web Document)
Compare these for sensibility, hackability and extensibility to the equivalent examples used in the Cool URIs for the Semantic Web document:
http://www.example.com/id/alice (Real World Object)
http://www.example.com/doc/alice (Generic Document)
http://www.example.com/doc/alice.html (Web Document)
http://www.example.com/doc/alice.rdf (Web Document)
The use cases for the truncated forms of these alternative patterns don't align, but if we examined them closely I think most people would agree that the former pattern has superior discoverablility capabilities. These URI patterns aren't adequate for use cases like searching the Person class or discovering the set of available classes, but they cover the basics.
There is a connection with domain modeling here, but that explanation will have to wait for another day also.
0 comments so far