Okay. Here's how this played out in the code.
For the moment, I am using integers for attribute names. I think that Kai's example for exporters is a good one, so I'll probably switch to atoms.
Here are the reasons I *didn't* want to do this, and what I plan to do about it:
The problem with using atoms in general is that the atom encodings (the integer) can change every time the file is written. This does not necessarily reflect any real change in semantic content, but it tends to create largeish deltas. The "solution" to this is to expand the atom strings when serializing the file rather than using a string table.
I was reluctant to do this, because my initial thought was that this would lead to much larger files. I have since come to the tentative conclusion that this type of redundancy is highly amenable to compression, so I am expanding the strings in place.
The other problem with using atoms is that now a namespace convention is required to ensure that transformers do not choose atom values that collide with those used by DCMS. I'm going to defer this problem for now, as it doesn't seem urgently pressing.