Я думаю, что есть три основных способа моделирования отношений между работником и проектом. Может быть иерархическим по проекту:
<project name="X">
<worker name="Sue"/>
<worker name="John"/>
</project>
<project name="Y">
<worker name="Sue"/>
<worker name="Bill"/>
</project>
или иерархия по работнику:
<worker name="Sue">
<project name="X"/>
<project name="Y"/>
</worker>
или квартира:
<engagement project="X" worker="Sue"/>
<engagement project="Y" worker="Bill"/>
Во всех трех случаях, если вы хотите избежать дублирования данных, вам нужны внешние ключи (например, значения IDREF) для связи с элементами, содержащими сведения о проекте или работнике.
Какой из трех вы выбираете, полностью зависит от вас. Очень часто вы будете переходить из одного представления в другое, поэтому группировка в XSLT так важна - она часто используется для такого рода иерархической инверсии.