Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00429 007701 11065181 na godz. na dobę w sumie
XML i SQL Server 2000 - książka
XML i SQL Server 2000 - książka
Autor: Liczba stron: 328
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-652-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> sql server
Porównaj ceny (książka, ebook, audiobook).
'XML i SQL Server 2000' jest idealnym źródłem informacji dla tych programistów SQL, którzy chcą poznać możliwości, jakie daje XML w SQL Serverze 2000. Jeśli jesteś twórcą stron WWW i chcesz korzystać z XML-a podczas tworzenia swoich projektów, ale obawiasz się złożoności jego standardów i zastosowań - książka ta pozwoli Ci opanować je bardzo szybko.

John Griffin zaczyna od przypomnienia podstaw XML-a, następnie przechodzi do gruntownego omówienia definicji typu dokumentu (DTD) oraz ich użycia do zatwierdzania dokumentów. Przedstawia wiele sposobów generowania dokumentów XML i manipulowania nimi w SQL Serverze 2000. Oprócz tego prezentuje język XSLT, specyfikację XPath oraz schematy XDR Microsoftu.

Liczne przykłady oraz metodyczne podejście do tworzenia dokumentów XML i wstawiania danych z dokumentów XML do bazy powodują, że książka ta powinna stać się lekturą obowiązkową dla każdego programisty poszukującego specjalistycznego, pełnego i szczegółowego przeglądu możliwości XML-a w SQL Serverze 2000.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TRE(cid:140)CI SPIS TRE(cid:140)CI XML I SQL Server 2000 KATALOG KSI¥flEK KATALOG KSI¥flEK KATALOG ONLINE KATALOG ONLINE ZAM(cid:211)W DRUKOWANY KATALOG ZAM(cid:211)W DRUKOWANY KATALOG Autor: John Griffin T‡umaczenie: Jacek Baszkiewicz ISBN: 83-7197-652-6 Tytu‡ orygina‡u: Format: B5, stron: 322 XML and SQL Server 2000 TW(cid:211)J KOSZYK TW(cid:211)J KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAM(cid:211)W INFORMACJE ZAM(cid:211)W INFORMACJE O NOWO(cid:140)CIACH O NOWO(cid:140)CIACH ZAM(cid:211)W CENNIK ZAM(cid:211)W CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥flEK ONLINE FRAGMENTY KSI¥flEK ONLINE (cid:132)XML i SQL Server 2000(cid:148) jest idealnym (cid:159)r(cid:243)d‡em informacji dla tych programist(cid:243)w SQL, kt(cid:243)rzy chc„ pozna(cid:230) mo¿liwo(cid:156)ci, jakie daje XML w SQL Serverze 2000. Je(cid:156)li jeste(cid:156) tw(cid:243)rc„ stron WWW i chcesz korzysta(cid:230) z XML-a podczas tworzenia swoich projekt(cid:243)w, ale obawiasz siŒ z‡o¿ono(cid:156)ci jego standard(cid:243)w i zastosowaæ - ksi„¿ka ta pozwoli Ci opanowa(cid:230) je bardzo szybko. John Griffin zaczyna od przypomnienia podstaw XML-a, nastŒpnie przechodzi do gruntownego om(cid:243)wienia definicji typu dokumentu (DTD) oraz ich u¿ycia do zatwierdzania dokument(cid:243)w. Przedstawia wiele sposob(cid:243)w generowania dokument(cid:243)w XML i manipulowania nimi w SQL Serverze 2000. Opr(cid:243)cz tego prezentuje jŒzyk XSLT, specyfikacjŒ XPath oraz schematy XDR Microsoftu. Liczne przyk‡ady oraz metodyczne podej(cid:156)cie do tworzenia dokument(cid:243)w XML i(cid:160) wstawiania danych z dokument(cid:243)w XML do bazy powoduj„, ¿e ksi„¿ka ta powinna sta(cid:230) siŒ lektur„ obowi„zkow„ dla ka¿dego programisty poszukuj„cego specjalistycznego, pe‡nego i szczeg(cid:243)‡owego przegl„du mo¿liwo(cid:156)ci XML-a w SQL Serverze 2000. Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl O Autorze ........................................................................................... 9 Wprowadzenie .................................................................................. 11 Rozdział 1. XML ................................................................................................. 15 Początki XML-a...................................................X............................................... 16 Dokument XML...................................................X............................................... 17 Definicja typu dokumentu (DTD) ...................................................X................... 27 Schematy XML...................................................X................................................ 42 Tematy zaawansowane ...................................................X.................................... 58 Odpowiedzi do dwóchwiczeń z rozdziału...................................................X.......... 63 Rozdział 2. Arkusze stylów XSLT......................................................................... 67 XSLT ...................................................X...................................................X............ 67 Czym są arkusze stylów...................................................X................................... 69 Węzły i drzewa zamiast dokumentów ...................................................X............. 73 Struktura arkuszy stylów ...................................................X................................. 78 Szablony ...................................................X...................................................X....... 81 Formatowanie liczb ...................................................X......................................... 96 Przetwarzanie warunkowe ...................................................X............................... 99 Tryby...................................................X...................................................X........... 104 Przykład — kwartalny raport podatkowy przedsiębiorstwa ............................ 106 IIS i katalogi wirtualne.................................................................... 115 Katalogi wirtualne ...................................................X......................................... 115 Program zarządzający katalogami wirtualnymi ............................................... 116 Tworzenie katalogów wirtualnych za pomocą programu zarządzająXcego katalogami wirtualnymi...................................................X............................... 118 Model obiektowy zarządzania katalogami wirtualnymi................................... 126 Tworzenie katalogu wirtualnego za pomocą modelu obiektowego ................. 133 Rozdział 3. Rozdział 4. Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP ......................... 135 Architektura dwu-, trzy- i n-warstwowa...................................................X........ 136 Możliwości protokołu HTTP...................................................X......................... 139 Encje ...................................................X...................................................X........... 141 Wykonywanie instrukcji SQL poprzez HTTP.................................................. 143 Wywoływanie plików szablonów poprzez HTTP ............................................ 150 6 XML i SQL Server 2000 Wywoływanie składowanych procedur...................................................X......... 156 Uzyskiwanie dostępu do obiektów baz danych poprzez HTTP ....................... 158 Wysyłanie szablonów przez formularze HTML .............................................. 158 Rozdział 5. Tworzenie widoków XML ze schematami XDR................................. 161 Spojrzenie ogólne ...................................................X.......................................... 162 Schematy XDR ...................................................X.............................................. 162 BizTalk...................................................X...................................................X........ 178 Rozszerzenia do schematów XDR ...................................................X................ 180 Domyślne wartości atrybutów schematów ...................................................X.... 202 Używanie rozszerzonych schematów XDR w zapytaniach ............................. 204 Wydajność schematu i jego buforowanie...................................................X...... 206 Rozdział 6. Wykorzystanie zapytań XPath ......................................................... 207 Ograniczenia implementacji ...................................................X.......................... 208 Różnice pomiędzy implementacją Microsoftu a specyfikacją W3C................ 209 Typy danych XPath ...................................................X....................................... 210 Ścieżki lokalizacji...................................................X.......................................... 214 Uzyskiwanie dostępu do obiektów baz danych poprzez HTTP ....................... 231 Rozdział 7. FOR XML........................................................................................ 235 Składnia ...................................................X...................................................X...... 236 Ograniczenia FOR XML ...................................................X............................... 237 Tryb RAW ...................................................X...................................................X.. 241 Tryb AUTO...................................................X...................................................X. 242 Tryb EXPLICIT...................................................X............................................. 247 Rozdział 8. OPENXML....................................................................................... 263 Użycie OPENXML...................................................X........................................ 263 Meta właściwości...................................................X........................................... 276 Dodatek A Schemat bazy danych Northwind ..................................................... 285 Tabela Categories ...................................................X.......................................... 287 Tabela CustomerCustomerDemo ...................................................X.................. 287 Tabela CustomerDemographics ...................................................X.................... 288 Tabela Customers ...................................................X.......................................... 288 Tabela dtproperties ...................................................X........................................ 289 Tabela Employees...................................................X.......................................... 289 Tabela EmployeeTerritories ...................................................X.......................... 290 Tabela Order Details...................................................X...................................... 291 Tabela Orders...................................................X................................................. 291 Tabela Products ...................................................X............................................. 292 Tabela Region...................................................X................................................ 293 Tabela Shippers ...................................................X............................................. 293 Tabela Suppliers ...................................................X............................................ 294 Dodatek B Instrukcje XSLT z odniesieniami do miejsc w tekście, gdzie zostały użyte.......................................................................... 295 Spis treści 7 Dodatek C Funkcje XPath i ich przykłady ......................................................... 299 Dodatek D Typy danych Microsoft XML ............................................................ 303 Dodatek E Zasoby ........................................................................................... 305 XML...................................................X...................................................X............ 305 XSLT ...................................................X...................................................X.......... 305 Przestrzenie nazw ...................................................X.......................................... 305 Schemat XML...................................................X................................................ 306 SQL Server 2000 ...................................................X........................................... 306 Inne zasoby ...................................................X...................................................X. 306 Słowniczek ..................................................................................... 307 Skorowidz....................................................................................... 315 Rozdział 4. W początkowych trzech rozdziałach omówiliśmy specyfikację XML, język XSLT i niezbędne do konfigurowania wirtualnych katalogów macierzystych kroki w SQL Serverze. W tym rozdziale najpierw omówimy architekturę klient-serwer, aby wyjaśnić w jaki sposób współdziałają ze sobą różne składniki systemowe, serwery aplikacji, serwery baz danych i inne elementy. Następnie przyjrzymy się różnorodnym sposo- bom wykorzystania protokołu HTTP podczas wykonywania instrukcji SQL na SQL Serverze. Obejmuje to użycie plików szablonów w celu wygenerowania danych XML. Wykorzystanie protokołu HTTP poprzez URL uprości nasze zadania, ponieważ więk- szość osób pracujących w przemyśle komputerowym dobrzew zna ten proces. Ten rozdział omawia następujące tematy: tttt Ogólna architektura klient-serwer w konfiguracjach dwu-, trzy- i n-warstwowych. tttt Możliwości HTTP SQL Servera 2000. tttt Encje w XML-u i adresach URL. tttt Tworzenie dokumentów XML przez zapytania SQL Servera popwrzez HTTP. tttt Tworzenie dokumentów XML za pomocą plików szablonów XMLw. tttt Tworzenie dokumentów XML za pomocą składowanych procedwur. Myślę, że nadszedł czas na zdefiniowanie pliku szablonu (ang. template file), o którym już tyle powiedzieliśmy. Nie jest to żaden nowy język, którego musiałbyś się uczyć, zrelaksuj się więc. Nie ma on również nic wspólnego z elementami szablonu XSLT, które przedstawione zostały w rozdziale 2., „Arkusze stylów XSLT”. Szablony te są w zasadzie plikami XML zawierającymi jedną lub więcej instrukcji SQL. Szablony stosowane do bazy danych poprzez mechanizmy, o których dowiesz się z treści tego rozdziału pomagają w wygenerowaniu danych w formacie XMLw. Spójrzmy po raz ostatni na diagram przetwarzania XML, którego używaliśmy w roz- dziale 1., „XML” i rozdziale 2. (zobacz rysunek 4.1). 136 Rysunek 4.1. Przetwarzanie XML XML i SQL Server 2000 Tak, to naprawdę ostatni raz. Omówiliśmy już wszystkie składniki diagramu, które pozo- staną składnikami modułu XML przez całą resztę tej książki. Modułem XML jest SQL Server 2000. Architektura dwu-, trzy- i n-warstwowa Aby lepiej zrozumieć jak współdziałają ze sobą składniki typu klient-serwer, a jedno- cześnie lepiej zrozumieć możliwości i budowę systemu, musimy omówić pokrótce ar- chitekturę typu klient-serwer. Każdy składnik systemu typu klient-serwer realizuje jedną lub kilka funkcji logicz- nych. Omówienie rozpoczniemy od zdefiniowania tych funkcjwi, a następnie pokażemy w jaki sposób są one rozproszone w obrębie całego systemu typu klient-serwer. Oto cztery funkcje będące podstawowymi blokami, z których budowane są wszystkie aplikacje: tttt Logika przechowywania danych. Większość aplikacji musi przechowywać dane, czy jest to pojedynczy plik, czy potężna baza danych. Logika ta obejmuje takie tematy, jak wejście-wyjście i zatwierdzanie danych. tttt Logika dostępu do danych. Jest to przetwarzanie, które zwykle ma formę zapytań SQL, wymagane, aby móc uzyskać dostęp do przechowywanych danych, (czy to pochodzących z wiersza poleceń analizatora zapytań, cwzy z składowanej procedury). tttt Logika aplikacji. Jest to sama aplikacja, która może być prosta bądź złowżona. Logika aplikacji nazywana jest również regułami biznesowymi firmy. tttt Logika prezentacji. Jest to projekcja danych dla użytkownika oraz pobranie danych od niego. Po zdefiniowaniu tych procesów funkcjonalnych, możemy teraz przyjrzeć się temu, jak różne konfiguracje typu klient-serwer dzielą między siebie te funkcje i jaki mają Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 137 wpływ na rozbudowę. Zaczniemy od architektury dwuwarstwowej, potem przejdziemy do trójwarstwowej i n-warstwowej. W końcu omówimy pokrótce przykładową konfigu- rację SQL Servera i IIS. Dwuwarstwowa architektura typu klient-serwer Najprostszą formą architektury typu klient-serwer jest struktura dwuwarstwowa, składająca się, uwierz lub nie, ze składnika klienta i składnika serwera. Jej dobrym przykładem jest statyczna witryna WWW (zobacz rysunek 4.2w). Rysunek 4.2. Dwuwarstwowa architektura typu klient-serwer W tej konfiguracji warstwa klienta przyjmuje żądania użytkownika i realizuje logikę aplikacji, która tworzy zapytania do bazy danych i przesyła je do serwera. Serwer przyjmuje żądania, realizuje logikę dostępu do danych i przesyła wyniki do klienta. Klient przyjmuje wyniki i przedstawia je użytkownikowi. Trójwarstwowa architektura typu klient-serwer Następny stopień to architektura trójwarstwowa. Zwróć uwwagę na rysunek 4.3. Rysunek 4.3. Trójwarstwowa architektura typu klient-serwer Ten projekt wykorzystuje trzy różne punkty centralne. W tym przypadku klient jest odpowiedzialny za logikę prezentacji, serwer aplikacji odpowiada za logikę aplikacji, a zadaniem osobnego serwera baz danych jest realizacja logiki przechowywania i dostępu do danych. Przykładem tej struktury mogą być duże witryny WWW, gdzie serwery baz danych oddzielone są od serwerów WWW. N-warstwowa architektura typu klient-serwer Ostatnim typem architektury (co nie znaczy, że najmniej ważnym), jest n-warstwowa architektura typu klient-serwer. Jest to w zasadzie konfiguracja dowolna (zobacz ry- sunek 4.4). 138 Rysunek 4.4. N-warstwowa architektura typu klient-serwer XML i SQL Server 2000 Na tym rysunku pojawiają się więcej niż trzy punkty centralne. Klient odpowiedzialny jest za logikę prezentacji, serwer (lub serwery) baz danych za logikę przechowywania i dostępu do danych, a logika aplikacji leży w gestii dwóch lub więcej różnych grup serwerów. W naszym przykładzie jeden z serwerów należących do warstwy logiki aplikacji jest serwerem WWW, natomiast drugi stricte serwerem aplikacji”. Nie jest to wymóg konieczny tej architektury. Dopuszczalna jest dowolna kombinacja dwóch lub większej liczby typów serwerów aplikacji. Podstawową cechą dającą przewagę n-warstwowej architekturze typu klient-serwer nad architekturą trójwarstwową (oraz trójwarstwowej nad dwuwarstwową) jest to, że wyrównuje obciążenie (ang. load balancing), rozdzielając przetwarzanie pomiędzy większą liczbę serwerów. Poza tym odpowiednia konfiguracja n-warstwowa umożli- wia lepszą integrację z innymi składnikami, jest łatwiejsza wrozwoju, testowaniu i zarządzaniu. Trójwarstwowa architektura Microsoftu dla serwera IIS i SQL Server 2000 Patrząc na rysunek 4.5 zauważysz, że wygląda on nieco inaczej — ma zwrócić uwagę na pewne istotne szczegóły. Na pierwszy rzut oka widać, że jest to architektura trój- warstwowa. Nie ma tutaj niczego nowego; klient odpowiedzialny jest za logikę pre- zentacji, SQL Server 2000 (lub serwery) za logikę przechowywania i dostępu do danych, a IIS za logikę aplikacji. Nieco dokładniej chciałbym opisać w tym przypadku działa- nie serwera IIS. Kiedy zapytanie typu URL jest przekazywane do serwera IIS, analizuje on wirtualny katalog macierzysty zawarty w URL-u i upewnia się, czy biblioteka SQLISAPI.DLL została zarejestrowana dla tego właśnie katalogu. Powinno to być zrobione podczas konfiguracji wirtualnego katalogu macierzystego, dokonywanej na jeden z dwóch sposobów przedstawionych w rozdziale 3., „IIS i katalogi wwirtualne”. Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 139 Rysunek 4.5. Typowa architektura klient-serwer Microsoftu SQLISAPI.DLL wraz z innymi bibliotekami DLL zestawia połączenie z SQL Serve- rem zidentyfikowanym w wirtualnym katalogu macierzystym. Po zestawieniu połą- czenia i stwierdzeniu, że polecenie w adresie URL jest poleceniem XML, jest ono przekazywane do biblioteki SQLXMLX.DLL. Wykonuje ona to polecenie i zwraca wyniki. Wszystkie dostępne funkcje XML-a są zawarte w biwbliotece SQLXMLX.DLL. Jeśli weźmiesz pod uwagę to, co już omówiliśmy i cofniesz się do tej części rozdziału trze- ciego, która opisywała zakładkę Advanced, to sam się przekonasz, dlaczego jej konfi- guracja była taka ważna. Jeśli nie można odnaleźć pliku SQLISAPI.DLL, nic nie działa. Jak to widać na rysunku 4.5, wszystkie pliki szablonów, pliki schematów i arkusze stylów XSLT znajdują się na serwerze IIS. Możliwości protokołu HTTP Teraz powiemy sobie krótko o tym, czego możemy dokonać za pomocą protokołu HTTP. Dalsza część tego rozdziału poświęcona będzie szczegółowwej analizie jego funkcji. Umieszczanie zapytania SQL bezpośrednio w adresie URL Zwróć uwagę na następujący zapis: JVVR++55GTXGT0QTVJYKPF!USN5 . 6 (41/ ORNQ[GXGU (14 :/. #761TQQVTQQV Umieszczenie zapytania SQL bezpośrednio w adresie URL jest dość proste, nie sądzisz? Po adresie URL wskazującym katalog wirtualny Northwind wstaw znak zapytania oraz USN, a następnie samo zapytanie SQL. Oddziel od siebie wszystkie słowa w zapy- taniu znakiem plus ( ). Parametr TQQV wyjaśnimy w jednym z następnych punktów, „Poprawne składniowo dokumenty, fragmenty i TQQV”. 140 XML i SQL Server 2000 (14 :/. #761 jest nowym rozszerzeniem instrukcji 5 . 6, pojawiającym się w SQL Serverze 2000. Instrukcja ta zostanie omówiona szerzej w rozdziale 8., „OPENXML”. Na razie musisz wiedzieć, że zwraca ona wynik zapytania SQL w po- staci dokumentu XML zamiast standardowego zbioru rekordów danych, do których prawdopodobnie jesteś przyzwyczajony. Możesz się również spotkać z zapisami (14 :/. 4#9 i (14 :/. :2.+ +6. Na razie jednak zaczekaj; dojdziemy do tego. Jeśli opuścisz instrukcję (14:/., jak na przykład tutaj: JVVRITKHHKPL0QTVJYKPF!USNUGNGEV HTQO ORNQ[GGUTQQVTQQV to w przeglądarce ujrzysz wiadomość o błędzie, która będzie podobna do pokazanej na wydruku 4.1. Wydruk 4.1. Błąd wygenerowany na skutek braku instrukcji FOR XML !ZONXGTUKQPGPEQFKPIWVH! TQQV !/553. TTQT*4GUWNVZ5QWTEG/KETQUQHV:/. ZVGPUKQPVQ53.5GTXGT  GUETKRVKQP5VTGCOKPIPQVUWRRQTVGFQXGTOWNVKRNGEQNWOPTGUWNV! TQQV Określanie szablonu bezpośrednio w adresie URL Oto przykład bezpośredniego określenia szablonu: JVVR++55GTXGT0QTVJYKPF!VGORNCVG4116 ZONPUUSNWTPUEJGOCUOKETQUQHVEQO åZONUSN USNSWGT[ 5 . 6 (41/ ORNQ[GGU (14 :/. #761 USNSWGT[ 4116 Widzisz teraz przykład pliku szablonu. Ma on formę dokumentu XML i zawiera przynaj- mniej jedną instrukcję SQL. Szablony umożliwiają zwracanie danych w postaci poprawnych składniowo doku- mentów XML. Jak zobaczysz wkrótce, nie jest to konieczne podczas określania instrukcji SQL bezpośrednio w adresie URL. Poza tym niektóre instrukcje SQL mogą być bardzo długie. Jeśli znajdowałyby się one w pliku szablonu, byłyby bardziej czytelne od tych zawartych w URL-u wraz z dodatkowymi znakami (znaki plusw). Deklarowanie pliku szablonu w adresie URL Zamiast pisać bardzo długie instrukcje w URL-u, co wygląda tak, jak to pokazywał przykład z poprzedniego punktu, możemy umieścić zapytanie SQL w pliku szablonu, a następnie odwoływać się do niego w adresie URL w nastęwpujący sposób: JVVR++55GTXGT0QTVJYKPF6GORNCVG8KTVWCN0COGVGORNCVGZONX Pamiętaj, że katalog TemplateVirtualName został określony przy użyciu programu zarządzającego katalogami wirtualnymi. Trzymanie użytkownika z dala od szczegółów dotyczących bazy danych zwiększa również bezpieczeństwo. Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 141 Określanie zapytań XPath o plik schematu w adresie URL Poniższy przykład pokazuje, jak to wygląda: JVVR++55GTXGT0QTVJYKPF5EJGOC8KTVWCN0COGUEJGOCHKNGZON å ORNQ[GG= ORNQ[GG+ ? Katalog SchemaVirtualName został określony przy użyciu programu zarządzającego katalogami wirtualnymi, a ORNQ[GG= ORNQ[GG+ ? jest zapytaniem XPath o plik schemafile.xml. Określanie obiektów baz danych bezpośrednio w adresie URL Obiekty baz danych, takie jak tabele czy widoki, mogą zostać określone w adresie URL, a następnie w stosunku do nich można zastosować zapytanie XPath, które spo- woduje wygenerowanie odpowiednich wyników. Pokazuje to naswtępujący przykład: JVVR++55GTXGT0QTVJYKPFFDQDLGEV8KTVWCN0COG:RCVJ3WGT[ Zapytanie XPath umieszczane jest jako ostatnia jednostka w adresie URL, bezpośrednio za VirtualDirectoryName. Encje Kiedy omawialiśmy dokumenty XML w rozdziale 1., wspomnieliśmy o pewnych znakach specjalnych, które muszą być traktowane w sposób szczególny, ponieważ są one różnie interpretowane w zależności od miejsca, jakiew zajmują w dokumencie. Aby uzyskać więcej informacji, zajrzyj pod adres http://www.landfield.com/rfcs/rfc1738.html. Musimy również wziąć pod uwagę znaki specjalne występujące w adresie URL. Pewne znaki spełniają określone funkcje, kiedy używa się ich ww URL-u. Encje w XML-u Znaki wyszczególnione w tabeli 4.1 nie powinny być używane pomiędzy znacznikami w dokumencie XML. Znaki te mają specjalne znaczenie w XML-u i spowodują błędną interpretację dokumentu podczas analizy składniowej. Prawidłowe zamienniki, któ- rych powinno się używać w miejsce znaków, zawarto w tabewli. Gruntowne omówienie tych znaków wraz z opisem ich działania znajdziesz w dokumencie RFC 2396. Ten RFC jest dostępny bezpłatnie na stronie http://www.landfield.com/rfcs/rfc2396.html. 142 XML i SQL Server 2000 Tabela 4.1. Zamienniki znaków Znak  (ampersand) (apostrof)  (znak mniejszości) (znak większości)  (cudzysłów) Zamiennik Użyj COR Użyj CRQU Użyj NV Użyj IV Użyj SWQV Zwróćmy uwagę na przykładowy plik szablonu pokazany na wydruku 4.2. Zobaczysz, dlaczego te encje są potrzebne. Wydruk 4.3 prezentuje wynik.w Wydruk 4.2. Encje w plikach szablonów 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6 WUVQOGT+ 1TFGT CVG(TGKIJV (41/1TFGTU 9* 4 (TGKIJVIV (14:/.#761 USNSWGT[ 4116 IVCOKGPPKM  Wydruk 4.3. Wynik zamiany encji 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN 1TFGTU WUVQOGT+ 37 01TFGT CVG6 (TGKIJV 1TFGTU WUVQOGT+ 37+ -1TFGT CVG6 (TGKIJV 1TFGTU WUVQOGT+ 37+ -1TFGT CVG6 (TGKIJV 1TFGTU WUVQOGT+ 5#8 #1TFGT CVG6 (TGKIJV 4116 Encje w adresach URL Kiedy wywołujesz zapytanie w adresie URL, musisz bardzo ostrożnie posługiwać się ze znakami wyszczególnionymi w tabeli 4.2. Wszystkie te znaki są wymagane w tym lub innym punkcie interpretacji adresu URL. Również dokument RFC 2396 zawiera szczegółowe omówienie tych znaków. Oto przykład bezpośredniego zapytania SQL w URL-u: JVVR++55GTXGT0QTVJYKPF!USN5 . 6 (41/ ORNQ[GXGU 9* 4 .CUV0COG .+- å  (14 :/. #761TQQVTQQV Próbujemy tutaj wyszukać wszystkie informacje dotyczące pracowników, których nazwisko rozpoczyna się na literę „D”. Ponieważ znak  jest jednym ze specjalnych Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 143 Tabela 4.2. Znaki specjalne w adresach URL Znak Opis Wartość szesnastkowa  !    Oznacza spację (znaki spacji nie mogą być używane w URL-ach). 20 2F Oddziela katalogi i podkatalogi. Oddziela URL od parametrów. 3F 25 Określa znaki specjalne. 23 Zaznacza zakotwiczenie zakładki. Oddziela od siebie parametry określone w URL-u. 26 znaków w URL-ach, próba umieszczenia tego zapytania bezpośrednio w URL-u spo- woduje wystąpienie kilku błędów. Aby ominąć ten problem, musisz użyć zamienników znaków specjalnych w postaci wartości szesnastkowych,w tak jak pokazano poniżej: JVVR++55GTXGT0QTVJYKPF!USN5 . 6 (41/ ORNQ[GXGU 9* 4 .CUV0COG .+- å  (14 :/. #761TQQVTQQV Należy tutaj wspomnieć o jeszcze jednej rzeczy. Istnieją takie przypadki, gdy może się okazać niezbędne użycie kombinacji znaków specjalnych zarówno XML-a, jak i URL-a. Spójrz na poniższy przykładowy szablon, który może być określony bezpo- średnio w URL-u. Sprawdź, czy potrafisz dostrzec błąd. 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6 å WUVQOGT+ 1TFGT CVG(TGKIJV (41/ 1TFGTU 9* 4 (TGKIJV  (14 :/. #761 USNSWGT[ 4116 Mam nadzieję, że teraz już wiesz, że znak większości ( ) nie może zostać użyty w tym miejscu, musimy więc zamienić go na wymaganą encję XML. 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6 å WUVQOGT+ 1TFGT CVG(TGKIJV (41/ 1TFGTU 9* 4 (TGKIJV IV X (14 :/. #761 USNSWGT[ 4116 Czy to zrobiłeś? Jeśli tak, to dobrze; jeśli jednak na tym poprzestałeś, to jeszcze za mało. Ampersand () to znak specjalny adresów URL, więc również powinien zostać zastą- piony. Zamień go na szesnastkową wartość . 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6 å WUVQOGT+ 1TFGT CVG(TGKIJV (41/ 1TFGTU 9* 4 (TGKIJV IV X (14 :/. #761 USNSWGT[ 4116 Wykonywanie instrukcji SQL poprzez HTTP Dotąd pokazaliśmy wiele przykładów obrazujących sposób wykorzystania protokołu HTTP do pobierania dokumentów XML z SQL Servera. Nigdzie nie podaliśmy formalnej definicji składni. Taką definicję zawiera tabela 4.3. Omówimy również nieco więcej szczegółów dotyczących umieszczania zapytań w adresie URL — wbudowane proce- dury, szablony, wykorzystanie arkuszy stylów XSLT itd. 144 XML i SQL Server 2000 Tabela 4.3. Wyjaśnienie składni HTTP Słowo kluczowe Opis KKUUGTXGT XKTVWCNTQQV XKTVWCNPCOG =RCVJKPHQ? =:2CVJ ZRTGUUKQP? !USN 5SN5VTKPI !VGORNCVG RCTCO Serwer IIS, do którego należy uzyskać dostęp, np. www.newriders.com. Wirtualny katalog macierzysty skonfigurowany za pomocdą programu do zarządzania katalogami wirtualnymi (graficznego ludb programowego). Nazwa wirtualna zdefiniowana w czasie konfiguracji wdirtualnego katalogu macierzystego. Może mieć ona jeden z trzech typów: szadblon, schemat lub obiekt bazy danych. Informacja o ścieżce służąca lokalizacji plików szablondów bądź schematów, uzupełniająca informacje określone podczas konfigurdacji nazwy wirtualnej. Nie jest potrzebna dla obiektów baz danych. Określany dla plików schematów lub typów dbobject. Ogranicza ciąg zapytania SQL. Zapytanie SQL lub nazwa procedury składowanej. Zwykle zawiera rozszerzenie (14:/., chyba, że zwracane dane już są w formacie XML. Przykładdem może być procedura zwracająca dane XML. Ogranicza ciąg zapytania SQL sformatowany jako dokumednt XML. Jest to albo nazwa parametru, albo jedno z poniższych okdreśleń: EQPVGPVV[RG — Określa format zawartości zwracanego dokumentu, abyd umożliwić przeglądarce WWW wybranie odpowiedniej metody dwyświetlania. Określany w dwóch częściach: EQPVGPVV[RG i UWDV[RG. Jest wysyłany w nagłówku HTTP, aby stał się dokumentem typu MIME. text/XML, text/HTML i image/gif oznaczają odpowiednio dokument XML, ddokument HTML i obrazek GIF. QWVRWVGPEQFKPI — Zestaw znaków użyty do stworzenia generowanego dokumentu XML. Domyślne ustawienie to UTF-8. Szablony określande bezpośrednio w adresie URL poprzez VGORNCVG są tworzone w Unicode. Pliki szablonów mogą same określać QWVRWVGPEQFKPI, ponieważ są dokumentami XML. TQQV — Kiedy parametr jest określony, zwracane dane są otodczone nazwami elementów, nadanymi w celu wygenerowania poprawnego sdkładniowo dokumentu XML. ZUN — URL arkusza stylów XSLT używanego do przetwarzania zwracanych danych. Domyślnie wyjściowe dokumenty są kodowane w UTdF-8, o ile to ustawienie nie jest odwołane przez instrukcję kodowdania w pliku XSL. Jeśli określono parametr QWVRWVGPEQFKPI, odwołuje on instrukcję kodowania z pliku XSL. A oto formalna składnia URL, umożliwiająca dostęp z poziwomu SQL ISAPI: JVVRKKUUGTXGTXKTVWCNTQQVXKTVWCNPCOG=RCVJKPHQ?=:2CVJ ZRTGUUKQXP? =!RCTCOXCNWG=RCTCOXCNWG?P? lub: JVVRKKUUGTXGTXKTVWCNTQQV!]USN5SN5VTKPI^VGORNCVG:/.6GORNCVG_ =RCTCOXCNWG=RCTCOXCNWG?P? Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 145 Kodowanie znaków jest określone za pomocą atrybutu GPEQFKPI w deklaracji XML. Specyfikacja XML wyraźnie informuje o tym, że XML korzysta z ISO 10646, międzyna- rodowego, standardowego zakresu znaków 31-bitowych, obejmującego większość ję- zyków świata. Planuje się, że będzie on nadzbiorem Unicode; można go znaleźć pod adresem http://www.iso.ch. Specyfikacja mówi (2.2): „Wszystkie procesory XML muszą przyjmować kodowanie UTF- 8 i UTF-16 standardu ISO 10646...”. UTF-8 jest kodowaniem Unicode na znaki 8- bitowe: grupa pierwszych 128 z nich jest taka sama, jak w ASCII; reszta używana jest do kodowania Unicode w sekwencjach od 2 do 6 bajtów. UTF-8 w swojej jednookteto- wej formie to to samo, co ISO 646 IRV (ASCII), możesz więc nadal używać ASCII dla ję- zyka angielskiego lub innego języka nieakcentowanego wykorzystującego alfabet łaciń- ski. Zapamiętaj, że kodowanie UTF-8 nie jest kompatybilne z ISO8859-1 (ISO Latin-1) po dziesiętnej wartości 126 (koniec ASCII). UTF-16 jest podobne do UTF-8, ale ze sche- matem reprezentacji następnych 16 płaszczyzn znaków 64k jako dwóch znaków 16-bitowych. Bez względu na zastosowane kodowanie, każdy znak zestawu ISO 10646 można przedstawić za pomocą dziesiętnego lub szesnastkowego ekwiwalentu tego ciągu bi- towego. Nie jest więc ważne, jakiego zestawu znaków używasz, ponieważ zawsze mo- żesz określić poszczególne znaki używając #dddd; (kodowania znaków dziesiętnych) lub #xHHHH; (kodowania znaków szesnastkowych dużymi literami). Zarówno termi- nologia, jak i te cyfry mogą nieco wprawiać w zakłopotanie: zwróć uwagę na słownik pojęć ISO 10646 dostępny pod adresem http://www.cns-web.bu.edu/djohnson/ web_files/i18n/ISO-10646.hmtl1 . Poprawne składniowo dokumenty, fragmenty i root Jak obiecałem, wyjaśnimy teraz parametr TQQVTQQV użyty w kilku URL-ach i pli- kach szablonów w poprzednim podrozdziale. Wróć myślami do naszej dyskusji na temat poprawnych składniowo dokumentów XML. Jednym z warunków, który musi być spełniony, aby dokument XML został uznany za poprawny, jest posiadanie jednego elementu najwyższego poziomu. Przypomnij sobie nasz dokument 4 57/ 5, pokazany w poniższym przykładzie: 4 57/ 5ZONPU JVVRYYYO[QTIPGVVCIU 2 45102 4510+ R 0#/  4 57/ 5 Nasz dokument zawiera jeden element najwyższego poziomu 4 57/ 5 . Chociaż są również inne wymagania w stosunku do poprawnych składniowo dokumentów, to jeśli ten jeden nie jest spełniony — dokument nie przechodzi powzytywnie testu. Jak to się ma do parametru TQQV w adresie URL? Parametr TQQV określa nazwę ele- mentu głównego dokumentu. Wynikiem jest dokument XML wraz z tym najbardziej znaczącym elementem najwyższego poziomu. Zwróćmy uwagę na pewne przykłady wykorzystujące części kodu, który podaliśmy wcześniejw: JVVR++55GTXGT0PQTVJYKPF!USN5 . 6 (41/ ORNQX[GGU (14 :/. #761TQQVTQQV 1 Więcej o kodowaniu polskich znaków diakrytycznych można znaleźć na Polskiej Stronie Ogonkowej (http://www.uci.agh.edu.pl/ogonki/) — przyp. red. 146 XML i SQL Server 2000 Stosujemy tutaj zapis TQQVTQQV. Stworzony zostanie dokument zawierający pojedynczy element najwyższego poziomu, którym jest 4116 . Spodziewasz się, że w następnym przykładzie zwrócony zostanie fragment dokumentu, ponieważ nie został określony element główny. Lecz otrzymasz wiadomość o błędzie: „Tylko jeden element najwyż- szego poziomu może pojawić się w dokumencie XML”. Ponieważ brakuje elementu głównego (TQQV), wszystkie elementy odnoszące się do pracowników są traktowane jako elementy najwyższego poziomu, co nie jest dopuszczawlne. VVR++55GTXGT0QTVJYKPF!USN5 . 6 (41/ ORNQ[GGXU (14 :/. #761 Te same warunki muszą być spełnione w wypadku plików szablonów. Załóżmy, że dysponujemy plikiem szablonu przedstawionym na wydruku 4.4. Wydruk 4.4. Plik szablonu bez elementu głównego 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6 (41/ ORNQ[GGU (14:/.#761 USNSWGT[ 4116 Użyjemy tego szablonu w następującym URL-u: JVVR++55GTXGT0QTVJYKPF6GORNCVG8KTVWCN0COGVGORNCVGZONX Plik szablonu dostarczy pojedynczego elementu najwyższego poziomu poprzez dekla- rację elementu 4116 . Aby się upewnić, że naprawdę rozumiemy deklarację elementu głównego, zmienimy parametr w pliku szablonu na TQQV /25. Poniższy fragment dokumentu wynikowego pokazuje, jak zmieni się element główny dokumentu.  /25ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN  ORNQ[GGU ORNQ[GG+ .CUV0COG CXQNKQ   /25 Zapytania do wielu tabel Kierowanie pytań do wielu tabel pociąga za sobą skutki, które musisz uważnie rozpatrzyć, jeśli chcesz tworzyć dokumenty zachowujące właściwą kolejność elementów. Można przyjąć następującą zasadę: „Kolejność, w jakiej podawane są tabele w zapytaniu SQL określa kolejność zagnieżdżania elementów”. Przyjrzymy się tabelom zamówień (Orders) i pracowników (Employees) w bazie Northwind w dwóch przykładach (zobacz też dodatek A, „Schemat bazy danych Northwind”). Oto pierwsze zapytanie: JVVRKKUUGTXGT0QTVJYKPF!USN5 . 6 612  1TFGTU1TFGT+  ORNQ[GGU .CUV0COG 1TFGTU5JKRRGF CVG (41/ 1TFGTU ORNQ[GGU 9* 4 1TXFGTU ORNQ[GG+  ORNQ[GGU ORNQ[GG+ 1TFGT D[ ORNQ[GGU ORNQ[GG+  1TFGT+ (14 :/. #761TQQV4116 Zwróci ono wynik pokazany na wydruku 4.5. Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 147 Wydruk 4.5. Wynik zapytania skierowanego do wielu tabel !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+ 5JKRRGF CVG6  ORNQ[GGU.CUV0COG CXQNKQ 1TFGTU 1TFGTU1TFGT+ 5JKRRGF CVG6  ORNQ[GGU.CUV0COG CXQNKQ 1TFGTU 4116 Zróbmy teraz to samo z trzema tabelami, dodając tabelę ze szczegółami zamówień (Order Details). JVVRKKUUGTXGT0YKPF!USN5 . 6 612  1TFGTU1TFGT+X  ORNQ[GGU .CUV0COG 1TFGTU5JKRRGF CVG =1TFGT GVCKNU?7PKV2TKEG =1TFGT GVCKNU?2TQFWEV+ (41/ 1TFGTU ORNQ[GGU =1TFGT GVCKNU? 9* 4 1TFGTU ORNQ[GG+  ORNQ[GGU ORNQ[GG+ #0 1TFGTU1TFGT+ =1TFXGT GVCKNU?1TFGT+ 1TFGT D[ ORNQ[GGU ORNQ[GG+ 1TFGTU1TFGT+ (14 :/. #761TQQV4116 Wydruk 4.6 pokazuje wynik tego zapytania Wydruk 4.6. Wynik zapytania skierowanego do trzech tabel !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+ 5JKRRGF CVG6  ORNQ[GGU.CUV0COG CXQNKQ 1TFGTAZA GVCKNU7PV2TKEG2TQFWEV+  1TFGTAZA GVCKNU7PV2TKEG2TQFWEV+   ORNQ[GGU 1TFGTU 4116 Wydruk 4.7 pokazuje wynik, jaki można otrzymać po wykonaniu tego samego zapytania SQL, ale z przesuniętym elementem ORNQ[GGU.CUV0COG na koniec. Wydruk 4.7. Wynik umieszczenia Employees.LastName na pozycji ostat niego elementu !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+ 5JKRRGF CVG6 1TFGTAZA GVCKNU7PV2TKEG2TQFWEV+   ORNQ[GGU.CUV0COG CXQNKQ 1TFGTAZA GVCKNU 1TFGTAZA GVCKNU7PV2TKEG2TQFWEV+   ORNQ[GGU.CUV0COG CXQNKQ 1TFGTAZA GVCKNU 1TFGTU 4116 148 XML i SQL Server 2000 Chcę, abyś tutaj zwrócił uwagę na kluczowy problem, jakim jest zależność występowania elementów w wynikowym dokumencie XML od kolejności umieszczania ich w zapy- taniach SQL. Jest to szczególnie widoczne w różnicach pomwiędzy wydrukami 4.6 i 4.7. Przekazywanie parametrów Możliwe jest przekazywanie parametrów do zapytań SQL w adresach URL. Proces ten znany jest jako zastępowanie w czasie wykonywania (ang. run-time), w przeci- wieństwie do zastępowania w czasie projektowania (ang. design-time). W pierwszym przypadku do określenia miejsca, w którym parametr ma być zastąpiony w czasie wykonywania, używamy symbolu wypełnienia. Obszarem zablokowanym jest znak !, który musi być określony w URL-u jako (. Oto przykład: JVVRKKUUGTXGT0QTVJYKPF!USN5 . 6 612  1TFGT+ (X41/ 1TFGTU 9* 4 å ORNQ[GG+ ( (14 :/. #761 ORNQ[GG+ TQQV4116 Wydruk 4.8 jest dokumentem wynikowym. Wydruk 4.8. Wynik zastąpienia parametrów w naszym URL-u !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+  1TFGTU1TFGT+  1TFGTU1TFGT+  1TFGTU1TFGT+  4116 Przekazywanie wielu parametrów odbywa się poprzez wstawienie większej liczby oddzie- lonych od siebie pozycji ze znakami zapytania. Ten URL prwzekazuje dwa parametry: JVVRKKUUGTXGT0QTVJYKPF!USN5 . 6 612  1TFGT+ (X41/ 1TFGTU 9* 4 å ORNQ[GG+ ( #0 WUVQOGT+ ( (14 :/. #761 ORNQ[GG+  WUVQOGTX+  å 8+0 6 TQQV4116 Może to nie wygląda na duży problem i pewnie takim nie jest dla Ciebie, ale poczekaj do chwili, gdy zaczniemy określać w URL pliki szablonów, które mają zaprojektowane zapytania o parametry. Dojdziemy do tego w krótkim czawsie. Kluczowe słowo XSL Teraz przejdziemy do wykorzystania tego, o czym mówiliśmy w rozdziale 2. Korzystanie z arkuszy stylów XSLT pozwala na uzyskanie elastyczności potrzebnej do manipulo- wania wytwarzanym wyjściem XML. Możemy stworzyć „w locie” plik HTML w celu jego natychmiastowego (bądź późniejszego) wyświetlenia lub możemy zamienić zwraca- ny dokument XML na inny, aby go dalej przetwarzać. To ostatnie zdarza się częściej niż mógłbyś przypuszczać, jak w przypadku powiązanych wiadomości EDI (Electro- nic Data Interchange). Z następującego zapytania SQL stwórzmy stronę HTML: JVVRKKUUGTXGT0QTVJYKPF!USN5 . 6 612  1TFGT+  OXRNQ[GG+ 5JKRPCOG å(41/ 1TFGTU 9* 4 ORNQ[GG+  (14 :/. #761ZUNQTFGTZUNTQQV4116 Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 149 W tym przykładzie plik XSL położony jest w wirtualnym katalogu macierzystym. Wynikowy dokument XML pokazano na wydruku 4.9, a arkusz stywlów na wydruku 4.10. Wydruk 4.9. okument XML zawierający informacje o zamówieniach !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+  ORNQ[GG+ 5JKRPCOG8KPUGVCNEQQNU JGXCNKGT 1TFGTU1TFGT+  ORNQ[GG+ 5JKRPCOG JQR5WG[ JKPGUG 1TFGTU1TFGT+  ORNQ[GG+ 5JKRPCOG9JKVG NQXGT/CTMGVU 1TFGTU1TFGT+  ORNQ[GG+ 5JKRPCOG$NQPFGNRGTGGVHKNU 4116 Wydruk 4.10. Arkusz stylów XSLT stosowany do informacji o zamówieni ach !ZONXGTUKQP  ! ZUNUV[NGUJGGVZONPUZUN JVVRYYYQTI:5.6TCPUHQTO ZUNQWVRWVOGFKCV[RGVGZVJVON ZUNVGORNCVGOCVEJ *6/. $1 ; 6#$. YKFVJ  DQTFGT  64 6 $ 1TFGT+ $ 6 6 $ 5JKR0COG$ 6 64 ZUNCRRN[VGORNCVGU 6#$. $1 ; *6/. ZUNVGORNCVG ZUNVGORNCVGOCVEJ1TFGTU 64 6 ZUNXCNWGQHUGNGEV 1TFGT+  6 6 ZUNXCNWGQHUGNGEV 5JKRPCOG 6 64 ZUNVGORNCVG ZUNUV[NGUJGGV Wynikiem jest prosta tabela składająca się z numeru identyfikacyjnego zamówienia i nazwy przewoźnika, co pokazano na rysunku 4.4. Tabela 4.4. Wynikowa tabela HTML Order ID Shipname 10248 10254 10269 10297 Vins et alcools Chevalier Chop-Suey Chinese White Clover Markets Blondel pere et fils 150 XML i SQL Server 2000 Również w tym przypadku wynik może wydawać się prosty, ale potencjalnie może być dosyć skomplikowany. Dane mogą być wyszukiwane z bazy i prezentowane użyt- kownikowi poprzez przeglądarkę w czasie rzeczywistym. Mogą być generowane strony statyczne i przechowywane do przeglądania, jeśli klient zgłosi taką potrzebę. W tym przypadku arkusz stylów XSLT funkcjonuje jak szablon HTML (łatwiej jest wykorzys- tywać szablony niż pisać ponownie dokumenty HTML). Dokumenty e-commerce prze- syłane między firmami mogą być tworzone z istniejących zapytań bez konieczności modyfikacji samego zapytania. Arkusz stylów XSLT może manipulować danymi w dowolny sposób w celu stworzenia nowego, odpowiedniego wdokumentu XML. Naszą uwagę skupimy teraz na użyciu plików szablonów do generowania dokumentów XML. Omówimy ten temat jeszcze bardziej szczegółowo, niwż to zrobiliśmy do tej pory. Wywoływanie plików szablonów poprzez HTTP Jeśli wrócisz do niektórych zapytań stworzonych w poprzednim podrozdziale, stwierdzisz, że są one czasami trudne do odczytania. Spójrz na zapytanie, które wygenerowało kody pokazane na listingach 4.6 i 4.7 i powiedz mi natychmiast, do czego służą. Wątpię w to, czy potrafisz. Pliki szablonów posiadają te same możliwości, co zapytania SQL wpisane bezpośred- nio w adresy URL. Pliki szablonów mogą realizować następująwce funkcje: tttt określać zapytania SQL lub zapytania XPath, tttt definiować parametry, które mogą być przekazywane do tywch zapytań, tttt określać element najwyższego poziomu (główny) dokumentu XML,w tttt deklarować przestrzenie nazw, tttt określać arkusz stylów XSLT stosowany do wyników. Dodatkowymi zaletami plików szablonów są: łatwość ich odczytu i, jak mówią niektórzy, również łatwość ich tworzenia. Dodatkowo, pozbawiają one użytkownika dostępu do szczegółów dotyczących bazy danych, co zwiększa bezpieczeństwo. Edycja pliku przez użytkownika może się okazać niemożliwa, ale ponieważ może on zobaczyć adres URL, może również go zmienić lub napisać swój własny i uzyskać informacje, których być może nie chcesz mu udzielić. Poza tym mniej jest wymagań szkoleniowych, ponieważ użytkownik musi znać jedynie nazwę pliku i parametry, które mogą być przekazywane. Użycie szablonów XML Do tej pory, gdy pisaliśmy pliki szablonów, w celu określenia instrukcji do wykona- nia używaliśmy tylko elementu USNSWGT[ . W szablonie pliku oprócz elementu USNSWGT[ mogą pojawić się jeszcze cztery inne elementy. Wydruk 4.11. przedstawia ogólny format pliku szablonu, a w tabeli 4.5 wyjaśniono znaczenie każdego z elementów. Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 151 Wydruk 4.11. Format szablonu XML 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNZUN:5.(KNG0COG USNJGCFGT USNRCTCO USNRCTCO USNRCTCO USNRCTCO P USNJGCFGT USNSWGT[ KPUVTWMELC G USN USNSWGT[ USNZRCVJSWGT[OCRRKPIUEJGOC5EJGOC(KNG0COGZON  CR[VCPKG:2CVJ USNZRCVJSWGT[ 4116 Tabela 4.5. Elementy szablonu XML Element 4116 USNJGCFGT USNRCTCO USNSWGT[ USNZRCVJSWGT[ USNZUN OCRRKPIUEJGOC Opis Ten znacznik zawiera element najwyższego poziomu (jedst określany również jako znacznik główny) wynikowego dokumentu XML. Może mieć dowolną nazwę. Ten znacznik jest używany do przechowywania wartościd nagłówka. W bieżącej implementacji SQL Servera 2000 w znaczniku tym mdoże być określony tylko element USNRCTCO . Znacznik USNJGCFGT występuje w roli znacznika zawierającego, pozwalającego na definiowanie wielu parametrów. Zapewnia to większą wydajność, ponieważ wszystkie definicje parametrów znajdują się w jednym miejscu.d Jest to podobne do deklarowania zmiennych na początku składowanych prdocedur T-SQL. Ten element definiuje parametry, które są przekazywande zapytaniom wewnątrz szablonu. Każdy element USNRCTCO definiuje jeden parametr. W znaczniku USNJGCFGT można zdefiniować większą liczbę elementów USNRCTCO . Te element określa zapytania SQL. W szablonie możesz mieć wdiele elementów USNSWGT[ . Jeśli w szablonie jest wiele znaczników USNSWGT[ i jeden z nich zawiedzie, przetwarzanie innych będzie kontynuowane. Element określa zapytanie XPath. Nazwa pliku schematu musid zostać określona za pomocą atrybutu OCRRKPIUEJGOC. Jeśli w szablonie jest wiele znaczników USNZRCVJSWGT[ i jeden z nich zawiedzie, przetwarzanie innych będzie kontynuodwane. Określa arkusz stylów, który ma zostać zastosowany do ddokumentu wynikowego. Podana może być względna lub bezwzględna ściedżka do pliku. Jeśli podana została ścieżka względna, odwołuje się ona do katalogu szablonów (Template), zdefiniowanego za pomocą programu zarządzania katalogami wirtualnymi. Jeśli wywołujesz zapytanie XPath w szablonie, atrybut tend identyfikuje skojarzony z nim schemat XDR. Ścieżka dostępu do niego dmoże być określana na podobnych zasadach, co w elemencie USNZUN . 152 XML i SQL Server 2000 A oto kilka przykładów użycia szablonów i plików szablonów w adresach URL. Użyję ponownie podanych wcześniej przykładów zapytań URL SQL, awby zilustrować różnice. Mamy tutaj prostą instrukcję 5 . 6 odnoszącą się do jednej tabeli, określoną bezpo- średnio w URL-u: JVVR++55GTXGT0QTVJYKPF!VGORNCVG4116 ZONPUUSNWTPUEJGOCUOKETQUQHV åEQOZONUSN USNSWGT[ 5 . 6 .CUV0COG(KTUV0COG (41/ ORNQ[GGU X(14 :/. #761 USNSWGT[ 4116 Wynik prezentuje wydruk 4.12. Wydruk 4.12. Wynikowy dokument XML dla szablonu określonego w URL-u 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN  ORNQ[GGU.CUV0COG CXQNKQ(KTUV0COG0CPE[  ORNQ[GGU.CUV0COG(WNNGT(KTUV0COG#PFTGY  ORNQ[GGU.CUV0COG.GXGTNKPI(KTUV0COG,CPGV  ORNQ[GGU.CUV0COG2GCEQEM(KTUV0COG/CTICTGV  ORNQ[GGU.CUV0COG$WEJCPCP(KTUV0COG5VGXGP  ORNQ[GGU.CUV0COG5W[COC(KTUV0COG/KEJCGN  ORNQ[GGU.CUV0COG-KPI(KTUV0COG4QDGTV  ORNQ[GGU.CUV0COG CNNCJCP(KTUV0COG.CWTC  ORNQ[GGU.CUV0COG QFUYQTVJ(KTUV0COG#PPG 4116 Z tego szablonu stwórzmy plik szablonu — zapisany w bardziej czytelny sposób (zobacz wydruk 4.13). Wydruk 4.13. Zapytanie SQL zmienione na format szablonu 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6.CUV0COG(KTUV0COG (41/ ORNQ[GGU (14:/.#761 USNSWGT[ 4116 Zakładając, że ten szablon zostanie zapisany jako plik template1.xml w katalogu szablonów nazw wirtualnych, wywołania szablonu dokonamy za pomocą następującego adresu URL: JVVRKKUUGTXGT0QTVJYKPFVGORNCVGUVGORNCVGZON Spójrzmy na jeszcze jeden przykład. Kiedy tworzyliśmy zapytanie do trzech tabel, URL wyglądał następująco: JVVRKKUUGTXGT0YKPF!USN5 . 6 612  1TFGTU1TFGT+  ORNQ[GGU .CUV0COG 1TFGTU5JKRRGF CVG =1TFGT GVCKNU?7PKV2TKEG =1TFGT GVCKNU?2TQFWEV+ (41/ 1TFGTU ORNQ[GGU =1TFGT GVCKNU? 9* 4 1TFGTU ORNQ[GG+  ORNQ[GGU ORNQ[GG+ #0 1TFGTU1TFGT+ =1TFXGT GVCKNU?1TFGT+ 1TFGT D[ ORNQ[GGU ORNQ[GG+ 1TFGTU1TFGT+ (14 :/. #761TQQV4116 Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 153 Plik szablonu będący zamiennikiem tego zapytania prezentujew wydruk 4.14. Wydruk 4.14. Długie zapytanie SQL zapisane ponownie w pliku szablon u 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNSWGT[ 5 . 6612 1TFGTU1TFGT+   ORNQ[GGU.CUV0COG 1TFGTU5JKRRGF CVG =1TFGT GVCKNU?7PKV2TKEG =1TFGT GVCKNU?2TQFWEV+ (41/ 1TFGTU ORNQ[GGU=1TFGT GVCKNU? 9* 4 1TFGTU ORNQ[GG+  ORNQ[GGU ORNQ[GG+ #0 1TFGTU1TFGT+ =1TFGT GVCKNU?1TFGT+ 14 4$;  ORNQ[GGU ORNQ[GG+ 1TFGTU1TFGT+ (14:/.#761 USNSWGT[ 4116 Ten plik szablonu pokaże taki sam wynik, co kod pokazany na wydruku 4.6. Czy nie uważasz, że jest łatwiejszy do odczytu niż adres URL? Przekazywanie parametrów szablonu Możemy przekazywać parametry zarówno do zapytań SQL, jak i do szablonów. Elemen- tu USNJGCFGT używa się do definiowania parametrów; można im również przydzielić wartość domyślną. Wartości domyślne są używane w czasie wykonywania kodu, jeśli wartości parametrów nie zostały określone jawnie. Jawne wartości domyślne i przekazywanie parametrów W następnym przykładzie chcemy przedstawić wartości pól WUVQOGT+ , 1TFGT+ , 4GSWKTGF CVG i (TGKIJV dla określonej w URL-u wartości WUVQOGT+ . Przyjrzyj się dokładnie plikowi szablonu z wydruku 4.15. Nasze zapytanie, wjak można się było tego spodziewać, jest umieszczone w elemencie USNSWGT[ . Dodatkowo określiliśmy wprost domyślną wartość 8+0 6 dla WUVQOGT+ . Realizuje to element USNRCTCO . Element USNJGCFGT przechowuje wszystkie parametry i ich wartości. Wydruk 4.15. Plik customer.xml 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNJGCFGT USNRCTCOPCOG WUVQOGT+ 8+0 6USNRCTCO USNJGCFGT USNSWGT[ 5 . 6 WUVQOGT+ 1TFGT+ 4GSWKTGF CVG(TGKIJV (41/1TFGTU 154 XML i SQL Server 2000 9* 4  WUVQOGT+  WUVQOGT+ (14:/.#761 USNSWGT[ 4116 Wartość elementu, który jest sparametryzowany w zapytaniu jest określona przez na- zwę elementu poprzedzoną znakiem . W tym przypadku jest to WUVQOGT+ . Nie po- myl użycia symbolu małpy w tym miejscu z jego użyciem przy atrybucie XML. Są to dwie całkowicie różne encje. To zastosowanie jest specyficzne dla parametryzowanych wyrażeń Microsoftu. Jeśli wywołamy ten plik szablonu (customer.xml) w adresie URL, otrzymamy wynik pokazany na wydruku 4.16. JVVRKKUUGTXGT0QTVJYKPFVGORNCVGUEWUVQOGTZON Wydruk 4.16. Wynik wywołania pliku customer.xml bez przekazania wart ości CustomerID 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN 1TFGTU WUVQOGT+ 8+0 61TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 8+0 61TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 8+0 61TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 8+0 61TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 8+0 61TFGT+ 4GSWKTGF CVG6 (TGKIJV 4116 Ponieważ wartość parametru WUVQOGT+ nie została przekazana w URL-u, plik szablonu użyje domyślnej wartości 8+0 6. Jeśli przekażemy parametr o wartości 9 ..+, otrzy- mamy wynik przedstawiony na wydruku 4.17. Oto adres URL: JVVRKKUUGTXGT0QTVJYKPFVGORNCVGUEWUVQOGTZON! WUVQOGT+ 9 ..+ Wydruk 4.17. Część wyniku po określeniu parametru CustomerID=WELLI 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN 1TFGTU WUVQOGT+ 9 ..+1TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 9 ..+1TFGT+ 4GSWKTGF CVG6 (TGKIJV 1TFGTU WUVQOGT+ 9 ..+1TFGT+ 4GSWKTGF CVG6 (TGKIJV  4116 Przekazywanie wielu parametrów Zapewne myślisz, że przekazywanie wielu parametrów nie sprawia żadnych problemów — i masz rację. Parametry można po prostu przedstawić w postaci listy w elemencie USNJGCFGT oraz nadać im domyślne wartości. Spójrz na wydruk 4.18 orwaz na wynik pokazany na wydruku 4.19. Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 155 Wydruk 4.18. Shipvia.xml — wiele parametrów w szablonie 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNJGCFGT USNRCTCOPCOG 5JKR8KC USNRCTCO USNRCTCOPCOG 5JKR QWPVT[ (TCPEGUSNRCTCO USNJGCFGT USNSWGT[ 5 . 6612 WUVQOGT+ 1TFGT+ (TGKIJV (41/1TFGTU 9* 4 5JKR8KC 5JKR8KC #0 5JKR QWPVT[ 5JKR QWPVT[ 14 4$;1TFGT+ (14:/.#761 USNSWGT[ 4116 Wydruk 4.19. Wynik kodu z wydruku 4.18 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN 1TFGTU WUVQOGT+ 8+ 6 1TFGT+ (TGKIJV 1TFGTU WUVQOGT+ $.1021TFGT+ (TGKIJV 1TFGTU WUVQOGT+ 8+0 61TFGT+ (TGKIJV 1TFGTU WUVQOGT+ $10#21TFGT+ (TGKIJV 4116 Wypisanie adresu URL http://iisserver/Northwind/templates/shipvia.xml, który wywołuje szablon z wydruku 4.18, daje wyniki pokazane na wydruku 4.19, ponieważ nie zostały przekazane żadne parametry, a użyte zostały domyślne wartości:  dla 5JKR8KC i (TCPEG dla 5JKR QWPVT[. Mógłbyś również przekazać tylko jeden z tych parametrów. Wówczas wartość domyślna zostałaby zastąpiona wartością określoną przez Ciebie, a drugi para- metr użyłby wartości domyślnej. Określanie arkusza stylów XSLT Nie jest również niczym nowym zastosowanie arkusza stylów XSLT do wyników pliku szablonu. Po prostu określ nazwę arkusza stylów w atrybucie USNZUN elementu 4116. Przyjrzyjmy się raz jeszcze przykładowi podanemu w jednym z wcześniejszych punktów, „Kluczowe słowo XSL”, który ilustrował użycie arwkusza stylów XSLT. Arkusze stylów są rozbudowywane za pomocą pewnych niezależnych (od SQL Servera) aplikacji wykorzystujących model dokumentu, który należy przekształcić. Podczas testów w trakcie rozbudowy przyczynami występowania błędów są puste dokumenty HTML, zmienione wyjścia XML lub próby przekształcenia dokumentu XML, który okazuje się pusty. Wszystkie te błędy przypisać można albo niewłaści- wemu dokumentowi XML, albo niewłaściwym danym. Wydruk 4.20 przedstawia plik szablonu XSLDemo.xml 156 XML i SQL Server 2000 Wydruk 4.20. XSLDemo.xml 4116ZONPUUSN WTPUEJGOCUOKETQUQHVEQOZONUSN USNZUN QTFGTZUN USNSWGT[ 5 . 66121TFGT+  ORNQ[GG+ 5JKRPCOG (41/1TFGTU 9* 4  ORNQ[GG+  (14:/.#761 USNSWGT[ 4116 Zastosowany arkusz stylów pokazany jest na wydruku 4.9, wyniki — na wydruku 4.10, a tabela 4.4 to tabela wynikowa. Wywoływanie składowanych procedur Do tej pory wywoływaliśmy albo zapytania SQL, albo szablony w adresie URL, albo pliki szablonów dostępne poprzez URL. Zdarzyło się nam jednak rażące przeoczenie: chodzi o składowane procedury (ang. stored procedures) i sposoby ich wykonywania. W gruncie rzeczy tworzyliśmy imitacje składowanych procedur poprzez użycie pli- ków szablonów. Teraz użyjemy składowanych procedur tak, jak powinno się to robić (bez wątpienia musimy wiedzieć, jak z nich korzystać, zarówno w zapytaniach URL, jak i w plikach szablonów). Umożliwianie użytkownikom pisania i wywoływania składowanych procedur w odnie- sieniu do bazy danych nie jest najbezpieczniejszym rozwiązaniem. Administratorzy powinni zezwalać użytkownikom na odczyt i wykonywanie składowanych procedur, ale nie na wpisywanie plików do 6GORNCVG8KTVWCN KTGEVQT[. W innym wypadku będziesz się borykał z najróżniejszymi problemami. Wydruk 4.21 pokazuje składowana procedurę, której będziemy używać w czasie oma- wiania tego zagadnienia. Wydruk 4.21. Przykładowa składowana procedura +( :+565 5 . 6PCOG(41/U[UQDLGEVU 9* 4 PCOG 1TFGT+PHQ #0 V[RG 2  412241 74 1TFGT+PHQ )1 4 #6 241 74 1TFGT+PHQ #5 5 . 6 (41/ 9* 4 (14:/.#761 )1 1TFGT+  WUVQOGT+ 1TFGTU WUVQOGT+  *125 Ta składowana procedura może być wywołana przez następująwcy URL: JVVR++55GTXGT0QTVJYKPF!USN : 76 1TFGT+PHQTQQVX4116 Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 157 Wydruk 4.22 pokazuje plik wynikowy. Wydruk 4.22. Wynik wywołania przykładowej składowanej procedury !ZONXGTUKQPGPEQFKPIWVH! 4116 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 1TFGTU1TFGT+  WUVQOGT+  *125 4116 Przekazywanie parametrów jest realizowane za pomocą symbolu — przedstawia to wydruk 4.23. Wydruk 4.23. Przekazywanie parametru składowanej procedurze 2  5 . 6 (41/ 9* 4 (14:/.#761  1TFGT+  WUVQOGT+ 1TFGTU WUVQOGT+  WUVQOGT+ Składowana procedura może być wywołana poprzez URL na dwa sposoby. Pierwsza metoda jest następująca: JVVR++55GTXGT0QTVJYKPF!USNGZGEWVG 1TFGT+PHQ *125TXQQV4116 Metoda ta udostępnia wartości *125 uwzględniając jej pozycję. Jeśli przekazywane byłyby dwa parametry, mógłbyś je umieścić jeden za drugim, a wtedy będą popraw- nie przekazane. Druga metoda jest następująca: JVVR++55GTXGT0YKPF!USNGZGEWVG 1TFGT+PHQ WUVQOGT+ X *125TQQV4116 Najczęściej używamy właśnie tej metody; dostarcza ona wartości *125 uwzględniając jej nazwę. 2 Oczywiście należy pamiętać o zadeklarowaniu parametru w implementacji procedury zaraz po nazwie procedury w postaci { @parameter data_type } — przyp. red. 158 XML i SQL Server 2000 Uzyskiwanie dostępu do obiektów baz danych poprzez HTTP Pozostało wyjaśnić sposób dostępu do ostatniej encji. Omówiliśmy zapytania SQL i szablony bezpośrednio umieszczane w URL-ach, jak również użycie plików szablonów. Teraz zajmiemy się uzyskiwaniem dostępu do obiektów baz danych (tabel, widoków itd.). Wysyłanie szablonów przez formularze HTML Ostatnim ćwiczeniem, które zamierzam zaprezentować w tym rozdziale, jest wysyłanie szablonów za pomocą formularzy HTML. W środowisku WWW jest to prawdopodobnie najbardziej powszechny sposób wywoływania plików szablonów. Powiedzmy sobie wyraźnie: użytkownicy swobodnie operują formularzami HTML i są z nimi dobrze zaznajomieni. Widują je niemal za każdym razem, kiedy uzyskują dostęp do Internetu lub firmowego intranetu, jeśli taki istnieje. Formularze są łatwe do stworzenia i zapewniają wysoki poziom interakcji. Poniższy plik szablonu posiada jeden parametr, który jest przekazywany do zapytania. Można dodać więcej parametrów. Szablon ten zostanie zapisany jako plik HTML i umieszczony w katalogu nie należącym do drzewa wirtualnego katalogu macierzy- stego. Plik SQLISAPI.DLL nie spodziewa się pliku HTML i nie będzie funkcjonował poprawnie, jeśli plik HTML znajdzie się w tym drzewie wkatalogów. Spójrzmy na sam formularz HTML, który jest przedstawiowny na wydruku 4.24. Wydruk 4.24. Wysyłanie szablonu przez formularz HTML JGCF 6+6. 2T[MđCFQY[HQTOWNCT6+6. JGCF DQF[ 9[UWMCPGQUVCPæRQNC1TFGT+ 1TFGT CVGK(TGKIJVFNCFCPGLYCTVQħEK WUVQOGT+ HQTOCEVKQPJVVRITKHHKPLPVUPYKPFOGVJQF2156 $ WUVQOGT+ $ KPRWVV[RGVGZVPCOG WUVQOGT+ XCNWG 8+0 6 KPRWVV[RGJKFFGPPCOGEQPVGPVV[RGXCNWGVGZVZON KPRWVV[RGJKFFGPPCOGVGORNCVGXCNWG 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNJGCFGT USNRCTCOPCOG WUVQOGT+  8+0 6USNRCTCO USNJGCFGT USNSWGT[ 5 . 61TFGT+ 1TFGT CVG(TGKIJV (41/1TFGTU Rozdział 4. ¨¨¨¨ Uzyskiwanie dostępu do SQL-a 2000 poprzez HTTP 159 9* 4  WUVQOGT+  WUVQOGT+ (14:/.#761 USNSWGT[ 4116 2 KPRWVV[RGUWDOKV HQTO DQF[ Pole tekstowe HTML dostarcza wartości, która jest przekazywana w zapytaniu. Zapytanie zwraca następnie pola 1TFGT+ , 1TFGT CVG i (TGKIJV. Użytkownik ma również możliwość wyboru arkusza stylów XSLT, który należy zastosować do danych. Uzupełnij kod z wydruku 4.24 wierszami prezentowanymi na wydruku 4.25. Wydruk 4.25. Dodatkowy kod HTML dla listy rozwijanej DT $ 9[DKGTCTMWUUV[NÎYMVÎT[EJEGUCUVQUQYCè$ UGNGEVPCOGUV[NGUJGGVUUKG  QRVKQPXCNWG QRVKQP QRVKQPXCNWG UUZUN #TMWUUV[NÎYQRVKQP QRVKQPXCNWG UUZUN #TMWUUV[NÎYQRVKQP QRVKQPXCNWG UUZUN #TMWUUV[NÎYQRVKQP UGNGEV Kod doda do strony listę rozwijaną, pozwalającą użytkownikowi na wybranie arkusza stylów (zobacz rysunek 4.6). Rysunek 4.6. Dodanie listy rozwijanej umożliwiającej wybór arkusza stylów Uzupełnij również formularz dodatkowym polem wejściowymw i polem parametru: KPRWVV[RGVGZVPCOGUV[NGUJGGVXCNWGUUZUN USNRCTCOPCOGUV[NGUJGGV UUUSNRCTCO 160 XML i SQL Server 2000 W końcu zmodyfikuj instrukcję 4116 : 4116ZONPUUSNWTPUEJGOCUOKETQUQHVEQOZONUSN USNZUN UV[
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

XML i SQL Server 2000
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: