• Nie Znaleziono Wyników

Modelowanie i przetwarzanie temporalnej bazy danych w XML obszernie omówiono w [3]. W niniejszym podrozdziale przedstawiono najwa˙zniejsze aspekty tego zagadnienia wraz z podstawowymi informacjami o samym XML.

10.2.1. J˛ezyk XML

Rozszerzalny j˛ezyk znaczników XML (ang. Extensible Markup Language) to prosty tekstowy format zapisu danych. Stosowany jest obecnie zarówno do opisu dokumentów, jak i ró˙znego rodzaju struktur danych (XML daje mo˙zliwo´s´c two-rzenia j˛ezyków, inaczej aplikacji XML, słu˙z ˛acych do przechowywania informa-cji). U˙zywa si˛e go na przykład do zapisu tre´sci stron internetowych (XHTML,

http://www.w3.org/TR/xhtml1/), jako format przesyłania nagłówków infor-macji (Atom,http://tools.ietf.org/html/rfc4287), opisu grafiki wektoro-wej (SVG, http://www.w3.org/Graphics/SVG/), zapisu formuł matematycz-nych (MathML,http://www.w3.org/Math/).

W XML-u dane przechowywane s ˛a w sposób tekstowy, opisywane poprzez znaczniki, w obr˛ebie których te dane si˛e znajduj ˛a. Poniewa˙z dokument XML za-pisany jest tekstowo, nie wyst˛epuje problem niekompatybilno´sci pomi˛edzy ró˙z-nymi systemami komputerowymi. Dlatego te˙z j˛ezyk nadaje si˛e szczególnie do przechowywania danych wymienianych za po´srednictwem Sieci. Najwa˙zniejsze elementy składni j˛ezyka XML, w omawianym kontek´scie, to:

10.2. Temporalne rozszerzenie j˛ezyka XML • istnieje element (znacznik) główny (ang. root - korze ´n);

• znacznik rozpoczyna lewy nawias k ˛atowy (<), a ko ´nczy prawy (>), pomi˛edzy którymi znajduje si˛e nazwa znacznika i opcjonalnie lista parametrów z przypi-sanymi warto´sciami np.: <znacznik parametr="warto´s´c">. Ka˙zdy znacznik otwieraj ˛acy posiada swój odpowiednik zamykaj ˛acy, zło˙zony z nazwy poprze-dzonej uko´snikiem, tutaj</znacznik>;

• pomi˛edzy znacznikiem otwieraj ˛acym i zamykaj ˛acym mog ˛a znale´z´c si˛e kon-kretne dane np.:<em>Tekst</em>;

• mog ˛a istnie´c znaczniki pojedyncze, wtedy uko´snik znajduje si˛e przed zna-kiem >, np.: <znacznik parametr="warto´s´c" /> jest odpowiednikiem

<znacznik parametr="warto´s´c"></znacznik>;

• znaczniki mog ˛a zagnie˙zd˙za´c si˛e, ustanawiana jest tym samym relacja rodzic– potomek;

• znaczniki nie mog ˛a si˛e przeplata´c, np.: zabroniona jest składnia

<pierwszy> <drugi> </pierwszy> </drugi>.

W uproszczeniu mo˙zna przyj ˛a´c, ˙ze zestaw znaczników i ich zawarto´sci tworz ˛a dokument XML, b˛ed ˛acy najcz˛e´sciej, ale niekoniecznie, plikiem. Przykładowy do-kument XML przedstawiono na listingu 10.1.

Listing 10.1: Przykładowy dokument XML <?xml version=" 1 . 0 " encoding= ’UTF−8 ’ ?>

<element atrybut=" wartosc "> <owoc nazwa=" gruszka ">

<charakterystyka kolor="#00 f f 0 0 " masa=" 0.31 " /> <opis>Owoc pochodzi z <region> Suwalszczyzny </ region> . . . </ opis> < !−− Komentarz −−> </owoc> </element>

XML jest rozwijany i promowany przez W3C (ang. World Wide Web Consor-tium,http://www.w3.org/) - organizacj˛e zajmuj ˛ac ˛a si˛e standaryzacj ˛a w sieci. Specyfikacj˛e XML mo˙zna znale´z´c na stronach W3C (http://www.w3.org/TR/ REC-xml/).

Popularno´s´c i otwarto´s´c j˛ezyka skłania do zastanowienia si˛e nad jego przydat-no´sci ˛a w zarz ˛adzaniu informacj ˛a zmieniaj ˛ac ˛a si˛e w czasie. Okazuje si˛e, ˙ze istniej ˛a ju˙z pewne podej´scia do realizacji tego typu zada ´n. Opracowane koncepcje zarz ˛ a-dzania danymi temporalnymi w XML posiadaj ˛a wiele wspólnych cech, dlatego w rozdziale tym skupiono si˛e na wynikach jednej pracy [3].

10.2.2. Temporalny dokument XML

Dokument XML przedstawiany jest jako graf skierowany, z wyró˙znionym wierzchołkiem pocz ˛atkowym (korzeniem dokumentu) i trzema rodzajami wierz-chołków, których podział wynika ze specyfiki XML (warto´sci, atrybuty, elementy). Wyró˙znione s ˛a ponadto dwa rodzaje kraw˛edzi takiego grafu: zawierania i referen-cji. Te ostatnie ł ˛acz ˛a specjalny atrybutREFelementu z innym elementem. Kra-w˛edzie zawierania albo ł ˛acz ˛a element z atrybutem, warto´sci ˛a, innym elementem, albo ł ˛acz ˛a atrybut z jego warto´sci ˛a. Ka˙zdy w˛ezeł w grafie ma swój unikalny numer (ID).

Czas w dokumencie XML opisywany jest przy pomocy etykietowania kraw˛edzi grafu. Etykieta z przedziałem czasowym opisuj ˛aca pewn ˛a kraw˛ed´z

(a)[t1,t2]−→ (b)

oznacza, ˙ze w czasie od t 1 do t 2 element b nale˙zał do a. Kraw˛ed´z zapisuje si˛e w wygodnej do analizowania formie e(ni, nj, Te), gdzie ni, nj to ł ˛aczone ele-menty, natomiast Te to omawiany przedział czasowy. Natomiast w XML zapi-suje si˛e to inaczej. Fragment dokumentu z takimi etykietami przedstawiono na li-stingu 10.2. Poniewa˙z w XML element nie mo˙ze mie´c dwóch atrybutów o tej sa-mej nazwie, wprowadza si˛e dodatkowy znacznik zawieraj ˛acy list˛e atrybutów jako swoje elementy.

Listing 10.2: Opis czasu w XML <osoba imie="Maria">

<ATTRIBUTES>

<nazwisko Time:From="0" Time:To=" t1 −1"> Kowalska

</ nazwisko>

<nazwisko Time:From=" t1 " Time:To="Now"> Nowak

</ nazwisko> </ATTRIBUTES> </osoba>

Czas opisuje si˛e dyskretnie. Wyró˙znia si˛e dwa specjalne znaczniki czasowe: czas utworzenia dokumentu i chwil˛e obecn ˛a. Opisuje si˛e tylko czas istnienia w bazie danych (ang. transaction time), ale wprowadzenie czasu prawdziwo´sci faktów (ang.valid time) nie powinno nastr˛eczy´c trudno´sci.

Czas ˙zycia elementu definiuje si˛e jako sum˛e przedziałów czasowych wszyst-kich wchodz ˛acych do ´n kraw˛edzi zawierania. Czas ˙zycia elementu głównego to przedział od t0(czas zało˙zenia bazy) do teraz.

Temporalny dokument XML mo˙zna zdefiniwa´c jak nast˛epuje [3].

Definicja 10.2.1 Temporalny dokument XML to graf poszerzony o etykiety

tempo-ralne, który spełnia poni˙zsze warunki:

1. Suma przedziałów czasowych kraw˛edzi zawierania wychodz ˛acych z elementu zawiera si˛e w czasie ˙zycia elementu.

10.2. Temporalne rozszerzenie j˛ezyka XML 2. Suma przedziałów czasowych kraw˛edzi zawierania wchodz ˛acych do elementu tworzy jeden zwarty przedział czasowy, a ich iloczyn jest przedziałem pustym. 3. Dla ka˙zdej chwili czasu t podgraf zło˙zony ze wszystkich kraw˛edzi zawierania

ectakich, ˙ze t nale˙zy do przedziału czasowego ec, jest drzewem, którego korze ´n jest elementem głównym. Takie drzewo nazywane jest zrzutem dokumentu w czasie t i oznaczane jakoD(t).

4. IDelementu pozostaje niezmienne we wszystkich zrzutach dokumentu. 5. Dla ka˙zdej kraw˛edzi zawierania ez(ni, nj, Tez), je´sli nj jest atrybutem typu

REF, wi˛ec istnieje kraw˛ed´z er(nj, nk, Ter), zachodzi Tec= Ter.

6. Przedział czasowy kraw˛edzi referencyjnej zawiera si˛e w czasie ˙zycia elementu, na który ona wskazuje.

Graf, który nie spełnia definicji 10.2.1 w pewnym zakresie, nazywany jest nie-spójnym. Rozró˙znia si˛e cztery typy niespójno´sci (w [3] zaproponowano szereg algorytmów wykrywaj ˛acych i naprawiaj ˛acych niespójno´sci):

1. istnieje wychodz ˛aca kraw˛ed´z zawierania, której przedział czasowy wychodzi poza czas ˙zycia elementu;

2. przedziały czasowe kraw˛edzi zawierania wchodz ˛acych do elementu nie two-rz ˛a ci ˛agłego przedziału lub ich iloczyn nie jest przedziałem pustym;

3. istnieje cykl w jakim´s zrzucie dokumentu; 4. istniej ˛a dwa elementy z takim samymID.

Modyfikacje danych w temporalnym XML odbywa si˛e wg nast˛epuj ˛acych za-sad. Nowy element mo˙zna doda´c tylko do elementu bie˙z ˛acego. Element „A”, do którego dodawany jest nowy element „B” przestaje by´c bie˙z ˛acym elementem. Górna granica jego przedziału czasowego przestaje by´c „Now”, na rzecz chwili wykonywania tej operacji t1pomniejszonej o 1. Przedział czasowy nowego ele-mentu rozpoczyna si˛e od t1i ko ´nczy na „Now”. Po operacji dodawania elementu naruszona zostaje spójno´s´c typu drugiego i nale˙zy to naprawi´c, stosuj ˛ac na przy-kład algorytm podany w [3].

Usuni˛ecie elementu, atrybutu lub kraw˛edzi referencji nie narusza spójno´sci grafu. Operacja polega tylko na zamianie warto´sci „Now” w odpowiednim prze-dziale czasowym na chwil˛e usuwania. Uaktualnianie kraw˛edzi zawierania ozna-cza zmian˛e rodzica danego elementu w danej chwili. Po takiej modyfikacji nale˙zy sprawdzi´c spójno´s´c typu trzeciego.

10.2.3. J˛ezyk zapyta ´n dla temporalnego XML

J˛ezyk XPath 2.0

J˛ezyk ´scie˙zek XML, XPath 2.0 (ang. XML Path Language) słu˙zy do adresowa-nia zbiorów elementów w dokumencie XML. Jest podzbiorem XQuery (ang. XML Query Language), słu˙z ˛acego do przeszukiwania dokumentów XML. Specyfikacje zarówno XPath, jaki i XQuery, znajduj ˛a si˛e na stronach W3C.

osi b˛ed ˛acych zbiorami w˛ezłów o okre´slonym pokrewie ´nstwie wobec odpowied-nich w˛ezłów, wzgl˛edem których dokonuje si˛e przeszukiwania (bie˙z ˛acych);

nazw badanych w˛ezłów;

predykatów, za pomoc ˛a których testowane s ˛a odpowiednie w˛ezły, np.w˛ezeł[element = ’szukany’]

´scie˙zek opisywanych przez wyra˙zenia takie jak „/” – na pocz ˛atku wyra˙zenia symbolizuje wybór w˛ezła, zaczynaj ˛ac od elementu głównego (bezwzgl˛edny), w innym przypadku — relacj˛e rodzic-potomek, „//” – wybór dowolnie umiej-scowionego potomka elementu bie˙z ˛acego, „..” – rodzic elementu bie˙z ˛acego, „.” – element bie˙z ˛acy, „@” – wybór atrybutu.

Przykładowe zapytanie, pozwalaj ˛ace wybra´c imiona tych studentów z grupy, którzy maj ˛a element obecno´sci wi˛ekszy od 5:

/grupa/student[obecno´sci > 5]/imi˛e

Temporalny XPath

TXPath to zaproponowane w [3] rozszerzenie XPath pozwalaj ˛ace na for-mułowanie zapyta ´n dla temporalnego XML. Wybierane elementy to pary (ele-ment, przedział czasowy) takie, ˙ze element spełnia dane wyra˙zenie nieprzerwanie w przedziale przedział czasowy. Zapytanie:

//kierunek[nazwa="automatyka i robotyka"]// student[@from <= 2005 and @to=’Now’]

zwraca „studentów”, którzy studiuj ˛a nieprzerwanie od 2005 do chwili obecnej. Ni˙zej przedstawiono podstawowe funkcjonalno´sci TXPath.

• Zapytaniedistinct-values(wyra˙zenie)zwraca jeden element w przypadku, kiedy kilka takich samych elementów spełniaj ˛acychwyra˙zenieposiada nacho-dz ˛ace na siebie lub wyst˛epuj ˛ace tu˙z po sobie przedziały czasowe.

• Agregacja XPath 2.0 mo˙ze by´c stosowana do przedziałów czasowych. Zapytanie o imiona graczy, którzy grali w klubieMagic, kiedyKowalskipo raz pierwszy doł ˛aczył do tego klubu ma nast˛epuj ˛ac ˛a posta´c (za [3]):

let $m= min(//klub[nazwa=’Magic’]// gracz[imi˛e=’Kowalski’]/@from) return

//klub[nazwa=’Magic’]//gracz[$m >= @from and $m <= @to]/imi˛e

• Łatwo wygenerowa´c zrzut dla konkretnego czasu, jak w przykładowym zapyta-niu o studentów, którzy studiowali 16.12.2009:

//kierunek[nazwa="automatyka i robotyka"]//student[ @from => ’16.12.2009’ and @to <= ’16.12.2009’]