Základní zásady pro vytváření služeb

Je důležité si nejprve uvědomit, že službu dokumentu vytváříme až dle potřeb dokumentu jiného, který této služby bude využívat. Postup návrhu by byl tedy takový, že po vytvoření obsahu dokumentu člověk budeme pokračovat dalšími dokumenty, dokud nenarazíme na potřebu propojit některý dokument na již dříve navržený dokument člověk. Pak teprve můžeme v dokumentu člověk vytvořit smysluplnou službu. Uvažujme tedy například dokument nabidka, který bude obsahovat nabídku potenciálnímu zákazníkovi na služby či zboží firmy. Vzhledem k tomu, že naše fiktivní firma poskytuje služby i soukromým osobám, bude muset nabídka být pro adresování a správné zařazení do systému flexideo evidence propojena na dokument clovek, resp. na jeho službu, kterou je nyní třeba vytvořit. Pro účely nabídky (pro její případné zaslání poštou) potřebujeme na její první stránce uvést jméno a adresu člověka, pro kterého je určena. Tím zároveň vytvoříme žádoucí propojení v informačním systému.

Je rovněž dobré si všimnout, že služba nebude čerpat z jedné, ale ze dvou kmenových oblastí, ale bude navenek nabízet oblast jedinou - tj. službu jmeno_a_adresa. Z toho vyplývá, že jednotlivé dětské elementy chceme mít na téže úrovni. Zdá se, že nejjednodušším řešením je použít obecnou definici oblasti adresa (tím totiž do služby zahrneme i případnou změnu struktury adresy v nové verzi, jako je například oddělení popisného a orientačního čísla z prvku ulice) pomocí mechanismu based-on a doplnit prvky křestního jména a příjmení. Jelikož chceme, aby jménem a příjmením celá adresa logicky začínala, doplníme ještě k těmto prvkům atribut order, kterým pevně určíme první dva elementy v oblasti (jinak by totiž jméno skončilo za posledním prvkem šablony adresy).

Všimněte si nyní, jak jsou jednotlivé segmenty služby provázány na obsah dokumentu. Slouží tomu atribut take-from, který má v určitém smyslu podobnou funkci jako atribut source v definici obsahu dokumentu. Má jen malinko jinou syntaxi, neboť není třeba rozlišovat jednotlivé mechanismy zdroje - tj. own, initial, foreign či count. Jedná se vždy jen o přesměrování na některý z prvků dokumentu, který již sám sděluje mechanismus ukládání. Stejně tak v dokumentu, který služby využívá je stanoveno, jakým mechanismem je služba využívána. Rovněž tak ve službě neřešíme atribut source-filter. To rovněž přenecháváme dokumentu využívajícímu danou službu. Syntaxe take-from vždy začíná lomítkem. Je rovněž možné atribut take-from vynechat. Atribut je totiž třeba použít jen tam, kde nabízená služba nekoresponduje s kmenovou oblastí dokumentu nebo struktura ve službě i dále nekopíruje strukturu dokumentu. Například sestavování naší služby se jménem a adresou.

Zásadou je, že jako službu jinému dokumentu je možné namapovat pouze oblasti a prvky v mapovaném dokumentu. Není možné jít přes cizí segment do struktury jiného dokumentu, neboť struktura dokumentu jednoho není přístupná z dokumentu jiného. Jediné, co je přístupné je to, co se nabídne prostřednictvím služby. Můžeme například v dokumentu zastupce_subjektu namapovat službu cele_jmeno pouze v případě, že jsme využili službu jmeno_a_adresa z dokumentu clovek v některé oblasti dokumentu zastupce_subjektu, kde službu vytváříme. V dokumentu zastupce_subjektu, kde na službu odkazujeme však již není třeba (a není to ani žádoucí) vyjmenovávat všechny segmenty dané služby v podobě opisování struktury. Odkazem na službu je dáno, že se převezme celá struktura služby s patřičnými přesměrováními do těla cizího dokumentu. Někdy však může být užitečné vyjmenovávat v přebírajícím dokumentu (zastupce_subjektu) strukturu přebírané služby cizího dokumentu (clovek). Například když chceme upravit label některého segmentu, omezit jeho přístupnost apod. Pak stačí uvést jen ty segmenty (a jejich rodiče), kde chceme danou úpravu provést. Ostatní se uvádějí automaticky. Většinou i v těchto případech bývá lepší připravit více služeb a potřebné změny vlastností provést tam. V dokumentu přebírajícím pak uvedeme opět jen odkaz na takto připravenou službu.

Může se také stát, že chceme využít již existující službu jednoho dokumentu v dokumentu druhém s tím, že nechceme například jediný prvek v druhém dokumentu zpřístupňovat. V takovém případě může být zbytečné vytvářet novou službu, která bude mít právě o tento prvek méně (i když tomu nic nebrání). Stačí tento prvek ze služby pojmenovat i v oblasti druhého dokumentu, kde se služby využívá a do atributu appear-if vložit klíčové slovo none. Pak nedojde k zobrazení prvku ani ve formuláři, ani na výstupu. Jinou variantou je použít nastavení secrecy-lev nebo section na vyšší hodnotu a zpřístupnit tak dané pole například jen administrátorovi.

Pojďme se nyní podívat na způsob, jakým dokument nabidka čerpá z dokumentu clovek prostřednictvím jeho služby:

<area label="Příjemce nabídky" name="prijemce_nabidky" short="prjnb">
<element label="Příjemcem nabídky je" name="prijemcem_nabidky_je" short="prje" based-on="clovek_nebo_subjekt"/>
<area name="clovek" short="clo" appear-if="../prijemcem_nabidky_je = 'cl'" source="foreign:clovek:/jmeno_a_adresa"/>
<area name="subjekt" short="sub" appear-if="../prijemcem_nabidky_je = 'su'" source="foreign:subjekt:/korespondencni_adresa" />
</area>

V oblasti pro příjemce nabídky musíme zahrnout dvě možnosti. Jednak příjemcem nabídky může být fyzická soukromá osoba a jednak to může být právní subjekt (podnikatel, právnická osoba, státní orgán apod.), který bude zahrnut v dokumentu subjekt. Proto v oblasti příjemce nejprve uvedeme výběrový prvek s vlastním zdrojem, kterým si tvůrce nabídky (tj. uživatel dokumentu) zvolí, jakému "typu" příjemce je nabídka vystavována (člověk nebo subjekt) a teprve potom pro nabídku vybere konkrétního příjemce. Podoblasti pro člověka a subjekt jsou podmíněné a zobrazí se vždy jen jedna z nich podle provedené volby. U oblasti pro subjekt je podobně jako je tomu u člověka použita služba dokumentu obsahující jméno a adresu s názvem korespondencni_adresa.


Způsoby a syntaxe tvorby služeb dokumentůZákladní zásady pro vytváření služebDalší zásady pro službyDědění struktury služby z jiné službyDoplnění cizího segmentu vlastnímOšetření vlastností pomocí služebShrnující služba bez odkazuOšetření bezpečnostních přístupů ve službáchMožnost použít jen vyjmenované potomky služby