Avoid Reification? Other "bad" features?

I've seen a few references online of features to avoid in RDF (reification, rdf:Alt), however, I have not seen a significant guide on why these features are to be avoided. Is there a guide available on RDF that gives a thorough treatment of features to avoid (and other features to use in their place)?

  • Don't use rdf:Bag

  • Don't use rdf:Seq unless you have a clear need to express the order of the information.

  • Don't use ugly URIs. (Use what TimBL calls "cool URIs")

  • Don't use bnodes unless you have a really good reason. The UUID approach to getting rid of unnamed nodes is good enough, but if the node clearly belongs to a specific "parent" URI then consider making it a #foo type URI so that it'll just resolve to the same document. For example: http://eprints.ecs.soton.ac.uk/id/eprint/18245#authors which identifies the authors rdf:Seq directly tied to that research paper, so it might as resolve to the same thing as http://eprints.ecs.soton.ac.uk/id/eprint/18245 ... An alternate solution is to mint a URI using existing data about something. For example, MD5-ing the name of an organisation to get a URI for it. It has the advantage that you can get the same URI each time without needing to "remember" it, but only do this if you can be sure that the same string will indicate the same thing within your system. This is not a good idea with peoples names, but works fine for, say, names of universities or publishers. Yes, two different spellings give different URIs, but it's still more semantically useful to have 3 URIs for something, then 300. Example: http://eprints.ecs.soton.ac.uk/id/x-org/982454d1b5cc5d2fd8e6feed9582efc8

  • Don't rely on anybody applying semantics to your triples. For titles, just use dc:title. Don't usemyspecialnamespace:title and trust someone will resolve your beautiful owl ontology to find out it's a subclass of dc:title

  • RDF+XML and RDFa are evil horrible formats, but sadly appear to be needed. When there's a human in the loop (debugging or writing examples), use nicely indented n3 with only using the features @prefix , ; . and "a". It's really hard to spot issues in RDF+XML. Compare http://eprints.ecs.soton.ac.uk/cgi/export/18245/RDFN3/ecs-eprint-18245.n3?mimetype=text/plain with http://eprints.ecs.soton.ac.uk/cgi/export/18245/RDFXML/ecs-eprint-18245.rdf (This may be just personal preference, but I think RDF+XML is a barrier to people understanding RDF)

As always it depends on your use but another feature that can cause more problems than it solves is the blank node. Whenever possible I try to use URIs instead of blank nodes as I've found it makes passing the data between repositories, testing, and reasoning easier. Sometimes though you need to create a resource on the fly. Typically a blank node is then used but I've found an alternate solution that works as well (though somewhat kludgy): generate a GUID and use it as the local name part with a namespace dedicated for that type of resource.