Język XQuery jako narzędzie do integracji danych Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis Tomasz Traczyk Wydział Elektroniki i Technik Informacyjnych Politechnika Warszawska 2 Integracja danych Integracja danych, c.d. Integracja danych Łączenie informacji pochodzącej z różnych źródeł wewnętrznych (zlokalizowanych w tej samej organizacji) zewnętrznych Cele integracji danych Uzyskiwanie najnowszych informacji na bieżąco Odpowiednie wybieranie i łączenie informacji Łatwa zmiana zakresu uzyskiwanych informacji Łatwe dostosowywanie do zmian w strukturze czy formacie informacji źródłowych Pożądane cechy narzędzi do integracji Działanie on-line Elastyczność Klasyczne metody integracji danych Bezpośrednia wymiana danych między aplikacjami wymagana ingerencja w źródła danych zwiększona komplikację systemów ryzyko związane z modyfikacjami Repozytorium gromadzące informacje obce konieczna replikacja danych» zajmuje miejsce» trzeba odświeżać repliki Rozwiązania specjalizowane on-line brak ogólności duże koszty mizerna elastyczność Trudności w integracji danych Dane ze źródeł heterogenicznych bazy danych» różne bazy relacyjne» bazy nierelacyjne pliki» arkusze kalkulacyjne dokumenty internetowe» strony w HTML» dokumenty XML» dokumenty w innych formatach Źródła internetowe różne protokoły internetowe» ftp» http» WebDav» SOAP 3 4
XML i XQuery w integracji danych Język XQuery jako narzędzie do integracji danych XML jako format integracji Duża siła wyrazu może reprezentować dowolne dane mające postać tekstową Elastyczność Łatwo dostępne narzędzia Własny język wielu źródeł danych serwisy w XML, XHTML Web Services Stosunkowo łatwa konwersja innych źródeł bazy danych arkusze kalkulacyjne HTML itp. XML jest bardzo dobrym formatem dla danych przeznaczonych do integracji XQuery jako narzędzie do integracji Cechy języka zapytań XQuery deklaratywny» łatwe pisanie zapytań nie trzeba kodować algorytmów uniwersalny» łatwe łączenie dane z wielu źródeł» dowolne formatowanie wyniku XQuery umożliwia integrację źródeł danych» w czasie rzeczywistym» bez replikowania informacji efektywność» dobry stosunek wydajności i jakości wyniku do nakładów elastyczność integracji» łatwe rozszerzanie» łatwa adaptacja do zmian danych źródłowych XQuery może być bardzo dobrym narzędziem do integracji danych dostępnych w XML 5 6 XQuery przypomnienie Czym jest XQuery (XML Query) Deklaratywny język zapytań dla dokumentów XML Propozycja World Wide Web Consortium (working draft) Umożliwia łączenie danych z wielu źródeł wykonywanie obliczeń (np. agregacji) dowolne formatowanie wyniku w XML użycie zmiennych pomocniczych definiowanie i wywoływanie funkcji użytkownika Składnia języka Język funkcyjny konstrukcje złożone z wyrażeń zwracających sekwencje sekwencje: uporządkowane ciągi węzłów i wartości prostych Bazuje na ścieżkach XPath 2.0 najprostsze zapytania: wyrażenia XPath Korzysta z przestrzeni nazw predefiniowane przestrzenie i prefiksy dla funkcji wbudowanych XQuery i XPath Złożone zapytania buduje się wykorzystując konstrukcje FLWOR XQuery przypomnienie, c.d. Wyrażenia FLWOR for przypisuje do zmiennej kolejne pozycje sekwencji zwróconej przez wyrażenie XPath let dokonuje jednokrotnego podstawienia wyniku wyrażenia do zmiennej where i order by znaczenie podobne jak w SQL return określa postać wyniku, umożliwiając dokonywanie różnorodnych przekształceń Przykład: <terminy_oplat> { for $r in doc("terminy.xml")//termin let $t := $r/text(), $z := $r/@typ_zaliczenia where $z = ('P', 'L') order by $z return <termin typ="{$z}"> <data>{$t}</data> </termin> } </terminy_oplat> <terminy_platnosci> <termin typ_zaliczenia="e">2005-10-20</termin> <termin typ_zaliczenia="z">2005-10-20</termin> <termin typ_zaliczenia="p">2005-09-25</termin> <termin typ_zaliczenia="l">2005-09-25</termin> </terminy_platnosci> <terminy_oplat> <termin typ="l"> <data>2005-09-25</data> </termin> <termin typ="p"> <data>2005-09-25</data> </termin> </terminy_oplat> 7 8
XQuery w technologii Oracle Oracle 10g release 2 Nowe funkcje SQL/XML XMLQuery» wykonuje zapytanie podane jako parametr» zwraca w wyniku fragment dokumentu (o typie XMLType) XMLTable» wykonuje zapytanie XQuery» elementy wynikowej sekwencji umieszcza w wierszach wirtualnej tabeli, która może być wykorzystana w klauzuli FROM zapytań SQL Nowe polecenie SQL*Plus XQUERY» umożliwia interaktywne wykonywanie zapytań XQuery Oracle Application Server 10g Zapowiadane wbudowanie technologii XDS (XML Data Synthesis) Język XQuery jako narzędzie do integracji danych 9 10 Architektura integracji danych Wymagania w stosunku do usług integracji danych XML Dostęp do źródeł danych konwertery na XML działające on-line wirtualne widoki danych w XML Dostępność wyników integracji od strony klienta i od strony bazy danych w różnorodnych formatach i przez różne protokoły» HTML, XML» JSP (biblioteki znaczników)» API» komponenty EJB, CORBA itp.» Web Services (SOAP) XML Data Synthesis Oracle XDS Narzędzie do integracji danych działające w warstwie middle-tier napisane w Jawie (aplikacja serwera OC4J) używające XML jako wspólnego formatu danych używające języka XQuery do definiowania sposobu integracji Dostępność obecnie wersja developers preview technologia ma być włączona do AS10g Najlepszą lokalizacją dla usług integracji wydaje się warstwa middle-tier 11 12
Źródła danych dla XDS Wyniki XDS Możliwe źródła danych Dokumenty XML Dokumenty nie-xml transformowane na bieżąco opis transformacji w D3L Dane z baz relacyjnych przez JDBC Dane uzyskiwane z Web Services Dane z aplikacji typu EIS dostępne przez odpowiedni adapter JCA (J2EE Connector Architecture) Buforowanie danych XDS może buforować dane źródłowe polepszenie wydajności parametry buforowania ustawiane w pliku konfiguracyjnym Dostęp do źródeł w XQuery Przez funkcje zastępujące standardową doc() definiowane deklaratywnie (pliki konfiguracyjne XDS) D3L (Data Definition Description Lang.) Część technologii Oracle Application Server Integration InterConnect Język opisu formatów nie-xml-owych dialekt XML określa» format źródła» sposób jego udostępnienia w XML Motor D3L wbudowano w XDS definicja źródła danych może odwoływać się do URL opisu w D3L XDS wykonuje translację on-line i udostępnia do integracji dane w XML Dostęp do wyników integracji Biblioteka znaczników JSP API klienta dla języka Java Komponenty sesyjne EJB bezstanowy zachowujący stan» umożliwia pobieranie wyniku w wielu krokach Widoki XQuery udostępnione jako Web Services Widoki XQuery Zapytania XQuery zapamiętane w plikach.xq mogą być sparametryzowane za pomocą zmiennych zewnętrznych (declare variable external ) Użycie: jako źródła danych w innych zapytaniach» definicja źródła danych podaje nazwę pliku z zapytaniem położenie repozytorium zapytań parametry jako usługi sieciowe 13 14 Język XQuery jako narzędzie do integracji danych 15 Przykład zadanie Dane wejściowe Spis repet studentów w poszczególnych semestrach perspektywa w bazie danych Oracle Cennik opłat za powtarzanie przedmiotów, ceny w euro plik Excela w formacie CSV Lista terminów wnoszenia opłat plik XML Kursy walut usługa sieciowa Opis zadania Zestawić repety za ostatni semestr z podaniem terminu opłaty i kwoty opłaty w złotych Rozwiązanie Cztery źródła danych SQL dokument tekstowy z konwersją przez D3L dokument XML Web Service Integracja w XDS przez zapytanie XQuery 16
Konfiguracja w pliku xds-config.xml Źródło danych: dokument XML <xds-sources> <document-source iscached="false"> <name>terminy_dokumentxml</name> <target>http:///terminy.xml</target> </document-source> </xds-sources> <terminy_platnosci> <termin typ_zaliczenia="e">2005-10-20</termin> <termin typ_zaliczenia="z">2005-10-20</termin> <termin typ_zaliczenia="p">2005-09-25</termin> <termin typ_zaliczenia="l">2005-09-25</termin> </terminy_platnosci> 17 Konfiguracja w pliku xds-config.xml Źródło danych: dokument CSV <document-source iscached="false"> <name>ceny_dokumentcsv</name> <target>http:///ceny.csv</target> <XMLTranslate method="d3l">http:///ceny_csv2xml.xml</xmltranslate> </document-source> Konfiguracja D3L <?xml version="1.0"?> <!DOCTYPE message SYSTEM "d3l.dtd"> <message name="exceldata" type="ceny_repet"> <imparray id="wiersz"> <struct> <field name="typ_zaliczenia"><termstring endchar=","/></field> <field name="nazwa_typu"><termstring endchar=","/></field> <field name="cena_w_euro"><number><termstring endchar="\n"/></number></field> </struct> </imparray> <ceny_repet> <struct id="ceny_repet"> <repeta> <field name="repeta"> <typ_zaliczenia>e</typ_zaliczenia> <typeref type="wiersz"/> </field> <nazwa_typu>egzamin</nazwa_typu> </struct> <cena_w_euro>150</cena_w_euro> </message> </repeta> 18 </ceny_repet> Źródło danych: zapytanie SQL Konfiguracja w pliku xds-config.xml <wsdl-source iscached="false"> <name>repety_zrodlosql</name> <wsdlurl>http:///repety_sql.wsdl</wsdlurl> <operation>pobierzdanesql</operation> <service>repety_sql</service> <port>portsql</port> <input-parameters> <part position="1" name="semestr" type="xs:string"/> </input-parameters> </wsdl-source> Konfiguracja usługi w pliku WSDL (fragment) <binding name="wiazaniesql" type="oe:zrodlosql_typ"> <sql:binding/> <operation name="pobierzdanesql"> <sql:operation XMLtransform="XSU-client"> select * from repety where semestr = :1 </sql:operation> <input name="sqlinput"> <sql:input>semestr</sql:input> </input> <output name="sqlresult"/> <fault name="sqlfault"/> </operation> </binding> <ROW num="1"> <ID_STUDENTA>120032</ID_STUDENTA> <NAZWISKO>Abacki</NAZWISKO> <IMIONA>Aleksander</IMIONA> <KOD_PRZEDMIOTU>BD1</KOD_PRZEDMIOTU> <SEMESTR>05L</SEMESTR> </ROW> <TYP_ZALICZENIA>L</TYP_ZALICZENIA> <service name="repety_sql"> <port name="portsql" binding="oe:wiazaniesql"> <sql:address data-source-location="jdbc/oraclecoreds" user="" password="" /> </port> </service> 19 Źródło danych: usługa sieciowa (Web( Service) Konfiguracja w pliku xds-config.xml <wsdl-source iscached="true"> <name>kursywalut_webservice</name> <wsdlurl>http:///currencyexchangeservice.wsdl</wsdlurl> <operation>getrate</operation> <service>currencyexchangeservice</service> <port>currencyexchangeport</port> <input-parameters> <part position="1" name="country1" type="xs:string"/> <part position="2" name="country2" type="xs:string"/> </input-parameters> </wsdl-source> Konfiguracja odwołuje się do obcego dokumentu WSDL, opisującego usługę 20
Zapytanie XQuery Język XQuery jako narzędzie do integracji danych declare namespace xds = "http://xmlns.oracle.com/ias/xds"; declare function xds:repety_zrodlosql ($id_semestru as xs:string) external; declare function xds:ceny_dokumentcsv() external; declare function xds:kursywalut_webservice($j1 as xs:string, $j2 as xs:string) external; declare function xds:terminy_dokumentxml() external; let $t := xds:terminy_dokumentxml(), $c := xds:ceny_dokumentcsv(), $k := xds:kursywalut_webservice("euro", "poland") return <oplaty> { for $r in xds:repety_zrodlosql('05l')//row let $ce := $c//repeta[typ_zaliczenia=$r//typ_zaliczenia]/cena_w_euro/text(), $cz := $ce * $k, $te := $t//termin[@typ_zaliczenia=$r//typ_zaliczenia]/text() order by $r//kod_przedmiotu, $r//typ_zaliczenia, $r//nazwisko, $r//imiona return <repeta> <oplata> {$r//kod_przedmiotu} {$r//typ_zaliczenia} <kwota waluta="eur">{$ce}</kwota> <kwota waluta="pln">{$cz}</kwota> <termin_wplaty>{$te}</termin_wplaty> </oplata> <student> {$r//nazwisko} {$r//imiona} </student> </repeta> } </oplaty> <oplaty> <repeta> <oplata> <KOD_PRZEDMIOTU>BD1</KOD_PRZEDMIOTU> <TYP_ZALICZENIA>E</TYP_ZALICZENIA> <kwota waluta="eur">150</kwota> <kwota waluta="pln">588,450014591217</kwota> <termin_wplaty>2005-10-20</termin_wplaty> </oplata> <student> <NAZWISKO>Cabacki</NAZWISKO> <IMIONA>Cezary</IMIONA> </student> </repeta> </oplaty> 21 22 Podsumowanie XQuery w integracji danych Język XQuery wydaje się bardzo dobrym narzędziem do integracji danych deklaratywny uniwersalny elastyczny XQuery trzeba zasilić danymi przekształconymi do postaci XML Oracle XML Data Synthesis Rozsądne wykorzystanie XQuery do integracji danych w warstwie middle-tier elegancko wykorzystuje składnię XQuery do zdefiniowania rozszerzeń XDS z licznymi możliwymi źródłami danych» dobrze połączone z relacyjnymi bazami danych» rozszerzalne (JCA) z licznymi interfejsami wyjściowymi Język XQuery jako narzędzie do integracji danych Oracle XML Data Synthesis XDS stanowi obiecującą propozycję technologii integracji danych Niestety, na razie tylko wersja preview z pewnymi brakami 23 24