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: SilverCounter - Admin Control Panel
� Login
Password:
� Wrong Password
You entered a wrong password! Please hit the Back-Button of your browser to return to the login screen.
� Edit Settings
Change Password:
Here you can enter a new password for the Admin Control Panel.
User-Online Time:
Here you can enter how many seconds a user is shown as 'online'.
When to delete IPs:
Here you can set how many seconds an user's ip is saved in the database. 0 = No IP-lock. 86400 = Full IP lock.
Total number of visitors:
Here you can edit the total number of visitors.
Total number of visitors today:
Here you can edit the number of today's visitors.
Edit Template:
Here you can change the counter's look. (HTML)

$total = Total number of visitors
$today = Number of today's visitors
$online = Number of 'online users'
� Information
Code for Installation:
Paste this code to the place where the counter shall be shown. Please note that the filename has to end on .php !
Current Silver-Scripts.de News:
Here you can see the latest news concerning Silver-Scripts.de
Date of Installation
The date of installation is shown here.
� Error
You didn't enter anything in the following field:
� Settings saved
The settings have been saved successfully. Click here if the redirection doesn't work.
Powered by SilverCounter v1.0.1
© Silver-Scripts.de
Redakcja witryny: webmaster@embit.net