SQL w przeglądarce

Coraz częściej pracownicy mobilni muszą mieć dostęp do danych firmowych w dowolnym miejscu i czasie. W efekcie muszą mieć dostęp z dowolnego urządzenia, które akurat znajduje się w pobliżu i jest połączone z Internetem. Co zrobić, gdy tego rodzaju dostęp do sieci ogranicza się do WWW?

Coraz częściej pracownicy mobilni muszą mieć dostęp do danych firmowych w dowolnym miejscu i czasie. W efekcie muszą mieć dostęp z dowolnego urządzenia, które akurat znajduje się w pobliżu i jest połączone z Internetem. Co zrobić, gdy tego rodzaju dostęp do sieci ogranicza się do WWW?

Rozwiązaniem jest zastosowanie architektury cienkiego klienta i przeniesienie wszystkich operacji przetwarzania danych na serwer WWW, który staje się w ten sposób bardziej serwerem aplikacji. Odpowiednio przygotowane skrypty uruchamiane na serwerze pozwolą wykonywać dowolne operacje na danych, a zadaniem przeglądarki będzie tylko wyświetlanie wyników.

Dane firmowe są prawdopodobnie przechowywane w bazie SQL, więc głównym zadaniem pozostaje - oprócz przygotowania skryptów odpowiedzialnych za wygląd i działanie strony internetowej - połączenie serwera WWW z serwerem SQL. Z pomocą przychodzi tu coraz bardziej popularny standard wymiany danych - format XML. Pokażemy, jak uzyskać dostęp do bazy danych Microsoft SQL Server 2000 za pośrednictwem HTTP z wykorzystaniem XML.

Obsługa XML w IIS

Rodzaje dostępu do bazy danych przez katalog wirtualny.

Rodzaje dostępu do bazy danych przez katalog wirtualny.

SQL Server 2000 ma funkcje umożliwiające publikowanie danych przez HTTP. Dane znajdujące się w bazie są pobierane w formie XML (używamy polecenia FOR XML w zapytaniu), a następnie, przez katalog wirtualny serwera Microsoft Internet Information Services, udostępniane tak samo, jak konwencjonalne witryny WWW . Rozwiązanie takie ma jedną niewątpliwą i bardzo znaczącą zaletę: pozwala stosunkowo łatwo i szybko zbudować witrynę WWW powiązaną z danymi, a wymaga przy tym znacznie mniej kodu niż np. aplikacja ASP.

Dane XML, które uzyskujemy w tak prosty sposób, możemy następnie odpowiednio sformatować, stosując arkusze XSL. Pozwoli to obudować je kodem HTML dla klientów wykorzystujących przeglądarki WWW lub kodem WML (Wireless Markup Language) dla klientów używających telefonów z obsługą WAP. Jak widać, ten sposób dostępu znakomicie nadaje się do wielu zastosowań. Dzięki uniwersalności stale zyskuje nowych zwolenników, mimo że sam pomysł wcale nie jest nowy.

Architektura publikowania danych z bazy SQL Server poprzez HTTP opiera się na aplikacji ISAPI o nazwie SQLISAPI. Jest dostarczana z serwerem bazy danych SQL Server 2000 i pozwala udostępnić określoną bazę danych SQL klientom serwera WWW, którzy będą się do niej odwoływali za pomocą adresu URL i specjalnego katalogu wirtualnego serwera IIS. Sam moduł SQLISAPI uzyskuje dostęp do bazy danych za pomocą mechanizmu OLE DB (SQLOLEDB w SQL Server 2000).

Konfiguracja serwera

Tworzenie nowego katalogu wirtualnego.

Tworzenie nowego katalogu wirtualnego.

Zarządzanie publikowaniem danych bazy SQL Server poprzez HTTP odbywa się z wykorzystaniem modułu dodatkowego konsoli Microsoft Management Console o nazwie Configure SQL XML Support in IIS, dostarczanym wraz z serwerem SQL 2000. Korzystając z tego narzędzia, możemy tworzyć i zarządzać katalogami wirtualnymi IIS, które korzystają z aplikacji SQLISAPI.

Są cztery sposoby formułowania zapytań przesyłanych do bazy danych: kwerendy URL, kwerendy zdefiniowane w szablonach XML, kwerendy XPath oraz kwerendy POST. Każdy z tych sposobów ma zalety i wady. Poniżej zademonstrujemy wykorzystanie kilku z nich, sprawdzając jednocześnie ich przydatność do określonych zadań.

