Autor, Název akce Databázové systémy a SQL Lekce 11 – Úvod do XML Daniel Klimeš Autor, Název akce XML – Co to je? •Formát pro přenos strukturovaných dat •Text se značkami (tagy) •Připomíná HTML •Samotný standard specifikuje jen minimum značek •Položky (uzly - nods) §Elementy §Atributy §… •Zanořená struktura §1 kořenový element (root) §N zanořených elementů • Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Jak to vypadá? •Hlavička (Processing Instruction) § •Uzly §Elementy •dataDatum narození §Atributy • §Komentář • •Hierarchie elementů §Root element §Zanořené elementy • textDatum vyšetření Daniel Klimeš, Databázové systémy a SQL Speciální znaky •< místo "<" •> místo ">" •& místo "&" •' místo ' •" místo " • Autor, Název akce Jak pracovat s XML? •Textový editor – Notepad •XML editor – XML Spy •Moderní databáze – ORACLE §Nadstavba SQL •Programovací jazyky §Parsery • Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Související technologie Daniel Klimeš, Databázové systémy a SQL •XPATH – formát vyhledávacích dotazů do XML dokumentů •XML schéma – šablona XML dokumentu •XSLT – transformace XML do jiného formátu (jiné XML, prostý text , HTML) •Xquery – pokročilé vyhledávání v XML Autor, Název akce Zdroje informací o XML Daniel Klimeš, Databázové systémy a SQL •Internet §www.w3.org §www.w3schools.com § Autor, Název akce Základy XPATH • § Harry Potter J K. Rowling 2005 29.99 §< /book> • Daniel Klimeš, Databázové systémy a SQL • Uzly (nodes) – elementy, atributy, text, komentář,.. • Parent, children, siblings, ancestors, descendants Autor, Název akce XPATH Daniel Klimeš, Databázové systémy a SQL Autor, Název akce XML a ORACLE •Podpora ukládání XML dat §Datový typ XMLTYPE •Podpora importu dat v XML formátu §Přímé vložení pomocí INSERT příkazu §XML repository •Propojení úložiště s tabulkou •Podpora exportu dat v XML formátu §Funkce DBMS_XMLGEN.getXML •Výstup SQl dotazu ve formátu XML §Funkce sys_XMLGen •Export jednoho sloupce tabulky jako jednoduché XML §Speciální SQl funkce - skládání XML stromu •XMLELEMENT •XMLATTRIBUTES •XMLAGG •… Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Práce s XML •Vytvoření tabulky §Datový typ CLOB pro velké textové řetězce §Datový typ XMLTYPE pro XML formát §CREATE TABLE jmeno_tabulky •(velky_text CLOB, •xml_sloupec XMLTYPE); • §SELECT DBMS_XMLGEN.getXML('SELECT study_id, study_name FROM studies') FROM DUAL Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Práce s XML •Generování XML • §SELECT DBMS_XMLGEN.getXML('SELECT study_id, study_name FROM studies') FROM DUAL §INSERT INTO jmeno_tabulky (velky_text) SELECT DBMS_XMLGEN.getXML('SELECT study_id, study_name FROM studies') FROM DUAL §UPDATE jmeno_tabulky SET xml_sloupec = XMLTYPE(velky_text) § §INSERT INTO jmeno_tab (xml_sloupec) § SELECT SYS_XMLGEN(study_id) FROM studies Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Generování XML na míru Daniel Klimeš, Databázové systémy a SQL SELECT XMLELEMENT (studie, XMLELEMENT (id, study_id), XMLELEMENT (jmeno, study_name), XMLELEMENT (nazev, study_title)) FROM studies ØXMLELEMENT ØXMLATTRIBUTES Ø XMLAGG SELECT XMLELEMENT (studie, XMLATTRIBUTES(study_id as"id", study_name as "jmeno"), XMLELEMENT (nazev, study_title)) FROM studies SELECT XMLELEMENT (studie, XMLAGG( XMLELEMENT (nazev, XMLATTRIBUTES (study_id as "id"), study_title))) FROM studies Autor, Název akce Dotazování XML •SELECT COUNT(*) FROM jmeno_tabulky WHERE existsNode(xml_sloupec, '//STUDY_NAME') = 1 •SELECT COUNT(*) FROM jmeno_tabulky WHERE existsNode(xml_sloupec, '//ROW[STUDY_ID=3]') = 1 •SELECT extract(xml_sloupec, '//ROW[STUDY_ID=3]/STUDY_NAME').GetClobVal() • FROM jmeno_tabulky WHERE existsNode(xml_sloupec, '//ROW[STUDY_ID=3]') = 1 •SELECT extractvalue(xml_sloupec, '//ROW[STUDY_ID=3]/STUDY_NAME') • FROM jmeno_tabulky WHERE existsNode(xml_sloupec, '//ROW[STUDY_ID=3]') = 1 • • Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Dotazování XML •SELECT extractvalue(value(t), '//STUDY_NAME') • FROM jmeno_tab, table(xmlsequence(extract(jmeno_tab.xml_sloupec, '//ROW'))) t • WHERE extractvalue(value(t), '//STUDY_ID') < 100 Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Zkouškové otázky - příklady •Který formulář má nejvíce otázek? (Cluster_description) •Která studie má nejvíce pacientů? (study_name) •Do kterých studií se zařazovali pacienti v roce 2008 (study_name) •Vypište názvy všech otázek ve skupině XY •Vypište pracoviště, která nezařadila žádného pacienta •Vypište pracoviště, která se účastní více studií, má nejvíce pacientů •Vytvořte pohled study_name, počet zařazených pacientů •Zjistěte průměrnou hodnotu, minimum , maximum otázky XY •Vypište věk pacientů při zařazení do studie XY •Vypište hodnotu otázky XY pro všechny pacienty (včetně nevyplněných) •Kumulativní počty náběru pacientů do studie •Najděte pacienty zařazené do více než jedné studie Daniel Klimeš, Databázové systémy a SQL Autor, Název akce Zápočet •Vytvořte zprávu/report o obsahu tabulky zapocet. Zpráva by měla obsahovat minimálně: §Počet záznamů §Přehled vyplněnosti jednotlivých sloupců (počet vyplněných, počet unikátních hodnot) §Pokud jde o kategoriální parametr, přidejte procentické zastoupení jednotlivých kategorií §Pokud jde o číslo nebo datum, zjistěte minimum, maximum, případně medián a průměr §Pokud zjistíte nějakou závislost mezi parametry (v hodnotách nebo vyplněnosti), slovně uveďte. • Daniel Klimeš, Databázové systémy a SQL