5.5.3. Plik konfiguracyjny

Plik konfiguracyjny musi być poprawnym dokumentem XML. Oto przykładowa zawartość:


<?xml version="1.0" encoding="ISO-8859-2"?>

<aggregate xmlns="http://www.praterm.com.pl/IPK/aggregate" 
		xmlns:aggr="http://www.praterm.com.pl/IPK/aggregate" 
		xmlns:ipk="http://www.praterm.com.pl/SZARP/ipk"
		prefix="zamX" 
		title="Zamość">
		
	<config prefix="zamo">
		<remove xpath="//ipk:raport"/>
		<regexp xpath="//ipk:draw/@prior">s#.*#10\0#</regexp>
		<attribute xpath="//ipk:draw[not(@prior)]" name="prior"
			value="099"/>
	</config>

	<config prefix="zmk1">
		<remove xpath="//ipk:raport"/>
		<regexp xpath="//ipk:draw/@prior">s#.*#20\0#</regexp>
	</config>

	<config prefix="zmw3">
		<remove xpath="//ipk:raport"/>
		<remove xpath="//ipk:draw/@prior"/>
		<!--<regexp xpath="//ipk:draw/@prior">s#.*#30\0#</regexp>-->
	</config>

	<ipk:drawdefinable>
		<ipk:param name="Test:Bez sensu: sumaryczna temp. zewnętrzna"
				short_name="x" prec="1" unit="°C">
			<ipk:define type="DRAWDEFINABLE" 
			formula="(Sieć:Sterownik:temperatura zewnętrzna) ({zmk1} Komora KM-1:Komora:temperatura wody powrotnej) + 
({zmw3} Komora KW-1:temperatura zewnętrzna) +" />
			<ipk:draw title="TEST" min="0" max = "200" />
		</ipk:param>
	</ipk:drawdefinable>

</aggregate>

Główny element to aggregate. Powinien on zawierać deklaracje przestrzeni nazw http://www.praterm.com.pl/IPK/aggregate (aggr) i http://www.praterm.com.pl/SZARP/ipk (ipk). Zaleca się, aby ta pierwsza była przestrzenią domyślną, dzięki czemu nie trzeba będzie się do niej odwoływać w każdym elemencie.

Wymagane są także dwa atrybuty - title zawiera opisowy tytuł konfiguracji (wyświetlany w programie przeglądającym), natomiast prefix decyduje o nazwie i położeniu tworzonej konfiguracji wynikowej, w sposób opisany w poprzednim rozdziale.

Najważniejszą składową pliku są elementy config. Każdy z nich opisuje jedną konfigurację składową, o nazwie określanej przez atrybut prefix.

Pierwszy element config zawiera opis tak zwanej konfiguracji podstawowej. Parametry z tej konfiguracji nie będą podlegały przekształcaniu nazw. Pierwszy parametr z tej konfiguracji powinien być zapisywany do bazy (jest to wymaganie wynikające ze sposobu działania program SzarpDraw). Parametry statusu całej konfiguracji łączonej będą kopiowane także z niej. W związku z tym warto wybrać na konfigurację podstawową konfigurację największą, o największej pewności prawidłowej transmisji danych w ramach systemu BODAS.

Obecność elementu config z danym prefiksem oznacza włączenie do konfiguracji wszystkich parametrów z konfiguracji opisanej prefiksem. Nazwy parametrów (poza konfiguracją podstawową, pierwszą) są przekształcane do postaci {prefix} nazwa, np. parametr KM-1:Komora:Przepływ CO z konfiguracji o prefiksie zmk1 po konwersji będzie miał nazwę {zmk1} KM-1:Komora:Przepływ CO.

Jednak przed włączeniem i zmianą nazw parametry mogą być poddane przekształceniom opisanym przez elementy składowe elementu config - remove, regexp i attribute. Wszystkie te elementy mają wymagany atrybut xpath, zawierający wyrażenie XPath opisujące elementy, które mają być poddane przekształceniom. Wyrażenia XPath mają dostęp do przestrzeni nazw IPK za pomocą prefiksu ipk.

Notatka: XPath jest językiem do wybierania fragmentów dokumentu XML, mającym status standardu W3C. Oficjalna strona to http://www.w3.org/TR/xpath. W sieci można znaleźć wiele przykładów i samouczków. Oto kilka podstawowych przykładów:

  • //ipk:param - wszystkie elementy param z dokumentu.

  • //ipk:drawdefinable/ipk:param - wszystkie elementy param będące dziećmi elementu drawdefinable.

  • ///ipk:device//ipk:param - wszystkie elementy param mające jako przodka (niekoniecznie bezpośredniego) element device.

  • //ipk:param[not(/ipk:define)] - wszystkie elementy param nie mające elementu potomnego define.

  • //ipk:param/ipk:draw/@title - atrybuty title wszystkich elementów draw będących dziećmi elementów param.

  • //ipk:draw[@prior] - elementy draw posiadające atrybut prior.

  • //ipk:draw[contains(@title,'Komora')] - elementy draw, których atrybut title zawiera napis "Komora".

  • //ipk:param/ipk:define[@type='DRAWDEFINABLE']/@formula - atrybuty formula wszystkich elementów define, które mają atrybut type równy DRAWDEFINABLE i są dziećmi elementów param

Możliwe są trzy typy przekształceń:

Przekształcenia są stosowane w takiej kolejności w jakiej wystąpią w pliku, można je więc łączyć aby uzyskać różnorodne efekty.

Ostatecznie, w pliku konfiguracyjnym może wystąpić element ipk:drawdefinable, zawierający dowolną ilość parametrów definiowalnych przeglądającego, w postaci dokładnie takiej, jak w dokumencie IPK. Formuły tych elementów mają dostęp do całej łączonej konfiguracji. Należy tylko pamiętać o zmianie nazw parametrów z konfiguracji składowych (poza pierwszą), oraz opatrywaniu wszystkich elementów prawidłowym prefiksem przestrzeni nazw IPK.

Następny rozdział (Sekcja 5.5.4) opisuje dodatkowy zaawansowany mechanizm, który może być wykorzystywany do tworzenia parametrów definiowalnych za pomocą szablonów.