160 likes | 326 Views
XML + relacyjne bazy danych. Krzysztof Kamyczek. Wstep. Można by wyróżnić następujące przypadki stosowania łączenia Relacyjnych Baz Danych z XML-em: Dodanie interfejsu XML do istniejących baz danych (do działających aplikacji).
E N D
XML + relacyjne bazy danych Krzysztof Kamyczek
Wstep Można by wyróżnić następujące przypadki stosowania łączenia Relacyjnych Baz Danych z XML-em: • Dodanie interfejsu XML do istniejących baz danych (do działających aplikacji). • Tworzenie nowej aplikacji, projektując ją do działania z relacyjną bazą danych i interfejsem XML-owym.
Komercyjne rozwiązania • Każdy z wielkich producentów baz danych umożliwił w swoim produkcie stosowanie XML-a. Uczynił to IBM w DB2: DB2 XML Extender and DB2 Text Extender; Microsoft w SQL Server 2000; Oracle w Oracle 8i, 9i; a także Informix
Niekomercyjne rozwiązania Dla niekomercyjnych baz danych takich jak PostgreSQL czy MySQL istnieje oprogramowanie pośredniczące pomiędzy bazą a aplikacją kożystającą z XML-a zwane middleware. Middleware komunikuje się z takimi (jak i komercyjnymi) bazami danych przez ODBC, OLE DB lub JDBC. Middleware pozwala na dwukierunkową wymianę danych w postaci XML między dowolną bazą danych wyposażoną w sterownik JDBC, ODBC czy OLE DB a aplikacją. Pozwala także na usuwanie danych z bazy.
Mapowania Kierowane-Szablonowo <?xml version="1.0"?> <FlightInfo> <Wstęp>W następujących lotach są wolne miejsca: </Wstęp> <SelectInstrukcja>SELECT Airline, FltNumber, Depart, Arrive FROM Flights </SelectInstrukcja> <Zakończenie>Mamy nadzieję, że spełnią twoje oczekiwania </Zakończenie> </FlightInfo>
Po przetworzeniu przez middleware transformujący dane <?xml version="1.0"?> <FlightInfo> <Wstęp>W następujących lotach są wolne miejsca:</Wstęp> <Flights> <Row> <Airline>LOT</Airline> <FltNumber>123</FltNumber> <Depart>Dec 12, 1998 13:43</Depart> <Arrive>Dec 13, 1998 01:21</Arrive> </Row> ... </Flights> <Zakończenie>Mamy nadzieję, że spełnią twoje oczekiwania</Zakończenie> </FlightInfo>
Model Tabelowy (ang. Table Model) < bazaDanych > <tabela> <wiersz> <kolumna1>...</kolumna1> <kolumna2>...</kolumna2> ... </wiersz> ... </tabela> ... </ bazaDanych >
Przykład mapowania z użyciem modelu obiektów określających dane <Zamówienia> <ZamówienieHandlowe ZHNumer="12345"> <Klient KlientNumer="543"> <KlientNazwa>F.U.H ABC</KlientNazwa> <Ulica>Kosciuszki 1</Ulica> <Miasto>Kraków</Miasto> <Województwo>Małopolskie</Województwo> <KodPocztowy>30-071</KodPocztowy> </Klient> <DataZamówienia>981215</DataZamówienia> <Linia LiniaNumer="1"> <Towar TowarNumer="123"> <Opis> <P><B>Klucz francuski:</B><BR /> Nierdzewna stal, odlany w jednym kawałku, dożywotnia gwarancja.</P> </Opis> <Cena>9.95</Cena> </Towar> <ilość>10</ilość> </Linia> <Linia LiniaNumer="2"> <Towar TowarNumer="456"> <Opis> <P><B>Nożyce do blachy:<B><BR /> Stal hartowana, rok gwarancji.</P> </Opis> <Cena>13.27</Cena> </Towar> <ilość>5</ilość> </Linia> </ZamówienieHandlowe> </Zamówienia>
Oprogramowanie pośredniczące (ang. middleware) ADO Developer: Microsoft URL: http://msdn.microsoft.com/xml/articles/xmlintegrationinado.asp Licencja: Komercyjna Typ bazy danych: Relacyjna (OLE DB, ODBC) Kierunki przekształceń: baza danych XML, XML baza danych. Środowisko/Platforma: Windows.
DB2XML Developer: Volker Turau URL: http://www.informatik.fh-wiesbaden.de/~turau/DB2XML/index.html Licencja: Open Source Typ bazy danych: Relacyjne (JDBC) Kierunki przekształceń: baza danych XML Środowisko/Platforma: Java
iConnector Developer: infoteria URL: http://www.infoteria.com/en/contents/product/xml-s-c/index.html Licencja: Komercyjna Typ bazy danych: Relacyjne (ODBC), Lotus Notes/Domino Kierunki przekształceń: Baza danych XML, XML Baza danych Środowisko/Platforma: Windows (COM lub Windows service), Java.
ODBC2XML Developer: Intelligent Systems Research URL: http://members.xoom.com/gvaughan/odbc2xml.htm Licencja: Shareware Typ bazy danych: Relacyjne (ODBC) Kierunki przekształceń: Baza danych XML Środowisko/Platforma: wykonywalny program Windows 32 lub DLL.
Przykład współpracy z Postgresem Utwórzmy tabelę ``Pogoda'': create table Pogoda(dzien int, stan varchar(25)); insert into Pogoda(dzien, stan) values (1, 'sloneczna'); insert into Pogoda(dzien, stan) values (2, 'pochmurnie'); insert into Pogoda(dzien, stan) values (3, 'leje');
import java.sql.*; import java.math.*; import oracle.xml.sql.query.*; import java.sql.*; public class smplPstgrs { //======================================== // main() - public static void public static void main(String args[]) throws SQLException { // --------- Postgre JDBC Driver DriverManager.registerDriver(new org.postgresql.Driver()); // --------- Postgre JDBC connection String user = "NazwaUżytkownika"; String password = "Hasło"; String tabName = "Pogoda"; Connection conn = DriverManager.getConnection("jdbc:postgresql://URLSerwera/NazwaBD", user, password);
//tworzone jest zapytanie, następnie jest ono wykonywane, rezultat będzie //przechowywany w obiekcie ResultSet Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select * from "+tabName ); /* zainicjowanie OracleXMLQuery. Należy zauważyć, że można podać zapis kwerendy sql zamiast obiektu ResultSet */ OracleXMLQuery qry = new OracleXMLQuery(conn,rset); // określenie kształtu generowanego dokumentu XML qry.setRowsetTag("ZAPIS_POGODY"); // set the tags encapsulating the whole doc qry.setRowTag("RECORD"); // sets the row separator tag qry.setRowIdAttrName("NRdnia"); // sets the id attribute of the row element qry.useUpperCaseTagNames(); // use upper case tag names qry.setErrorTag("ERR"); // tag for errors writen to XML doc // Wydobycie dokumentu XML w postaci tekstu String xmlString = qry.getXMLString(); // Wydrukowanie rezultatu System.out.println(xmlString); } }
Wynik Aplikacja wygeneruje następujący dokument XML: <?xml version = '1.0'?> <ZAPIS_POGODY> <REKORD NRDNIA="1"> <DZIEN>1</DZIEN> <STAN>sloneczna</STAN> </REKORD> <REKORD NRDNIA="2"> <DZIEN>2</DZIEN> <STAN>pochmurnie</STAN> </REKORD> <REKORD NRDNIA="3"> <DZIEN>3</DZIEN> <STAN>leje</STAN> </REKORD> </ZAPIS_POGODY>