background image

 

 

ITA-101 Bazy Danych 

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

Wersja 1.0 

Praca z XML 

Spis treści 

Praca z XML ......................................................................................................................................... 1 

Informacje o module ........................................................................................................................... 2 

Przygotowanie teoretyczne ................................................................................................................. 3 

Przykładowy problem ................................................................................................................. 3 

Podstawy teoretyczne ................................................................................................................. 3 

Przykładowe rozwiązanie ............................................................................................................ 4 

Porady praktyczne ...................................................................................................................... 8 

Uwagi dla studenta ..................................................................................................................... 8 

Dodatkowe źródła informacji ...................................................................................................... 8 

Laboratorium podstawowe ................................................................................................................. 9 

Problem 1 (czas realizacji 45 min) ............................................................................................... 9 

Laboratorium rozszerzone ................................................................................................................ 15 

Zadanie 1 (czas realizacji 90 min) .............................................................................................. 15 

 

 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 2/15 

Informacje o module 

Opis modułu 

Wymiana  danych  z  relacyjnymi  bazami  danych  może  byd  utrudniona  ze 
względu  na różnice  programowo  –  sprzętowe  itp. Rozwiązaniem jest język 
XML, który jest niezależny od standardów sprzętowych / programowych. 

Cel modułu 

Celem  modułu  jest  zapoznanie  się  z  możliwościami  zastosowania  języka 
XML w MS SQL 2008. 

Uzyskane kompetencje 

Po zrealizowaniu modułu będziesz: 

 

wiedzied, jak uzyskad dokument XML ze zwykłego wyniku zapytania 

 

nauczysz się sterowad zapisem danych do dokumentu XML 

 

będziesz umiał zapisad informacje z dokumentu XML do bazy danych 

 

nauczysz się przeprowadzad walidację danych XML według zadanych 
schematów 

 

poznasz  język  XQuery,  który  umożliwia  wykonywanie  operacji  na 
danych XML 

Wymagania wstępne 

Przed przystąpieniem do pracy z tym modułem powinieneś: 

 

wiedzied, jak używad oprogramowania Microsoft Virtual PC 

 

znad podstawy obsługi systemu Windows 2000 lub nowszego 

 

znad podstawy obsługi SQL Server Management Studio 

Mapa zależności modułu 

Zgodnie  z  mapą  zależności  przedstawioną  na  Rys.  1,  istnieje  koniecznośd 
wykonania wcześniej modułu 3. 

Moduł 11

Dodatek

Moduł 1

Moduł 2

Moduł 3

Moduł 4

Moduł 5

Moduł 6

Moduł 7

Moduł 8

Moduł 9

Moduł 10

Moduł 12

Moduł 13

 

 

Rys. 1 Mapa zależności modułu 

 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 3/15 

Przygotowanie teoretyczne 

Przykładowy problem 

Firma  National  Insurance  wykupiła  niedawno  udziały  w  mniejszej,  prężnie  działającej  firmie 
informatycznej  Miracle.  Ponieważ  dział  IT  w  Miracle  używał  innej  architektury  bazodanowej, 
nastąpił problem z wymianą danych pomiędzy centralą a nowym oddziałem. Informatycy  obydwu 
oddziałów  wpadli  na  pomysł  użycia  uniwersalnego  języka  XML  do  wymiany  danych  pomiędzy 
platformami.  Przed  podjęciem  stosownych  działao  dyrektor  działu  IT  postanowił  sprawdzid,  co 
oferuje system MS SQL Server 2008 w tym zakresie. 

Podstawy teoretyczne 

XML  (ang.  eXtensible  Markup  Language)  jest  językiem  znaczników  (jak  HTML),  w  którym  to 
programista  decyduje  o  tym,  jaka  będzie  struktura  znaczników.  W  ostatnich  latach  XML  zyskał 
ogromną  popularnośd  jako  format  idealny  do  wymiany  danych  między  aplikacjami,  nośnik 
konfiguracji aplikacji, format zapisu danych. Znajomośd możliwości XML i standardów skojarzonych 
jest  dziś  właściwie  niezbędna  nie  tylko  w  pracy  z  bazami  danych,  ale  również  z  technologiami 
programistycznymi. 

