1 / 15

X-DEVICE dedukt ívny dotazovací jazyk

X-DEVICE dedukt ívny dotazovací jazyk. Marián Kamenišťák. Pravidlá sa skladajú z podmienky a záveru, kde podmienka definuje vzory objektov databáze a záver je z nich odvodená trieda, ktorá definuje objekty DB, ak je podmienka splenená. if A@arc(s tart=1, end:Y) then path_from_one(end:Y)

gala
Download Presentation

X-DEVICE dedukt ívny dotazovací jazyk

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. X-DEVICEdeduktívny dotazovací jazyk Marián Kamenišťák

  2. Pravidlá sa skladajú z podmienky a záveru, kde podmienka definuje vzory objektov databáze a záver je z nich odvodená trieda, ktorá definuje objekty DB, ak je podmienka splenená .

  3. if A@arc(start=1, end:Y) then path_from_one(end:Y) Objekt s atribútom end=Y triedy path_from_one existuje, ak existuje objekt s OID A triedy arc s atribútmi start=1 a end=Y. Path_from_one je odvodená trieda, tj. trieda, ktorej inštancie sú odvodené z deduktívnych pravidiel.

  4. V hlave pravidla (thenčasť) je povolená len jedna odvodená trieda. Avšak s rovnakou odvodenou triedou v hlave môže existovať viac pravidiel. Potom je výsledkom zjednotenie týchto pravidiel. • Mna uzlov dosiahnuteľných z uzlu 1: if P@path_from_one(end:Y) and A@arc(start:Y, end:Z /=1) then path_from_one(end:Z)

  5. Path expressions • if C@chapter(intro /= I, paragraph.section  P) then result(paragraph:list(P)) • Nájde všetky paragrafy sekcie, ktorých kapitola nemá intro( kapitola má intro a sekcie, kt. obsahujú paragrafy). • Premenné sú inštancované cez ‘:’ operátor, ak sú odpovedajúce atribúty jednohodnotové, inak sa používa operátor ‘’. Získame odvodenú triedu result s atribútom paragraph ako agerg. fciu list (utriedená sekvencia).

  6. Path expressions • if S@section(title=‘Procedure’, instrument.X.content  I) then result(instrument:list(I)) Ktoré inštrumenty sme použili v sekcii Procedura? Ak vieme počet krokov v ceste, ale nie konkretne meno kroku, stačí ho nahradiť premennou. Ak sú časti cesty neznáme (mená a počet krokov), použijeme operátor ‘*’. sekcia -> obsah-> akcie -> inštrumenty

  7. Path expressions • If R@report (paragraph.*  P) then result(paragraph:list(P)) Chceme všetky paragrafy vyskytujúce sa kdekolvek v elemente správy • Ak potrebujeme riešenie s najkratšou cestou, používame ‘+’ operátor.

  8. Flatting operator • if S@section(title $ ‘keyword’) then result(section:list(S)) Nájde všetky sekcie s nadpisom obsahujúci kľúčové slovo. Operátor zploštenia ‘’ je daný hneď za meno elementu, kt. chceme zploštiť. Tým sa vráti reťazec pozostávajúci zo všetkých jeho podelementov, v kt. sa dá napr. vyhľadávať text. Operátor‘$’ slúži na vyhľadávanie v reťazci. DTD: <!ELEMENT section(title)> <!ELEMENT title (#PCDATA)*>

  9. Výrazy usporiadania • Implementácia operátorov zotriedenia je založená na implementácii viachodnotových atribútov cez list, v kt. je dané poradie elementov. • if S@section(title=‘Procedure’, instrument.*.content <=2 I) then result(instrument:list(I)) vráti prvé dva elementy z listu. Podobne operátor ‘n’ vráti n-tý prvok listu, operátor ‘between(I1, I2)’ sekvenciu prvkov medzi elementami I1 a I2.

  10. Výrazy usporiadania if R@report(paragraph2.section3.chapter2 :P) then result(paragraph :P) Nájde druhý paragraf tretej sekcie druhej kapitoly reportu. Je to skratka za: if R@report(chapter 2 XX1) and XX1@chapter(section 3 XX2) and XX2@section(paragraph 2 P) then result(paragraph :P)

  11. Exportovanie výsledkov • Výsledok dotazu ako XML dokument • if B@book(title:T, publisher=‘John Woods’, year:Y>1991) then xml_result(book1(title:T, year:Y)) vráti názov a rok vydania kníh od Johna Woodsa publikované po roku 1991. xml_result je direktíva, kt. oznamuje dotazovaciemu procesoru, že odvodená trieda book1 je odpoveďou na dotaz podľa DTD: <!DOCTYPE book1 [ <!ELEMENT book1 (title, year)> ] >

  12. Exportovanie výsledkov • Na vytvorenie stromu : • if B@book(title:T, publisher=‘John Woods’, year:Y>1991) then xml_result(bib1(book1(title:T, year:Y))) Vytvorí výsledok s DTD: <!DOCTYPE bib1 [ <!ELEMENT bib1 (book1)*> <!ELEMENT book1 (title, year)> ] >

  13. Exportovanie výsledkov <!ELEMENT partlist (part)*> plochá relácia <!ELEMENT part EMPTY> <!ATTLIST part partid CDATA #REQUIRED partof CDATA #IMPLIED name CDATA #REQUIRED > <!ELEMENT parttree (part)*> reperezentovaná stromom <!ELEMENT part (part)*> <!ATTLIST part partid CDATA #REQUIRED name CDATA #REQUIRED >

  14. Exportovanie výsledkov Z plochých štruktúr rekurzívne vytvoríme hierarchickú štruktúru: if P@part(^partid:ID, ^name:Name) then part1(^partid:ID, ^name:Name) if PP1@part1(^partid:ID) and P1@part(^partid:ID, ^parent:Parent) and PP2@part1(^partid:Parent) then PP2@part1(part:list(PP1)) if P1@part1 and not P2@part1(part  P1) then xml_result(parttree(part1:list(P1)))

  15. Exportovanie výsledkov • Direktíva xml_sorted sa používa na zoradenie prvkov výsledku podľa hodnoty v hlave pravidla: • if B@book(title:T, publisher=‘John Woods’, year:Y>1991) then xml_sorted([T], bib1(book1(title:T, year:Y)))

More Related