I've been messing around with X.680, aka ASN/1. Its reputation for horrible evilness, I find, primarily comes from the Packed Encoding Rules and the interface with statically typed languages, both of which require dealing with the schema language programmatically.