Přebírání cesty source od rodiče


Odkaz v dokumentu

U metod initial a foreign je uveden absolutní odkaz připomínající XPath bez výběrových podmínek (viz. syntaxe vlastnosti source). Tento odkaz je nasměrován nikoli do nitra dokumentu, ale na některou z jeho služeb uvedených v tagu services finální definice dokumentu. Při provedení kompletace se teprve tento odkaz přesměruje pomocí odkazované služby do nitra dokumentu.

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 zápisu vlastnosti source) 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ější příklady přebírání odkazu.


Přebírání odkazu

Podíváme se na možností a přebírání cesty i z hlediska potřeby tvorby případného nového array. Při přebírání obsahu jiného dokumentu ať už initial nebo foreign se vždy začíná u segmentu, který vybírá dokument. Tj.:

001 source="foreign:DOC:/aa"

Pokud se vyskytne kombinace (první řádek je rodič další jsou potomci - dle odsazení):

001 source="foreign:DOC:/aa"
002 source="foreign::/aa/xx"
003 source="foreign:DOC:/aa/yy"

pak je jasné, že druhý potomek (řádek 003) vyžaduje sám o sobě výběr jiné instance dokumentu. To je význam uvedení názvu dokumentu mezi dvojtečkami.

Podobné je to i s pomlčkou v odkazu. Pokud je uvedena, přebírá se instance případého opakování od rodiče. Pokud budeme mít případ:

001 source="foreign:DOC:/aa/bb"
002 source="foreign::/-/-/xx"
003 source="foreign:DOC:/aa/bb/yy"

kde oblast "bb" zdroje je opakovatelná, pak zatímco první potomek (řádek 002) bude odvozen od rodičovského array, vyžaduje druhý potomek (řádek 003) odvození nového array, protože instance opakování není stejná.

Z toho vyplývá, že mám-li cestu rodiče např. ":/aa/bb/cc/dd" a pak mám potomka ":/aa/bb/cc/dd/xx", musí se při analýze tvorby DAD jít ke kmenu zdrojového dokumentu a projít jej až ke zdrojovému "xx" a odvodit všechna nová array pro vyskytnuvší se opakování. Pokud žádné opakování na větvi ":/aa/bb/cc/dd" není, pak se v naváže na odvozené array rodiče naprosto stejně, jako by to bylo u zápisu source potomka v podobě ":/-/-/-/-/xx".


Přebírání cesty source od rodičePropojení mechanismem count