|
Kódování XML souborů | Formát XML a jeho podpora | Přenosy dat z relačně propojených tabulek |
V záznamech z databáze se mohou hodnoty některých sloupců opakovat. Při výstupu do XML může být účelné:
Vytknutí stejných hodnot neovlivní možnost zpětného importu dat z XML do databáze (při použití analytického DADu). Vytknuté hodnoty se po importu objeví ve všech záznamech, z nichž byly vytknuty.
Záznamy vystupující z databáze je třeba nejprve setřídit podle hodnot těch sloupců, které se mají případně vytknout.
V syntetickém DAD se setřídění záznamů dosáhne pomocí klauzule ORDER BY použité v dotazu.
V analytickém DAD se setřídění záznamů popíše v elementech, v nichž se připojují jednotlivé tabulky. V dialogu se vyplní pole Setřídit podle a uvede se do něj jméno sloupce nebo seznam sloupců oddělený čárkami. Pokud by jméno některého sloupce obsahovalo čárku, uveďte ho v obrácených apostrofech.
Protože popis principů vytýkání hodnot je poněkud abstraktní, doporučujeme nejprve podrobně projít níže uvedené příklady a až pak se věnovat exaktnější specifikaci.
Uvažujme tabulku Customers s tímto obsahem:
ID_CUST | FIRST_NAME | SURNAME | REGISTER_DATE |
0 | John | Smith | 1997-02-25 |
1 | Peter | White | 1997-02-25 |
2 | Charles | Black | 2002-12-03 |
3 | Peter | White | 2003-07-05 |
Chceme exportovat do XML přehled zákazníků po dnech, kdy se registrovali. Navrhneme tento (syntetický) DAD (v příkladech XML je pod jménem Structuring 1):
i XML TOP: SELECT * FROM Customers ORDER BY register_date E <list> E <customers> TABLE - base cursor - E <registered> Tx register_date E </registered> E <person> Multi_occurence E <name> Tx first_name E </name> E <surname> Tx surname E </surname> E </person> E </customers> E </list>
Setřídění záznamů podle sloupce registrace je zajištěno klauzulí ORDER BY registrace na konci dotazu uloženého v DAD. Jelikož v elementu person je zatrženo Opakovatelný element (Multi_occurence), výstup do XML funguje tak, že:
V důsledku toho jsou údaje o zákaznících, kteří se zaregistrovali stejného dne, seskupeny:
<?xml version="1.0" encoding="UTF-8"?> <list> <customer> <registered>1997-02-25</registered> <person> <name>John</name> <surname>Smith</surname> </person> <person> <name>Peter</name> <surname>White</surname> </person> </customer> <customer> <registered>2002-12-03</registered> <person> <name>Charles</name> <surname>Black</surname> </person> </customer> <customer> <registered>2003-07-5</registered> <person> <name>Peter</name> <surname>White</surname> </person> </customer> </list>
Nyní exportujeme data ze stejné tabulky tak, aby ukazovala opakované registrace stejné osoby. Seskupíme data podle jména a příjmení. Pro změnu vytvoříme analytický DAD vhodný pro vstup i výstup dat (v příkladech XML je pod jménem Structuring 2).
DAD může vypadat tato:
i XML TOP E <list> E <customer> TABLE Customers ORDER BY surname,first_name E <person> E <name> Tx Customers.first_name E </name> E <surname> Tx Customers.surname E </surname> E </person> E <registered> Multi_occurence Tx Customers.register_date E </registered> E </customers> E </list>
Setřídění záznamů je zajištěno vyplněním údaje Setřídit podle v popisu elementu customer, v němž je připojena tabulka Customers. Jelikož v elementu registered je zatrženo Opakovatelný element, výstup do XML funguje tak, že:
V důsledku toho jsou údaje seskupeny podle jména a příjmení zákazníka:
<?xml version="1.0" encoding="UTF-8"?> <list> <customer> <person> <name>Charles</name> <surname>Black</surname> </person> <registered>2002-12-03</registered> </customer> <customer> <person> <name>John</name> <surname>Smith</surname> </person> <registered>1997-02-25</registered> </customer> <customer> <person> <name>Peter</name> <surname>White</surname> </person> <registered>1997-02-25</registered> <registered>2003-07-5</registered> </customer> </list>
Uvažujme stejný případ, jako v příkladu 2. Budeme ale předpokládat, že v databázi mohou existovat různé osoby se stejným jménem i příjmením. Opakovanou registraci budeme rozpoznávat podle opakujícího se údaje ID_CUST. Předpokládáme o něm, že je při opakované registraci stejné osoby stejný, zato při registraci dvou osob se stejným jménem a příjmením různý.
Tohoto cíle lze dosáhnout tím, že přidáme do DAD údaj ID_CUST, ať už ve formě atributu nebo textu v elementu ID:
i XML TOP E <list> E <customer> TABLE Customers ORDER BY surname,first_name E <person> E <name> Tx Customers.first_name E </name> E <surname> Tx Customers.surname E </surname> E <ID> Tx Customers.id_cust E </ID> E </person> E <registered> Multi_occurence Tx Customers.register_date E </registered> E </customers> E </list>
Předpokládejme však, že nechceme, aby údaj ID_CUST vystupoval do XML souboru, chceme pouze to, aby ovlivnil členění XML souboru - umožnil nebo znemožnil spojení údajů o registraci osob se stejný jménem a příjmením (důvodem může být umožnění importu dat pomocí tohoto DADu - importované hodnoty ID_CUST by porušily unikátnost indexu).
V takovém případě v dialogu toho elementu, který se má opakovat při změně ve sloupci ID_CUST, zatrhneme Opakovat při změně a vyplníme tabulku a sloupec ID_CUST. Vznikne DAD (v příkladech XML je pod jménem Structuring 3):
i XML TOP E <list> E <customer> TABLE Customers ORDER BY surname,first_name REPEAT ON CHANGE IN Customers.id_cust E <person> E <name> Tx Customers.first_name E </name> E <surname> Tx Customers.surname E </surname> E </person> E <registered> Multi_occurence Tx Customers.register_date E </registered> E </customers> E </list>
Pomocí údaje Opakovat při změně můžeme jemně řídit opakování elementů. Můžeme dosáhnout toho, že se bude opakovat element na vyšší úrovni, než by vyplývalo z hodnot, které vystupují do XML souboru.
Při výstupu jednotlivých záznamů z databáze do XML se některé elementy mohou opakovat: ty, ve kterých je připojena nová tabulka (relační vztah 1:N) a ty, ve kterých je zatrženo Opakovatelný element.
Při výstupu každého nového záznamu z databáze se hledá element, jehož výskyt se zopakuje. Z elementů uvedených v předchozím odstavci se hledá takový, pro nějž platí:
Pokud těmto pravidlům vyhoví více elementů, opakuje se element na nejnižší úrovni. Tomu odpovídá nejmenší rozsah XML souboru a největší míra vytknutí opakujících se dat.
Příklad 3 ukazuje případ, kde je potřeba opakovat jiný element, než by vyplývalo z předchozího pravidla. Toho lze dosáhnout nastavením údaje Opakovat při změně v popisu opakujícího se elementu.
Jinými slovy: Vytknutí hodnot se projeví tak, že místo opakování elementu na vyšší úrovni se opakuje element na nižší úrovni, který obsahuje měnící se hodnoty, uvnitř jednoho výskytu elementu vyšší úrovně, v němž jsou neměnné, "vytknuté" hodnoty.
Kódování XML souborů | Formát XML a jeho podpora | Přenosy dat z relačně propojených tabulek |