602SQL-Úplná dokumentace Index  

Vazba dat v XML na databázové sloupce

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.

Propojení hodnoty databázového sloupce s atributem nebo textem v elementu

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.

Použití výrazů při exportu do XML

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.

Překlad hodnot při přenosu

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.

Vkládání nebo přepisování dat při přenosu do databáze

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.

Sdružování více hodnot do společných elementů

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.

Příklad

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ší):

  1. Vytvoříme nový prázdný DAD a ukončíme wizard.
  2. Kořenový element přejmenujeme na list.
  3. Z kontextového menu prvku <list> provedeme příkaz Vložit subelement elementu <list> .
  4. V dialogu pro nový element zadáme jeho jméno customer, zatrhneme Tento element svázat s tabulkou a vybereme jméno tabulky Customers.
  5. Z kontextového menu prvku <customer> provedeme příkaz Vložit atribut elementu <customer> .
  6. V dialogu pro nový atribut zadáme jeho jméno ID, a pro jeho hodnotu vybereme tabulku Customers a sloupec id_cust.
  7. Pomocí kontextového menu prvku <customer> vložíme subelementy person a registered a v jejich dialozích vyplníme pouze jména elementů.
  8. Pomocí kontextového menu prvku <person> vložíme subelementy name a surname a v jejich dialozích vyplníme pouze jména elementů. Pokud omylem vložíte element na nesprávné místo, metodou drag-and-drop nebo přes schránku je můžete přemístit.
  9. Do elementů name, surname a registered vložíte text a v jeho parametrech vyberete tabulku Customers a příslušné sloupce first_name, surname a register_date.

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.