r06-01.doc

(524 KB) Pobierz
Helion









Rozdział 1 ¨ Pierwsze kroki (Nagłówek strony)

Rozdział 6

u autora 8

.
XML i wiązanie danych

 

W poprzednim rozdziale zajmowaliśmy się przetwarzaniem dokumentów w Internet Explorerze przy pomocy modelu DOM. Używaliśmy metod takich, jak firstChild, lastChild, lastSibling i tak dalej. Użycie tych metod pozwoliło sięgnąć do wszystkich danych dokumentu XML, ale traktowanie tego dokumentu jako drzewa węzłów było mylące, szczególnie jeśli zapomni się, że dane znakowe elementów także mają własne swoje węzły.

Dokumenty XML można jednak w Internet Explorerze obsługiwać też inaczej, tym właśnie zajmiemy się w tym rozdziale. Internet Explorer umożliwia odczytywanie dokumentów HTML i XML i przechowywanie ich w bazie danych. Używając metod bazy danych, które omówimy w tym rozdziale, możemy przechodzić między rekordami danych, co dla wielu programistów jest łatwiejsze od stosowania metod DOM.

Wiązanie danych w Internet Explorerze

W Internet Explorerze rozwinięto koncepcję wiązania danych. Wiązanie to umożliwia łączenie danych z dokumentów z bazą danych ADO (ActiveX Data Object) i później łatwy dostęp do tych danych. Taka technika pracy jest wygodna, gdyż dane z bazy można wysyłać jako dokumenty XML przez Internet i w miejscu przeznaczenia można je przekształcić z powrotem. Dzięki temu programiści, którym nieobce są zagadnienia baz danych, mogą skoncentrować się na dobrze znanych sobie technikach, a nie muszą uczyć się metod DOM.

Najpierw ogólnie omówimy wiązanie danych w Internet Explorerze, później zajmiemy się konkretnie dokumentami XML. Użycie wiązania danych w Explorerze składa się z dwóch etapów: najpierw używa się obiektów danych źródłowych (DSO, data source objects), potem dane wiąże się z elementami HTML strony sieciowej.

Więcej informacji o wiązaniu danych

Więcej informacji o wiązaniu danych w Internet Explorerze znajdziesz pod adresem http://msdn.microsoft.com/workshop/c-frame.htm#/workshop/author/default.asp.

Użycie obiektów danych źródłowych

W Internet Explorerze istnieją cztery obiekty danych źródłowych (DSO, Data Source Object): kontrolka Microsoft HTML (MSHTML), kontrolka danych tabelarycznych (TDC), XML DSO i wyspy danych XML. Internet Explorer obsługuje jeszcze dość wyspecjalizowany RDS DSO (DSO dostępu zdalnego do danych), który umożliwia połączenie się z aplikacjami bazodanowymi, takimi jak aplikacje SQL uruchamiane na serwerze sieciowym). Dwa DSO, mianowicie XML DSO i wyspy danych XML, umożliwiają obsługę dokumentów XML.

DSO na stronie nie są widoczne (choć, jak zobaczymy pod koniec tego rozdziału, XML DSO może wyświetlać na stronie komunikaty o stanie). DSO używa się do odczytywania dokumentu i udostępniania jego danych reszcie strony. Aby DSO był w stanie odczytać dane dokumentu, dane te muszą być odpowiednio sformatowane.

Poniżej przedstawiono dokument przykładowy, klient.html, który zawiera dane dotyczące sprzedaży detalicznej. Rejestrujemy nazwiska i identyfikatory klientów, daty zakupu, dział, z którego towar kupiono oraz nazwę towaru. Zwróć uwagę, jak za pomocą znaczników <SPAN> określono strukturę dokumentu, aby dane były czytelne dla Internet Explorera (można by użyć też innego znacznika, na przykład <DIV>). Każdemu znacznikowi z danymi przypisano atrybut ID, który określa rodzaj danych. Jak widać, stosowana technika aż się prosi o zapis w postaci XML.

<HTML>

  <HEAD>

    <TITLE>

      Dane o klientach

    </TITLE>

  </HEAD>

 

  <BODY>

    Nazwisko: <SPAN ID="NAZWISKO">Charles</SPAN><BR>

    ID: <SPAN ID="ID_KLIENTA">58704</SPAN><BR>

    Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

        2001.10.15</SPAN><BR>

    Dział: <SPAN ID="DZIAŁ">Mięso</SPAN><BR>

    Produkt: <SPAN ID="PRODUKT">Szynka</SPAN><BR>

 

    Nazwisko: <SPAN ID="NAZWISKO">Franklin</SPAN><BR>

    ID: <SPAN ID="ID_KLIENTA">58705</SPAN><BR>

    Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

        2001.10.15</SPAN><BR>

    Dział: <SPAN ID="DZIAŁ">Warzywa</SPAN><BR>

    Produkt: <SPAN ID="PRODUKT">Pomidory</SPAN><BR>

 

    Nazwisko: <SPAN ID="NAZWISKO">Phoebe</SPAN><BR>

    ID: <SPAN ID="ID_KLIENTA">58706</SPAN><BR>

    Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

        2001.10.15</SPAN><BR>

    Dział: <SPAN ID="DZIAŁ">Mięso</SPAN><BR>

    Produkt: <SPAN ID="PRODUKT">Indyk</SPAN><BR>

 

    Nazwisko: <SPAN ID="NAZWISKO">Mark</SPAN><BR>

    ID: <SPAN ID="ID_KLIENTA">58707</SPAN><BR>

    Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

        2001.10.15</SPAN><BR>

    Dział: <SPAN ID="DZIAŁ">Mięso</SPAN><BR>

    Produkt: <SPAN ID="PRODUKT">Wołowina</SPAN><BR>

 

    Nazwisko: <SPAN ID="NAZWISKO">Nancy</SPAN><BR>

    ID: <SPAN ID="ID_KLIENTA">58708</SPAN><BR>

    Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

        2001.10.15</SPAN><BR>

    Dział: <SPAN ID="DZIAŁ">Mrożonki</SPAN><BR>

    Produkt: <SPAN ID="PRODUKT">Brokuły</SPAN><BR>

 

  </BODY>

