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
•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í
•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