W dzisiejszym świecie informacja jest przechowywana w różnych formatach. Jednym z dośd często 
spotykanych formatów jest XML. Oznacza to, że system bazodanowy powinny oferowad możliwośd 
zapisu  w  swoich  strukturach  (w  swoich  bazach  danych)  danych  przemieszanych  ze  znacznikami 
XML. 

Format danych 
Każdy system bazodanowy oferuje bogaty zestaw typów danych. Wśród tych typów można znaleźd 
sporo  typów  przechowujących  tekst.  Ponieważ  XML  jest  formatem  tekstowym,  może  byd 
przechowywany jako tekst, ale typ danych, który w bazach danych ma służyd do przechowywania 
danych XML, powinien charakteryzowad się czymś więcej niż tylko możliwością zapisu znaczników i 
zaszytych w nich informacji. 

Jedną  z  podstawowych  właściwości  dokumentu  XML  jest  wymóg,  który  mówi,  że  dokument  XML 
musi posiadad odpowiednią formę. Oznacza to, że: 

 

dokument ma jeden element główny (ang. root), w którym zawarte są pozostałe elementy 

 

pojedynczy znacznik nie zawiera dwóch atrybutów o takiej samej nazwie 

 

wartości atrybutów powinny znaleźd się w ogranicznikach (cudzysłowy lub apostrofy) 

 

znaczniki nie powinny się „zazębiad”. 

Poniższy listing ilustruje przykładowy fragment poprawnego dokument XML: 

<panstwa> 
  <panstwo nazwa="Polska"> 
    <stolica>Warszawa</stolica> 
    <obszar>312680</obszar> 
    <ludnosc>38456785</ludnosc> 
    <glowne_miasta>Wrocław</glowne_miasta> 
    <glowne_miasta>Gdańsk</glowne_miasta> 
    <glowne_miasta>Kraków</glowne_miasta> 
    <glowne_miasta>Poznań</glowne_miasta> 
  </panstwo> 
  <panstwo nazwa="Niemcy"> 
    <stolica>Berlin</stolica> 
    <obszar>356910</obszar> 
    <ludnosc>81700000</ludnosc> 
    <glowne_miasta>Monachium</glowne_miasta> 
  </panstwo> 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 4/15 

  <panstwo nazwa="Czechy"> 
    <stolica>Praga</stolica> 
    <obszar>78703</obszar> 
    <ludnosc>10300000</ludnosc> 
  </panstwo> 
</panstwa> 

Idealny  format  do  przechowywania  danych  XML  powinien  zapewniad  automatyczną  kontrolę 
poprawności zapisu danych. 

Walidacja 
Bardzo  często  struktura  dokumentów  XML  jest  w  jednoznaczny  sposób  określona  przy  pomocy 
innych standardów, takich jak XML Schema czy DTD (ang. Document Type Definition). Szczególnie 
XML Schema jest doskonałym formatem opisującym struktury XML. Idealnie zatem byłoby, gdyby 
system bazodanowy umożliwiał wykorzystanie standardów walidujących XML do kontroli struktury 
danych zapisywanych w bazach danych. 

MS  SQL  Server  2000 wprowadził  możliwośd  konwersji  danych  pobieranych  z  bazy  do  dokumentu 
XML  oraz  danych  z  tych  plików  na  wiersze  bazy  danych.  Umożliwiają  to  słowa  kluczowe  języka 
Transact-SQL: 

 

FOR XML  

 

OPENXML  

MS  SQL  Server  2005  rozszerza  możliwości  w/w  słów  kluczowych,  dzięki  czemu  można  sterowad 
sposobem  tworzenia  dokumentu  XML  (dokładne  informacje  w  dokumentacji  do  tych  poleceo). 
Dodatkowo  umożliwiono  tworzenie  natywnych  typów  danych  XML  pozwalających  na  tworzenie 
własnych zmiennych oraz dodawanie kolumn do danych XML. Odpowiedzialne za to jest polecenie 
CREATE  XML  SCHEMA  COLLECTION  (dokumentacja:  http://msdn2.microsoft.com/en-
us/library/ms176009.aspx),  a  w  połączeniu  z  XQuery  (język  pozwalający  na  pisanie  zapytao 
przeszukujących 

dokumenty 

XML, 

dokumentacja: 

http://msdn2.microsoft.com/en-

us/library/ms189075(SQL.100).aspx)  pozwala  na  pisanie  zapytao  do  treści  XML,  których  wynik 
także  jest  przedstawiony  w  dokumencie  XML.  Innym  udoskonaleniem  jest  możliwośd  nadania 
indeksów kolumnom typu XML. Pozwala to na zwiększenie ogólnej wydajności. 

