Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyDatabázové systémy v biomedicíně Základy XML Práce s XML v databázi Prohledávání a extrakce z XML

Logo Matematická biologie

Prohledávání a extrakce z XML

Jakmile máme XML dokument zaveden v databázi jako XMLTYPE, můžeme ho začít prohledávat pomocí XPath výrazů a několika specifických funkcí. Jednoduché vyhledávání celých dokumentů (řádků tabulky), které odpovídají XPath výrazu provedeme pomocí funkce existsNode. Jejím prvním parametrem je XML sloupec, druhým parametrem XPath výraz. Funkce vrací hodnotu 1, pokud je XPath výraz nalezen, v opačném případě vrací nulu. Následující příkaz prohledá tabulku a vrátí počet řádků, které v XMLTYPE sloupci obsahují XML s elementem STUDY_NAME.

SELECT  COUNT(*) FROM jmeno_tabulky

WHERE existsNode(xml_sloupec, '//STUDY_NAME') = 1

Využít lze plnou šíři XPath výrazů včetně predikátů. Lze například hledat XML dokumenty obsahující vyšetření s výsledkem rovno 57

   SELECT  COUNT(*) FROM jmeno_tabulky

WHERE existsNode(xml_sloupec, '//vysetreni[vysledek=57]') = 1

Pokud potřebujeme z XML dokumentu získat hodnotu konkrétního elementu či atributu, využijeme funkci extract nebo extractvalue. Obě funkce mají stejné parametry jako funkce existsNode. Liší se návratovou hodnotou. Funkce extract extrahuje z XML opět XML fragment, zatímco extractvalue vrací jednoduchý datový typ. Funkce extractvalue je náročnější na XPath výraz, který musí ukazovat na obsah právě jednoho elementu či atributu. Nesmí tedy jít o množinu uzlů (XML fragment), v tomto případě volání funkce skončí chybou. Naproti tomu výsledkem funkce extract je buď odkazovaný XML fragment nebo NULL, pokud v dokumentu neodpovídá žádný prvek specifikovanému XPath výrazu. Zatímco funkci existsNode využijeme za klíčovým slovem WHERE, extrahovací funkce použije za příkazem SELECT:

SELECT  extract(xml_sloupec, '//vysetreni[vysledek=57]/datum_vysetreni').GetClobVal()

     FROM jmeno_tabulky WHERE existsNode(xml_sloupec, '//vysetreni[vysledek=57]') = 1 

V uvedeném příkladu musíme použít funkci extract, protože pokud by XML dokument obsahoval více vyšetření s výsledkem 57, příkaz by skončil chybou. 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity