“Straight” versioning systems for XML documents that produce a new version for every save, such as eXist DB's versioning extension, aren't as useful as they could be. They produce far too many versions, of which far too few are significant, and so each significant version is very hard to find or use. An old version, for example, cannot be easily located or reliably referenced. Adding check-out and check-in functionality would help alleviate some of the problems but not solve them.
In this paper, I propose adding a multilevel, XML-based versioning abstraction on top of this “straight” versioning system, where any new versions are placed on different levels or stages, based on check-out and check-in operations that move the resources up or down in the versioning structure.
The multilevel versioning is achieved using several different areas within the system, each of which in themselves is version handled using the system's “straight” versioning extension and where each save produces a system address to a specific (straight) version in that area. These addresses are kept track of and mapped to the multilevel versions in an XML-based version mapping file when a resource is checked in or out, as defined by the business rules for the abstraction.