MS  SQL  2008  wprowadził  dalsze  udoskonalenia  w  zakresie  walidacji  danych.  Dodano  możliwośd 
stworzenia schematu który może byd dopasowany do dowolnych danych. Dodano słowo kluczowe 
let 

do 

XQuery 

(podstawy 

można 

opanowad 

na 

bazując 

na 

tutorialach:  

http://www.w3schools.com/xquery/default.asp)  dzięki,  któremu  można  przypisywad  wartości  do 
zmiennych.  Ponadto  za  pomocą  XQuery  można  wykonywad  operacje  na  danych  XML  za  pomocą 
insert, replace value of, delete, modify, a MS SQL Server 2008 pozwala na użycie danych 
XML jako argumentu dla polecenia insert. 

Przykładowe rozwiązanie 

Rozpoczynając  pracę  z  plikami  XML  należy  zastanowid  się  jakie  dane  będziemy  w  nich 
przechowywad. Dane z  bazy  wybieramy  np.: poleceniem  SELECT. Aby  trafiły  one do  pliku  XML na 
koocu skryptu SQL należy dopisad sekwencję FOR XML z odpowiednimi parametrami. Przykładowo, 
wybierając dane z tabeli Customers utworzenie pliku XML zapewni nam sekwencja 
FOR XML RAW('Customer'), ELEMENTS, ROOT 
Po uruchomieniu takiego kodu w Management Studio jako rezultat pojawi nam się odnośnik do  
pliku XML tak jak pokazano na Rys. 2:  

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 5/15 

 

Rys. 2 Generowanie kodu XML 

W  tym  momencie  uzyskaliśmy  wynik  zapytania  w  postaci  dokumentu  XML.  Klikając  na  odnośnik 
możemy  obejrzed  strukturę  pliku  a  następnie  zapisad  go  jako  zwykły  plik  systemowy.  Znając 
podstawy języka XML łatwo wprowadzad modyfikacje i rozbudowywad tego typu pliki nawet poza 
środowiskiem bazodanowym. Wystarczy dysponowad dowolnym edytorem testu. 

 

Rys. 3 Wyświetlenie kodu XML 

Pracując  z  plikami  XML  zawsze  należy  zwracad  uwagę  na  sposób  kodowania  znaków.  Warto 
wymusid odpowiednie kodowanie umieszczając na początku pliku następującą sekwencję 
<?xml version="1.0" encoding="utf-16"?> 
Co prawda same polecenia XML nie zawierają w swojej strukturze znaków narodowych ale dane 
pojawiające  się  w  plikach  przeważnie  takie  posiadają.  Aby  uniknąd  przekłamao  rozsądnie 
rozpocząd plik XML tak jak pokazano na rys 4. 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 6/15 

 

Rys. 4 Dodanie tagu kodowania 

W  tym  momencie  posiadamy  pełnowartościowy  plik  XML  zawierający  dane  z  naszej  bazy.  Tak 
uzyskane  dane  można  z  łatwością  przenieśd  do  innej  bazy  danych  np.  MySql,  ponieważ  zostały 
zapisane w uniwersalnym formacie (należy jedynie pamiętad o odpowiednim kodowaniu znaków).  
 
Isnieje  możliwośd    wyeksportowania  do  pliku  XML  bardziej  złożonych  danych.  Poniższy  kod  SQL 
wybierze wszystkie zamówienia, których ID_Klienta jest równe "ALFKI". 

declare @CustomerID nchar(5) 
select @CustomerID = 'ALFKI' 
SELECT 1                   as Tag,  
NULL               as Parent, 
CustomerID         as [Customer!1!customerid], 
ContactName        as [Customer!1], 
NULL               as [Order!2!orderid], 
NULL               as [Order!2] 
FROM Customers 
where Customers.CustomerID = @CustomerID 
UNION  
SELECT  
2 as tag, 
1 as parent,  
Customers.CustomerID, 
Customers.ContactName, 
Orders.OrderID, 
Orders.ShipAddress 
FROM Customers, Orders  
WHERE (Customers.CustomerID = @CustomerID) 
AND (Customers.CustomerID = Orders.CustomerID) 
FOR XML EXPLICIT 

Możemy  więc  jasno  i  precyzyjnie  określi  interesujący  nas  zakres  danych,  który  będzie 
wyeksportowany z systemu bazodanowego. 

 
Porównaj działanie polecenia FOR XML z atrybutami RAWAUTO oraz PATH oraz atrybutami 
ELEMENTS,  ROOT  (oraz  bez  tych  opcji)  i  innymi  zgodnie  z  dokumentacją  na: 
http://msdn2.microsoft.com/en-us/library/ms173812.aspx 

 
Posiadając gotowy plik XML zawierający dane wyeksportowane z systemu bazodanowego możemy 
w prosty sposób wczytad te dane do swojej bazy. W tym celu należy posłużyd się zmiennymi T-SQL 
typu  XML  i  wczytad  do  tak  zadeklarowanej  zmiennej  dane  ze  wskazanego  pliku.  Taką  operację 
wykonuje przykładowy kod SQL:  

DECLARE @xmlDoc XML 
SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C:\pliczek.xml', CODEPAGE='utf-16', 
SINGLE_NCLOB ) AS xmlData) 
SELECT @xmlDoc 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 7/15 

