Autor, Název akce Databázové systémy a SQL Lekce 10 – Ú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í •Vytvořte pohled study_name, počet zařazených pacientů •Zjistěte průměrnou hodnotu, minumum , 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) •Jaký je průměrný počet vyplněných formulářů na pacienta u studie XY Daniel Klimeš, Databázové systémy a SQL