Standard SQL/XML. Wprowadzenie do XQuery



Podobne dokumenty
Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

1 XML w bazach danych

Materiały szkoleniowe. Podstawy języka SQL

Technologie baz danych

Cechy języka XQUERY. o na wejściu dokument lub fragment względnie kolekcja dokumentów lub fragmentów o na wyjściu dokument lub fragment.

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

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

XML extensible Markup Language 7

Oracle 12c: Nowości w SQL i PL/SQL

Lista zadań nr 1. Bazy danych laboratorium. dr inż. Grzegorz Bazydło, dr inż. Jacek Tkacz

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

XML Repository. Maciej Zakrzewicz.

Model semistrukturalny

XQuery. sobota, 17 grudnia 11

Funkcje analityczne SQL CUBE (1)

Intro. I.Wojnicki, ZTB:XML ZTB: XML. Igor Wojnicki. Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie.

Spis treści. Przedmowa

Bazy dokumentów XML. Język XML. extensible Markup Language

XML w bazie danych IBM DB2

Język SQL. Rozdział 2. Proste zapytania

Bazy danych dokumentów XML wykład 1 wprowadzenie

Hurtownie danych - przegląd technologii

Oracle PL/SQL. Paweł Rajba.

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

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

3. Podzapytania, łączenie tabel i zapytań

Wprowadzenie do języka SQL

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

Przetwarzanie dokumentów XML w Oracle10g: XML DB

Microsoft SQL Server Podstawy T-SQL

Systemy GIS Tworzenie zapytań w bazach danych

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Bazy danych dokumentów XML wykład 3 modyfikacja dokumentów

Język XML Query. Czym jest XML Query? Po co XML Query? Tomasz Traczyk. Czym jest XML Query? Wprowadzenie do składni języka.

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

SQL. Receptury IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA. SPIS TREœCI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG

Relacyjne bazy danych. Podstawy SQL

Przestrzenne bazy danych Podstawy języka SQL

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Przykładowy dokument XML

Oracle11g: Wprowadzenie do SQL

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Materiały szkoleniowe. Podstawy jzyka SQL. Prowadzcy Anna Pijanowska - Kunierz Paweł ołnierczyk

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

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

PODZAPYTANIE (SUBSELECT)

Zbiór pytań nr 2. 1 Tabela DEPARTMENTS ma następującą strukturę:

Monika Kruk Mariusz Grabowski. Informatyka Stosowana WFiIS, AGH 13 grudzień 2006

Wprowadzenie do baz danych

Operacja PIVOT w języku SQL w środowisku Oracle

15. Funkcje i procedury składowane PL/SQL

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

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

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

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

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

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Wykład 6. SQL praca z tabelami 3

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

JPS. cwiczenia 3. Stosy, proste zapytania. Michał Lentner Polsko-Japońska Wyższa Szkoła Technik Komputerowych

Plan wykładu BAZY DANYCH II WYKŁAD 9. Dynamiczny SQL. Dynamiczny SQL

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

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Ćwiczenia 2 IBM DB2 Data Studio

Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis

Technologie semantyczne i sieci społecznościowe laboratorium

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

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

Język XML Query. Tomasz Traczyk. Politechnika Warszawska e mail:

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Bloki anonimowe w PL/SQL

Bazy danych. Plan wykładu. Złczenia tabel. Perspektywy cd. Wykład 9: Programowanie aplikacji baz danych po stronie serwera. Sekwencje Wyzwalacze

Relacyjne bazy danych. Podstawy SQL

Bazy danych dokumentów XML wykład 2 XQuery

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

XML w bazach danych i bezpieczeństwie

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Bazy danych. Plan wykáadu. Zale*noci funkcyjne. Wykáad 4: Relacyjny model danych - zale*noci funkcyjne. A B

SQL - Structured Query Language. strukturalny język zapytań

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

SQL do zaawansowanych analiz danych część 1.

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

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

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

XML w bazach danych i bezpieczeństwie

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Modelowanie wymiarów

