SOLUTION: Der Algorithmus iteriert zunächst alle untergeordneten Seitenartigen-Objekte (PAGES). Für jedes Objekt wird anschliessend die komma-separierte Liste der Schlagworte in einzelne Wörter aufgebrochen. Jedes Schlagwort wird mit der zugehörigen Seite als Tupel der temporären Liste subjLst hinzugefügt. Die temporäre Liste wird nach Schlagworten alphabetisch sortiert und ausgegeben.

<!--// Init List of Keywords //-->
<dtml-call "REQUEST.set('subjLst',[])">

<!--// Assemble intermediate List of Keywords //-->
<dtml-in "filteredChildNodes(REQUEST,PAGES)">
 <dtml-let ob="_['sequence-item']">
  <dtml-unless "isResource(REQUEST)">
   <dtml-in "_.string.split(getObjProperty('attr_dc_subject',
        REQUEST),',')">
    <dtml-let s="_.string.strip(_['sequence-item'])">
     <dtml-call "subjLst.append((s,ob))">
    </dtml-let>
   </dtml-in>
  </dtml-unless>
 </dtml-let>
</dtml-in>

<!--// Sort Keywords alphabetically //-->
<dtml-call "subjLst.sort()">

<!--// Write Keywords with references to documents //-->
<dtml-in subjLst>
 <dtml-let s="_['sequence-key']"
           ob="_['sequence-item']">
  <a href="<dtml-var "ob.getHref2IndexHtml(REQUEST)">">
   <dtml-var s>
  </a>
 </dtml-let>
</dtml-in>