How about relating this to a solution for tree addressing mentioned
in comments in the DTD? As long as you can specify a walk down the
tree to the element containing the start (and likewise the end), then
just give offsets within it, it's pretty reliable (it's mildly interesting
to characterize the precise classes of edits that do and do not invalidate
such a locator, but I'll leave the exercise to the reader...).