Wenn die in einer Anfrage ermittelten Daten Instanzen einer Klasse sind, so kann man die Anfrage erweitern, um auch Daten dieser Instanzen zu ermitteln. So sind die im obigen Beispiel abgefragten Gruppen Instanzen der Klasse group, und jede dieser Instanzen kann im gleichen Request nach Parameterwerten befragt werden:
<cm-request ...>
<user-where>
<login>mustermann</login>
</user-where>
<user-get>
<groups>
<group>
<realName/>
<users/>
</group>
</groups>
</user-get>
</cm-request>
Der obige Request erzeugt eine Antwort nach dem folgenden Muster:
<cm-response ...>
<cm-code numeric="0" phrase="ok">
<user>
<groups>
<group>
<realName>CM-Administratoren</realName>
<users>
<listitem>musterfrau</listitem>
<listitem>mustermann</listitem>
</users>
</group>
<group>
<realName>System-Administratoren</realName>
<users>
<listitem>mustermann</listitem>
</users>
</group>
</groups>
</user>
</cm-code>
</cm-response>
Mit einer einzigen Anfrage können also Daten über die ursprünglichen und die von ihnen referenzierten Instanzen in beliebiger Tiefe ermittelt werden. Zu diesem Zweck kodiert man wie im obigen Beispiel als Inhalt des get-Elements den abzufragenden Parameter nicht als leeres Element, sondern gibt als Inhalt dieses Elements die Schablone für die weitere Abfrage vor.
Das folgende Beispiel zeigt, wie man bei Ordnern den jeweiligen Namen und die Vorlage ermittelt. Von den Vorlagen werden die erlaubten Vorlagen für die in einem Ordner enthaltenen Dateien abgefragt und von diesen wiederum der Name und der Titel in deutscher Sprache:
<cm-request ...>
<obj-where>
<objType>publication</objType>
</obj-where>
<obj-get>
<name/>
<objClass>
<name/>
<validSubObjClasses>
<name/>
<title lang="de"/>
</validSubObjClasses>
</objClass>
</obj-get>
</cm-request>
Diese Anfrage erzeugt eine Antwort nach dem folgenden Schema:
<cm-response ..>
<cm-code numeric="0" phrase="ok">
<obj>
<name>ROOTPUB</name>
<objClass>
<name>publication<name/>
<validSubObjClasses>
<objClass>
<name>publication</name>
<title lang="de">Standard-Ordner</title>
</objClass>
<objClass>
<name>document</name>
<title lang="de">Standard-Dokument</title>
</objClass>
...
</validSubObjClasses>
</objClass>
<obj>
</cm-code>
<cm-code numeric="0" phrase="ok">
...
</cm-code>
<cm-code numeric="0" phrase="ok">
...
</cm-code>
...
</cm-response>
Bitte beachten Sie, dass ein Parameterwert nur dadurch zu einer weiterzuverfolgenden Referenz wird, dass das entsprechende Element nicht leer ist, sondern die zu ermittelnden Parameter in seinem Inhalt kodiert sind. Die folgende Anfrage liefert zu jeder Datei des Typs publication die ID der darüber liegenden Datei und die Identifikatoren (IDs) der Dateien in dem Ordner (also die ursprüngliche Datei und deren Geschwister-Dateien):
<cm-request ...>
<obj-where>
<objType>publication</objType>
</obj-where>
<obj-get>
<parent/>
<parent>
<children/>
</parent>
</obj-get>
</cm-request>
Während das erste parent-Element nur die ID liefert, weil es leer ist, liefert das zweite die Werte der in seinem Inhalt spezifizierten Parameter der darüber liegenden Datei, also die children.