PLEA FOR RELATIVE URIs
Many systems, including most of the ones I have built and use day to day,
have many internal relative links but really are better
built without a knowledge of their own base URI, in that stored URIs
are always relative. Even if the software absolutizes them
in processing them, as there are no absolute URIs for the local identifiers
one can take a system such as a bug tracker and clone it easily to make
a new copy of the same system.
For example, issue tracking system, a calendar system, build with RDF
are interesting to clone.
This is not to say all systems are like this, but some are and they are an important
For example one project I have a bunch RDF and rules, where there are
locally defined instances and local ontologies, and I process it
in file:// space much of the time, and browse it in http://
space though a web server, but when I edit it the http space
is actually proxies to a read-write-linked-data server on a different port.
With Jena serializes, suddenly the URI of the slave server behind the proxy
crops up in the files.
All the URIs within the system are relative.
Attempting to introduce Jena-based code to this system is currently blocked
on the need for this bug to be resolved in Jena.
For this reason, for example cwm's serializers use relative URIs, and even the
RDF/XML one has an option to put relative URIs in namespaces.
The rdflib.js library from Tabulator uses relative URIs by default.
Yes, yjere are cases when people want to design systems without this properties,
so absolute URIs should be an option.
Note other reasons for relative URIs include readability, and storage space and transmission length.
There is a classic failure mode for RDF systems in which
developers bring up a system on test.acme.com and then move it to production.acme.com
and everything breaking. I know there are cases for absolute URIs but the relative URIs are
very important best practices.
PS: This sort of RDF system is like writing program or set of programs
Imagine writing a program
pi = 3.14159265359;
print (2 * pi);
an it being saved in circles.py as
<file:///users/andys/programs/play/circles.py#pi> = 3.14159265359;
print (2 * <file:///users/andys/programs/play/circles.py#pi>);
Not practical, not the sort of thing you can copy and move around.