Komunikacja z bazą danych psql

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

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

Map Reduce Proste zliczanie słów i zapytania SQL

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wykład 05 Bazy danych

Języki XPath i XQuery

Transkrypt:

Standard SQL/XML Wprowadzenie do XQuery Marek Wojciechowski marek@cs.put.poznan.pl http://www.cs.put.poznan.pl/~marek/

Języki zapytań dla XML Wraz z pojawieniem się standardu XML pojawiały się również propozycje języków zapytań dla danych XML: Lorel, XML-QL, XQL Obecnie finalizowane są prace związane ze standaryzacją dwóch języków zapytań dla XML: SQL/XML - zdefiniowany w postaci specyfikacji przygotowanych przez grupę SQLX (ogólny standard dotyczący zastosowań SQL w kontekście XML) XQuery - opracowany przez grupę roboczą W3C XML Query Working Group Oracle bierze aktywny udział w pracach nad obydwoma standardami

Język SQL/XML SQL/XML stanie się częścią standardu SQL (ANSI i ISO), opisującą sposoby wykorzystywania SQL w połączeniu z XML Information technology - Database languages - SQL - Part 14: XML-Related Specifications (SQL/XML) SQL/XML rozszerza SQL o funkcje i operatory służące do przetwarzania danych XML w bazach danych Stan prac nad standardem: przedłożony INCITS H2 (ciału zajmującemu się standardami w USA) Oracle XML DB jest pierwszą implementacją SQL/XML

Język XQuery Język zapytań dedykowany dla XML W połączeniu z XPath określany również jako XML Query Pozwala na przetwarzanie danych XML pochodzących z różnych źródeł (bazy danych, pliki) Stan prac nad standardem: Working Draft; standard ciągle ewoluuje Kompletna rekomendacja planowana na rok 2003 Oracle udostępnia prototypową implementację XQuery w języku Java

Obszary zastosowań SQL/XML i XQuery Kiedy używać SQL/XML? Gdy część danych ma charakter strukturalny, a część semi-strukturalny Gdy planujemy używanie narzędzi bazujących na SQL Gdy chcemy używać jedynie ustabilizowanych standardów (SQL and SQL/XML) Kiedy używać XQuery? Gdy wszystkie dane są w postaci dokumentów XML Gdy nie opieramy się na narzędziach bazujących na SQL Gdy niepełne ustalenie standardu nie stanowi przeszkody

Zakres standardu SQL/XML Mapowanie między zestawami znaków SQL a Unicode Mapowanie identyfikatorów SQL w nazwy XML (i odwrotnie) Problem znaków: spacja, _, :, prefiksu xml w nazwach Mapowanie między typami danych SQL i XML Schema Mapowanie wartości SQL i XML Mapowanie tabel do dokumentów XML Dane + XML Schema Problem wartości NULL Rozwiązanie 1: pominięcie znacznika Rozwiązanie 2: atrybut xsi:nil="true" Typ danych XML Dopuszczalne wartości: dokumenty, elementy, lasy elementów, węzły tekstowe, zawartość mieszana Funkcje (operatory) produkujące wartości XML: XMLElement, XMLForest, XMLGen, XMLConcat, XMLAgg

Funkcje produkujące dane XML XMLElement tworzy element XML z danych nie-xml XMLForest tworzy las elementów XML z danych nie-xml XMLGen tworzy element XML z wykorzystaniem szablonu XMLConcat tworzy las elementów przez konkatenację elementów XML wywiedzionych z jednego wiersza relacji XMLAgg tworzy las elementów z kolekcji elementów XML wywiedzionych z różnych wierszy relacji