Wynikiem jest wczytana treśd wcześniej utworzonego pliku, znajdująca się w jednej kolumnie typu 
XML co ilustruje rysunek 5. 

 

 

Rys. 5 Wczytanie pliku XML 

W  operowaniu  na  danych  XML  pomocny  jest  XQuery,  czyli  język  zapytao  właśnie  dla  tego 
typu dokumentów. 
 

Do tej pory jedynie wyświetlaliśmy  zawartośd wczytanego pliku XML. Nic nie stoi na przeszkodzie 
aby  za  pomocą  pliku  mapującego  dokonad  jego  zapisu  w  odpowiedniej  tabeli  bazy  danych.  Plik 
mapujący odzwierciedla dane z pliku XML na tabele w przykładowej bazie Northwind: 

<?xml version="1.0" ?> 
<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
  xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"   
  xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 
  <ElementType name="CustomerID" dt:type="string" /> 
  <ElementType name="CompanyName" dt:type="string" /> 
  <ElementType name="City" dt:type="string" /> 
  <ElementType name="ROOT" sql:is-constant="1"> 
    <element type="Customer" /> 
  </ElementType>   
  <ElementType name="Customer"  sql:relation="Customers"> 
    <element type="CustomerID"  sql:field="CustomerId" /> 
    <element type="CompanyName" sql:field="CompanyName" /> 
    <element type="City"        sql:field="City" /> 
  </ElementType> 
</Schema> 

Pozostaje nam tylko stworzyd odpowiedni skrypt Visual Basic, który zrealizuje wstawianie danych 

do bazy według zadanego wcześniej schematu: 

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") 
objBL.ConnectionString =  "Provider=SQLOLEDB;Data Source=EVALUATION;Initial 
Catalog=Northwind;Integrated Security=SSPI;" 
objBL.ErrorLogFile = "c:\error.log" 
objBL.Execute "c:\customersmapping.xml", "c:\customers.xml" 
Set objBL = Nothing 

Skrypt połączy się z naszym serwerem bazodanowym a następnie wykona zapytania SQL zgodnie z 
plikami XML co ilustruje rysunek 6. 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 8/15 

 

Rys. 6 Wynik zapytania do bazy po aktualizacji danych 

Porady praktyczne 

Praca  z  plikami  XML  może  byd  wydajna  i  przyjemna.  Warto  jednak  zaznaczyd,  że  szczególnie 
początkujący  użytkownicy  mogą  popełniad  drobne,  ale  męczące  błędy  związane  głównie  z 
nieścisłościami w nazewnictwie: 

 

