Przegląd języków zapytań

Podobne dokumenty
SBQL. język zapytań dla obiektowych baz danych. Kamil Adamczyk. Uniwersytet Warszawski 20.IV.2009

Służy do wybierania/wyszukiwania fragmentów dokumentu XML. Przypomina trochę ścieżki w systemie operacyjnym. Niech będzie dany dokument XML:

DataGuide w półstrukturalnych bazach danych

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

XML Path Language (XPath)

Model semistrukturalny

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2008/09. Instytut Informatyki UW

XML extensible Markup Language. część 6

XSLT. Patryk Czarnik. Instytut Informatyki UW. XML i nowoczesne technologie zarzadzania treścia 2007/08

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

DB2 XML w relacyjnych bazach danych wstęp do wprowadzenia. Kuba Pochrybniak

Podzapytania. SELECT atrybut_1, atrybut_2,... FROM relacja WHERE atrybut_n operator (SELECT atrybut_1, FROM relacja WHERE warunek

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Oracle11g: Wprowadzenie do SQL

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2008/09. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2008/09 1 / 1

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2007/08

Obiektowe bazy danych

BAZY DANYCH. Dr hab. Sławomir Zadrożny, prof. PR

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 04

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Osie (axes) Location paths

XML extensible Markup Language. część 3

Aplikacje internetowe laboratorium XML, DTD, XSL

XML extensible Markup Language. część 4

Temat : SBQL 1 obiektowy język zapytań.

Obiektowe bazy danych

XML i nowoczesne technologie zarządzania treścią

Informatyka (10) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego i Mostów p. 4 Hydro

Procedury i funkcje składowane

Obiektowe bazy danych Obiektowe i obiektowo-relacyjne bazy danych

Definicja obiektowego modelu danych: struktura i zachowanie

Tworzenie aplikacji bazodanowych

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

INTEGRACJA I EKSPLORACJA DANYCH

29. Poprawność składniowa i strukturalna dokumentu XML

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Spis treści. Przedmowa

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

2 Natywne bazy XML Języki zapytań XQuery Źródła 18

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Temporalne bazy danych

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

3. Podzapytania, łączenie tabel i zapytań

15. Funkcje i procedury składowane PL/SQL

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Bazy danych wykład trzeci. Konrad Zdanowski

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

PODZAPYTANIE (SUBSELECT)

Egzamin z przedmiotu Projektowanie języków XML imię i nazwisko. Zadanie Suma Punkty Max Punkty

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2011/12

Materiały do laboratorium MS ACCESS BASIC

Wprowadzenie do XSLT

PODSTAWY BAZ DANYCH 13. PL/SQL

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

BAZY DANYCH. Anomalie. Rozkład relacji i normalizacja. Wady redundancji

Spis tre±ci. 1 Wst p Zawarto± rozdziaªów Projekt LoXiM... 2

Języki i Techniki Programowania II. Wykład 13. TRaX, Applety, Java Security

Tworzenie raportów XML Publisher przy użyciu Data Templates

Indukowane Reguły Decyzyjne I. Wykład 3

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

Kurs WWW Język XML, część II

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2011/12. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2011/12 1 / 54

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

2 Natywne bazy XML Języki zapytań XQuery Źródła 14

Przykładowy dokument XML

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Cw.12 JAVAScript w dokumentach HTML

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Technologie baz danych

Prezentacja i transformacja

Grafowy model bazy danych na przykładzie GOOD

Relacyjne bazy danych a XML

Rodzaje przetwarzania XSLT (1)

Prezentacja i transformacja

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

SQL (ang. Structured Query Language)

Podstawy języka SQL cz. 2

Specjalizacja magisterska Bazy danych

HTML DOM, XHTML cel, charakterystyka

Rok akademicki: 2013/2014 Kod: ZZIP IN-s Punkty ECTS: 2. Kierunek: Zarządzanie i Inżynieria Produkcji Specjalność: Informatyka w zarządzaniu

XML materiały dydaktyczne - Kurs Podstawowy XSL - wprowadzenie. XSL warstwa przekształcania (XSLT) oraz prezentacji informacji (XSL FO).

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

PL/SQL. Zaawansowane tematy PL/SQL

Microsoft SQL Server Podstawy T-SQL

XML extensible Markup Language 3

WYKŁAD 1. Wprowadzenie do problematyki baz danych

Układ informacji i powiązań między danymi w deklaracji w formacie XML

XML extensible Markup Language. część 8

UCHWAŁA NR L/932/13 RADY MIASTA MYSŁOWICE. z dnia 19 grudnia 2013 r.

XML i nowoczesne metody zarządzania treścią

Transkrypt:

Przegląd języków zapytań Eklektyczny i stronniczy przegląd języków zapytań do baz danych: obiektowych, semistrukturalnych i XML. Podziękowania Dla Grzegorza Enzo Dołęgowskiego za wpisanie moich notatek do komputera. Przykładowy schemat obiektowej bazy danych K = {, Małżeństwo, Zameldowanie} typ() = [ ] typ(małżeństwo) = [ ] typ(zameldowanie) = [ ] PESEL : String; Imię : String; Nazwisko : String; Ojciec : ; Matka : ; Dzieci : {} Mąż : ; Żona : ; Data_zawarcia : Date; Data_ustania : Date; Dzieci : {} Obywatel : ; Adres : [ Ulica : String; Nr_domu : String; Nr_miesz : String; Miejscowość : String ] Od_kiedy : Date; Do_kiedy : Date; Rodzaj : String Język zapytań Nasz select wyrażenie from ciąg deklaracji zmiennych zakresowych warunek logiczny wyrażenie: 1. element W*, 2. agregacje na zbiorach (count, sum, avg, flatten, element koercja kolekcji na jej jedyny element), 3. zmienne zakresowe. Pierwszy przykład Nasz: select [ Nazwisko : x.nazwisko, Imię : x.imię ] from x x.imię = 'Adolf'; O 2 (ODMG OQL): select struct(nazwisko : x.nazwisko, Imię : x.imię) from x in x.imię = 'Adolf';

SQL, ad hoc, brudny : SQL, aplikacyjny, czysty : select Nazwisko, Imię from Imię = 'Adolf'; select x.nazwisko, x.imię from x x.imię = 'Adolf'; W języku 3GL: from for x do if x.imię = 'Adolf' then select output [ Nazwisko : x.nazwisko, Imię : x.imię ] Złączenie zależne (ewaluacje od lewej do prawej) Nasz: select [ Nazwisko : x.nazwisko, Rodzic : x.imię, Dziecko : y.imię ] from x, y x.dzieci x.nazwisko = y.nazwisko; W języku 3GL: W stylu SQL, złączenie niezależne: Brak potrzeby GROUP BY for x do for y x.dzieci do if x.nazwisko = y.nazwisko then output [ Nazwisko : x.nazwisko, Rodzic : x.imię, Dziecko : y.imię ] select x.nazwisko, x.imię as Rodzic, y.imię as Dziecko from as x, as y x.nazwisko = y.nazwisko and y in x.dzieci; Nasz: select [ Imię : x.imię, Nazwisko : x.nazwisko, Potomstwo : count(x.dzieci) ] from x count(x.dzieci) > 5; SQL87: SQL99 (bez GROUP BY): Przetwarzanie kolekcji Wnuki select x.imię, x.nazwisko, count(*) from x, y x.pesel = y.pesel_matki or x.pesel = y.pesel_ojca group by x.pesel, x.imię, x.nazwisko having count(*) > 5; select x.imię, x.nazwisko, (select count(*) from y x.pesel=y.pesel_ojca or x.pesel=y.pesel_matki) as Potomstwo from x Potomstwo > 5; select [ Imię : x.imię, Nazwisko : x.nazwisko, Wnuki : flatten(select y.dzieci from y x.dzieci ) ] from x ; Jedynaki i ich rodzice select [ Nazwisko : y.nazwisko, Rodzic : x.imię, Jedynak : y.imię ] from x, y x.dzieci count(x.dzieci) = 1; Wyrażenia ścieżkowe select [ Nazwisko : m.mąż.nazwisko, ImięŻony : m.żona.imię, ImięMęża : m.mąż.imię ] from m Małżeństwo Data_zawarcia > #16.03.2006#;

Wyrażenia są: 1. skalarne, gdy nie ma atrybutów zbiorowych na ścieżce, 2. zbiorowe, gdy jest choć jeden atrybut zbiorowy na ścieżce. Wyrażenia ścieżkowe z wyrażeniami regularnymi zawsze są zbiorowe: _ (x)? (x)* (x)+ Dowolna krawędź grafu 0 albo 1 wystąpienie krawędzi x Dowolna liczba (również 0) wystąpień krawędzi x Dowolna dodatnia liczba wystąpień krawędzi x (x y) Jedno wystąpienie krawędzi x albo jedno wystąpienie krawędzi y select [ Imię : z.imię, Nazwisko : z.nazwisko ] from x (select y from y y.imię = 'Krzysztof and y.nazwisko = 'Stencel'), z x._*.(ojciec Matka) albo (z dokładną specyfikacją ścieżki): select [ Imię : z.imię, Nazwisko : z.nazwisko ] from x (select y from y y.imię = 'Krzysztof and y.nazwisko = 'Stencel'), z x.(ojciec Matka)*.(Ojciec Matka) Zmienne ścieżkowe Na zmiennej ścieżkowej możemy zapamiętać ścieżkę, która doprowadziła do przetwarzanego obiektu: (ścieżka)@z Do zmiennej odwołujemy się poprzez @Z. Ścieżki i nazwy pól są obywatelami I kategorii. Pokrewieństwo: select [ Imię : y.imię, Nazwisko : y.nazwisko, Pokrewieństwo : @P ] from x, y x.((ojciec Matka)+)@P x.imię = 'Krzysztof' and x.nazwisko = 'Stencel'; Jako etykieta pola struktury: select [ Imię : z.imię, Nazwisko : z.nazwisko, @P: u.imię ] from z, u z.(ojciec Matka)@P; Aplikacja ścieżki do innego obiektu: Ewaluacja ścieżek select [ Imię : z.imię, Nazwisko : z.nazwisko, pokrewieństwo : @P, TenSamPoziomPokrewieństwaUKorbsdaja : y.@p.imię ] from x, z x.((ojciec Matka)*)@P, y x.imię = 'Krzysztof' and x.nazwisko = 'Stencel' and y.imię = 'Marcin' and y.nazwisko = 'Korbsday'; Rozpatrujemy tylko ścieżki bez cyklu, a dokładniej bez powtórzeń węzłów. Co najwyżej jeden węzeł może się wystąpić dwa razy i wtedy jest on także węzłem ostatnim. Wyrażenia ścieżkowe ewaluuje się do zbioru ścieżek. Ścieżką nazwiemy ciąg (w 0, l 1, w 1, l 2, w 2,, w n 1, l n, w n ). Dla takiej ścieżki zmienna ścieżkowa ma wartość: @P = l 1, l 2,, l n

l n w n w n 1 l 1 w 1 w i =w n w 0 w 0 w 0 =w n Zbiorowe i skalarne wyrażenia ścieżkowe select [ Imię : x.imię, Nazwisko : x.nazwisko, Wnuki : flatten(select y.dzieci from y x.dzieci) ] from x ; Przyjrzymy się wyrażeniu: i typom jego podwyrażeń: flatten(select y.dzieci from y x.dzieci) typ(y.dzieci) = {} typ(select y.dzieci from y x.dzieci) = {{}} typ(flatten(select y.dzieci from y x.dzieci)) = {} W językach strukturalnych, gdy nie wolno korzystać ze zbiorowych wyrażeń ścieżkowych konieczne jest flatten i podzapytanie select. W językach semistrukturalnych za pomocą zbiorowych wyrażeń ścieżkowych możemy napisać to zapytanie znacznie prościej. select [ Imię : x.imię, Nazwisko : x.nazwisko, Wnuki : x.dzieci.dzieci ] from x ; Dane semistrukturalne Grafy bez typów, np. OEM (Object Exchange Model) to zbiór krotek (oid, typ, wartość). Jeśli typ węzła jest złożony, to mogą z niego wychodzić krawędzie skierowane do innych węzłów (dowolnych). Tu najlepiej pasują te konstrukcje ścieżkowe, ponieważ chodzimy po grafie. DB Małżeństwo &2 &1 Data_zawarcia Żona &4 &7 &3 #22-06-2006# Imię Nazwisko Imię Nazwisko &5 &6 &8 &9 Agnieszka Klon Marek Klon Mąż Wierzchołki w grafie są: 1. atomowe (mają wartość), tu: &3, &5, &6, &8, &9. 2. złożone (mają wychodzące krawędzie), tu: &1, &2, &4, &7.

Lorel i UnQL select x from DB. x exists y in x.dziecko : y.imię = 'Józef'; select wnuk : x from DB..Dziecko.Dziecko x; select wnuki : (select y from x.dziecko y) from DB..Dziecko x; select potomki : (select y from x(.dziecko)* y) from DB. x; select osobaipotomki : [ x, potomki : (select y from x(.dziecko)* y) ] from DB. x; DB Imię &1 Dziecko &10 &7 Ojciec Nazwisko Imię Nazwisko &11 &12 &8 &9 Dorota Klon Krzysztof Klon Zamiana etykiet na wartości select małżonek : [ rola : @L, kto : x.nazwisko ] from DB.Małżeństwo._@L x @L = 'Mąż' or @L = 'Żona'; Wyłączenie pewnych etykiet select małżonek : [ rola : @L, kto : x.nazwisko ] (wyłączamy księdza from DB.Małżeństwo. _@L x i wszystkie węzły @L <> 'Ksiądz' bez nazwiska) and count(x.nazwisko) > 0; DB Data_zawarcia Żona &3 Małżeństwo &2 #22-06-2006# Ksiądz Mąż &1 &4 &7 &13 Imię Nazwisko &14 &15 Mirek Nowak

XML XML należy uważać za sposób zapisu i transmisji danych. XML jest dobrym sposobem zapisu danych seminstrukturalnych. DTD (Document Type Definition) = Schemat danych <!ELEMENT USC <!ELEMENT <!ELEMENT PESEL <!ELEMENT Imię <!ELEMENT Nazwisko <!ELEMENT Dzieci <!ELEMENT Zameldowanie <!ELEMENT Data_od <!ELEMENT Data_do (+)> (PESEL, Imię, Nazwisko, Zameldowanie*, Dzieci?)> (+)> (Adres, Data_od, Data_do?)> <!ELEMENT Adres (Miejscowość, Ulica?, Nr_domu, Nr_mieszkania?)> <!ELEMENT Miejscowość <!ELEMENT Ulica <!ELEMENT Nr_domu <!ELEMENT Nr_mieszkania Przykładowy dokument XML <?xml version="1.0" encoding="windows-1250"?> <USC> <PESEL>43534534534</PESEL> <Imię>Marek</Imię> <Nazwisko>Kwiatkowski</Nazwisko> <Dzieci> <PESEL>03243054854</PESEL> <Imię>Ludmiła</Imię> <Nazwisko>Kwiatkowska</Nazwisko> <PESEL>53453454235</PESEL> <Imię>Bogusława</Imię> <Nazwisko>Kwiatkowska</Nazwisko> <PESEL>02090475747</PESEL> <Imię>Natalia</Imię> <Imię>Kornelia</Imię> <Nazwisko>Kwiatkowska</Nazwisko> </Dzieci> </USC> XML-QL oddzielone przecinkami warunki i deklaracje zmiennych zakresowych wynik PESELE osób mających dzieci (zmienne poprzedzone dolarem) <PESEL>$P</PESEL>

Spłaszczenie struktury dokumentu <Dzieci>$y</Dzieci> in 'abc.xml' <result>$p</result> element_as $O in 'abc.xml' $O Osoby z takim samym imieniem i nazwiskiem ( zamyka ostatni znacznik) <PESEL>$P</PESEL> <Imię>$I <Nazwisko>$N in 'abc.xml', $I = $N <result> $P Złączenie zależne Zagnieżdżone zapytanie (element_as przypisuje całość znacznika na zmienną, z którą jest związany, tu: wartością zmiennej $O będzie znacznik ) Zmienne w znacznikach (wypisanie listy znaczników z dokumentu) <Nazwisko>$N <Dzieci>$D in 'abc.xml', <Nazwisko>$M in $D, $M!= $N <wynik> <Rodzic>$N <Dziecko>$M <Nazwisko>$N in 'abc.xml' <Lista> <Nazwisko>$N <PESEL>$P <Nazwisko>$M element_as $O in 'abc.xml', $N = $M $O <$P> in 'abc.xml' <Znacznik>$P Ścieżki w znacznikach symbole jak w DTD (wszyscy potomkowie osób) <(Dzieci.)+> element_as $O in 'abc.xml' <Potomek>$O Wszystkie miejscowości i ulice <(Dzieci.)+.(Miejscowość Ulica)>$A in 'abc.xml'

Numeracja znaczników XSLT <Adres>$A <Dzieci> <[$I]>$O <Dziecko> <Nr>$I $O XSLT też jest językiem zapytań, choć trochę nietypowym. XSLT odpowiada gramatyce atrybutywnej za akcjami. Arkusz stylów XSLT steruje zejściami rekurencyjnymi w głąb przetwarzanego dokumentu. <?xml version="1.0" encoding="windows-1250"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:html="http://www.w3.org/tr/rec-html40"> <xsl:template match="/"> <html:html> <html:head> <html:title>lista rodów</html:title> </html:head> <html:body> <xsl:apply-templates/> </html:body> </html:html> <xsl:template match="/"> <html:h1>ród: <xsl:apply-templates select="nazwisko"/></html:h1> <html:ul> <xsl:call-template name="wydruk-osoby"/> </html:ul> <xsl:template match="" name="wydruk-osoby"> <html:li> Nazwisko: <xsl:apply-templates select="nazwisko"/><html:br/> Imię: <xsl:apply-templates select="imię"/> <xsl:if test="dzieci"> <html:ul> <xsl:apply-templates select="dzieci/"/> </html:ul> </xsl:if> </html:li> <xsl:template match="nazwisko"> <html:b> <xsl:value-of select="."/></html:b> <xsl:template match="imię"> <html:b> <xsl:value-of select="."/></html:b> </xsl:stylesheet>