Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4972
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать

16. Интерфейсы программирования Web-приложения

653

После выполнения этих действий будет создан проект, основным рабочим файлом которого будет выступать "шу.срр". С этим файлом связан заголовочный файл "my.h", в котором находится определение класса C M y E x t e n s i o n , являющегося потомком класса C H t t p S e r v e r , предназначенного для создания на его основе ISAPI-модулей расширения сервера. В заголовочном файле "my.h" будет создано следующее определение класса:

c l a s s C M y E x t e n s i o n : p u b l i c C H t t p S e r v e r

{

p u b l i c :

C M y E x t e n s i o n ( ) ;

-C M y E x t e n s i o n Q ;

// O v e r r i d e s

/ / C l a s s W i z a r d g e n e r a t e d v i r t u a l f u n c t i o n o v e r r i d e s

/ / N O T E — t h e C l a s s W i z a r d will a d d a n d r e m o v e m e m b e r f u n c t i o n s h e r e . / / D O N O T E D I T w h a t y o u s e e in t h e s e b l o c k s o f g e n e r a t e d c o d e !

/ / { { A F X _ V I R T U A L ( C M y E x t e n s i o n ) p u b l i c :

v i r t u a l B O O L G e t E x t e n s i o n V e r s i o n ( H S E _ V E R S I O N _ I N F O * p V e r ) ; / / } } A F X _ V I R T U A L

v i r t u a l B O O L T e r m i n a t e E x t e n s i o n ( D W O R D d w F l a g s ) ;

/ / T O D O : A d d h a n d l e r s f o r y o u r c o m m a n d s h e r e . F o r e x a m p l e : v o i d D e f a u l t ( C H t t p S e r v e r C o n t e x t * p C t x t ) ;

D E C L A R E _ P A R S E _ M A P ( )

// { { A F X _ M S G ( C M y E x t e n s i o n )

// } } A F X _ M S G

};

Для использования протокола ADO в файл "my.cpp", как и в предыдущем разделе, нужно поместить в исходный текст следующие директивы подключения заголовочных файлов:

#i n c l u d e " s t d a f x l . h "

#i n c l u d e < i n i t g u i d . h >

#i n c l u d e " a d o i d . h "

#i n c l u d e " a d o i n t . h "

Основные особенности использования протокола ADO рассмотрены в разделе 16.1.

Для создания простейшего ISAPI-модуля следует поместить код, генери-

рующий HTML-документ, в функцию D e f a u l t ( C H t t p S e r v e r C o n t e x t * p C t x t ) .

v o i d C M y E x t e n s i o n : : D e f a u l t ( C H t t p S e r v e r C o n t e x t * p C t x t )