Zawsze  sprawdzaj  poprawnośd  nazw  wszelkich  plików  i  ich  ścieżek  dostępu.  Często 
niemożnośd zlokalizowania pliku skutkuje komunikatami o innych błędach. 

 

Poprawne określenie kodowania  zapobiega przekłamaniom  w obróbce  danych. Czasami złe 
kodowanie w ogóle wyklucza wykonanie danej operacji. 

 

Dowiedź  się  nieco  więcej  o  podstawach  programowania  w  VBscript.  Jest  to  bardzo  prosty, 
obiektowy język programowania, wykorzystywany w budowie skryptów. 

 

Czytaj uważnie dziennik błędów. W większości przypadków dziennik wskazuje na poprawne 
rozwiązanie problemu. 

Uwagi dla studenta 

Jesteś przygotowany do realizacji laboratorium jeśli: 

 

rozumiesz, czym różni się język XML od HTML  

 

rozumiesz zasadę działania struktury XML Schema 

 

umiesz zdefiniowad przykładową strukturę pliku XML 

 

umiesz podad przykład zastosowania narzędzia XQuery. 

Pamiętaj  o  zapoznaniu  się  z  uwagami  i  poradami  zawartymi  w  tym  module.  Upewnij  się,  że 
rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego 
w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów. 

Dodatkowe źródła informacji 

1.  William R. Stanek, Microsoft XML – Vademecum, Microsoft Press, 2002  

2.  Elizabeth Castro, Po prostu XML, Helion, 2001  

3.  Priscilla Walmsley,  Wszystko o XML Schema, WNT, 2007 

4.  Przemysław Kozienko, Krzysztof Gwiazda, XML na poważnie, Helion, 2002  

5.  Scott Short , Zastosowanie XML do tworzenia usług internetowych na platformie Microsoft .NET

Microsoft Press 2003 

 

 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 9/15 

Laboratorium podstawowe 

Problem 1 (czas realizacji 45 min) 

Jesteś  administratorem  systemu  bazodanowego  w  firmie  National  Insurance.  Twój  szef  zlecił  Ci 
rozpoznanie  możliwości  płynących  z  użycia  języka  XML  w  systemie  MS  SQL  Server  2008.  W 
pierwszej  kolejności  postanowiłeś  użyd  narzędzi  dostępnych  w  systemie  na  roboczym  serwerze 
Evaluation i sprawdzonej bazie danych Northwind. 

Zadanie 

Tok postępowania 

1.  Nawiązywanie 
połączenia z SQL 
Server 2008 

 

Zaloguj się do  maszyny  wirtualnej  BD  jako  użytkownik  Administrator  z 
hasłem P@ssw0rd

 

Kliknij  Start.  Z  grupy  programów  Microsoft  SQL  Server  2008  uruchom 
SQL Server Management Studio

 

W oknie logowania kliknij Connect

2.  Wygenerowan
ie pliku XML na 
podstawie danych 
z bazy 

 

W  oknie  Object  Explorer  rozwio  listę  tabel  bazy  danych 
Northwind -> Databases -> Tables

 

Kliknij  prawym  klawiszem  myszki  tabelę  Customers  i  wybierz  opcję 
Select Top 1000 Rows. 

 

Rys. 7 Wybieranie danych z bazy Northwind 

 

W okienku, które się pokaże, zamieo wartośd 1000 na 10 (nie potrzeba 
tyle danych do testów), a na samym koocu skryptu dopisz: 

FOR XML RAW('Customer'), ELEMENTS, ROOT 

 

wykonaj zapytanie klikając przycisk Execute

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 10/15 

 

Rys. 8 Generowanie kodu XML 

 

Kliknij na odnośnik <Root><Customer>… w celu otwarcia okna z kodem 
XML. 

 

Rys. 9 Wyświetlenie kodu XML 

 

zapisz ten wynik do pliku: c:\customers.xml klikając na menu File->Save 
As.
 

 

Możesz  otworzyd  plik  w  przeglądarce,  aby  zobaczyd  jego  strukturę, 
jednak  zanim  to  zrobisz,  dopisz  na  samym  początku,  najlepiej  w 
edytorze w MS SQL, następującą linię: 

