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
•data
•Datum narození
§Atributy
•
•
§Komentář
•
•Hierarchie elementů
§Root element
§Zanořené elementy
•
text
•
•
–Datum 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