2012-03-16 7 views
0

私はオブジェクトのXML構造を格納することに複雑な問題があります。ブロックを持つXMLを構築する - タフな1つ

まずオブジェクト:

<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> 

のは、最初の構造は我々の最初の1であることを言ってみましょう。構造体にいくつかのノードを追加することができ、 は構造体番号2になります。 しかし、1つのノードで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> 

:私たちは、単純な構造体を作成することができ、その後の手段によって記述大きな構造なければなりません小さなものの 構造が小さくなると、より小さな構造が使用された大きな構造からあらゆる場所に伝播します。

この問題は解決できますか?それは複雑ですか?

+0

XML実装を記述するのではなく、達成しようとしているものから始める方がよい場合があります。あなたが間違ったアーキテクチャで実装に飛び込んできたように思えます。 –

+0

あなたは正しいかもしれません。だから私は自分の問題を提示します。目標はデバイスを記述することです。ある特定のデバイスは他のデバイスで構成されます。例えば。コンピュータの構成:マザーボード、マザーボードにはスロットとスロットがあり、カード、CPU、RAMがあります。しかし、CPUはトランジスタやその他のコンポーネントで構成されています。私がオープンすると、CPUの構造といくつかの変更を行うと、これらの変更は私がコンピュータとマザーボードの構造(彼らはCPUを持っている)を開くときに表示される必要があります。 –

+0

簡単な解決法はありますか?この問題は難しいと思います。私は正しい? –

答えて

0

私はあなたの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は静的データを表現して送信するのに適したフォーマットですが、データを変更する場合には適していません。

+0

MiMo、あなたの考えは良いですが、状況はより複雑です。 私は「マザーボード」(mtb001)で「コンピュータ」(cpt001)を持っています。私はそのマザーボードに追加カードを挿入したいが、cpt001コンピュータにしか入れない。だから私はその状況をマークしなければならない。 アイデア –

+0

'mtb001'のコピーである新しいマザーボードを作成し、それに追加カードを追加し、この新しいマザーボードを使うために' cpt001'の参照を変更する必要があります。 – MiMo

関連する問題