Opakovatelnost segmentů

Upravit obsah stránky

Zatímco výchozí segment, tedy dokument, je z podstaty věci v systému opakovatelný, tj. v databázi systému evidujeme 0 až n instancí dokumentu daného typu, v rámci 1 dokumentu již další segmenty, tedy oblasti a prvky, ve výchozí podobě definice opakovatelné nejsou. Většinou platí, že jeden prvek či oblast je možné v jednom dokumentu uvést právě jednou. 

Např. dokument faktura má právě jeden datum_vystaveni, jednu kolonku castka_k_uhrade atp. Můžeme však potřebovat, aby některé segmenty v dokumentu byly opakovatelné. Např. může na zmíněném dokumentu existovat oblast fakturovana_polozka, která bude obsahovat patřičné položky obsahující popis, množství částku atd. Pro tyto účely je možné v definici změnit výchozí nastavení type ve vlastnosti repetition na hodnotu user. 

Toto nastavení vede k vytvoření další, samostatné tabulky v relační databázi. Hodnoty těchto segmentů jsou pak při ukládání dokumentu vloženy do této tabulky na místo tabulky dosavadní. Opakování je monžé do sebe vnořovat. Takže prvek nebo oblast označený jako opakovatelný může již být umístěn v oblasti, která je již také opakovatelná. Při sestavování dokumentu serverem na vyžádání klientem je pak důležité aby bylo zachováno to pořadí jednotlivých opakování, ve kterém byl dokument serveru předán pro uložení. To neplatí o pořadí samostatných segmentů na jedné větvi dokumentu – jméno, adresa apod. – ty své původní pořadí dané definicí dodržovat nemusí. 

Při opakování jde o více segmentů stejného typu (dané v definici XDS jedním tagem), kterých se díky této opakovatelnosti může na jedné větvi vyskytnout více. Rovněž je zapotřebí umožnit uživateli prostřednictvím klientského programu toto pořadí v dokumentu dodatečně změnit. Jakákoli změna pořadí, přidání či odstranění opakování bude indikována atributem repeat-changed s možností obsahu "true"/"false", jenž bude umístěn u rodiče opakovatelných segmentů. 

Pokud bude u více potomků tohoto rodičovského segmentu definována možnost opakovatelnost, pak bude tento atribut rodiče platný pro všechny tyto potomky. Tj. pokud dojde ke změně v opakování některém z dětských typů, vyskytne se v tomto atributu hodnota "true". Jinak je nastaven standardně na "false". U nových dokumentů je tento atribut bezpředmětný – všechna případná opakování dokumentů jsou, vzhledem k zakládání dokumentů, "změněna".
  

Tvorba klíčů opakování

Každý opakovatelný segment má v rámci dokumentu jedinečný číselný identifikátor. Tento identifikátor je nazýván primárním klíčem segmentu (primary segment key) – psk. Tento identifikátor má přiděleno stejnojmenné políčko v databázové tabulce (viz. Tvorba DAD). V instanci XML dokumentu poskládaného z databáze je pak tento klíč segmentu vložen do atributu skey (segment key). Tento klíč je naplňován serverem odpovídajícím obsahem stejně, jako primární klíč dokumentu pdk, který je umístěn v kmenovém tagu dokumentu. 

>>  Více o dopadech nastavení segmentů jako opakovatelných viz. sekce Rozklad dokumentů v databázi.