Určení zdroje dat source

Nastavení zdroje prvku či oblasti dokumentu. Klíčová vlastnost pro strukturu dokumentu a jeho databázového modelu.

syntax
own:: | ( [foreign | initial | lexicon ]:[{source-doc-name}]:[{service-absolute-reference}] ) | ( count::{expression} )

Atribut source je nepovinný a udává, zda budou segmenty ukládány do vlastních databázových polí nebo zda budou ukládány do polí segmentu jiného dokumentu či zda z nich budou do vlastních polí načítána a dojde tak ke vzájemné provázanosti dokumentů.

V části zabývající se metodami tvorby definice jsme se již problematikou propojení dokumentů zabývali v kapitole služby dokumentů. Nyní se podíváme na konkrétní možnosti vlastnosti source, která na zmíněné služby odkazuje, a která určuje způsob využití zdroje nebo definuje, že segment nemá propojení na jiné dokumenty.

Do atributu se zadává textový řetězec složený ze tří částí vzájemně oddělených dvojtečkami.

mechanismus:dokument:odkaz

1. mechanismus - určuje způsob propojení segmentu (prvku či oblasti) do ke zdroji nebo je zde uvedeno, že tento segment má vlastní zdroj

2. dokument - zde je obsažen název zdrojového dokumentu. Pokud segment neobsahuje propojení do cizího dokumentu, nebo pokud toto propojení určila již rodičovská oblast, je tato část prázdná

3. odkaz - absolutní odkaz na službu cizího dokumentu od kmene služeb cizího dokumentu nebo výraz pro výpočet dynamické hodnoty (viz dále)

Pokud máme cizí oblast (tj. source="initial:dok:/..." či ="foreign:dok:/..."), pak v této oblasti mohou být prvky a oblasti se zdrojem respektujícím zdrojový mechanismus nebo mechanismus own a respektující instanci (tj. u potomků se může vyskytovat source="::/..." nebo source="own::"). V propojení na zdroj u potomků není možné kombinovat mechanismy (u mechanismu s výše uvedenou výjimkou own::).


1. Mechanismus zdroje

Mechanismus obsahuje jedno z následujících klíčových slov:

own - vlastní zdroj

foreign - cizí zdroj, v cíli se ukládá jen klíč;

initial - vlastní zdroj s načítáním kopie údajů z cizího vč. klíče

lexicon - vlastní zdroj s načítáním z cizího bez ukládání klíče

count - vlastní zdroj s dynamickým výpočtem hodnoty

Mechanismus je v atributu vždy pojmenován. Pokud ho při návrhu neuvedete, automaticky se doplní podle rodiče. Je-li segmentem kmenová oblast dokumentu a rodičem je tedy dokument, pak je v takovém případě nastaven mechanismus own. Pokud je na začátku atributu source uveden mechanismus own, vždy následují dvě dvojtečky, takže cizí dokument ani odkaz do něj nejsou uvedeny (nemají zde význam). Opomenutí dvojteček u mechanismu own, není kritickou chybou - dvojtečky jsou replikátorem doplněny.

Mechanismy foreign, initial a lexicon označují tři možné způsoby využití odkazovaného segmentu cizího dokumentu.

Mechanismus foreign v definici zdroje říká, že definovaný segment nemá vlastní zdroj. Obsahem tohoto segmentu jsou údaje z jiného segmentu v jiném dokumentu. Znamená to tedy, že opraví-li uživatel v tomto segmentu nějaké údaje, pak je zároveň upravuje i ve zdrojovém dokumentu, nebo se jedná o společné úložiště těchto dat.

Jinak je tomu u mechanismu initial, který sice využívá dat cizího zdroje (má stejný odkaz jako foreign), ale využívá jej k načtení těchto dat do vlastního uložiště a jejich případná další změna nemá na zdrojové údaje žádný vliv. Stejně tak případná úprava zdrojového dokumentu při mechanismu initial nemá žádný vliv na již načtené údaje. Ale stále platí, že initial vytváří v databázi relaci pomocí klíčů pdk «» fdk. To už neplatí o posledním ze 3 způsobů využití jednoho dokumentu jiným.

Mechanismus lexicon také, podobně jako přdchozí initial vytváří kopie zdrojových údajů, ale již neukládá klíč. Mechanismus lexicon nevytváří relaci na úrovni klíčového propojení. Dochází tak jen ke kopírování zvolených údajů. Je tak možné ze zdrojového dokumentu udělat roletku nebo načístat celou oblast. I přesto, že se klíče neukládají, je možné využívat vlastnosti source-key i v případě mechanismu lexicon.

