The versions of children objects are considered as versions of their parent - e.g. if there is an 'article' object that has two sub-objects 'head' and 'body', each versions of 'head' and 'body' creates a virtual old version of 'article' obtained inserting each 'head' or 'body' version inside the overall 'article'.
The versions Web part in the Web interface and the versions panel in the Windows client automatically list the child object version as version of the parent object - this behavior cannot be disabled. For example, for the 'article' object described above that has been modified twice and whose 'body' and 'head' sub-objects have been modified 2 and 3 times respectively, the versions Web part lists 7 versions:
The 'version' REST command by default list the child versions as well, e.g. if 31999 is the id of the above article, the command:
../do.ashx?cmd=version&ids=31999
returns 7 version descriptions:
<ActionList . . .>
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T16:00:22.233Z" . . . ObjChildId="32002" ObjectId="31999" . . . />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:59:06.823Z" . . . ObjChildId="32002" ObjectId="31999" . . . />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:56:46.247Z" . . . ObjChildId="32000" ObjectId="31999" . . . />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:53:09.943Z" . . . ObjChildId="32000" ObjectId="31999" . . . />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:52:51.443Z" . . . ObjChildId="32002" ObjectId="31999" . . . />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:52:45.617Z" . . . ObjectId="31999" ObjectTypeName="article" ObjectDesc="v8" Codes="Content" />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:52:41.65Z" . . . ObjectId="31999" ObjectTypeName="article" ObjectDesc="v8" Codes="Content" />
</ActionList>
The version descriptions containing the 'ObjChildId' attribute are the ones coming from versions of the child object with that id. The last two version descriptions do not have the 'ObjChildId' attribute: they are the one corresponding to actual versions of main 'article' object.
It is possible to exclude the child objects versions using the parameter 'exclude' child, e.g.
../do.ashx?cmd=version&ids=31999&excludechild=
returns only the 2 versions of the main article object:
<ActionList . . .>
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:52:45.617Z" . . . ObjectId="31999" ObjectTypeName="article" ObjectDesc="v8" Codes="Content" />
<ActionDesc xsi:type="UpdateActionDesc" Time="2011-08-06T15:52:41.65Z" . . . ObjectId="31999" ObjectTypeName="article" ObjectDesc="v8" Codes="Content" />
</ActionList>
The 'audit' cmd4 command behaves in the same way as do.ashx?cmd=version when used with the '-versions' option - i.e. it returns by default also the children versions, and has a '-excludechild' option that can be used to exlclude them.
The system generates links in the database between the versions of the child objects and their parent and siblings version, this information is then used to build the virtual version of the parent object. Note that this mens that the listing of child version as version of their parent works only for newly created objects, not for objects that already existied when the system was upgraded.
The deletion of old versions based on the versioning rule do NOT consider the version of child object a version of their parent.
The database core structure contains the table gn_VersionDependencyTable storing the relationship between version, and also a column in gn_VersionTable.