SQL/XML w Oracle9iR2 Funkcje rozszerzające SQL zgodne z SQL/XML (określane jako funkcje SQLX): XMLElement, XMLForest, XMLConcat, XMLAgg (brak XMLGen!) Rozszerzenia standardu SQL/XML w Oracle9iR2 Dodatkowa funkcja SQLX: XMLColAttVal (podobna do XMLForest) Alternatywne mechanizmy generacji XML w Oracle9iR2 Funkcje SQL: SYS_XMLGEN, SYS_XMLAGG, XMLSequence Pakiet DBMS_XMLGEN (mapowanie danych relacyjnych w XML!) Generacja zawartości XML poprzez API typu XMLType XSQL Pages XML SQL Utility (XSU)

Generacja XML z bazy danych funkcjami SQLX - Przykładowe tabele źródłowe SQL> describe emp Nazwa NULL? Typ --------- -------- ------------ EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> describe dept Nazwa NULL? Typ ------- -------- ------------- DEPTNO NUMBER(2) DNAME VARCHAR2(14) LOC VARCHAR2(13) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- --------- --------- ----- -------- ------ ----- ------ 7369 SMITH CLERK 7902 80/12/17 800 20 7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30 7521 WARD SALESMAN 7698 81/02/22 1250 500 30 7566 JONES MANAGER 7839 81/04/02 2975 20 7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30 7698 BLAKE MANAGER 7839 81/05/01 2850 30 7782 CLARK MANAGER 7839 81/06/09 2450 10 7788 SCOTT ANALYST 7566 82/12/09 3000 20 7839 KING PRESIDENT 81/11/17 5000 10 7844 TURNER SALESMAN 7698 81/09/08 1500 0 30 7876 ADAMS CLERK 7788 83/01/12 1100 20 7900 JAMES CLERK 7698 81/12/03 950 30 7902 FORD ANALYST 7566 81/12/03 3000 20 7934 MILLER CLERK 7782 82/01/23 1300 10 DEPTNO DNAME LOC ------ ----------- --------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Funkcja XMLElement (1) Tworzy element XML z danych nie będących XML SELECT e.empno, XMLElement ( NAME "emp", e.ename) AS "result" FROM emp e; EMPNO result ------ ------------------- 7369 <emp>smith 7499 <emp>allen 7521 <emp>ward 7566 <emp>jones 7654 <emp>martin 7698 <emp>blake 7782 <emp>clark 7788 <emp>scott 7839 <emp>king 7844 <emp>turner 7876 <emp>adams 7900 <emp>james 7902 <emp>ford 7934 <emp>miller

Funkcja XMLElement (2) Atrybuty tworzonego elementu definiowane funkcją XMLAttributes SELECT XMLElement (NAME "emp", XMLAttributes (e.empno, e.ename) ) AS "result" FROM emp e WHERE e.empno < 7600; result ----------------------------------- <emp EMPNO="7369" ENAME="SMITH"/> <emp EMPNO="7499" ENAME="ALLEN"/> <emp EMPNO="7521" ENAME="WARD"/> <emp EMPNO="7566" ENAME="JONES"/> XMLAttributes zawsze jako drugi argument XMLElement

Funkcja XMLElement (3) Wartość NULL argumentu XMLAttributes skutkuje brakiem danego atrybutu w tworzonym elemencie SELECT XMLElement (NAME "emp", XMLAttributes (e.empno, e.ename, e.comm) ) AS "result" FROM emp e WHERE e.empno < 7600; result ---------------------------------------------- <emp EMPNO="7369" ENAME="SMITH"/> <emp EMPNO="7499" ENAME="ALLEN" COMM="300"/> <emp EMPNO="7521" ENAME="WARD" COMM="500"/> <emp EMPNO="7566" ENAME="JONES"/>

Funkcja XMLElement (4) Zmienić domyślną nazwę atrybutu można podając alias dla kolumny tabeli Elementy-dzieci tworzone są przez zagnieżdżone wywołania XMLElement SELECT XMLElement (NAME "emp", XMLAttributes (e.empno as "id"), XMLElement (NAME "name", e.ename), XMLElement (NAME "salary", e.sal) ) AS "result" FROM emp e WHERE e.empno < 7600; result --------------------------- <emp id="7369"> <name>smith</name> <salary>800</salary> <emp id="7499"> <name>allen</name> <salary>1600</salary> <emp id="7521"> <name>ward</name> <salary>1250</salary> <emp id="7566"> <name>jones</name> <salary>2975</salary>