Zvláštní případ je mechanismus výpočtu obsahu - count. Zde platí základní pravidlo - pro výpočet není možné používat prvky cizího dokumentu. Pro tento výpočet je možné použít jen některý z prvků daného dokumentu. Vypočtená hodnota se pak ukládá stejně jako u mechanismu own. Navíc se ještě ukládá logický údaj, určující, zda došlo k ruční opravě údaje uživatelem či nikoli. Pokud ano, jsou další výpočty hodnoty vypnuty a ručně nastavená hodnota zůstává až do případného opětovného zapnutí výpočtu uživatelem.


2. Zdrojový dokument

Zde je v případě mechanismu foreign, initial či lexicon uveden název zdrojového dokumentu (resp. jeho typu) odkud se údaje přebírají. Je však možné jméno dokumentu neuvádět ani u těchto dvou metod. Je to tehdy, kdy z nějakého důvodu upřesňujeme potomka zdroje a jméno dokumentu je uvedeno u rodiče, který logicky čerpá rovněž z téže instance téhož typu zdrojového dokumentu. Uvedení či neuvedení typu dokumentu mezi dvojtečkami v atributu source má klíčový význam na vznik tzv. výběrového uzlu v daném dokumentu. Pokud totiž tento název uvedeme, znamená to při současném neuvedení odkazu do vlastnosti source-key (viz. dále) jednoznačně vznik uzlu, do kterého je volena instance vepsaného typu zdrojového dokumentu.

Naopak neuvedení názvu, jak již bylo zmíněno, povede k navázání na instanci zdrojového dokumentu vybraného rodičem segmentu (viz. přebírání cesty).

Jako typ zdrojového dokumentu je možné zadat i typ dokumentu, který je právě definován. To může být úžitečné například při vytváření a popisu vztahu mezi dvěma osobami (tj. mezi dvěma dokumenty typu osoba) apod.


3. Odkaz na službu dokumentu

U metod foreign, initial a lexicon je v této části uveden absolutní odkaz připomínající XPath bez výběrových podmínek (tj. bez hranatých závorek). Vminulé kapitole jsme se seznámili s existencí a významem služeb v dokumentu. Právě tento odkaz je nasměrován nikoli do nitra dokumentu, ale právě na některou z jeho služeb uvedených v tagu struktury services v rámci finální definice dokumentu. Prvním krokem odkazu hned za lomítkem je vždy jméno služby tj. klíčový identifikátor name segmentu area nebo element, které jsou potomky zmíněného tagu struktury services.

Tento odkaz však nemá úplně shodnou sytaxi s XPath. Oproti XPath je tu jedna zvláštnost související (podobně jako u názvu dokumentu uprostřed atributu) s možností vynechání názvu segmentu mezi lomítky. Vynechání názvu segmentu cizího dokumentu má podobný význam jako vynechání názvu dokumentu - jde o přebírání instance případného zdrojového opakování. Vynechání názvu se realizuje pomlčkou na místo Qname zdrojového segmentu. Pokud je pomlčka uplatněna, pak musí být uplatněna od začátku odkazu (tj. je možné /-/-/jmeno, ale není možné /jmeno/-/jmeno).

Pokud je pomlčka uvedena, znamená to přebírání odkazu od rodiče segmentu a to včetně případné instance opakování zdroje. Pro lepší pochopení se podíváme na konkrétní příklady přebírání odkazu.

U mechanismu count je na tomto místě uveden výraz s možností odkazů na jiné prvky téhož dokumentu. Výraz dodržuje stejnou syntaxi, jakou využívají akce dokumentů (jen bez možnosti tvorby proměnných). Odkazy ve výrazu mechanismu count mohou být na rozdíl od jiných metod i relativní. To je díky tomu, že se jedná o odkazy do téže instance dokumentu. Více o sytaxi zápisu výpočtového výrazu naleznete v páté kapitole této části, která se zabývá tvorbou akcí.


Příklady syntaxe

source="own::"
source="initial:clovek:/inicialy"
source="foreign:cenik:/polozka"
source="lexicon:cenik:/polozka"
source="count::sum(/polozka/cena_bez_dph)*./sazba_DPH"

Potenciální vlastnické uzly

Vlastnost source je možné uvést u následujících uzlů:

element - prvek (segment uvnitř definice);

area - oblast (segment uvnitř definice);


Vlastnost source

Nastavení zdroje prvku či oblasti dokumentu. Klíčová vlastnost pro strukturu dokumentu a jeho databázového modelu.

syntax
own:: | ( [foreign | initial | lexicon ]:[{source-doc-name}]:[{service-absolute-reference}] ) | ( count::{expression} )

Automatický identifikátor autoidentityDatový typ datad-type kompilacePřímé nastavování některých vlastností do DAD dad-infoVyjmenování zdroje enumerate-sourceVlastnost characterIndexování podle prvku indexDědění struktury služby inherit-structureOpakovatelnost repetitionUrčení zdroje dat sourceStejný zdroj pro segmenty v různých větvích source-keyMapování služby na dokument take-fromZajištění jedinečnosti hodnoty unique