<?xml version="1.0" encoding="utf-16"?> 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 11/15 

 

Rys. 10 Dodanie tagu kodowania 

 

zamknij utworzone zapytania w głównym oknie Management Studio 

 

3.  Wczytanie 
danych XML do 
MS SQL 

 

Kliknij przycisk NewQuery. 

 

Wpisz następujący kod SQL do nowego okna zapytania: 

DECLARE @xmlDoc XML 
SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 
'C:\customers.xml', CODEPAGE='utf-16', SINGLE_NCLOB ) AS xmlData) 
SELECT @xmlDoc 

 

Kliknij przycisk Execute. 

 

Rys. 11 Wczytanie pliku XML 

Jeśli  nie  można  wczytad  pliku  albo  na  początku  treści  pojawiają  się 
tzw.  „krzaczki”,  to  proszę  się  cofnąd  do  momentu  zapisu  i  zamiast 
przez edytor z MSSQL, proszę zapisad metodą kopiowania i wklejania 
treści dokumentu XML do notatnika 

4.  Odczyt danych 
XML - poruszanie 
się po drzewie 
danych 

W  operowaniu  na  danych  XML  pomocny  jest  XQuery,  czyli  język 
zapytao właśnie dla tego typu dokumentów. 

 

Zmieo zapytanie SQL z poprzedniego zadania na następujące: 