Funkcja XMLElement (5) Wartość NULL argumentu XMLElement powoduje utworzenie pustego elementu SELECT XMLElement (NAME "emp", XMLAttributes (e.empno as "id"), XMLElement (NAME "name", e.ename), XMLElement (NAME "salary", e.sal), XMLElement (NAME "commission", e.comm) ) AS "result" FROM emp e WHERE e.empno < 7600; result ------------------------------- <emp id="7369"> <name>smith</name> <salary>800</salary> <commission/> <emp id="7499"> <name>allen</name> <salary>1600</salary> <commission>300</commission> <emp id="7521"> <name>ward</name> <salary>1250</salary> <commission>500</commission> <emp id="7566"> <name>jones</name> <salary>2975</salary> <commission/>

Funkcja XMLElement (6) XMLElement może generować elementy o mieszanej zawartości (elementy-dzieci i tekst) SELECT XMLElement (NAME "emp", XMLElement (NAME "name", e.ename ), ' earns ', XMLElement (NAME "salary", e.sal ) ) AS "result" FROM emp e WHERE e.empno < 7600 ; result --------------------------------- <emp> <name>smith</name> earns <salary>800</salary> <emp> <name>allen</name> earns <salary>1600</salary> <emp> <name>ward</name> earns <salary>1250</salary> <emp> <name>jones</name> earns <salary>2975</salary>

Funkcja XMLForest (1) Tworzy las elementów XML z danych nie będących XML SELECT e.empno, XMLForest (e.ename AS "name", e.sal AS "salary" ) AS "result" FROM emp e WHERE e.empno < 7600 ; EMPNO result ----- --------------------- 7369 <name>smith</name> <salary>800</salary> 7499 <name>allen</name> <salary>1600</salary> 7521 <name>ward</name> <salary>1250</salary> 7566 <name>jones</name> <salary>2975</salary>

Funkcja XMLForest (2) Może być wykorzystana do utworzenia listy elementów-dzieci w elemencie tworzonym funkcją XMLElement SELECT XMLElement (NAME "emp", XMLAttributes (e.empno as "id"), XMLForest (e.ename AS "name", e.sal AS "salary" ) ) AS "result" FROM emp e WHERE e.empno < 7600 ; result ------------------------- <emp id="7369"> <name>smith</name> <salary>800</salary> <emp id="7499"> <name>allen</name> <salary>1600</salary> <emp id="7521"> <name>ward</name> <salary>1250</salary> <emp id="7566"> <name>jones</name> <salary>2975</salary>

Funkcja XMLForest (3) Wartość NULL powoduje pominięcie danego elementu SELECT XMLElement (NAME "emp", XMLAttributes (e.empno as "id"), XMLForest (e.ename AS "name", e.sal AS "salary", e.comm AS "commission" ) ) AS "result" FROM emp e WHERE e.empno < 7600 ; result ------------------------------ <emp id="7369"> <name>smith</name> <salary>800</salary> <emp id="7499"> <name>allen</name> <salary>1600</salary> <commission>300</commission> <emp id="7521"> <name>ward</name> <salary>1250</salary> <commission>500</commission> <emp id="7566"> <name>jones</name> <salary>2975</salary>

Funkcja XMLGen Tworzy element z wykorzystaniem szablonu Funkcja niedostępna w Oracle9iR2! SELECT XMLGen ( '<emp id="{$empno}"> <name>{$name}</name> <salary>{$sal}</salary> ', e.empno, e.ename AS name, e.sal ) AS "result" FROM emp e WHERE e.empno < 7600 ; result ------------------------- <emp id="7369"> <name>smith</name> <salary>800</salary> <emp id="7499"> <name>allen</name> <salary>1600</salary> <emp id="7521"> <name>ward</name> <salary>1250</salary> <emp id="7566"> <name>jones</name> <salary>2975</salary> Kolejne wartości wstawiane w miejsce zmiennych szablonu

Funkcja XMLConcat Tworzy las elementów przez konkatenację elementów XML wywiedzionych z jednego wiersza relacji SELECT e.empno, XMLConcat (XMLElement ( NAME "name", e.ename), XMLElement ( NAME "salary", e.sal) ) AS "result" FROM emp e WHERE e.empno < 7600 ; EMPNO result ------ ---------------------- 7369 <name>smith</name> <salary>800</salary> 7499 <name>allen</name> <salary>1600</salary> 7521 <name>ward</name> <salary>1250</salary> 7566 <name>jones</name> <salary>2975</salary>

Funkcja XMLAgg (1) Tworzy las elementów z kolekcji elementów XML wywiedzionych z różnych wierszy relacji SELECT XMLElement ( NAME "department", XMLAttributes( e.deptno AS "number" ), XMLAgg( XMLElement ( NAME "emp", e.ename ) ) ) AS "result" FROM emp e GROUP BY e.deptno ; result ------------------------- <department number="10"> <emp>clark <emp>king <emp>miller </department> <department number="20"> <emp>smith <emp>ford <emp>adams <emp>scott <emp>jones </department> <department number="30"> <emp>allen <emp>blake <emp>martin <emp>turner <emp>james <emp>ward </department>

Funkcja XMLAgg (2) Przed utworzeniem lasu elementów dane źródłowe można posortować (nie działa w Oracle9iR2!) SELECT XMLElement ( NAME "department", XMLAttributes( e.deptno AS "number" ), XMLAgg( XMLElement ( NAME "emp", e.ename ) ORDER BY e.ename ) ) AS "result" FROM emp e GROUP BY e.deptno ; result ------------------------- <department number="10"> <emp>clark <emp>king <emp>miller </department> <department number="20"> <emp>adams <emp>ford <emp>jones <emp>scott <emp>smith </department> <department number="30"> <emp>allen <emp>blake <emp>james <emp>martin <emp>turner <emp>ward </department>

Funkcja XMLAgg (3) Hierarchiczne struktury XML można budować pobierając dane z kilku relacji SELECT XMLElement ( NAME "department", XMLAttributes( dname AS "name" ), XMLAgg( XMLElement ( NAME "emp", ename ) ) ) AS "result" FROM emp NATURAL JOIN dept GROUP BY dname ; result ------------------------ <department name="accounting"> <emp>clark <emp>king <emp>miller </department> <department name="research"> <emp>smith <emp>ford <emp>adams <emp>scott <emp>jones </department> <department name="sales"> <emp>allen <emp>blake <emp>martin <emp>turner <emp>james <emp>ward </department>

Funkcja XMLColAttVal Nie ma jej w obecnej postaci standardu SQL/XML (jest w Oracle9iR2) Generuje las elementów <column> - podobna do XMLForest Nazwy kolumn z SQL stają się wartościami atrybutu name w <column> Cel: uniknięcie konwersji nazw kolumn w SQL do nazw elementów XML SELECT XMLElement (NAME "emp", XMLAttributes (e.empno as "id"), XMLColAttVal (e.ename AS "name", e.sal AS "salary" ) ) AS "result" FROM emp e WHERE e.empno < 7600 ; result -------------------------------------- <emp id="7369"> <column name="name">smith</column> <column name="salary">800</column> <emp id="7499"> <column name="name">allen</column> <column name="salary">1600</column> <emp id="7521"> <column name="name">ward</column> <column name="salary">1250</column> <emp id="7566"> <column name="name">jones</column> <column name="salary">2975</column>

