do druku

Transkrypt

do druku
Plan wykładu
Spis treści
1 Bazy przechowujące XML
1.1 XMLType . . . . . . . .
1.2 Schematy XML . . . . .
1.3 Perspektywy XMLType .
1.4 Biblioteki PL/SQL . . .
1.5 SQL/XML . . . . . . . .
1.6 XML DB Repository . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
3
5
6
6
9
2 Natywne bazy XML
9
2.1 Języki zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 Źródła
17
Bazy danych a XML
• Bazy danych umożliwiające przechowanie danych w formacie XML (ang. XMLenabled database systems) - postrelacyjne, obiektowo-relacyjne systemy zarządzania
bazą danych, które na wejściu i na wyjściu akceptują i generują dane w postaci
XML.
• Bazy danych dokumentów XML - natywne bazy danych XML (ang. native XML
database systems)- zorientowane na przetwarzanie dokumentów XML, używają dokumentów XML jako podstawowego typu przechowywania.
1
Bazy przechowujące XML
Przechowywanie danych XML
• w systemie plików
• w atrybutach typu: CLOB, XMLType
• w bazach danych w postaci zdekomponowanej
– mapowanie schematów XML na schematy baz danych
– generowanie schematów XML ze schematów baz danych i odwrotnie
XML DB
XML DB
rozszerzenie funkcjonalności SZBD Oracle, służące wygodnemu gromadzeniu, generowaniu, przeszukiwaniu i przetwarzaniu dokumentów XML.
Składowe:
• typ XMLType,
• możliwość wykorzystywania schematów XML,
• biblioteki programisty PL/SQL służące do parsowania dokumentów XML,
1
• rozszerzenia języka SQL umożliwiające generowanie dokumentów XML na podstawie treści relacyjnej,
• mechanizm XML DB Repository, umożliwiający wykorzystanie bazy danych jako
łatwo dostępnej składnicy dokumentów XML.
1.1
XMLType
XMLType
XMLType
typ danych służący do przechowywania i przetwarzania dokumentów XML w obiektoworelacyjnym SZBD Oracle. Każda wartość typu XMLType jest odrębnym, kompletnym
dokumentem XML.
Fizyczne składowanie dokumentów na dwa sposoby:
• każdy dokument staje się jednym dużym obiektem CLOB (domyślnie),
• każdy dokument jest dekomponowany na rekordy zapisywane w wielu tabelach relacyjnych (wymaga posiadania schematu XML).
Obsługa XMLType
CREATE TABLE produkty_xml (
kod NUMBER(11),
opis XMLType
)
INSERT INTO produkty_xml
VALUES (67653829370, XMLType(
’<produkt>
<nazwa>Antena dachowa</nazwa>
<symbol>1709765</symbol>
<cena>85</cena>
</produkt>’
)
);
select opis from produkty_xml;
OPIS
-----------------------------------<produkt>
<nazwa>Antena dachowa</nazwa>
<symbol>1709765</symbol>
<cena>85</cena>
</produkt>
Funkcje do przetwarzania XMLType
• existsNode() - sprawdza, czy wartościowanie podanego wyrażenia XPath względem wartości XMLType zwraca co najmniej jeden element lub węzeł tekstowy. Wynikiem działania tej funkcji jest wartość 0 lub 1.
2
SELECT kod
FROM produkty_xml
WHERE existsNode(opis,
’/produkt[cena=85]’) = 1;
• extract() - zwraca fragment dokumentu XML wskazany wyrażeniem XPath.
• extractValue() - zwraca wartość skalarną odpowiadającą wynikowi wartościowania wyrażenia XPath.
• updateXML() - modyfikuje wybrane węzły w obiekcie XMLType. Argumentami
funkcji updateXML() są pary: wyrażenie XPath, wartość.
UPDATE ksiazki_xml p
SET VALUE(p) = updateXML(VALUE(p),
’//cena/text()’, ’56’,
’//rok/text()’, 2003)
WHERE extractValue(VALUE(p), ’/ksiazka/@isbn’)=
’83-7279-149-X’;
• XMLTransform() - dokonuje transformacji dokumentu XML w oparciu o dostarczony arkusz stylów XSL. Zarówno dokument źródłowy, jak i arkusz stylów są przekazywane funkcji jako argumenty typu XMLType. Wynikiem działania funkcji jest
przekształcony dokument XML, reprezentowany przez wartość XMLType.
1.2
Schematy XML
Schematy XML
Schematy XML
(ang. XML Schema) - służą do przechowywania w bazie danych opisu struktury dokumentów XML, a następnie ich wykorzystywania do:
• walidacji dokumentów,
• automatycznego odwzorowywania dokumentów XML w struktury relacyjne,
• tworzenia tabel lub kolumn XMLType opartych na schematach XML,
• poprawy efektywności operacji DML na danych XML.
Rejestracja schematu
Rejestracja schematu za pomocą funkcji dbms_xmlschema.registerSchema() pociąga
za sobą szereg niejawnych operacji, wykonywanych przez SZBD, mających na celu przygotowanie infrastruktury dla składowania i przetwarzania dokumentów XML zgodnych z
danym schematem:
• utworzenie obiektowych typów danych SQL umożliwiających składowanie dokumentów XML w postaci strukturalnej,
• utworzenie domyślnych tabel dla głównych elementów schematu.
3
Przykład
DBMS_XMLSCHEMA.registerSchema(’ksiazka.xsd’,
’<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xdb="http://xmlns.oracle.com/xdb">
<xs:element name="ksiazka" xdb:SQLType="KSIAZKA_T">
<xs:complexType>
<xs:sequence>
<xs:element name="tytul" type="xs:string"/>
<xs:element name="cena" type="xs:float"
xdb:SQLName="CENA"
xdb:SQLType="FLOAT"/>
<xs:element name="autorzy" minOccurs="0"
maxOccurs="1"
xdb:SQLType="CLOB">
<xs:complexType>
<xs:sequence>
<xs:element name="autor" type="xs:string"
minOccurs="1"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="wydawnictwo" type="xs:string"/>
<xs:element name="rok" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="isbn" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>
’);
Przykład cd.
SQL> desc KSIAZKA_T
KSIAZKA_T is NOT FINAL
Nazwa
Wartość NULL? Typ
-------------- -------- ----- -----------------SYS_XDBPD$
XDB.XDB$RAW_LIST_T
isbn
VARCHAR2(4000)
tytul
VARCHAR2(4000)
CENA
FLOAT(126)
autorzy
CLOB
wydawnictwo
VARCHAR2(4000)
rok
NUMBER(38)
Definiowanie elementu na bazie schematu
W oparciu o zarejestrowany schemat można utworzyć tabele, perspektywy lub kolumny typu XMLType. Podczas definiowania elementów XMLType należy wskazać adres
URL, pod którym zarejestrowano schemat XML, oraz wskazać wybrany element główny
schematu.
CREATE TABLE ksiazki_col_xsd (
4
id NUMBER,
pozycja XMLType
)
XMLTYPE COLUMN pozycja
XMLSCHEMA "ksiazka.xsd" ELEMENT "ksiazka";
Schematy - dalsze możliwości
• dbms_xmlschema.generateSchema() - automatyczne generowanie schematów XML
na podstawie definicji obiektowych typów danych; jako argumenty przyjmuje nazwę
właściciela i nazwę zdefiniowanego obiektowego typu danych. W wyniku funkcja
zwraca wygenerowany schemat XML.
• Przepisywanie zapytań:konwersja zapytań zawierających wyrażenia XPath do zapytań operujących na tabelach i kolumnach źródłowych:
-- zapytanie oryginalne:
SELECT VALUE(k) FROM katalog k
WHERE extractValue(value(k),
’/katalog/ksiazka/rok’) = ’2002’;
-- zapytanie po transformacji:
SELECT VALUE(k) FROM katalog k
WHERE k.xmldata.ksiazka.rok = ’2002’;
• dbms_xmlschema.copyEvolve() - możliwość modyfikacji zarejestrowanego schematu XML.
1.3
Perspektywy XMLType
Perspektywy XMLType
Perspektywy XMLType
budowane ponad tabelami obiektowo-relacyjnymi, a zwracające obiekty XMLType. Umożliwiają one przezroczystą prezentację istniejących danych w formacie XML. Podczas definiowania perspektyw XMLType mogą być wykorzystywane schematy XML.
CREATE VIEW emp_xml_view (doc) AS
SELECT XMLElement(NAME "EMPLOYEE",
XMLForest(ename, job, sal))
FROM emp;
SELECT doc FROM emp_xml_view v
WHERE v.doc.existsNode(’/EMPLOYEE[SAL>2900]’)=1
DOC
------------------------------------------------------------<EMPLOYEE>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
<SAL>2975</SAL>
5
</EMPLOYEE>
<EMPLOYEE>
<ENAME>SCOTT</ENAME>
<JOB>ANALYST</JOB>
<SAL>3000</SAL>
</EMPLOYEE>
...
1.4
Biblioteki PL/SQL
Biblioteki PL/SQL
• PL/SQL Parser API for XMLType (dbms_xmlparser) - zawiera parser DOM, służący do transformacji dokumentu XML do standardowej struktury drzewa Document
Object Model (DOM).
• PL/SQL DOM API for XMLType (dbms_xmldom) - do nawigacji wewnątrz drzewa
DOM.
• PL/SQL XSLT Processor for XMLType (dbms_xslprocessor) - do transformacji
XSL.
1.5
SQL/XML
SQL/XML
SQL/XML
część specyfikacji języka zapytań SQL, opisująca sposoby wykorzystywania SQL w połączeniu z XML; rozszerza SQL o funkcje i operatory służące do generowania dokumentów
XML na podstawie zawartości relacyjnej bazy danych.
Podstawowe funkcje:
• XMLElement(),
• XMLForest(),
• XMLGen(),
• XMLConcat(),
• XMLAgg().
XMLElement()
XMLElement()
służy do tworzenia elementów XML z danych, które nie są obiektami XML.
SELECT p.nr_akt, XMLElement (NAME "prac",
p.nazwisko) AS "wynik"
FROM pracownicy p;
---8901
8902
9121
9011
------------------<prac>KROL</prac>
<prac>MICHALSKI</prac>
<prac>KUKULSKI</prac>
<prac>WIERZBICKI</prac>
6
9235 <prac>FIKUS</prac>
8904 <prac>SKALSKI</prac>
...
Z wykorzystaniem atrybutów:
SELECT
XMLElement (NAME "prac",
XMLAttributes(p.nr_akt AS "id"),
p.nazwisko) AS "wynik"
FROM pracownicy p;
-------------------------------------<prac id="8901">KROL</prac>
<prac id="9235">FIKUS</prac>
<prac id="8904">SKALSKI</prac>
<prac id="8910">MONIUSZKO</prac>
<prac id="8911">WRZOSEK</prac>
<prac id="9411">LISIECKI</prac>
<prac id="8932">BRZOZKA</prac>
...
XMLForest()
XMLForest()
tworzy las elementów XML na podstawie danych nie będących obiektami XML.
SELECT p.nr_akt, XMLForest(p.nazwisko AS "nazwisko",
p.placa AS "placa") AS "wynik"
FROM pracownicy p WHERE p.nr_akt < 9000 ;
NR_AKT wynik
----- -----------------------------8901 <nazwisko>KROL</nazwisko><placa>7000</placa>
8902 <nazwisko>MICHALSKI</nazwisko><placa>5000</placa>
8904 <nazwisko>SKALSKI</nazwisko><placa>3500</placa>
8910 <nazwisko>MONIUSZKO</nazwisko><placa>5000</placa>
8911 <nazwisko>WRZOSEK</nazwisko><placa>1500</placa>
8913 <nazwisko>KOWALSKA</nazwisko><placa>5000</placa>
...
XMLGen()
XMLGen()
pozwala generować dokumenty XML na podstawie szablonu realizowanego na źródłowych
danych relacyjnych.
SELECT XMLGen ( ’<prac id="{$NR_AKT}">
<nazwisko>{$NAZWISKO}</nazwisko>
<placa>{$PLACA}</placa>
</prac>’,
p.nr_akt, p.nazwisko AS nazwisko,
p.placa) AS "wynik"
FROM pracownicy p
WHERE p.nr_akt < 9000 ;
7
wynik
----- -----------------------------<prac id="8901">
<nazwisko>KROL</nazwisko>
<placa>7000</placa>
</prac>
<prac id="8902">
<nazwisko>MICHALSKI</nazwisko>
<placa>5000</placa>
</prac>
...
XMLAgg()
XMLAgg()
służy do tworzenia lasu elementów z kolekcji elementów XML wywiedzionych z różnych
rekordów tabeli.
SELECT
XMLElement(NAME "dzial",
XMLAttributes(p.id_dzialu AS "id"),
XMLAgg(XMLElement(NAME "prac",
p.nazwisko))
) AS "wynik"
FROM pracownicy p
GROUP BY id_dzialu;
<dzial id="10">
<prac>KROL</prac>
<prac>SKALSKI</prac>
<prac>KOWALSKA</prac>
</dzial>
<dzial id="20">
<prac>MONIUSZKO</prac>
<prac>LISIECKI</prac>
<prac>WOJCIK</prac>
<prac>RYBAK</prac>
<prac>SZCZESNY</prac>
<prac>WRZOSEK</prac>
</dzial>
...
SELECT
XMLElement(NAME "dzial",
XMLAttributes(nazwa AS "nazwa"),
XMLAgg(XMLElement(NAME "prac", nazwisko)
ORDER BY nazwisko)) AS "wynik"
FROM pracownicy NATURAL JOIN dzialy
GROUP BY nazwa;
<dzial nazwa="BADANIA">
<prac>NAWROCKI</prac>
<prac>PRUSINSKA</prac>
</dzial>
<dzial nazwa="KSIEGOWOSC">
<prac>BIELECKA</prac>
<prac>BRZOZKA</prac>
<prac>MAZUR</prac>
8
<prac>WOJCIK</prac>
</dzial>
...
1.6
XML DB Repository
XML DB Repository
Repozytorium dokumentów XML
(ang. XML DB Repository) jest usługą SZBD Oracle, umożliwiającą przechowywanie i
udostępnianie dokumentów XML w formie wirtualnego systemu plików, implementowanego wewnątrz bazy danych.
• Dostęp do repozytorium dokumentów XML jest możliwy poprzez FTP, WebDAV/HTTP
lub SQL.
• Dokumenty i foldery umieszczane w repozytorium są zapisywane w tabelach bazy
danych.
• Programista może uzyskać dostęp do tych tabel m.in. za pomocą funkcji pakietu
dbms_xdb.
2
Natywne bazy XML
Natywne bazy XML
Baza danych dokumentów XML:
• definiuje model dla dokumentów XML-owych;
• dokumenty XML podstawową jednostką składowania;
• wykorzystuje dowolny sposób fizycznego składowania.
Funkcjonalność bazy danych dokumentów XML
Bazy dokumentów XML zapewniają:
• składowanie dokumentów XML,
• definiowanie i przechowywanie schematów (DTD, XMLSchema),
• obsługa zapytań (XPath, XQuery, XML-QL, Quilt),
• obsługa modyfikacji, wstawiania i usuwania dokumentów,
• obsługa interfejsów programistycznych (XML:DB API, XQuery API for Java - XQJ,
SAX, DOM, JDOM),
• funkcjonalność tradycyjnych SZBD.
9
2.1
Języki zapytań
Języki zapytań
Wymagania:
• zapisanie złożonych warunków wyszukiwań
• deklaratywność
• wyniki w tej samej formie, co dane źródłowe
• wykonanie przekształceń znalezionej informacji, w tym agregacji
• obsługa kwantyfikatorów
• zachowanie hierarchii i sekwencji struktur
• itp.
Języki zapytań dla XML
• Lorel - opracowano w ramach przedsięwzięcia LORE w Uniwersytecie Stanforda
jako język zapytań dla danych półstrukturalnych. Dostosowany do przetwarzania
dokumentów XML; jest językiem składniowo podobnym do SQL; był on wzorowany
na OQL ze standardu ODMG.
select R.tytuł
from dokument.książka.rozdział R,
R(.punkt)+.tytuł TP
where TP = "Standardowe typy danych";
10
• XML-QL - opracowano w laboratoriach AT&T. Zapytania XML-QL składają się z
dwóch części: where (jak w SQL from i where razem wzięte) i construct (odpowiada
klauzuli select z SQL).
where
<książka>
<rozdział>
<tytuł> $TR </>
<punkt+.tytuł> $TP </>
</rozdział>
</książka> in "ksiazka.xml",
$TP = "Standardowe typy danych"
construct
<tytuł> $TR </tytuł>
11
• XML-GL - graficzny język zapytań opracowany na Politechnice Mediolańskiej; jest
próbą realizacji języka przyjaznego ludziom na wzór QBE (Query-By-Example =
zapytanie poprzez przykład) opracowanego dla relacyjnych baz danych.
12
• XSLT - rekomendowany przez W3C język do definiowania transformacji dokumentów XML w inne dokumenty (być może również XML). Jedno przekształcenie XSLT
przetwarza tylko jeden dokument XML. XSLT jest przeznaczony raczej do formatowania i wyświetlania dokumentów, jednak szablon XSLT jest definicją pewnej
funkcji działającej w zbiorze dokumentów XML, ma więc pewne podstawowe cechy
zapytania.
<?xml version="1.0" encoding="iso-8859-2" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="książka/rozdział"/>
</xsl:template>
<xsl:template match="/książka/rozdział">
<xsl:if test="punkt//tytuł=’Standardowe typy danych’">
<tytuł>
<xsl:value-of select="tytuł"/>
</tytuł>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
• XQL - służy do wybierania i filtrowania elementów oraz tekstu z dokumentów XML;
nie pozwala na konstruowanie nowych elementów w wyniku zapytania. Zapytanie
XQL może zwrócić tylko pewien podzbiór elementów i tekstów znajdujących się w
dokumentach wejściowych. Jest to język zapytań ścieżkowych podobny do XPath.
książka/rozdział[punkt//tytuł=
’Standardowe typy danych’]/tytuł
13
• XPATH - deklaratywny język wykorzystywany przez kilka innych technologii rekomendowanych przez konsorcjum W3C. XPath jest używany do adresowania elementów dokumentów XML (m.in. w XSLT i XLink/XPointer) oraz do wyszukiwania
wzorców w dokumentach XML (m.in. w XSLT i XQuery).
• XQuery - “jest tym dla XML czym jest SQL dla baz danych”.
2.2
XQuery
XQuery
XQuery
- funkcyjny język zapytań dla dokumentów XML
Cechy:
• deklaratywny i zgodny z modelem danych XML;
• konstrukcje języka zawsze zwracaja wartość;
• konstrukcje można zagnieżdżać;
• zbudowany na bazie wyrażeń XPath;
• zdolny do przetwarzania dokumentów zawierających odwołania do różnych przestrzeni nazw;
• umożliwia kontrolę typów dla systemu typów XML Schema;
• poprawnie działa również wtedy, gdy nie zdefiniowano schematów albo są one niedostępne;
• umożliwia łączenie danych pochodzących z wielu dokumentów i liczenie agregacji;
• rekomendowany przez W3C.
XQuery - składowe
Podstawowe elementy języka:
• sekwencje
• wyrażenia (ścieżkowe, warunkowe, agregacje, kwantyfikatory)
• zmienne
• operatory
• funkcje wbudowane
• wartości logiczne
• komentarze
• proste funkcje użytkownika
14
Zasady
• wielkość liter jest rozróżniana
• elementy, atrybuty i zmienne muszą mieć nazwy zgodne ze standardem XML
• łańcuchy umieszczamy w apostrofach lub cudzysłowie
• nazwy zmiennych są poprzedzone znakiem $ ($zmienna)
• komentarze są ograniczone dwukropkami (:komentarz:)
Budowanie zapytania
• Otwarcie pliku XML:
doc("ksiazki.xml")
• Wybór elementów (tytuły książek znajdujących się w księgarni):
doc("ksiazki.xml")/ksiegarnia/ksiazka/tytul
w wyniku:
<title jezyk="pl">Rok 1984</title>
<title jezyk="pl">Hyperion</title>
<title jezyk="pl">Ubik</title>
...
• Budowanie warunku:
doc("ksiazki.xml")/ksiegarnia/ksiazka[cena<30]
w wyniku:
<ksiazka kategoria="dziecieca">
<tytul jezyk="pl">Entliczek Pentliczek</tytul>
<autor>Jan Brzechwa</autor>
<rok>2011</rok>
<cena>1.99</cena>
</ksiazka>
...
Budowanie zapytania z FLWOR
FLWOR
- akronim słów: “For, Let, Where, Order by, Return”:
• pozwala przejść po elementach zadanej kolekcji (fraza for),
• zdefiniować zmienne pomocnicze (fraza let),
• odfiltrować niepotrzebne elementy (fraza where),
• uporządkować to, co pozostanie (fraza order by),
• wypisać wynik w odpowiedniej postaci (fraza return).
15
• Zamiast:
doc("ksiazki.xml")/ksiegarnia/ksiazka[cena>30]/tytul
można użyć:
for $x in doc("ksiazki.xml")/ksiegarnia/ksiazka
where $x/cena>30
return $x/tytul
• FLWOR udostępnia sortowanie:
for $x in doc("ksiazki.xml")/ksiegarnia/ksiazka
where $x/cena>30
order by $x/tytul
return $x/tytul
XQuery dalsze składowe
• instrukcje warunkowe i kwantyfikatory
for $k in collection("ksiegarnia")/ksiazka
order by $k/tytul
return
<pozycja>
{
if (count($k/autor) <= 2)
then $k/autor
else <praca-zbiorowa/>
}
{ $k/tytul }
</pozycja>
• Funkcje i rekurencja
declare function local:st($elem as element()) as element()*
{
for $p in $elem/*[name()="punkt" or name()="rozdział"]
return
<pozycja>
{ $p/@id, $p/tytuł, local:st($p) }
</pozycja>
};
• kontrola typu
• typy podstawowe
• badanie typu
16
3
Źródła
Źródła
W wykładzie wykorzystano materiały:
• BUNEMAN P., Semistructured data, W: Proceedings of PODS, 1997, 117-121.
• ABITEBOUL S., Querying semi-structured data, W: Proceedings of ICDT, 1997,
1-18.
• www.ploug.org.pl/szkola/szkola_2/materialy/standard_SQL.pdf
• Oracle XML DB Developer’s Guide 10g Release 1, dokumentacja techniczna Oracle
• www.cs.put.poznan.pl/mzakrzewicz/pubs/ploug04xmldb.pdf
• Zbigniew Jurkiewicz, Semistrukturalne bazy danych - wprowadzenie, materiały do
wykładów, Instytut Informatyki UW
• Materiały do wykładów Pani mgr Wandy Kik
• http://stencel.mimuw.edu.pl/obd/xquery/
• http://www.w3schools.com/xquery/
• Wikipedia
17

Podobne dokumenty