EMBIT - Rozwiązania sieciowe i mobilne: Java J2ME, GPRS, GPS
 

Zestawienia tabelaryczne

Odwzorowanie w strukturę XML różnego rodzaju tabelarycznych zestawień sprawozdawczych nie zawsze jest zadaniem trywialnym, zwłaszcza gdy w zestawieniu występują wiersze z danymi sumarycznymi, po których następują wiersze zawierające rozbicie (częściowe lub zupełne) na dane składowe.

W charakterze przykładu rozpatrzmy proste zestawienie nakładów i zwrotów wydawnictw periodycznych, w rozbiciu na odpowiednie kategorie: dzienniki, tygodniki etc. Jeżeli wiersze takiego zestawienia odwzorujemy w struktury danych XML, otrzymamy złożone elementy zawierające co najmniej tytuł wydawnictwa, wysokość nakładu i liczbę zwrotów:

Struktura elementu
Uwaga:
przyjęto, że tytuł wydawnictwa nie będzie elementem danych, lecz opcjonalnym atrybutem, nie występującym dla wierszy zawierających dane zbiorcze. Diagram obok przedstawia jedynie elementy składowe danych, z pominięciem atrybutów.

Przypisanie każdego z takich elementów do odpowiedniej kategorii najprościej można osiągnąć wprowadzając atrybut typu wyliczeniowego. Wówczas struktura pojedynczego wiersza zestawienia, zapisana w języku XML Schema, mogłaby wyglądać następująco:

	<xs:complexType name="Tytuł-lub-kategoria">
		<xs:annotation>
			<xs:documentation>Tytuł lub kategoria wydawnictwa</xs:documentation>
		</xs:annotation>
		<xs:group ref="Statystyka"/>
		<xs:attribute name="Kategoria" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">
					<xs:enumeration value="dzienniki"/>
					<xs:enumeration value="tygodniki"/>
					<xs:enumeration value="dwutygodniki"/>
					<xs:enumeration value="miesięczniki"/>
					<xs:enumeration value="pozostałe"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Tytuł" type="xs:string" use="optional"/>
	</xs:complexType>
            	

Definiując element “Raport” jako sekwencję następujących po sobie elementów przedstawionych powyżej (odpowiadających kolejnym wierszom pierwotnego formularza), otrzymamy “płaską” strukturę, w której hierarchiczne zależności wyrażone na poziomie atrybutów poszczególnych elementów nie są uchwytne w sposób łatwy i bezpośredni. Warto przy tym zauważyć, że struktura taka jest mało podatna na modyfikacje w rodzaju wprowadzania podkategorii (kolejnych poziomów hierarchii), rośnie również ryzyko popełnienia błędu przy zmianach, polegających np. na dodaniu nowego wiersza (elementu) danych.

Naturalnym niejako rozwiązaniem dla tej klasy zagadnień jest zastosowanie struktur rekurencyjnych - takich, w których element danych może zawierać elementy składowe (podelementy) o strukturze identycznej, jak struktura elementu nadrzędnego. Przedefiniujmy w tym celu element “Tytuł-lub-kategoria” w sposób następujący:

Struktura elementu

Jak widać, jest to struktura rekurencyjna: element “Tytuł-lub-kategoria” zawiera element “Statystyka”, któremu mogą towarzyszyć: co najwyżej jeden element “Z-tego” i co najwyżej jeden element “W-tym”. Element “Z-tego” (jeżeli wystąpi) jest sekwencją co najmniej dwóch, zaś element “W-tym” - co najmniej jednego elementu “Tytuł-lub-kategoria”. Elementy te służą do wydzielania tych wierszy formularza, które stanowią częściowe (“W-tym”) lub zupełne (“Z-tego”) wyliczenie składników wiersza je poprzedzającego. Proponowana tu semantyka elementów rekurencyjnej wersji zestawienia musi oczywiście zostać zaimplementowana w programach przetwarzających takie struktury. Przykład takiej implementacji zostanie przedstawiony w następnym opracowaniu z zainaugurowanego właśnie cyklu.

W charakterze przykładu poniżej pokazano fragment fikcyjnego zestawienia nakładów i zwrotów kilku tytułów prasy i czasopism. Jak Czytelnik z łatwością się domyśli, tytuły te nie są w najmniejszym nawet stopniu aluzjami do rzeczywistych tytułów lub sytuacji ani w III Rzeczpospolitej, ani tym bardziej w ewentualnych Rzeczpospolitych kolejnych.

Pliki przydatne do analizy omówionego rozwiązania i ewentualnej jego adaptacji do własnych potrzeb można pobrać tutaj. Uwagi, opinie i słowa zachęty prosimy przesyłać pod adres xml@embit.pl lub używając formularza na stronie "Opinie i komentarze".

 
Copyright © 2003 EMBIT Systemy Informatyczne Liczba odwiedzin: 105849 Redakcja witryny: webmaster@embit.net