Pierwszym etapem udostępniania bazy danych serwerowi WWW jest wybranie opcji Configure SQL XML Support in IIS z grupy Microsoft SQL Server w menu Start. Na ekranie pojawi się wtedy konsola administracyjna do zarządzania katalogami wirtualnymi na serwerze IIS. Z menu kontekstowego domyślnej witryny wybieramy opcję New | Virtual Directory, a następnie konfigurujemy katalog wirtualny, przechodząc przez wszystkie karty okna New Virtual Directory Properties.

Na pierwszej karcie - General - wpisujemy nazwę katalogu wirtualnego - będzie stanowiła część adresu URL, za pomocą którego można odwoływać się do danych. Podajemy też ścieżkę do katalogu lokalnego, w którym znajdują się udostępniane dane. Na karcie Security określamy metodę uwierzytelniania.

Kolejna karta to Data Source. Tu wybieramy serwer bazy danych oraz bazę, która zawiera dane do udostępnienia. Karta Settings pozwala wybrać wspomniane wcześniej metody dostępu do danych, natomiast Virtual Names służy do tworzenia specjalnych wirtualnych nazw reprezentujących foldery, które zawierają pliki określonego typu (schema, template, dbobject). Nazwy wirtualne zastosujemy, korzystając z plików szablonu. Na ostatniej karcie, Advanced, można zmienić lokalizację biblioteki DLL aplikacji SQLISAPI. Standardowo podana jest domyślna ścieżka. W tym miejscu można również dołączyć dodatkowe parametry do ciągu połączenia OLE DB albo wyłączyć buforowanie schematów, co wymusi ponowne ich ładowanie przy każdym żądaniu danych.

Kwerendy URL

Wybór nazwy katalogu wirtualnego wykorzystywanego w adresie URL oraz ustawienie lokalnego katalogu do wymiany danych.

Wybór nazwy katalogu wirtualnego wykorzystywanego w adresie URL oraz ustawienie lokalnego katalogu do wymiany danych.

Jeśli podczas konfiguracji katalogu wirtualnego zezwoliliśmy na kwerendy URL, to możemy je teraz wysyłać za pośrednictwem dowolnej przeglądarki obsługującej XML. Wystarczy w polu adresu wpisać odpowiednie polecenie wraz z parametrami kwerendy oraz ustawieniami formatującymi. W ten sposób można przesłać do serwera dowolną instrukcję SQL, co jest niewątpliwą wadą rozwiązania i przestrzegając zasad bezpieczeństwa, nie należy go stosować np. w systemach komercyjnych, które mają być powszechnie dostępne w sieci. Kwerendy URL są jednak bardzo wygodne na etapie tworzenia i testowania aplikacji. Dla przykładowego katalogu wirtualnego o nazwie Bank najprostsza kwerenda URL wyświetlająca listę klientów będzie wyglądać następująco:

http://localhost/Bank?sql=SELECT+*+FROM+Klient+FOR+XML+AUTO&root=Klienci

Oczywiście localhost w adresie URL należy zastąpić nazwą serwera albo adresem IP, jeżeli zapytanie wysyłane jest ze zdalnego komputera. Natomiast wykonanie kwerendy:

http://localhost/Bank?sql=SELECT+*+FROM+Klient+WHERE+KlientID=13+FOR+XML+AUTO,+ELEMENTS&root=DaneKlienta

spowoduje wyświetlenie przykładowych danych wskazanego w zapytaniu klienta:

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

- <DaneKlienta>

- <Klient>

<KlientID>1</KlientID>

<Imie>Zenon</Imie>

<Nazwisko>Kowalski</Nazwisko>

<Firma>ZENEK i Spolka</Firma>

<Telefon>8796544</Telefon>

</Klient>

</DaneKlienta>

Sposób prezentacji danych możemy bardzo łatwo zmienić, podając parametr określający arkusz stylów, według którego dane mają zostać sformatowane. Dla następującego pliku klient.xsl:

<?xml version='1.0'?>

<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'

version='1.0'>

<xsl:template match='/'>

<HTML>

<BODY>

<H2>Dane Klienta</H2>

<TABLE Border="1">

<TR>

<TD><B>ID Klienta</B></TD>

<TD><B>Imie</B></TD>

<TD><B>Nazwisko</B></TD>

<TD><B>Firma</B></TD>

<TD><B>Telefon</B></TD>

</TR>

<xsl:for-each select="DaneKlienta/Klient">

<TR>

<TD><xsl:value-of select="KlientID"/></TD>

<TD><xsl:value-of select="Imie"/></TD>

<TD><xsl:value-of select="Nazwisko"/></TD>

<TD><xsl:value-of select="Firma"/></TD>

<TD><xsl:value-of select="Telefon"/></TD>

</TR>

</xsl:for-each>

</TABLE>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>


Zobacz również