Charakterystyka języka XQuery XQuery Version 1.0 jest rozszerzeniem XPath Version 2.0 Każde wyrażenie które jest poprawne w obu tych standardach, zwróci w obu ten sam XQuery operuje na modelu danych wspólnym dla XQuery 1.0 i XPath 2.0 Model reprezentuje informacje w formie węzłów i wartości atomowych XQuery jest językiem funkcyjnym Bazuje na wyrażeniach (wyrażenia można zagnieżdżać) Wartością wyrażenia jest zawsze sekwencja (uporządkowana kolekcja węzłów i wartości atomowych; w szczególności sekwencja pusta) Podobnie jak w XML, w XQuery wielkość liter ma znaczenie Wszystkie słowa kluczowe pisane małymi literami (!) XQuery jest językiem "silnie typowanym" (typy XML Schema) Składnia XQuery nie jest składnią XML Istnieje reprezentacja XQuery w XML - XQueryX

Zapytania w XQuery Zapytanie w XQuery ma postać wyrażenia: Odczytującego sekwencję węzłów lub wartości atomowych Zwracającego sekwencję węzłów lub wartości atomowych Podstawowe formy wyrażeń w XQuery Wyrażenia pierwotne (literały, zmienne, wywołania funkcji) Wyrażenia ścieżkowe (selekcja węzłów) Konstruktory elementów Wyrażenia FLWOR ("flower") (FOR-LET-WHERE-ORDER BY-RETURN) Wyrażenia listowe (manipulacja na listach) Wyrażenia warunkowe Kwantyfikatory ("istnieje" i "dla każdego") Wyrażenia testujące/modyfikujące typy danych Funkcje odczytujące dane: document() - zwraca węzeł dokumentu np. document("a.xml")/cennik collection() - zwraca węzły z kolekcji np. collection("http://a.org")//kod input() - zwraca sekwencję wejściową np. input()//symbol

Wyrażenia ścieżkowe Najprostsze zapytania w XQuery to wyrażenia XPath document("produkty.xml")//produkt[cena>500] <?xml version="1.0" encoding="windows-1250"?> <cennik> <produkt kod="67653829370"> <nazwa>antena dachowa</nazwa> <symbol>1709765</symbol> <cena>85</cena> produkty.xml <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena>... </cennik> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena>

FOR-LET LET-WHERE-RETURN RETURN (1) Odpowiednik SELECT-FROM-WHERE z SQL for $d in document("produkty.xml")//produkt[cena > 500] return $d W tym wypadku wystarczyłoby wyrażenie ścieżkowe <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena>

