У меня сложная проблема с хранением XML-структуры объектов.
Первый объект:
<DetailsStructure>
<DetailsRelation name="X">
<Type name="A">
<Template id="123"/>
</Type>
</DetailsRelation>
</DetailsStructure>
Второй объект:
<DetailsStructure>
<DetailsRelation name="X">
<Type name="A">
<Template id="123">
<DetailsRelation>
<Type name="B">
<Template id="111">
<DetailsRelation>
<Type name="C">
<Template id="222">
</Type>
</DetailsRelation>
</Template>
</Type>
</DetailsRelation>
</Template>
<Template id="1321" />
</Type>
</DetailsRelation>
</DetailsStructure>
Допустим, первая структура является нашей первоначальной. Мы можем добавить некоторые узлы к этой структуре, и мы
в конечном итоге со структурой № 2.
Однако один узел может содержать целые блоки XML. Например. мы добавили 'template id = "111"'
и 'template id = "1321" к первой структуре. 'template id = "111"' имеет внутреннюю структуру
('template id = "222"') и каждое изменение, внесенное в эту внутреннюю структуру (например, удаление
внутренний 'template id = "222"') должен распространяться везде, где использовался 'template id = "111".
Открываем объект, который описывается с помощью:
<DetailsStructure>
<DetailsRelation>
<Type name="B">
<Template id="111">
<DetailsRelation>
<Type name="C">
<Template id="222">
</Type>
</DetailsRelation>
</Template>
</Type>
</DetailsRelation>
</DetailsStructure>
и удалите часть структуры. Структура результата:
<DetailsStructure>
<DetailsRelation>
<Type name="B">
<Template id="111"/>
</Type>
</DetailsRelation>
</DetailsStructure>
Теперь, когда я открываю Первую структуру объекта, она должна выглядеть следующим образом:
<DetailsStructure>
<DetailsRelation name="X">
<Type name="A">
<Template id="123">
<DetailsRelation>
<Type name="B">
<Template id="111"/>
</Type>
</DetailsRelation>
</Template>
<Template id="1321" />
</Type>
</DetailsRelation>
</DetailsStructure>
Подводя итог: мы должны иметь возможность создавать простые структуры, а затем большие структуры, описываемые с помощью меньших.
Когда изменяется меньшая структура - она распространяется в любом месте от большей структуры, где использовалась меньшая структура.
Можно ли решить эту проблему? Это сложно?