"This still does not address the fact that a generic content revision doesn't describe what the object is."
But you're not addressing "what an object is".
You're using the type system to state "this is how the object came into existence".
This just doesn't feel right to me, but I haven't thought a lot about it.
Think about "image" then ... it can't be a subtype of "uploaded content" because I can scribble the bits myself in a graphics generator and stuff those bits into the CR - as an image. That's not uploaded.
So using the type system in this manner means you'd need two image types to be consistent ...
Maybe an attribute describing where the content bits came from would make more sense - uploaded ...
Not sure. Other than the "type" approach seems wrong.