Język XML w aplikacjach z bazami danych

Transkrypt

Język XML w aplikacjach z bazami danych
V Konferencja PLOUG
Zakopane
Październik 1999
Język XML w aplikacjach z bazami danych - po roku
dr inż. Tomasz Traczyk
[email protected]
http://www.ia.pw.edu.pl/~ttraczyk/
Instytut Automatyki i Informatyki Stosowanej
Politechniki Warszawskiej
Streszczenie
Referat jest kontynuacją prezentacji z zeszłorocznej konferencji PLOUG. Pokazano rozwój języka XML
oraz języków i narzędzi mu towarzyszących. Omówiono nowe ważne składniki XML, jak przestrzenie nazw
i schematy oraz języki związane z XML, np. XSL i XQL. Zaprezentowano przykłady zastosowań XML.
Przedstawiono też nowe narzędzia umożliwiające wykorzystanie XML w aplikacjach z bazami danych,
w szczególności narzędzia Oracle. Referat ilustrują przy-kłady dotyczące zastosowania XML w systemie
wspomagającym zarządzanie dużym wydziałem wyższej uczelni.
Wprowadzenie
W referacie zaprezentowanym na zeszłorocznej konferencji PLOUG [1] przedstawiono język
XML oraz jego podstawowe składniki. Omówiono rolę DTD i arkuszy stylistycznych, porównano
XML z powszechnie znanym HTML. Przedstawiono też potencjalne zastosowania XML, koncentrując się na zastosowaniach związanych z bazami danych.
W tym referacie opisano rozwój XML i jego zastosowań, jaki nastąpił w ciągu minionego roku.
Przedstawiono bardziej szczegółowo język XSL, omówiono nowe propozycje składników języka:
przestrzenie nazw, XQL, schematy, DOM. Wymieniono nowe zastosowania XML. Przedstawiono
też nowe narzędzia wspomagające zastosowanie XML, w tym narzędzia związane z bazami danych
Oracle.
W ciągu roku, który upłynął od poprzedniej konferencji PLOUG, zainteresowanie językiem
XML wyraźnie wzrosło. Pojawiły się pierwsze powszechnie dostępne narzędzia i pierwsze zastosowania komercyjne. Na bazie XML zdefiniowano wiele specjalizowanych języków znakowania.
Jak się wydaje, XML staje się już trwałym i ważnym składnikiem systemów informacyjnych.
Standaryzacja i rozwój języka XML
Standaryzacją języka XML i języków mu towarzyszących (np. XSL) zajmuje się organizacja
World Wide Web Consortium (W3C). Zatwierdza ona zgłoszone propozycje standardów. Do
organizacji tej zgłaszane są także wszelkie propozycje rozszerzeń języka.
Obecnie specyfikacja języka XML, przestrzeni nazw oraz modelu DOM mają status W3C Recommendation, oznaczający ostatnią fazę przed uznaniem standardu. Mniej zaawansowane są prace
nad specyfikacjami XSL, XLL i XPointer — mają status W3C Working Draft. Inne propozycje,
np. schematy, są w „młodszej” fazie W3C Note.
XML przeżywa obecnie szybki rozwój. Należy się spodziewać, że obecne specyfikacje podlegać będą ewolucji. Pojawienie się na rynku pierwszych powszechnie dostępnych narzędzi tworzy
jednak pewien standard de facto, do którego zapewne będą musiały być dostosowane formalne
definicje.
Przypomnienie — co to jest XML
XML jest metajęzykiem służącym do definiowania języków znakowania. Można w nim definiować języki opisu stron i/lub języki służące do zapisu danych wraz ze strukturą.
XML jest nieco zmodyfikowanym podzbiorem SGML. Stąd też bierze się pozorne podobieństwo języka do HTML. Cele języków są jednak zgoła odmienne: HTML jest gotowym językiem
opisu stron; istnieją też ważne różnice składniowe, np. obowiązek jawnego zamykania znaczników
w XML.
Dokument w XML składa się z elementów wyróżnionych znacznikami (tags). Każdy element
może mieć atrybuty. Zawartość elementu stanowi tekst zawierający znaczniki, elementy mogą
więc być zagnieżdżane. Dopuszczalne są elementy puste — nie zawierające żadnego tekstu — ale
muszą one być specjalnie oznaczone.
Struktura znaczników musi spełniać pewne wymagania, pozwalające na poprawną interpretację
struktury dokumentu przez przeglądarki. Dokument spełniający takie wymagania nazywa się dobrze sformułowanym (well-formed).
Strukturę dokumentu definiuje się za pomocą tzw. DTD (Document Type Definition). Dokument zgodny z DTD nazywa się prawidłowym (valid). Należy zwrócić uwagę, że ten stopień poprawności nie jest bezwzględnie wymagany — przeglądarki pokazują prawidłowo dokumenty
well-formed. Poprawność typu valid wymagana jest wówczas, gdy potrzebne jest pełne sprawdzenie poprawności struktury dokumentu — np. przy przetwarzaniu danych zawartych w dokumencie.
2
Przykład
Przedstawiony poniżej przykład dokumentu w XML pochodzi z systemu wspomagającego zarządzanie wydziałem wyższej uczelni [11]. Konspekty opisujące zawartość wykładów spływają do
redaktora wydziałowego serwisu WWW, który przekształca je do postaci dokumentów XML.
Dokumenty te są następnie wczytywane przez specjalny program do wydziałowej bazy danych,
gdzie przechowywane są w postaci częściowo ustrukturalizowanej (patrz [1]).
Oto przykładowy dokument:
<?xml version="1.0" encoding="ISO-8859-2"?>
<!DOCTYPE eres_konspekty SYSTEM "konspekty.dtd">
<?xml-stylesheet type="text/xsl" href="konspekty.xsl"?>
<eres_konspekty>
<przedmiot id=”KBD2” wersja=”1”>
<slowo_kluczowe>bazy danych</slowo_kluczowe>
<slowo_kluczowe>Oracle</slowo_kluczowe>
<konspekt>
<czesc_konspektu id=”Streszczenie”>
<P> Monograficzny przedmiot poświęcony bazie danych i
narzędziom Oracle. </P>
</czesc_konspektu>
<czesc_konspektu id=”Treść przedmiotu”>
<P> Omawiane są podstawowe zagadnienia związane z
wykorzystaniem RDBMS Oracle7 i <I>Oracle8</I> oraz
administrowaniem nimi.</P>
<P> Przedstawiane są także narzędzia do budowy
aplikacji: </P>
<UL>
<LI> Oracle Forms, </LI>
<LI> Oracle Reports. </LI>
</UL>
</czesc_konspektu>
</konspekt>
</przedmiot>
</eres_konspekty>
Znaczenie poszczególnych elementów dokumentu jest łatwe do zrozumienia dla każdego, kto
zna podstawy HTML.
Oto odpowiednia definicja typu dokumentu (DTD):
<!ELEMENT eres_konspekty
<!ELEMENT przedmiot
<!ATTLIST przedmiot id
wersja
<!ELEMENT slowo_kluczowe
<!ELEMENT konspekt
<!ELEMENT czesc_konspektu
<!ATTLIST czesc_konspektu id
<!ELEMENT P
<!ELEMENT I
<!ELEMENT UL
<!ELEMENT LI
(przedmiot)+
>
((slowo_kluczowe)*, konspekt) >
ID #REQUIRED
CDATA #IMPLIED
>
(#PCDATA)
>
(czesc_konspektu)+
>
(P|UL)+
>
ID #REQUIRED
>
(#PCDATA|I)*
>
(#PCDATA)
>
(LI)+
>
(#PCDATA)
>
Znaczenie składników DTD wyjaśniono szczegółowo w [1].
3
Rozwój składników XML
Rozwój zastosowań XML spowodował potrzebę uzupełnienia języka o dodatkowe składniki.
Opisano tu kilka ważniejszych propozycji.
Przestrzenie nazw
Można się spodziewać, że po rozpowszechnieniu XML powstanie bardzo wiele systemów
(słowników) znaczników, przeznaczonych do stosowania w swych specyficznych dziedzinach.
Autor, budujący dokument z danej dziedziny, powinien korzystać z już istniejących systemów
znaczników, ale może potrzebować znaczników z więcej niż jednego słownika, może także chcieć
dołączyć swoje własne znakowanie. W takiej, bardzo przecież typowej, sytuacji może dojść do
konfliktów nazw: nazwy znaczników i atrybutów zdefiniowane w różnych słownikach mogą się
pokrywać.
Aby zapobiec tego typu problemom, określono sposób wyznaczania i wykorzystania tzw. przestrzeni nazw (XML namespaces) [6].
Przestrzeń nazw jest jednoznacznie identyfikowana przez podanie URI (Uniform Resource
Identifier, czyli adresu sieciowego) domeny, która zarządza daną przestrzenią nazw.
Element XML odwołuje się do przestrzeni nazw przez podanie specjalnego atrybutu xmlns i
zdefiniowanie prefiksu, który będzie służył do wyróżniania znaczników należących do danej przestrzeni nazw.
W przypadku naszego przykładowego dokumentu można by zdefiniować specjalną przestrzeń
nazw i zapisać dokument tak:
<eres:konspekty xmlns:eres=”http://www.elka.pw.edu.pl/eres”>
<eres:konspekty>
<eres:slowo_kluczowe>
...
Zdefiniowano tu prefiks eres i przypisano go do przestrzeni nazw zarządzanej przez Wydział
Elektroniki i Technik Informacyjnych PW, a następnie wykorzystano ten prefiks do wyróżnienia
znaczników należących do powołanej przestrzeni nazw.
Oczywiście w jednym dokumencie, a nawet w jednym elemencie, można powołać się na wiele
przestrzeni nazw. Przyjmuje się przy tym, że pierwsza z deklaracji przestrzeni nazw ustanawia
przestrzeń domyślną dla danego elementu i jego elementów podrzędnych. Dla znaczników należących do przestrzeni domyślnej prefiksy można pominąć.
Schematy i typy danych
DTD określa precyzyjnie składnię znaczników, ale nie daje pełnych możliwości potrzebnych
przy reprezentowaniu w XML złożonych danych i ich automatycznym przetwarzaniu:
• DTD nie pozwala precyzyjnie określić typów danych — zawartość „liści” w hierarchii elementów jest zawsze tekstowa;
• struktura dokumentu wyrażona przez DTD nie jest podatna na rozbudowę;
• DTD nie objaśnia znaczenia elementów;
• DTD nie pozwala na określenie ograniczeń i zależności między elementami innych niż hierarchia zawierania (np. nie można wyrazić w nim zależności referencyjnych).
Problemy te starają się rozwiązać propozycje, wprowadzające zamiast DTD tzw. schematy
(schema). Budowa dokumentów jest tu wyrażona z użyciem składni samego XML, bez konieczności odwoływania się do składni DTD.
W podejściu tym struktura elementów dokumentu XML jest traktowana tak jak hierarchia klas
obiektów. Schematy pozwalają na zdefiniowanie m.in.:
4
•
•
•
•
•
klas obiektów i ich hierarchii;
typów danych;
własności konceptualnych, np. opisów znaczenia klas i atrybutów;
ograniczeń;
związków, np. typu referencyjnego lub wyrażonych przez URI.
Możliwy jest import do schematu fragmentów definicji innych schematów, co pozwala na sformalizowane rozbudowywanie definicji dokumentów.
Propozycje sposobu definiowania schematów zawarte są w specyfikacjach XML-Data [7] oraz
Document Content Description for XML (DCD). Prowadzone są także prace nad rozbudowaniem
specyfikacji DTD tak, by możliwe było umieszczanie rozszerzonych informacji o danych w samym
DTD.
Zastosowanie schematów może pozwolić aplikacjom na szczegółowe — nie ograniczające się
jedynie do składni znaczników — sprawdzanie poprawności zawartości dokumentów, w tym poprawności typów danych.
Łączniki
Dokument w XML może zawierać łączniki — odwołania do innych dokumentów. Sposób tworzenia łączników w XML podano w dwóch specyfikacjach:
• XLL — określa sposób definiowania łączników między dokumentami,
• XPointer — określa sposób adresowania miejsc w dokumencie.
Łączniki definiuje się w języku XLL (XML Linking Language) [3]. Zasadniczą część definicji
łączników stanowią tzw. lokatory. Do definiowania lokatorów używa się adresów zwanych URI
(Uniform Resource Identifier), stanowiących rozszerzenie URL. URI zawierać może adres sieciowy, pytanie (query, po znaku ?) oraz identyfikator fragmentu (fragment identifier, po znaku #).
Możliwości łączenia dokumentów są w XLL znacznie bogatsze od znanych z HTML, obejmując:
• łączniki proste (simple), jednokierunkowe, podobne do łączników A w HTML;
• łączniki złożone (extended), np. zawierające wiele lokatorów pełniących różne role.
Łączniki mogą przejawiać różne zachowania (behavior), którymi sterują atrybuty show i
actuate łącznika. Wskazywany przez łącznik dokument lub element może:
• zastępować element w tym samym kontekście, w ten sposób można np. połączyć alternatywne
wersje jakiegoś fragmentu (show=”replace”);
• być włączany do bieżącego dokumentu — można tak włączyć np. fragment tekstu albo ilustrację (show=”embed”);
• być prezentowany w nowym kontekście, np. w nowym oknie albo zamiast dotychczas prezentowanego dokumentu (show=”new”).
Odczyt tekstu wskazywanego przez łącznik może następować na żądanie (actuate=”user”), albo automatycznie, np. gdy przeglądarka odczytuje sam łącznik
(actuate=”auto”).
Aby nie ograniczać możliwości definiowania własnych łączników postanowiono, że nie będzie
predefiniowany żaden specjalny element łącznikowy. Łączniki definiuje się zatem w DTD, tak jak
inne elementy. Wyróżnia się je, wyposażając w atrybut o zastrzeżonej nazwie: każdy element
mający atrybut o nazwie xml:link jest traktowany jak łącznik. Wartość tego atrybutu definiuje
typ łącznika: ”simple” — prosty, ”extended” — złożony.
5
Sposób adresowania miejsc i fragmentów wewnątrz dokumentów określa specyfikacja XPointer
(XML Pointer Language) [4] . Wskazanie fragmentu dokumentu może być bardziej skomplikowane niż w HTML i nie jest do tego niezbędne umieszczenie w tym dokumencie żadnego specjalnego
oznaczenia.
Adresowanie w języku XPointer opiera się na drzewie elementów — na ich hierarchii i kolejności. Możliwe jest także użycie identyfikatorów elementów.
Typowe adresy XPointer wskazują na określone wystąpienie konkretnego typu elementu w danym kontekście, np. można wskazać na trzeci element składowy drugiego elementu po podanym
identyfikatorze. Do podawania tego typu zależności służą zdefiniowane w specyfikacji określenia
położenia (location terms).
Dla podanego wyżej przykładowego dokumentu:
• root().child(1,przedmiot) oznacza pierwszy element typu przedmiot elementu
głównego, czyli przedmiot KBD2,
• id(KBD2).child(2,#element) wybiera drugi element podrzędny elementu o identyfikatorze KBD2, czyli element slowo_kluczowe.
Jeśli adres URI wskazuje na wnętrze dokumentu w XML, to zawarty w URI identyfikator fragmentu powinien być sformułowany zgodnie ze specyfikacją XPointer.
Przetwarzanie dokumentów w XML
Dokumenty zapisywane są w XML po to, by mogły być efektywnie przetwarzane przez standardowe oprogramowanie. Najbardziej powszechną formą przetwarzania jest niewątpliwie prezentacja dokumentu na ekranie lub jego druk. Inne typowe rodzaje przetwarzania to wyszukiwanie
danych w dokumencie lub zbiorze dokumentów i wykorzystanie danych z dokumentu w programach.
Ponieważ te rodzaje przetwarzania są powszechne, opracowano standardy którym powinno
podlegać oprogramowanie przeznaczone do współpracy z XML.
Style-sheets i XSL
Dokument w XML powinien być zbudowany na zasadzie znakowania znaczeniowego, a nie typograficznego. Cała informacja o sposobie formatowania dokumentu przez przeglądarkę musi być
zatem sformułowana osobno.
Do określenia wyglądu dokumentów służą tzw. arkusze stylistyczne (style-sheets). Określają
one sposób prezentacji każdego z elementów. Zaawansowane są prace nad pierwszą wersją specyfikacji języka XSL (eXtensible Stylesheet Language) [5], który służy do definiowania arkuszy stylistycznych.
Składnia XSL została w pełni zdefiniowana w XML, z użyciem przestrzeni nazw (namespaces).
Podstawową ideą XSL jest przetwarzanie hierarchii znaczników na hierarchię tzw. flow objects,
którym z kolei przypisuje się sposób prezentacji. Znaczniki XML są w tym procesie identyfikowane za pomocą wzorców (templates), które mogą w elastyczny sposób określać miejsce znacznika w hierarchii oraz atrybuty znacznika.
Ponieważ przeglądarki, za pomocą których prezentowane są dokumenty XML, będą zapewne
także przystosowane do prezentacji HTML, prostym sposobem formatowania dokumentów za pomocą XSL jest przetworzenie ich na HTML. Tak też skonstruowany został poniższy przykład.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
6
<HTML>
<HEAD><TITLE>Konspekty</TITLE></HEAD>
<BODY>
<H1>Konspekty przedmiotów</H1>
<xsl:apply-templates select="eres_konspekty/przedmiot"
order-by="@id"/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="przedmiot">
<H2><xsl:value-of select="@id"/>
(<xsl:value-of select="@wersja"/>)</H2>
<H3>Słowa kluczowe</H3>
<TABLE BORDER="1">
<xsl:for-each select="slowo_kluczowe" order-by="text()">
<TR><TD><xsl:value-of/></TD></TR>
</xsl:for-each>
</TABLE>
<xsl:apply-templates/>
<HR/>
</xsl:template>
<xsl:template match="konspekt">
<H3>Konspekt</H3>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="czesc_konspektu">
<H4><xsl:value-of select="@id"/></H4>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="P">
<P><xsl:apply-templates/></P>
</xsl:template>
<xsl:template match="I">
<I><xsl:apply-templates/></I>
</xsl:template>
<xsl:template match="UL">
<UL><xsl:apply-templates/></UL>
</xsl:template>
<xsl:template match="LI">
<LI><xsl:apply-templates/></LI>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of/>
</xsl:template>
</xsl:stylesheet>
Istotę działania XSL stanowi rekurencyjne przetwarzanie znaczników. Fraza <xsl:applytemplates/> jest wywołaniem owej rekurencji. Klauzule select zawężają zakres działania
do wybranych elementów dokumentu. Klauzule match podają wzorzec znacznika, który jest
przetwarzany za pomocą danej frazy template.
Frazy value-of powodują włączenie odpowiedniej części przetwarzanego dokumentu do dokumentu wynikowego. Nazwy poprzedzone znakiem @ oznaczają odwołanie do wartości atrybutu.
Efekty formatowania przykładowego dokumentu za pomocą powyższego skryptu przedstawia
Rysunek 1.
7
Rysunek 1. Wynik formatowania dokumentu XML za pomocą XSL
Możliwości języka XSL wykraczają daleko poza zwykłe formatowanie. Za pomocą XSL można np. wykonywać zarówno proste konwersje (np. na HTML, jak powyżej), jak złożone przetwarzanie danych. Takiemu przetwarzaniu poświęcona jest część specyfikacji XSL, nazwana XSLT
(XSL Transformations). Wielkie możliwości stwarza także wykorzystanie umieszczanych w XSL
skryptów proceduralnych, napisanych w języku ECMAScript (ustandaryzowanej odmianie JavaScriptu).
XQL
Typową operacją wykonywaną na dokumentach i danych jest wyszukiwanie. Potrzebny jest
zatem standardowy sposób zadawania warunków wyszukania. Pojawiła się więc propozycja specjalnego języka zapytań XQL (XML Query Language) [8], czerpiącego inspirację z języka zapytań
dla obiektowych baz danych OQL, zaś składniowo zbliżonego do języka wzorców z XSL.
XQL ma umożliwiać wyszukiwanie danych w dokumencie lub kolekcji dokumentów (np. repozytorium).
Oto kilka przykładowych zapytań w XQL, wyszukujących w wcześniej podanym dokumencie
XML:
• eres_konspekty/przedmiot — zwraca wszystkie elementy typu przedmiot, bezpośrednio zawarte w elemencie eres_konspekty,
• eres_konspekty//slowo_kluczowe — zwraca wszystkie elementy typu
slowo_kluczowe zawarte (na którymkolwiek poziomie hierarchii) w elemencie
eres_konspekty,
• przedmiot?/slowo_kluczowe — zwraca wszystkie elementy typu slowo_kluczowe, bezpośrednio zawarte w elemencie przedmiot, oraz zawierające je elementy typu przedmiot (ale bez innych elementów podrzędnych),
• czesc_konspektu[@id<>”Streszczenie”] — zwraca wszystkie elementy typu
czesc_konspektu o identyfikatorze różnym od podanego w warunku.
Zapytanie w XQL ma bardzo prostą budowę i jest pozbawione „ozdobnych” słów kluczowych
(typu ‘select’), gdyż ma dawać użyć się jako fragment identifier w adresie URI.
Bezpośrednim wynikiem zapytania w XQL jest zbiór elementów XML. Pożądaną cechą języków zapytań jest zgodność modelu danych wynikowych z modelem danych przeszukiwanych,
8
wynik zapytania w XQL powinien więc być poprawnym dokumentem XML. Aby to osiągnąć,
zwrócone przez zapytanie elementy są opakowywane w element główny o nazwie xql:result.
DOM
Dane zawarte w dokumentach XML powinny dać się wygodnie przetwarzać w programach.
Aby z zastosowania XML płynęła jakaś korzyść dla programistów tworzących takie programy,
potrzebny jest standard dostępu do danych i uniwersalne narzędzia ułatwiające ten dostęp.
Propozycją takiego standardu jest DOM (Document Object Model). Definiuje on obiektowy
model dokumentu w XML oraz dostarcza zbioru klas i metod umożliwiających manipulowanie
dokumentami XML z języków programowania Java, ECMAScript, VBScript i C++.
API zgodne z DOM (np. wbudowane w przeglądarki WWW), umożliwiają wygodne manipulowanie dokumentami w typowych środowiskach programowania. Najbardziej znana implementacja
DOM jest częścią MSIE 5.0.
Pewną popularność zdobył także, spełniający podobne zadanie, model SAX (Simple API for
XML), dla którego dostępne są darmowe parsery np. dla języka Java.
Data Islands i DHTML
W dokumentach HTML nie można przesyłać danych zapisanych w sposób sformalizowany,
zdatnych do dalszego przetwarzania. Tymczasem takie dane są często potrzebne, np. by umożliwić
łatwe wyszukanie dokumentu. Dotychczas stosowano „sztuczki” polegające na umieszczaniu
sformalizowanych danych w komentarzach HTML.
Obecnie pojawiła się nowa możliwość: w tekście HTML można umieszczać tzw. wyspy danych
(data islands). Są to sformalizowane struktury zapisane w XML, a objęte specjalnym znacznikiem
<XML> lub <SCRIPT language=”XML”>.
Zawartość elementów takiej wyspy danych może być wykorzystana w skryptach DHTML (Dynamic HTML). Data island jest traktowana przez skrypty jak obiekt (XML Document Object) o
nazwie wyznaczonej przez atrybut-identyfikator wyspy.
Zastosowania XML
W ciągu ostatniego roku język XML znacznie zyskał na popularności, pojawiło się bardzo wiele
propozycji jego wykorzystania oraz sporo narzędzi wspomagających użycie XML.
Podstawowe narzędzia
•
•
•
Dostępne obecnie narzędzia dla XML to:
parsery XML dla języków programowania, np. Java, C++;
edytory do plików XML, ułatwiające manipulowanie strukturą danych;
przeglądarki, umożliwiające bezpośrednie wyświetlanie dokumentów w XML.
Najbardziej znanym produktem jest Microsoft Internet Explorer 5.0, zawierający obsługę modelu DOM oraz umożliwiający walidację dokumentów z użyciem DTD. MSIE potrafi prezentować dokumenty XML z wykorzystaniem arkuszy stylistycznych napisanych w językach XSL (co
pokazuje Rysunek 1) oraz CSS. Wbudowano także generyczny styl do prezentacji dokumentów
nie mających arkusza stylistycznego — przykład pokazuje Rysunek 2.
9
Rysunek 2. Prezentacja dokumentu w XML bez arkusza stylistycznego
Narzędziem towarzyszącym MSIE jest Microsoft XML Notepad — prosty edytor ułatwiający
manipulowanie strukturami dokumentów XML, zawierający walidację dokumentów. Wygląd
ekranu tego edytora przedstawia Rysunek 3.
Rysunek 3. Popularny edytor do XML — Microsoft XML Notepad
Wykorzystanie w programach powszechnego użytku
XML uzyskał poparcie znaczących producentów oprogramowania i już jest używany w programach powszechnego użytku. Zapewne najbardziej znanym przykładem jest pakiet Microsoft
Office 2000.
W pakiecie tym umożliwiono zapis większości dokumentów (np. złożonych dokumentów tekstowych czy arkuszy kalkulacyjnych) w formacie HTML. Należało jednak zapewnić odwracalność
zapisu, tzn. możliwość ponownego otworzenia przez programy MS Office tak zapisanego dokumentu bez utraty informacji. Możliwości HTML do tego nie wystarczają, zapis w HTML uzupełniono więc właśnie językiem XML. Zapisane w taki sposób dokumenty mogą być dystrybuowane
w WWW, z zachowaniem możliwości ich pełnego odtworzenia do dalszej edycji. Dodatkowo
rozwiązanie takie zapewnia możliwość wymiany dokumentów między różnymi wersjami oprogramowania — dokumenty z przyszłych wersji MS Office będą mogły być prawidłowo czytane przez
wersje wcześniejsze, a znaczniki niezrozumiałe dla starszych wersji będą po prostu ignorowane.
10
Ciekawym zastosowaniem XML, także związanym z MS Office, ale popieranym i przez innych
producentów, jest język VML (Vector Markup Language). Służy on do definiowania i prezentowania grafiki wektorowej, a zapisywane są w nim m.in. rysunki OfficeArt — wykonywane za pomocą programów pakietu MS Office. Przeglądarka MSIE 5.0 potrafi bezpośrednio wyświetlać
takie rysunki. W3C prowadzi prace standaryzacyjne, mające na celu scalenie kilku istniejących
propozycji specyfikacji grafiki wektorowej w jeden standard o nazwie Scalable Vector Graphics
(SVG).
Specjalizowane struktury danych
Powstaje wiele języków specjalizowanych opartych na XML. Dotyczą one wielu bardzo różnych dziedzin. Kilka przykładów podano poniżej:
• zastosowania naukowe, np. MathML (Mathematical Markup Language), CML (Chemical
Markup Language);
• modelowanie systemów, np. PIF-XML (Process Interchange Format XML), UXF (UML eXchange Format), XMI (XML Metadata Interchange);
• różne projekty z dziedziny EDI (Electronic Data Interchange);
• finanse i bankowość, np. OFX/OFE (Open Financial Exchange), BIPS (Bank Internet Payment
System);
• multimedia, np. SMIL (Synchronized Multimedia Integration Language), PGML (Precision
Graphics Markup Language), czy wspomniany już VML.
XML w systemach z bazami danych
W zeszłorocznym referacie uskarżano się na brak wsparcia dla języka XML ze strony producentów narzędzi dla systemów z bazami danych, w szczególności Oracle. W ciągu roku sytuacja
uległa znacznej zmianie: XML został przez producentów baz danych zauważony i jest włączany
jako ważny element programów rozwoju. Pojawiły się też pierwsze narzędzia wspierające XML, a
nawet specjalizowane serwery aplikacyjne. Oto przykłady:
• eXcelon firmy Object Design jest serwerem aplikacyjnym przetwarzającym dokumenty XML
na struktury bazy danych (z możliwością wykorzystania języka zapytań XQL) oraz tworzącym
dokumenty XML na podstawie zawartości bazy;
• Tamino firmy Software AG zawiera tzw. X-Machine — składnicę danych w XML, zapisywanych w bazie danych bez konwersji na inną postać.
XML a Oracle
Firma Oracle zauważyła rosnącą rolę języka XML w budowaniu systemów informacyjnych, w
szczególności systemów internetowych. Oracle bierze udział w pracach komitetów W3C przygotowujących standardy związane z XML (np. XML-Schema, XMI). Przygotowano też narzędzia
wspierające wykorzystanie XML w aplikacjach z bazą danych Oracle.
Pierwszym udostępnionym przez firmę narzędziem był pakiet PLSXML [9], zawierający trzy
podstawowe składniki:
• DBXML — narzędzie do generowania dokumentów XML na podstawie zapytań SQL;
• DBDOM — API do manipulacji dokumentami XML z języka PL/SQL, zgodne z modelem
DOM;
• DBXSL — narzędzie do generowania arkuszy stylistycznych, prezentujących wyniki działania
DBXML w postaci drzewa.
Narzędzia te mogą być używane z bazami Oracle 7.3 i 8.0 i Oracle Web Application Server w
wersji 3 lub nowszej.
Wraz z pojawieniem się na rynku bazy Oracle8i powstała możliwość wykorzystania wbudowanej w DBMS maszyny wirtualnej języka Java (Oracle8i Java VM), procedur składowanych pisa-
11
nych w Javie i wydajnego interfejsu JDBC. Zbudowano zestaw narzędzi wspomagających wykorzystanie XML, nazwany Oracle Core XML Support [10]:
• Oracle XML Parser — napisany w Javie parser zgodny ze standardami DOM i SAX, parser
ten może być wykorzystywany przez programy w Javie działające we wszystkich warstwach
architektury trójwarstwowej, także w składowanych w bazie procedurach w Javie;
• wsparcie dla XML w opcji iFS (Internet File System), pozwalające na automatyczną strukturalizację ładowanych do iFS dokumentów (zapis strukturalnych części dokumentów do tabel,
przechowywanie części tekstowych w postaci tekstu);
• specjalne mechanizmy w opcji ConText, dostosowane do wyszukiwania w dokumentach w
XML.
Ponadto dostarczono szereg pomocniczych narzędzi ułatwiających tworzenie aplikacji wykorzystujących XML:
• parser XML dla języka PL/SQL, pozwalający na przetwarzanie dokumentów w XML za pomocą procedur napisanych w P/SQL;
• parsery XML dla języków C i C++;
• XML Class Generator for Java — narzędzie pozwalające na podstawie DTD automatycznie
wygenerować definicje klas służących do programowej manipulacji dokumentem;
• XML SQL Utility for Java — zestaw gotowych klas służących do generowania dokumentów w
XML na podstawie zapytań w SQL oraz do wczytywania dokumentów w XML do struktur bazy danych;
• Oracle XSQL Servlet — przygotowana z wykorzystaniem XML SQL Utility aplikacja przeznaczona do wykonania na serwerze danych lub aplikacji (servlet), umożliwiająca wstawianie zapytań SQL wprost do dokumentów w XML i dynamiczne wykonywanie tych zapytań; pozwala także na dokonywanie przez serwer transformacji dokumentów w XML na podstawie
skryptów w XSL.
Podsumowanie
Jak można się było spodziewać, język XML zdobywa coraz szersze uznanie i okazuje się przydatny w licznych zastosowaniach z wielu różnych dziedzin. Język zyskał poparcie wszystkich
znaczących producentów oprogramowania. Jego specyfikacja jest nadal udoskonalana, dodawane
są też nowe istotne komponenty.
XML został zauważony także przez producentów baz danych. Pojawiły się narzędzia wspierające zastosowania XML w systemach z bazami danych. Także firma Oracle wyposażyła swe systemy zarządzania bazami danych w odpowiednie dodatki, ułatwiające wykorzystanie XML.
XML staje się nowym, standardem przekazywania danych. Wydaje się atrakcyjny dla bardzo
różnych grup użytkowników. Wykorzystanie XML stanie się zapewne już w najbliższych latach
powszechne. Wpłynie to na pewno znacząco na rozwój technologii systemów informacyjnych, a w
szczególnym stopniu na systemy internetowe i systemy z bazami danych.
Literatura:
[1] T.Traczyk, W.Macewicz: „Język XML w aplikacjach z bazami danych — możliwości zastosowania, pierwsze doświadczenia”. Materiały IV Konferencji Developerów i użytkowników
Oracle Ewolucja systemów informatycznych: dane, sprzęt, oprogramowanie i aplikacje, Zakopane 1998.
[2] Extensible Markup Language (XML) 1.0. W3C Recommendation REC-XML-19980210.
[3] XML Linking Language (XLink). W3C Working Draft WD-xptr-19980303.
[4] XML Pointer Language (XPointer). W3C Working Draft WD-xlink-19980303.
[5] Extensible Stylesheet Language (XSL) 1.0. W3C Working Draft WD-xsl-19981216.
[6] Namespaces in XML. W3C Recommendation REC-xml-names-19990114.
[7] XML-Data. W3C Note, NOTE-XML-data-19980105.
12
[8] J.Robbie: The Design of XQL. http://www.texcel.no/whitepapers/xql-design.html
[9] PLMSQL Utilities and Demos. http://www.oracle.com/plsxml/index.html
[10] XML Support in Oracle8i and Beyond. http://www.oracle.com/xml/documents/xml_twp/
[11] T.Traczyk: Zastosowanie WWW w systemie wspomagającym zarządzanie dużym wydziałem
wyższej uczelni. Materiały II szkoły PLOUG Rozproszone aplikacje baz danych, Zakopane 1996.
13