сборка XML с блоками - сложная задача - PullRequest
0 голосов
/ 17 марта 2012

У меня сложная проблема с хранением 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>

Подводя итог: мы должны иметь возможность создавать простые структуры, а затем большие структуры, описываемые с помощью меньших. Когда изменяется меньшая структура - она ​​распространяется в любом месте от большей структуры, где использовалась меньшая структура.

Можно ли решить эту проблему? Это сложно?

1 Ответ

0 голосов
/ 17 марта 2012

Я думаю, что ваш XML должен выглядеть следующим образом:

<Devices>
   <Device Type="CPU" Id="cpu001">
      <Componentes>
        . . . 
      </Components> 
   </Device>

   <Device Type="Motherboard" Id="mtb001">
      <Componentes>
         <Id>cpu001</Id>
         . . .  
      </Components> 
   </Device>

   <Device Type="Computer" Id="cpt001">
      <Componentes>
         <Id>mtb001</Id>
         . . . 
      </Components> 
   </Device>

   . . . 

 <Devices>

Таким образом, каждое устройство появляется только один раз и может быть изменено изолированно.Все остальные устройства, которые его используют, будут отражать это изменение, потому что они не содержат его, они просто ссылаются на этот единственный экземпляр.

Хотя это реляционная структура, которая лучше подходит для реляционной базы данных, чем XML.

Я думаю, что в целом база данных будет лучшим выбором - XML ​​является хорошим форматом для представления и передачи статических данных, но он не подходит, если вы хотите вносить изменения в данные.

...