I have a client with a series of DITA concepts that are really chapters containing a bunch of nested concepts. For example, one file is a concept with 70 nested concepts. They want to split each chapter into topics and create ditamaps and maintain all cross-references, etc. It is not really a project that I want to tackle right now. It seems that an XSLT solution would be the best. If anyone has a good algorithm for this or would be interested in taking on this project, please let me know. Thank you very much.
I have done a wide variety of such projects - taking files apart and even reassembling them. It would be easy enough to work on this type of project, using a combination of XSLT and ExtendScript if that is required.
Send me a mail - I do not seem to have your current contact details.
One project actually took a huge DocBook file, converted it into 400+ topics, assembled those into 40 chapters using text insets and reassembled the changed files into a new DocBook file.
The things customers make you do for money... 🙂
rick at frameexpert dot com
(I found this post while looking for an answer myself so here's what I learned)
The simplest way to split nested dita topics is to add chunk="by-topic" to all the topicrefs in the map and then use the "normalize" plugin in DITA OT to split out the individual topics.
1. In map.ditamap, add @chunk attribute: <topicref href="content.dita" chunk="by-topic"/>
2. From the commandline, run DITA OT on the ditamap: <dita-ot-dir>/bin/dita -input map.ditamap -format dita
The split dita topics and map (with references to all the split topics) are written to the "out/" directory. The topic @id is used as the filename for each topic. And, if you have topics in subdirectories, the split topics are also written to the same subdirectories. So it all works very nicely.
Note: The normalise plugin is built-in to the latest DITA OT (3.4) but if it's not in your DITA OT you can install it from here: https://github.com/dita-ot/org.dita.normalize