Detailní návrh dotazu a iterační části |
|||||||||||||||
|
Dotaz se dle výsledků analýzy skládá z názvu dotazu, požadovaných atributů a omezení. Požadované atributy jsou součástí iterační části a z tohoto důvodu je zbytečné je při definici dotazu duplikovat. Duplikace by pouze zjednodušovala validaci dokumentu, ale pro uživatele by nebyla funkční. Název dotazu by teoreticky také mohl být součástí iterace, ale tím by bylo znemožněno použití stejné iterační části pro rozdílné třídy objektů, u kterých bychom zjišťovali stejné informace. Proto název bude obsahem dotazu. Omezení budou rovněž součástí dotazu s tím, že je nutné ještě uvést jejich logické spojení --- je nutné určit, jaká omezení spojovat jakými logickými spojkami. Za implicitní spojení budeme považovat logické a. Na databázi mnohdy spadá úkol zjišťovaná data třídit. Není to úkol, který by musela nutně provádět databáze, ale navrhujeme tuto možnost do definice dotazu přidat. Výsledná struktura dotazu sestává z řídících značek označujících, že se jedná o dotaz, z omezeních s příslušnými logickými operacemi a z případných požadavků na třídění. Tato struktura s dotazem se může v dotazu opakovat coby poddotaz. Níže uvádíme DTD pro řídící část šablon. DTD syntaxe zde není úplně nejvhodnější, z důvodu, že nezachycuje vztah k ostatním jmenným prostorům. Tuto její nedokonalost zde budeme ignorovat a popis provedeme tak, jakoby byly v dokumentu pouze tyto značky. <!ELEMENT form (iterate)> <!ELEMENT iterate (iterate*)> <!ELEMENT query (query*, where?, order?)> <!ATTLIST query name CDATA #REQUIRED > <!ENTITY % logic ' and|or|not ' > <!ELEMENT where ( %logic;)* > <!ELEMENT and ( %logic;)* > <!ELEMENT or ( %logic;)* > <!ELEMENT not ( %logic;)* > <!ELEMENT order EMPTY > <!ATTLIST order name CDATA #REQUIRED type CDATA #IMPLIED > V elementu a podelementech query mají význam i jednotlivá definovaná omezení na data (ta jsou v kompetenci tvůrce SQL dotazů). V elementech iterate pak mají význam i elementy reprezentující atributy objektů získaných z datového zdroje. V elementech iterate a form mají význam i veškeré značky z ostatních jmenných prostorů.
|
||||||||||||||