DECLARE @xmlDoc XML 
SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 
'C:\customers.xml', CODEPAGE='utf-16', SINGLE_NCLOB ) AS xmlData) 
SELECT @xmlDoc.query( 
'<Customers> 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 12/15 


  for $i in /root/Customer 
  where $i/Country="Mexico" 
  return 
  <Order> 
  {$i/CompanyName} 
  </Order> 

</Customers>' 

 

Uruchom zapytanie klikając przycisk Execute. 

 

Kliknij na odnośnik do kodu XML. 

 

 

Rys. 12 Generowanie kodu XML 

5.  Eksport 
wybranych 
danych do pliku 
XML 

 

Kliknij przycisk NewQuery. 

 

W nowym oknie wpisz następujący kod SQL: 

use Northwind 
declare @CustomerID nchar(5) 
select @CustomerID = 'ALFKI' 
SELECT 1                   as Tag,  
NULL               as Parent, 
CustomerID         as [Customer!1!customerid], 
ContactName        as [Customer!1], 
NULL               as [Order!2!orderid], 
NULL               as [Order!2] 
FROM Customers 
where Customers.CustomerID = @CustomerID 
UNION  
SELECT  
2 as tag, 
1 as parent,  
Customers.CustomerID, 
Customers.ContactName, 
Orders.OrderID, 
Orders.ShipAddress 
FROM Customers, Orders  
WHERE (Customers.CustomerID = @CustomerID) 
AND (Customers.CustomerID = Orders.CustomerID) 
FOR XML EXPLICIT 

 

Kliknij na nowy odnośnik do kodu XML. 

 

Dodaj w pierwszej linijce pliku określenie kodowania znaków: 

<?xml version="1.0" encoding="unicode"?> 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 13/15 

 

Rys. 13 Dodanie tagu kodowania znaków 

 

Kliknij na menu File->Save As. 

 

Zapisz kod XML do pliku C:\explicit.xml. 

W  następnym  kroku    wczytasz  wcześniej  zapisany  plik  explicit.xml  i 
uruchomisz  zapytanie  SQL  zliczające  ilośd  wystąpieo  tagu  Order, 
każdego elementu Customer: 

 

Kliknij przycisk NewQuery. 

 

W nowym oknie wpisz następujący kod SQL: 

DECLARE @xmlDoc XML 
SET @xmlDoc = ( SELECT * FROM OPENROWSET ( BULK 'C:\Documents and 
Settings\Administrator\Desktop\explicit.xml', CODEPAGE='unicode', 
SINGLE_NCLOB ) AS xmlData) 
SELECT @xmlDoc 
SELECT @xmlDoc.query( 
'<Orders> 

for $i in /Customer 
let $count :=count($i/Order) 
return 
<OrdersNumber> 
{$i/Customer} 
<ItemCount>{$count}</ItemCount> 
</OrdersNumber> 

</Orders>') 

 

Kliknij na nowy odnośnik do kodu XML. 

 

Rys. 14 Wyświetlenie wyników z kodu XML 

6.  Zapisanie 
wczytanych 
danych XML do 
tabeli za pomocą 
pliku mapującego 

 

Kliknij menu START->Programs->Accessories->Notepad. 

 

Wpisz w oknie notatnika następujący kod XML, w którym znajdowad się 
będą informacje, które chcemy zapisad w bazie: 

<?xml version="1.0" encoding="unicode"?> 
<root> 
  <Customer> 
    <CustomerID>Test</CustomerID> 
    <CompanyName>Teeest</CompanyName> 
    <City>Warsaw</City> 
  </Customer> 
</root> 

 

Zapisz plik pod nazwą c:\customers.xml. 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 14/15 

 

W oknie notatnika kliknij menu File->New. 

 

Wpisz  następujący  kod  XML,  który  odzwierciedla  dane  z  pliku  XML  na 
tabele w bazie Northwind: 

<?xml version="1.0" ?> 
<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
  xmlns:dt="urn:schemas-microsoft-com:xml:datatypes"   
  xmlns:sql="urn:schemas-microsoft-com:xml-sql" > 
  <ElementType name="CustomerID" dt:type="string" /> 
  <ElementType name="CompanyName" dt:type="string" /> 
  <ElementType name="City" dt:type="string" /> 
  <ElementType name="ROOT" sql:is-constant="1"> 
    <element type="Customer" /> 
  </ElementType>   
  <ElementType name="Customer"  sql:relation="Customers"> 
    <element type="CustomerID"  sql:field="CustomerId" /> 
    <element type="CompanyName" sql:field="CompanyName" /> 
    <element type="City"        sql:field="City" /> 
  </ElementType> 
</Schema> 

 

Zapisz plik pod nazwą c:\customersmapping.xml. 

 

W oknie notatnika kliknij menu File->New. 

 

Wpisz  następujący  skrypt  Visual  Basic,  który  zrealizuje  wstawianie 
danych do bazy według zadanego wcześniej schematu: 

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") 
objBL.ConnectionString =  "Provider=SQLOLEDB;Data 
Source=EVALUATION;Initial Catalog=Northwind;Integrated 
Security=SSPI;" 
objBL.ErrorLogFile = "c:\error.log" 
objBL.Execute "c:\customersmapping.xml", "c:\customers.xml" 
Set objBL = Nothing 

 

Zapisz plik pod nazwą c:\ Insertcustomers.vbs. 

 

Przejdź na dysk lokalny C: i uruchom plik Insertcustomers.vbs. 

 

Rys. 15 Wynik zapytania do bazy po aktualizacji danych 

Możesz  sprawdzid  za  pomocą  SQL  Management  Studio->Object  Explorer

czy rzeczywiście zaszły zmiany w tabeli Customers bazy Northwind. 

 

 

background image

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski 

Moduł 11 

ITA

-

101 Bazy Danych 

 

Instalacja i konfiguracja MS SQL Server 2008 

Strona 15/15 

Laboratorium rozszerzone 

Zadanie 1 (czas realizacji 90 min) 

Zapoznałeś  się  z  podstawami  obsługi  języka  XML  w  firmowym  systemie  bazodanowym. 
Postanowiłeś  wykorzystad  zdobytą  wiedzę  do  przeniesienia  danych  z  bazy  PraceDyplomowe 
znajdującej się w centrali do bazy w nowym oddziale firmy. Zanim jednak dane trafią do oddziału, 
będziesz chciał zweryfikowad poprawnośd zapisu w plikach XML: 

 

Utwórz  skrypty  SQL  zapisujące  do  plików  XML  jak  najwięcej  informacji  z  bazy  danych 
PraceDyplomowe 

 

Utwór nową, roboczą bazę PraceDyplomowe_TEMP 

 

Odzyskaj  zapisane  dane  do  bazy  PraceDyplomowe_TEMP  za  pomocą  odpowiedniego 
skryptu Visual Basic. 

Zapisz swoje uwagi w pliku raportu i przedyskutuj z innymi zespołami.