Conversione di un design xml one-to-many in un molti-a-molti

2

Ho un formato di file xml simile a questo:

<topLevelTag>
  <category name="foo">
    <item attrib="value">ItemName</item>
    <item attrib="value2">AnotherItem</item>
  </category>
  <category name="bar">
    <item attrib="value">ItemName</item>
    <item attrib="value2">AnotherItem</item>
  </category>
</topLevelTag>

Il codice che analizza questo crea un'istanza di ItemName e viene detto che è una categoria è, nel primo caso, "foo" , e quindi crea una seconda istanza di ItemName che ha associato la categoria "bar" .

Il problema è che ho bisogno di riprogettare il sistema in modo che ogni Item possa avere più di un Category. Ma devo ancora essere in grado di creare anche più elementi. Ad esempio (utilizzando punti elenco anziché xml), potrebbe essere necessario creare le seguenti istanze:

  • %codice%
    • Categoria principale - ItemName
    • Categoria secondaria - "foo"
  • %codice%
    • Categoria principale - "bar"
    • Categoria secondaria - ItemName
  • %codice%
    • Categoria principale - "bar"
    • Categoria secondaria - "foo"
  • %codice%
    • Categoria principale - ItemName
    • Categoria secondaria - "foo"
    • Categoria terziaria - "quux"
    • ecc. (nessun limite)
  • %codice%
    • ecc.
  • ecc. (nessun limite)

Come posso progettare il mio formato XML per incapsulare questa relazione molti-a-molti?

I am aware this question is on the borderline between StackOverflow and Programmers. I chose to put it here because it is a software architecture and design question. If not please let me know and I'll be happy to move it. Precedent one | Precedent two | Precedent three

    
posta durron597 24.03.2015 - 14:39
fonte

1 risposta

3

Perché non puoi usare la stessa struttura dei tuoi proiettili?

<topLevelTag>
    <item id="1">
        <value>ItemName</value>
        <category level="primary">foo</category>
        <category level="secondary">bar</category>
    </item>
    <item id="2">
        <value>ItemName</value>
        <category level="primary">foo</category>
        <category level="secondary">bar</category>
    </item>
</topLevelTag>

("id" distingue due istanze dello stesso itemName).

Di sicuro, non è possibile avere una struttura "molti a molti" esplicitamente - è necessario ruotare (root?) sull'elemento o sulla categoria, poiché è necessario un set di dati gerarchico.

Oppure cambi completamente il layout e fai perno sulla relazione molti-a-molti; questo è più facile da convertire in e da una memoria RDBMS.

<topLevelTag>
    <item id="1">...</item>
    <category id="1">foo</category>
    <mapping>
        <map item="1" category="1" />
        <map item="1" category="2" />
        <map item="2" category="2" />
    </mapping>
</topLevelTag>
    
risposta data 24.03.2015 - 14:49
fonte

Leggi altre domande sui tag