Dwa sposoby na XML

Document Object Model i Simple API for XML to dwa interfejsy dla programistów służące do przetwarzania złożonych dokumentów XML.

Document Object Model i Simple API for XML to dwa interfejsy dla programistów służące do przetwarzania złożonych dokumentów XML.

W technologii XML istnieją mechanizmy pozwalające na wykonywanie podstawowych operacji na dokumentach - XSL (Extensible Stylesheet Language) i XSLT. Polecenia XSL mogą być umieszczone w specjalnym pliku interpretowanym przez przeglądarkę. W ten sposób znaczna część operacji na dokumentach XML wykonywana jest bez udziału złożonych aplikacji. Może się jednak zdarzyć, że XSL nie wystarczy. Wtedy programiści mają do wyboru 2 różne modele API do obsługi XML - DOM i SAX.

Podwójny mechanizm

XML DOM (Document Object Model) to niezależny od platformy, obiektowy interfejs, pozwalający programowi czy skryptowi odwoływać się do poszczególnych elementów dokumentu XML. DOM pozwala "przejść" po strukturze drzewiastej, znaleźć wszystkie elementy nadrzędne, dodać własne atrybuty i określić ich wartość czy wręcz modyfikować definicję struktury dokumentu. Odwołując się do poszczególnych elementów dokumentu, można posługiwać się tym samym językiem co w XSL. Większość metod obiektów DOM pozwala na stosowanie wzorców XML (XLQ) określających, jakie kryteria mają spełniać zwracane fragmenty dokumentu (przypomina to mechanizm zapytań w bazach danych). Operacje te wymagają jednak, aby przed przetwarzaniem wczytać do pamięci cały dokument XML.

Innym sposobem przetwarzania dokumentów jest SAX (Simple API for XML). Zamiast wczytywać dokument i budować drzewo DOM, SAX pozwala określić procedury obsługi zdarzeń wyzwalanych w momencie, gdy parser XML napotka określony znacznik.

Aplikacja korzystająca z DOM ma ciągle dostęp do pełnej struktury dokumentu. SAX natomiast nie przechowuje przetwarzanego dokumentu w całości, a tylko tę część, której potrzebuje do dalszej pracy.

Załóżmy, że serwer aplikacyjny przetwarza 10 MB dokumenty XML zawierające ciąg badań lekarskich, tworząc przy tym 200 KB plik zawierający tylko wątpliwe wyniki. Szacuje się, że do efektywnej obróbki dokumentu przy użyciu DOM XML potrzeba ok. 30% więcej pamięci w porównaniu z dokumentem wejściowym. Do przetwarzania konieczne będzie ok. 13 MB. Jeżeli zajdzie sytuacja, że klientów będzie dużo, to konieczność wczytywania i wstępnej obróbki dokumentów będzie znaczącym obciążeniem serwera.

SAX pozwala inaczej konstruować aplikacje. W przypadku DOM, po wczytaniu dokumentu, trzeba zdecydować (używając XQL lub iteracyjnie badając kolejne gałęzie), jakie dane mają znaleźć się w postaci wyjściowej. W aplikacji używającej SAX programista może ustawić odpowiednie parametry obsługi zdarzeń i program zareaguje tylko wtedy, gdy parser napotka gałąź opisującą wątpliwy wynik. SAX wprawdzie również wczytuje cały dokument, ale w pamięci są przechowywane tylko elementy potrzebne do utworzenia dokumentu wyjściowego.

Nie bez wad

SAX w obecnej postaci ma poważne braki. Wersja 2.0 określa tylko mechanizmy odczytu informacji - nie można korzystać z SAX, gdy zajdzie konieczność zmodyfikowania dokumentu. Formułując zapytania o "interesujące" elementy w zdarzeniach SAX, na programiście spoczywa odpowiedzialność za właściwą obsługę wszystkich atrybutów.

W XML można tworzyć złożone struktury drzewopodobne, gdzie niektóre gałęzie będą odwoływać się np. do innej na tym samym poziomie. Przetwarzanie takiego dokumentu przy użyciu SAX nie jest możliwe - ten interfejs pozwala tylko na sekwencyjny dostęp do danych. W takiej sytuacji programista musi skorzystać z DOM.

Należy również pamiętać, że na razie SAX nie jest zaimplementowany w żadnej przeglądarce internetowej.

Parsery

Standardy związane z XML dopiero powstają. Równolegle ze standaryzacją trwają prace nad różnymi parserami, implementującymi te elementy, które zostały już zatwierdzone. Hierarchia DOM jest już dobrze wyspecyfikowana. SAX w wersji 1.0 istniał już dosyć długo, jednak z uwagi na to, że była to specyfikacją uboga, rzadko wykorzystywano ją do tworzenia aplikacji. SAX 1.0 i DOM implementuje wiele parserów, m.in. DataChannel, IBM, Oracle. Specyfikację SAX 2.0 obsługuje tylko parser Microsoftu w wersji beta (maj 2000 r.) i wersja beta parsera Megginson Technologies.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200