|
![]() | Vazba dat v XML na data aplikace | Vazba dat v XML na proměnné a konstanty | ![]() |
Při popisování struktury XML souboru se do DAD vkládají elementy zanořené do sebe tak, jak mají být zanořeny v XML souboru. K elementu lze přidat libovolný počet atributů a také popis textu, který je v tomto elementu bezprostředně obsažen.
Hodnotu sloupce v databázi lze spojit buď s hodnotou některého atributu (<customer ID="1">) nebo s textem v některém elementu (<ID>1</ID>). Proto tam, kam chcete v XML souboru hodnotu umístit, použijte příkaz kontextového menu elementu Vložit atribut elementu nebo Vložit text do elementu.
Pokud jste vložili atribut, zadejte jeho jméno. Toto jméno může, ale nemusí souviset se jménem sloupce, jehož hodnota bude v atributu obsažena.
V obou případech pak zapněte v dialogu přepínač Vazba na sloupec v databázi a vyberte jméno tabulky a sloupce, jehož hodnota se má v atributu nebo v textu objevit. Pokud pro syntetický DAD chcete pracovat se sloupcem z odpovědi na dotaz, místo jména tabulky vyberte z nabídky "- base cursor -".
Umístění hodnot sloupců do atributů a textu v elementech lze libovolně kombinovat.
Pokud do XML souboru mají vystoupit hodnoty výrazů vypočtených z hodnot uložených v databázi, je třeba:
Doporučujeme pojmenovat hodnoty výrazů pomocí klauzule AS. Pomocí těchto jmen bude možno snadno identifikovat hodnotu výrazů v nabídce hodnot pro výstup do XML.
V reálné situaci vytváření XML přenosů může vzniknout potřeba provést obecnou transformaci hodnoty na hodnotu jinou. Prakticky to bude vyžadováno tam, kde je formát XML pevně dán a nelze jej docílit pomocí výrazů (v přenosu do XML souboru, viz předchozí odstavec) nebo např. neodpovídá přesně struktuře tabulek (při přenosu z XML do databáze).
Transformace (překlad) se provádí SQL funkcí, vytvořených v téže aplikaci. Funkce musí mít tuto hlavičku:
FUNCTION jméno_funkce (IN InputValue NCHAR(2045)) RETURNS NCHAR(2045);Hlavička funkce je stejná pro všechny typy (nelze použít pro typ BINARY a pro typy proměnné délky). Při přenosu do XML se vezme hodnota z tabulky, převede se na NCHAR, předá se funkci a výsledek se zapíše do XML souboru ve zvoleném kódování. Při přenosu z XML do databáze se vezme řetězcová hodnota z XML dokumentu, předá se funkci a výsledek se přetypuje a zapíše do příslušné tabulky.
Překladová funkce se zadává v okně Vlastnosti XML textu a Vlastnosti XML atributu. Zde je tlačítko Překlad, které otevře další dialog pro výběr již existující funkce (zvlášť pro oba směry přenosu). Není-li dosud funkce vytvořena, je zde možnost tlačítkem Vytvořit novou otevřít editor s předpřipravenou hlavičkou transformační funkce.
Vzhledem k použití unicode v parametrech funkce nelze použít překlad ve Windows 98.
V analytických DADech, sloužících k přenosu dat do databáze, lze stanovit, mají-li se opakované skupiny hodnot z XML vkládat jako nové záznamy (provádět INSERT - implicitní stav) nebo mají-li přepisovat záznamy již existující (provádět UPDATE).
Pro přepisování stávajících záznamů je třeba mít v dané tabulce unikátní klíč a XML soubor musí obsahovat hodnoty tohoto klíče (jeden nebo více sloupců). Při návrhu DADu je nutno atribut nebo text v elementu označit zatržením checkboxu Je to klíč pro přepis záznamu v okně Vlastnosti XML textu a Vlastnosti XML atributu.
XML soubor může být strukturován složitěji, než jsou záznamy v tabulkách databázi. Hodnoty některých sloupců, které logicky patří k sobě, mohou být vloženy do zvláštního elementu.
Takovéto pomocné elementy lze definovat bez omezení. Týkají se podoby dat v XML souboru, na data v databázi nemají žádný vliv.
Uvažujme tabulku Customers s tímto obsahem (pouze začátek):
ID_CUST | FIRST_NAME | SURNAME | REGISTER_DATE |
0 | John | Smith | 25.2.1997 |
1 | Peter | White | 25.2.1997 |
2 | Charles | Black | 3.12.2002 |
Chceme její obsah exportovat do XML a máme tyto požadavky:
Export připravíme takto (nejobecnější způsob, existuje i kratší):
Kompletní návrh DAD vypadá takto (pro úsporu místa zde není obrázek stromu, ale přepis jeho obsahu - E značí element, Tx je text v elementu, At je atribut elementu):
i XML Top E <list> E <customer> TABLE Customers A ID="Customers.id_cust" E <person> E <name> Tx Customers.first_name E </name> E <surname> Tx Customers.surname E </surname> E </person> E <registered> Tx Customers.register_date E </registered> E </customer> E </list>
Exportovaný XML dokument vypadá takto:
<?xml version="1.0" encoding="UTF-8"?> <list> <customer ID="0"> <person> <name>John</name> <surname>Smith</surname> </person> <registered>25.2.1997</registered> </customer> <customer ID="1"> <person> <name>Peter</name> <surname>White</surname> </person> <registered>25.2.1997</registered> </customer> <customer ID="2"> <person> <name>Charles</name> <surname>Black</surname> </person> <registered>3.12.2002</registered> </customer> </customer> <customer ID="3"> ... </customer> </list>
Rychlejší způsob vytvoření takto jednoduchého DADu spočívá v automatickém vygenerování implicitního DADu pro tabulku Customers a jeho úpravu spočívající v přejmenování elementů, vytvoření nového elementu person a přesun elementů name a surname pomocí Drag&Drop o úroveň hlouběji do elementu person.
![]() | Vazba dat v XML na data aplikace | Vazba dat v XML na proměnné a konstanty | ![]() |