</HTML>

Najbardziej typowym sposobem obsługi danych sformatowanych w postać dokumentu HTML jest użycie DSO MSHTML, tego obiektu tutaj użyjemy. DSO odczytuje dokument taki jaki pokazano wyżej i przekształca go na zbiór rekordów. Każdy rekord z tego zbioru pochodzi z elementów HTML lub XML, których użyto do przechowywania danych. Oto przykładowy rekord HTML:

Nazwisko: <SPAN ID="NAZWISKO">Charles</SPAN><BR>

ID: <SPAN ID="ID_KLIENTA">58704</SPAN><BR>

Data zakupu: Data: <SPAN ID="DATA_ZAKUPU">

    2001.10.15</SPAN><BR>

Dział: <SPAN ID="DZIAŁ">Mięso</SPAN><BR>

Produkt: <SPAN ID="PRODUKT">Szynka</SPAN><BR>

Rekord ten ma pięć pól: NAZWISKO, ID_KLIENTA, DATA_ZAKUPU, DZIAŁ i PRODUKT. Zbiór rekordów wygląda jak tablica rekordów – kiedy pracujesz z konkretnym rekordem, możesz sięgać do jego poszczególnych pól. Aby na przykład sprawdzić, co kupił Charles, wystarczy odnaleźć opisujący go rekord i sprawdzić wartość jego pola PRODUKT.

Używając znacznika <OBJECT> można utworzyć obiekt DSO MSHTML i powiązać go z plikiem klient.html. Obiekt ten nazwiemy dsoKlient:

<OBJECT ID="dsoKlient" DATA="klient.html" HEIGHT="0" WIDTH="0">

</OBJECT>

DSO odczyta i zinterpretuje plik klient.html, przekształci go na zbiór danych ADO (tak naprawdę Internet Explorer używa zbioru tylko do odczytu, ADOR). DSO zawiera na raz dane jednego tylko rekordu, rekord ten jest rekordem bieżącym. Do nawigacji po zbiorze można używać wbudowanych metod obiektu DSO, najpopularniejsze z nich to moveFirst, moveLast, moveNext i movePrevious – odpowiednio: skok do pierwszego rekordu, skok do rekordu ostatniego, następny i poprzedni rekord. Aby wyświetlić dane z DSO, trzeba je powiązać z elementami HTML.

Wiązanie danych z elementami HTML

Tak naprawdę niewiele elementów HTML w Internet Explorerze obsługuje właściwości, które umożliwiają wiązanie danych z DSO. Do wiązania używa się atrybutów DATASRC i DATAFLD. Atrybut DATASRC jako wartość otrzymuje nazwę obiektu DSO, natomiast DATAFLD – nazwę pola danych, które ma być związane z elementem, wtedy element HTML wyświetli dane z bieżącego rekordu. Stosując metody moveFirst, moveLast, moveNext i movePrevious można pokazać pozostałe rekordy ze zbioru.

Jeśli na przykład powiążemy pole tekstowe z DSO dsoKlient z polem danych NAZWISKO, kontrolka przy pierwszym załadowaniu danych wyświetli napis Charles. Wywołanie metody moveNext spowoduje, że rekordem bieżącym stanie się drugi rekord ze zbioru, a w polu tekstowym wyświetlony zostanie napis Franklin.

Oto zestawienie elementów HTML z wyszczególnieniem, co daje ustawienie atrybutów DATASRC i DATAFLD:

Element

Co jest wiązane z danymi

A

Właściwość href; niemożliwa jest modyfikacja danych.

APPLET

Właściwość param; modyfikacja danych jest możliwa.

BUTTON

Właściwość value; niemożliwa jest modyfikacja danych.

DIV

Właściwości innerText oraz innerHTML; niemożliwa jest modyfikacja danych.

FRAME

Właściwość src; niemożliwa jest modyfikacja danych.

IFRAME

Właściwość src; niemożliwa jest modyfikacja danych.

IMG

Właściwość src; niemożliwa jest modyfikacja danych.

INPUT TYPE=BUTTON

Właściwość value; niemożliwa jest modyfikacja danych.

INPUT TYPE=CHECKBOX

Właściwość checked; możliwa jest modyfikacja danych.

INPUT TYPE=HIDDEN

Właściwość value; możliwa jest modyfikacja danych.

INPUT TYPE=PASSWORD

Właściwość value; możliwa jest modyfikacja danych.

INPUT TYPE=RADIO

Właściwość checked; możliwa jest modyfikacja danych.

INPUT TYPE=TEXT

Właściwość value; możliwa jest modyfikacja danych.

LABEL

Właściwość value; niemożliwa jest modyfikacja danych.

MARQUEE

Właściwości innerText i innerHTML; niemożliwa jest modyfikacja danych.

OBJECT

Właściwość objects; możliwa jest modyfikacja danych.

PARAM

Właściwość param; możliwa jest modyfikacja danych.

SELECT

Zgłoś jeśli naruszono regulamin