Formát pro popis dotazů

Úvod
Prezentátor
Úvod do Prezentátoru
Prezentátor
Definice jmenného prostoru pro šablonu
Formát pro popis dotazů
Návrh zajištění bezpečnosti - NEIMPLEMENTOVÁNO

Counter

Jednou z nejdůležitějších rolí, při nasazování Prezentátoru je role zajišťující korektní popis dostupných Dotazů. Aktuální verze popisuje data deklarativně ve formátu XML. Tento popis lze také nahradit objektem implementující určité rozhraní; tím se zde zabývat nebudem.

Definice dotazů je prostředníkem mezi uživatelem a samotnou databází. Identifikuje jisté stavební kameny, pomocí kterých lze sestrojit SQL dotazy, zajišťující požadovaná data.

První základní úvahou je, že každý dotaz lze rozdělit na několik částí, které spolu úzce souvisí. To, co zajímá uživatele je CO se má z databáze získat za data. Toto CO je identifikováno jednotlivými poli v databázi a omezeními kladenými na tato pole. Úkolem definice dat je tedy nadefinovat zobrazení požadovaných údajů do SQL dotazu.

Dalším základním předpokladem je, že jeden dotaz bude obsahovat pouze data, která jsou ve vztahu 1:1, a že ostatní vztahy se budou řešit poddotazy. Nemůžu tedy nadefinovat např. dotaz který z databáze vydoluje seznam všech autorů a jejich publikací, ale musím nadefinovat dotaz, který vydoluje z databáze všechny autory, dotaz který vydoluje z databáze všechny publikace, a pro publikace nadefinovat, že je možný poddotaz ve vztahu je autorem.

<queries encoding="iso-8859-2">
                              <query name="document">
                              <addfrom>
                              documents doc
                              </addfrom>
                              <out name="id">
                              doc.id
                              </out>
                              <out name="title">
                              doc.title
                              </out>
                              <out name="content">
                              doc.content
                              </out>
                              <out name="header">
                              doc.header
                              </out>
                              <where name="keyword">
                              <addfrom>
                              keywords ks
                              </addfrom>
                              <addfrom>
                              doc_key dk
                              </addfrom>
                              <addwhere>
                              ks.id=dk.keyword AND dk.document=doc.id
                              </addwhere>
                              ks.keyword=
                              <param name="keyword"/>
                              </where>
                              </query>
                              <query name="keywords">
                              <addfrom>
                              keywords ks
                              </addfrom>
                              <out name="id">
                              ks.id
                              </out>
                              <out name="keyword">
                              ks.keyword
                              </out>
                              <subquery from="document" as="doc_keys">
                              <addfrom>
                              doc_key dk
                              </addfrom>
                              <addwhere>
                              dk.document =
                              <in name="id"/>
                              AND dk.keyword = ks.id
                              </addwhere>
                              </subquery>
                              </query>
                              </queries>
                              

Příklad 15: Příklad definice dat

Na předchozím příkladě je ukázán popis dat v určité databázi. Elementy query definují konkrétní dotaz se jménem určeným atributem name. V rámci tohoto dotazu je možné nadefinovat pole, která mohou vstoupit do výstupu. Tato jsou definována elementy out. Dále je možné nadefinovat omezení daného dotazu pomocí elementu where. A závěrem lze nadefinovat provázanost pomocí poddotazu v určité roli, a to pomocí elementu subquery. Elementy query, out, where a subquery mohou navíc obsahovat dodatky do WHERE a FROM části SQL dotazu. Tyto dodatky lze seskupit do potomka elementu query se jménem cnds a s názvem v atributu name. Tuto část lze pak vložit odkazem z atributu cnds v příslušné části definice. Dodatky jsou složeny z elementů addfrom, resp. addwhere, které jsou přidány do části FROM, resp. WHERE v SQL dotazu.