{

S t a r t C o n t e n t ( p C t x t ) ;

654 Часть 4. Публикация баз данных в Интернете

W r i t e T i t l e ( p C t x t ) ;

/ / С т р о к о в а я п е р е м е н н а я , и с п о л ь з у е м а я д л я х р а н е н и я / / ф о р м и р у е м о г о H T M L - д о к у м е н т а

C H A R r e s B u f f [ 4 0 9 6 ] ; C H A R t m p B u f f [ 4 0 9 6 ] ; D W O R D d w S i z e ;

/ / З а п и с ь в б у ф е р з а г о л о в к а H T T P w s p r i n t f ( r e s B u f f ,

" < H T M L X H E A D X T I T L E > I S A P I - м о д у л ь < / T I T L E X / H E A D > \ n "

" < B O D Y B G C O L O R = # F F F F F F X H 2 > P a 6 o T a e T 1 8 А Р 1 - м о д у л ь ! < / Н 2 > \ п " ) ; / / Д о б а в л е н и е р а з д е л и т е л ь н о й л и н и и

s t r c a t ( r e s B u f f , " < H R > " ) ;

/ / В ы в о д н а з в а н и я м е т о д а п е р е д а ч и д а н н ы х

w s p r i n t f ( t m p B u f f , " < В Р > И с п о л ь з у е т с я м е т о д : % s " , p C t x t - > m _ p E C B - > l p s z M e t h o d ) ;

s t r c a t ( r e s B u f f , t m p B u f f ) ;

/ / О т о б р а ж е н и е с о д е р ж и м о г о п е р е м е н н о й P A T H _ I N F O

s t r c a t ( r e s B u f f , " < В Р > З н а ч е н и е п е р е м е н н о й P A T H J N F O : " ) ; c h a r p a r [ 1 0 ] ;

d w S i z e = 10;

p C t x t - > m _ p E C B - > G e t S e r v e r V a r i a b l e ( p C t x t - > m _ p E C B - > C o n n l D , ( L P S T R ) " P A T H J N F O " , ( L P V O I D ) p a r , & d w S i z e ) ;

s t r c a t ( r e s B u f f , p a r ) ;

/ / В ы в о д о к о н ч а н и я д о к у м е н т а H T M L

/ / s t r c a t ( r e s B u f f , " < / B O D Y X / H T M L > " ) ; * p C t x t « _ T ( r e s B u f f ) ;

/ / И н и ц и а л и з а ц и я с и с т е м ы C O M C o l n i t i a l i z e ( N U L L ) ;

/ / И н и ц и а л и з а ц и я с л у ж е б н ы х с т р о к о в ы х п е р е м е н н ы х C S t r i n g c s F o r C o n n e c t ( " D S N = A u t h o r s ; U I D = ; P W D = ; " ); C S t r i n g c s E m p t y ( " " ) ;

CString c s F o r C o m m a n d ( " s e l e c t * f r o m Authors w h e r e a u t h o r = ' S i m p s o n , Alan'"); CString c s F o r C o m m a n d l ("select * f r o m Authors where author=Uones, Edward"'); / / И н и ц и а л и з а ц и я с л у ж е б н ы х п е р е м е н н ы х к л а с с а B S T R ,

/ / п р е д н а з н а ч е н н о г о д л я х р а н е н и я с п е ц и а л ь н ы х с т р о к B S T R b s F o r C o n n e c t = c s F o r C o n n e c t . A l l o c S y s S t r i n g ( ) ;

B S T R b s E m p t y = c s E m p t y . A l l o c S y s S t r i n g ( ) ; B S T R b s F o r C o m m a n d ;

if ( ! s t r c m p ( p a r , " / n a m e 1 " ) )

b s F o r C o m m a n d = c s F o r C o m m a n d . A l l o c S y s S t r i n g ( ) ; e l s e

16. Интерфейсы программирования Web-приложения

655

b s F o r C o m m a n d = c s F o r C o m m a n d l . A I I o c S y s S t r i n g ( ) ;

/ / И н и ц и а л и з а ц и я с л у ж е б н ы х п е р е м е н н ы х к л а с с а V A R I A N T V A R I A N T v E m p t y ;

V A R I A N T v E m p t y T o o ;

v E m p t y . v t = V T _ E R R O R ;

v E m p t y . s c o d e = D I S P _ E _ P A R A M N O T F O U N D ; v E m p t y T o o . v t = V T E R R O R ;

v E m p t y T o o . s c o d e = D I S P _ E _ P A R A M N O T F O U N D ;

/ / И н и ц и а л и з а ц и я у к а з а т е л е й н а о б ъ е к т ы и н т е р ф е й с а A D O A D O C o n n e c t i o n * c o n = N U L L ;

A D O R e c o r d s e t * r e s = N U L L ;

A D O C o m m a n d * c o m m a n d = N U L L ;

/ / И н и ц и а л и з а ц и я и н ф о р м а ц и о н н о г о о б ъ е к т а H R E S U L T h r e s _ o k = S _ O K ;

/ / С о з д а н и е о б ъ е к т а C o n n e c t i o n

h r e s _ o k = C o C r e a t e l n s t a n c e ( C L S I D _ C A D O C o n n e c t i o n , N U L L ,

C L S C T X _ I N P R O C _ S E R V E R , I I D _ I A D O C o n n e c t i o n , ( L P V O I D * ) & c o n ) ; / / З а п и с ь с т р о к и п а р а м е т р о в с о е д и н е н и я в b s F o r C o n n e c t

i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = c o n - > p u t _ C o n n e c t i o n S t r i n g ( b s F o r C o n n e c t ) ; / / У с т а н о в к а с о е д и н е н и я с и с т о ч н и к о м д а н н ы х

i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = c o n - > O p e n ( b s E m p t y , b s E m p t y , b s E m p t y , a d C o n n e c t U n s p e c i f i e d ) ;

/ / С о з д а н и е о б ъ е к т а C o m m a n d i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = C o C r e a t e l n s t a n c e ( C L S I D _ C A D O C o m m a n d , N U L L , C L S C T X _ I N P R O C _ S E R V E R , I I D _ I A D O C o m m a n d ,

( L P V O I D * ) & c o m m a n d ) ;

/ / С в я з ы в а н и е о б ъ е к т а C o m m a n d с о б ъ е к т о м C o n n e c t i o n i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = c o m m a n d - > p u t r e f _ A c t i v e C o n n e c t i o n ( c o n ) ; / / З а п и с ь т е к с т а к о м а н д ы в о б ъ е к т C o m m a n d

i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = c o m m a n d - > p u t _ C o m m a n d T e x t ( b s F o r C o m m a n d ) ; / / В ы п о л н е н и е к о м а н д ы д л я з а п и с и д а н н ы х в

/ / п е р е м е н н у ю r e s ( э к з е м п л я р о б ъ е к т а R e c o r d S e t ) i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = c o m m a n d - > E x e c u t e ( & v E m p t y , & v E m p t y T o o , a d C m d T e x t , & r e s ) ; / / О п р е д е л е н и е п е р е м е н н ы х д л я х р а н е н и я д а н н ы х

C O I e V a r i a n t s _ n a m e ;

656

Часть 4. Публикация баз данных в Интернете

C O I e V a r i a n t s _ y e a r B o r n ;

/ / И н и ц и а л и з а ц и я в р е м е н н ы х с т р о к о в ы х п е р е м е н н ы х C S t r i n g s = " " ;

C S t r i n g s 1 = " " ;

/ / И н и ц и а л и з а ц и я с п е ц и а л ь н о й л о г и ч е с к о й п е р е м е н н о й V A R I A N T B O O L a d o _ E O F = V A R I A N T _ F A L S E ;

/ / О п р е д е л е н и е к о н ц а н а б о р а д а н н ы х i f ( S U C C E E D E D ( h r e s _ o k ) )

h r e s _ o k = r e s - > g e t _ E O F ( & a d o _ E O F ) ;

/ / И н и ц и а л и з а ц и я п е р е м е н н ы х д л я х р а н е н и я у к а з а т е л е й н а о б ъ е к т ы F i e l d s и F i e l d

A D O F i e l d s * a d o F i e l d s = N U L L ; A D O F i e l d * n a m e = N U L L ;

A D O F i e l d * y e a r B o r n = N U L L ;

/ / Г е н е р а ц и я з а г о л о в к а т а б л и ц ы

* p C t x t < < _ T ( " < T a b l e W i d t h = ' 1 0 0 % ' C e l l S p a c i n g = 1 0 C e l l P a d d i n g = 1 0 B o r d e r = 3 > " ) ;

* p C t x t < < _ T ( " < C a p t i o n а И д п = С е п 1 е г > И н ф о р м а ц и я и з б а з ы д а н н ы х < / C a p t i o n > " ) ;

* p C t x t « _ T ( " < T R X T H W i d t h = 1 0 0 % > N a m e o f a u t h o r s < / T H > < T H > Y e a r B o r n < A H X / T R > " ) ;

/ / Ц и к л п о к о л и ч е с т в у з а п и с е й в н а б о р е д а н н ы х

w h i l e ( a d o _ E O F = = V A R I A N T F A L S E )

{

/ / И з в л е ч е н и е у к а з а т е л я н а о б ъ е к т F i e l d s д л я т е к у щ е й з а п и с и h r e s _ o k = r e s - > g e t _ F i e l d s ( & a d o F i e l d s ) ;

i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

/ / И з в л е ч е н и е у к а з а т е л е й н а о б ъ е к т ы Field д л я о б ъ е к т а F i e l d s h r e s _ o k = a d o F i e l d s - > g e t _ l t e m ( C O I e V a r i a n t ( " a u t h o r " ) , & n a m e ) ; i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

h r e s _ o k = a d o F i e l d s - > g e t _ l t e m ( C O I e V a r i a n t ( " Y e a r B o r n " ) , & y e a r B o r n ) ; i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

/ / И з в л е ч е н и е д а н н ы х

h r e s _ o k = n a m e - > g e t _ V a l u e ( & s _ n a m e ) ; i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

h r e s _ o k = y e a r B o r n - > g e t _ V a l u e ( & s _ y e a r B o r n ) ; i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

/ / Ф о р м и р о в а н и е с т р о к и т а б л и ц ы s 1 = V _ B S T R ( & s _ n a m e ) ;

s . F o r m a t ( " < T R > < T D > % 2 5 s < A D > < T D > % 1 0 d < / T D > " , s 1 , V_I4( & s _ y e a r B o r n ) ) ;

16. Интерфейсы программирования Web-приложения

657

* p C t x t « _ T ( ( L P C T S T R ) s );

/ / П е р е м е щ е н и е у к а з а т е л я т е к у щ е й з а п и с и н а с л е д у ю щ у ю з а п и с ь h r e s _ o k = r e s - > M o v e N e x t ( ) ;

i f ( ! S U C C E E D E D ( h r e s _ o k ) ) b r e a k ;

/ / О п р е д е л е н и е к о н ц а н а б о р а д а н н ы х

h r e s _ o k = r e s - > g e t _ E O F ( & a d o _ E O F ) ;

}

/ / Г е н е р а ц и я о к о н ч а н и я H T M L - д о к у м е н т а * p C t x t « _ T ( " < / T a b l e > " ) ;

* p C t x t « _ T ( " < / B O D Y X / H T M L > " ) ; / / О с в о б о ж д е н и е р е с у р с о в

r e s - > C l o s e ( ) ; c o n - > C l o s e ( ) ;

C o U n i n i t i a l i z e ( ) ;

S y s F r e e S t r i n g ( b s F o r C o n n e c t ) ; S y s F r e e S t r i n g ( b s E m p t y ) ;

S y s F r e e S t r i n g ( b s F o r C o m m a n d ) ;

E n d C o n t e n t ( p C t x t ) ;

}

Текст функции GetExtensionVersion:

B O O L C M y E x t e n s i o n : : G e t E x t e n s i o n V e r s i o n ( H S E _ V E R S I O N _ I N F O * p V e r )

{

/ / И н и ц и а л и з а ц и я с т р у к т у р ы т и п а H S E _ V E R S I O N _ I N F O C H t t p S e r v e r : : G e t E x t e n s i o n V e r s i o n ( p V e r ) ;

T C H A R s z [ H S E _ M A X _ E X T _ D L L _ N A M E _ L E N + 1 ]; / / О п р е д е л е н и е / / с т р о к и о п и с а н и я

I S A P I V E R I F Y ( : : L o a d S t r i n g ( A f x G e t R e s o u r c e H a n d l e ( ) ,

I D S _ S E R V E R , sz, H S E _ M A X _ E X T _ D L L _ N A M E _ L E N ) ) ; _ t c s c p y ( p V e r - > l p s z E x t e n s i o n D e s c , s z ) ;

r e t u r n T R U E ;

}

Для запуска этого модуля целесообразно использовать HTML-документ, содержащий следующий текст:

< А h r e f = " h t t p : / / l o c a l h o s t / s c r i p t s / m y . d l l / n a m e 1 " >

З а г р у з и т ь I S A P I - м о д у л ь п о з а п р о с у h t t p : / / l o c a l h o s t / S c r i p t s / m y . d l l / n a m e 1 < / A >

< А h r e f = " h t t p : / / l o c a l h o s t / s c r i p t s / m y . d l l / n a m e 2 " >

З а г р у з и т ь ISAPI - м о д у л ь п о з а п р о с у h t t p : / / l o c a l h o s t / S c r i p t s / m y . d l l / n a m e 2 < / A >

658

Часть 4. Публикация баз данных в Интернете

Вприведенном выше НТМ L-документе запросы отличаются параметрами "/name2" и "/namel". При выборе одной из ссылок ISAPI-модуль будет вызываться для генерации соответствующего НТМ L-документа.

ВISAPI-модуле при выборе первой ссылки будет выполняться соответствующая команда на языке Transact-SQL. Выбор требуемого действия реа-

лизуется с помощью условного оператора, в котором переменная b s F o r C o m m a n d инициируется с использованием функции A l l o c S y s S t r i n g ( ) , принадлежащей переменной c s F o r C o m m a n d или c s F o r C o m m a n d l в зависимости от значения переменной par:

C S t r i n g c s F o r C o m m a n d ( " s e l e c t * f r o m A u t h o r s w h e r e a u t h o r = ' S i m p s o n , A l a n ' " ) ;

C S t r i n g c s F o r C o m m a n d l ( " s e l e c t * f r o m A u t h o r s w h e r e a u t h o r = ' J o n e s , E d w a r d ' " ) ;

if ( ! s t r c m p ( p a r , " / n a m e l " ) )

b s F o r C o m m a n d = c s F o r C o m m a n d . A l l o c S y s S t r i n g ( ) ; e l s e

b s F o r C o m m a n d = c s F o r C o m m a n d l . A l l o c S y s S t r i n g O ;

При этом переменная par определяется следующим образом:

c h a r p a r [ 1 0 ] ; d w S i z e = 10;

p C t x t - > m _ p E C B - > G e t S e r v e r V a r i a b l e ( p C t x t - > m _ p E C B - > C o n n l D , ( l _ P S T R ) " P A T H _ I N F O " , ( L P V O I D ) p a r , & d w S i z e ) ;

s t r c a t ( r e s B u f f , p a r ) ;

Здесь функция G e t S e r v e r V a r i a b l e Q используется для получения значения системной переменной PATH_INFO, в которую сервер помещает текстовую строку, содержащую параметры URL-запроса, находящиеся после знака "/".

В переменной пл_рЕСВ содержится указатель на объект типа

E X T E N S I O N _ C O N T R O L _ B L O C K . Функция s t r c a t ( r e s B u f f , p a r ) выполня-

ет конкатенацию строк, при этом результат конкатенации будет помещен по адресу, находящемуся в первом аргументе. В переменной p C t x t находится указатель на контекст вывода; в выражении * p C t x t << _Т(раг); используется переопределенный оператор, пересылающий строку символов в контекст вывода.

В результате работы этого модуля в окно обозревателя при выборе ссылки

h t t p : / / l o c a l h o s t / s c r i p t s / m y . d l l / n a m e 1 будет загружен HTML-документ, вид

которого приведен на рис. 16.7.

При выборе второй ссылки в окне обозревателя будет находится текст, аналогичный приведенному на рис. 16.7, за исключением строки "Значение переменной PATH_INFO:/name2" и записи в таблице — "Jones, Edward 1952".

16. Интерфейсы программирования Web-приложения

659

Рис. 16.7. Вид окна обозревателя с результатом работы модуля ISAPI

Контрольные вопросы и задания

1.Охарактеризуйте общий интерфейс взаимодействия CGI.

2.Опишите методы POST и GET передачи параметров запроса.

3.Приведите схему взаимодействия сервера и CGI-модуля.

4.Укажите данные, которые содержатся в переменных окружения.

5.Что определяет тип MIME?

6.Что представляет собой интерфейс ODBC и каким образом он может использоваться при создании Web-приложений?

7.Какие операции, установленные интерфейсом ODBC, должны быть выполнены для получения доступа к БД?

8.Запишите оператор обращения к функции S Q L C o n n e c t ( ) для установки соединения с источником данных с использованием имени DSN.

9.Как после установления соединения задаются запросы по извлечению данных с помощью команд языка SQL?

660

Часть 4. Публикация баз данных в Интернете

10.Охарактеризуйте интерфейс ADO и приведите иерархию его объектов.

11.Как выполняется непосредственно соединение с источником данных при использовании интерфейса ADO?

12.Дайте общую характеристику интерфейсу программирования серверных приложений ISAPI.

13.Укажите назначение функции H t t p E x t e n s i o n P r o c ( ) и приведите ее прототип.

14.Назовите классы, используемые при разработке ISAPI-модуля.

15.Как выполняется получение переданных от обозревателя данных ISAPI-модулем?

16.Каким образом выполняется отправка данных ISAPI-модулем?

17.Выполнить разработку CGI-модуля, позволяющего шифровать передаваемые данные при использовании метода GET. Для шифрования можно применять произвольный алгоритм.

18.Выполнить разработку CGI-модуля, позволяющего шифровать передаваемые данные при использовании метода POST. Для шифрования можно применять произвольный алгоритм.

Литература

1. Дунаев С. Б. Технологии Интернет-программирования. СПб.: БХВ-Петербург,

2001.

2.Мещеряков Е. В., Хомоненко А. Д. Публикация баз данных в Интернете. СПб.: БХВ-Петербург, 2001.

3.Фролов А. В., Фролов Г. В. Базы данных в Интернете: практическое руководство по созданию Web-приложений с базами данных. М.: Издательско-торго- вый дом «Русская редакция», 2000.

1 7. Публикация БД с использованием XML

661

17. Публикация БД с использованием XML

В главе рассматривается технология применения XML в качестве стандартного средства организации обмена данными при публикации БД в Интернете. Приводятся примеры программ, выполняющих передачу данных из базы данных в документ XML и обратно.

17.1. XML как средство обмена данными

Как отмечалось, расширяемый язык разметки XML (extensible Markup Language) представляет собой развитие языка HTML и по сравнению с ним обеспечивает ряд дополнительных возможностей. Главное отличие XML от HTML заключается в том, что с его помощью выполняется не только наполнение создаваемого документа содержанием с указанием разметки, а в основном определяется структура документа и типы хранимых в нем данных.

Напомним, что одно из достоинств XML состоит в том, что в разрабатываемых с его помощью документах описание структуры хранимых данных отделено от собственно данных. В связи с этим XML представляет собой удобное средство обмена данными между различными приложениями. Он позволяет обеспечить согласованный обмен данными между приложениями, в которых отличаются структура хранимых данных, например имена и типы полей.

Кроме того, с помощью XML мы можем упростить доступ к данным, хранимым в базах данных различных СУБД. Например, для доступа к данным персональных СУБД или табличного процесора Excel пользователю требуется установка соответствующих инструментальных средств. В этом случае можно создать активные серверные страницы (ASP) или сценарии на языке JScript или VBScript, которые выполняют извлечение данных из базы данных и помещение их в документ XML.

Информацию из полученного таким образом документа XML можно легко использовать в других приложениях или отображать на страницах HTML. Таким образом, полученные в результате данные становятся доступными для всех пользователей, имеющих обозреватель, независимо от наличия или отсутствия СУБД или табличного процессора.

Документы XML могут использоваться на стороне клиента и на стороне сервера. Возможности работы с документами XML на стороне клиента в на-

стоящее время сдерживаются в основном отсутствием соответствующих инструментальных средств. Не все обозреватели предоставляют возможность

662

Часть 4. Публикация баз данных в Интернете

просмотра и работы с документами XML, но в современных продуктах такая возможность уже имеется. В частности, возможность просмотра ХМL-доку- ментов обеспечивается Internet Explorer, начиная с версии 4.0, а также Netscape Navigator 5.0 и выше.

При работе с документами XML на стороне сервера привлекаются язы-

ковые средства, обычно применяемые для расширения возможностей сервера, такие как Java и JScript. Отметим также, что последние версии современных систем программирования, ориентированных на разработку приложений Web, также имеют средства поддержки создания и обработки документов XML. В частности, соответствующие средства имеются в составе JBuilder 4.0.

В качестве причин и достоинств обработки данных ХМL-документа на сервере можно отметить следующее:

обработка данных на сервере обязательно требуется при запуске кода, размещенного на сервере. В частности, при извлечении информации из базы данных;

во вторых, обработка данных на сервере позволяет устранить необходимость использования обозревателей, например Internet Explorer 5.0, поддерживающих обработку XML-документов. Можно предположить, что со временем все большее число обозревателей будет поддерживать такую обработку.

Один из недостатков обработки данных на сервере связан с тем, что при

необходимости внесения каких-либо изменений в формируемом документе клиента ему требуется обращаться за помощью к серверу, создавая тем самым дополнительную нагрузку.

При выполнении обработки данных на стороне клиента необходимость

обращения к серверу пропадает и можно выполнять требуемые изменения с помощью сценариев или динамического HTML.

17.2. Создание и обработка XML-документов

Для создания и обработки ХМ L-документов используются разнообразные инструментальные средства. В частности, для создания документа XML и со-

ответствующего ему файла DTD определения типа документа можно воспользоваться редактором XML. Для этой цели можно также воспользоваться любым текстовым редактором или процессором, например WordPad или Word. В последних случаях нужно иметь в виду, что файл XML является текстовым файлом с расширением xml и при сохранении его нужно задавать именно текстовый формат.

Создание XML-документов можно выполнять также путем преобразования уже имеющихся документов других приложений. Очевидно, что проще