FOR-LET LET-WHERE-RETURN RETURN (2) Klauzul FOR i LET może być wiele, mogą się dowolnie przeplatać, musi wystąpić co najmniej jedna z nich for $d in let $srednia := avg(document("produkty.xml")//produkt/cena) for $d in document("produkty.xml")//produkt where $d/cena > $srednia return <drogi_produkt> {$d/nazwa} {$d/cena} </drogi_produkt> Konstruktor elementu: <drogi_produkt> Podaj nazwy i ceny produktów, których cena przekracza średnią Wyrażenie listowe: średnia z listy cen <drogi_produkt> <nazwa>radioodtwarzacz CAR 2001</nazwa> <cena>525</cena> </drogi_produkt> <drogi_produkt> <nazwa>radioodtwarzacz CAR 2002</nazwa> <cena>625</cena> </drogi_produkt> <drogi_produkt> <nazwa>radioodtwarzacz CAR 2003</nazwa> <cena>675</cena> </drogi_produkt>

FOR-LET LET-WHERE-RETURN RETURN (3) Wyrażenia FLWR można zagnieżdżać let $srednia := avg(document("produkty.xml")//produkt/cena) return <drogie_produkty próg={$srednia}> { for $d in document("produkty.xml")//produkt where $d/cena > $srednia return $d } </drogie_produkty> Wygeneruj katalog produktów, których cena przekracza średnią (podaj średnią cenę) <drogie_produkty próg="402.5"> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena> </drogie_produkty>

FOR-LET LET-WHERE-RETURN RETURN (4) Konstrukcję FOR można wykorzystać do operacji połączenia (join) for $d in document("produkty.xml")//produkt, $e in document("produkty.xml")//produkt where $d/cena = $e/cena and $d/@kod < $e/@kod return <para_produktów> <nazwa_1>{$d/nazwa/text()}</nazwa_1> <nazwa_2>{$e/nazwa/text()}</nazwa_2> {$d/cena} </para_produktów> Podaj pary produktów o tej samej cenie (bez duplikatów) <para_produktów> <nazwa_1>zestaw głośnomówiący LOUD 1</nazwa_1> <nazwa_2>ładowarka samochodowa ATUT</nazwa_2> <cena>320</cena> </para_produktów>

FLWOR: Klauzula ORDER-BY Rozszerza wyrażenia FLWR o możliwość sortowania ów Zastępuje wcześniej proponowaną klauzulę SORTBY w FOR (!) for $d in document("produkty.xml")//produkt[cena > 500] order by $d/cena descending return $d Uporządkuj produkty wg cen, od najdroższych do najtańszych <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena>

Wyrażenia warunkowe for $d in document("produkty.xml")//produkt return <produkt klasa={ if ($d/cena > 400) then "drogi" else "tani" }> {$d/nazwa, $d/cena} Przypisz produktom atrybut klasa: drogi/tani Uwagi: Warunek musi być podany w nawiasach Klauzula ELSE jest obowiązkowa Wyrażenia warunkowe można zagnieżdżać <produkt klasa="tani"> <nazwa>antena dachowa</nazwa> <cena>85</cena> <produkt klasa="drogi"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <cena>525</cena> <produkt klasa="drogi"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <cena>625</cena>...

Kwantyfikator: SOME-IN IN-SATISFIES for $d in document("produkty.xml")//cennik where some $p in $d/produkt satisfies ($p/cena < 100) return $d Zwróć cenniki zawierające co najmniej jeden produkt w cenie poniżej 100 <cennik> <produkt kod="67653829370"> <nazwa>antena dachowa</nazwa> <symbol>1709765</symbol> <cena>85</cena> <produkt kod="56486294304"> <nazwa>radioodtwarzacz CAR 2001</nazwa> <symbol>3209765</symbol> <cena>525</cena> <produkt kod="56486294306"> <nazwa>radioodtwarzacz CAR 2002</nazwa> <symbol>3209766</symbol> <cena>625</cena> <produkt kod="56486294308"> <nazwa>radioodtwarzacz CAR 2003</nazwa> <symbol>3209767</symbol> <cena>675</cena>... </cennik>

Kwantyfikator: EVERY-IN IN-SATISFIES for $d in document("produkty.xml")//cennik where every $p in $d/produkt satisfies ($p/cena < 100) return $d Zwróć cenniki zawierające tylko produkty w cenie poniżej 100

XQueryX - Reprezentacja XQuery w XML Umożliwia zapytania na zapytaniach, generację zapytań, zagnieżdżanie zapytań w XML,... FOR $b IN document("bib.xml")//book WHERE $b/publisher = "Morgan Kaufmann" AND $b/year = "1998" RETURN $b/title XQuery <q:query xmlns:q="http://www.w3.org/2001/06/xqueryx"> <q:flwr> <q:forassignment variable="$b"> <q:step axis="slashslash"> <q:function name="document"> <q:constant datatype="charstring">bib.xml</q:constant> </q:function> <q:identifier>book</q:identifier> </q:step> </q:forassignment> <q:where>... </q:where> <q:return>... </q:return> </q:flwr> </q:query> XQueryX

Podsumowanie W najbliższym czasie należy spodziewać się pełnych, zatwierdzonych specyfikacji dwóch języków zapytań dla XML SQL/XML - standard ANSI/ISO Dla mieszanych danych strukturalnych i semi-strukturalnych w bazach danych XQuery - rekomendacja W3C Dla "czystych" danych XML w bazach danych, plikach, etc. Oracle bierze udział w pracach nad obydwoma standardami i już oferuje ich implementacje SQL/XML poprzez funkcje SQLX w ramach XML DB XQuery w postaci prototypu w języku Java