Ah, the raw underbelly of the semantic web exposed for all to see. The semantic web is what you get when you let the Lisa Simpsons of the world run things. It all starts with a seemingly reasonable premise. We need unambiguous names for things and we need lots of them. Do we already have something for that? Sure DNS, and by extension URLs. So since I have my own namespace to work with I can come up with names all day without clashing with anyone else. But just a name is pretty opaque. It could be anything. How do I interrogate it and ask it what it is? Well, when you ask for an http url it returns you something. How about we have it return what it knows about itself. Ok, but now we have a problem. We have the thing, and some representation of that thing. I might have a URL that's supposed to represent you but the page that comes back has a mime type, size, etc and you are not 12Kb. So what do we do? No problem, we'll not really return anything, we'll do a 303 redirect or use fragment identifiers so the the url for the thing with the fragment is differers from the page without the fragment.

These things need to be as stable as possible because people are going to rely on them. Here's where the stupid starts creeping in. You can mutate the representation all you want but don't ever change the URL and everyone has a domain name right? oh, they don't... Ok, I'll make PURLs. A single domain name that will last until the end of time and I'll allow people to register a portion of the namespace and do redirects to their own domain and THAT can change without breaking things.

Why do these need to last until the end of time? I can make a URL that represents something, say the Mona Lisa, and you can mint your own URL to the exact same Mona List and if we want we can say that your URL is the same as my URL but that doesn't work really well so we'll just tell you to never change URLs. Then we have blank nodes. What's that you say? They're existential nodes. They're nodes that have no identity. But I thought the great thing about using URLs was that we can all have our own namespace? Well, that's tedious and sometimes we just don't care but if you do we can make them locally permanent through a process called Skolomization. They're just opaque URLs but they need to have structure. But I thought they were opaque? Sort of. We're going to have namespaces! You'll organize your data into hierarchical namespaces based on the URL. But I thought we were working with graphs? You are, but your labels and identifiers are hierarchical, but opaque.

Then we're going to use these identifiers, that can be arbitrarily long and random, in databases. Well, that sucks, so we'll just map them to something more reasonable and maintain a huuuuuge table and mostly ignore them locally, except where we can't. Then we'll have reasoning - except where we can't - and we'll pile our house of cards on top of JSON. Oh, and we'll have a constraint language called, SHACL, defined in more RDF because why not. Who doesn't like noodling about with a graph serialized to a tree and hope you get everything right.

It's a death from a thousand cuts and the entire way you'll be told, by a bunch of academicians, how stupid you are for not marveling and appreciating this wonder that they've constructed.