EuroMISE centrum – Kardio, spolunositelské pracoviště Vysoká škola ekonomická Praha

XML Knowledge Block Transformation (XKBT)

Verze 2.0

Autor: Marek Růžička (ruza.m@volny.cz)


1.12.2002

Abstrakt

Tento dokument definuje syntaxi a sémantiku jazyka XKBT (XML Knowledge Block Transformation), určeného pro řízenou transformaci XML dokumentů do jiných XML dokumentů.

Jazyk XKBT vznikl jako součást metodiky víceúrovňové formalizace textových dokumentů a byl navržen tak, aby vyhovoval požadavkům aplikace Stepper, založeného na této metodice.

XKBT explicitně vyjadřuje možné transformace znalostních bloků z jedné úrovně (jednoho dokumentu XML) do následující úrovně.

Změny od předešlé verze (1.0)

Přidáno:


1.  Úvod

Při vývoji metodiky víceúrovňové formalizace a podpůrné aplikace Stepper jsme postupně dospěli do situace, kdy bylo nezbytně nutné explicitně vyjádřit všechny přípustné způsoby přechodu jednotlivých typů znalostní ze zdrojového dokumentu do cílového dokumentu. Snažili jsme se proto vytvořit systém obecných transformačních pravidel (XKBT), který by byl schopný toto zaznamenat.

Obecný popis a možnosti využití XKBT jsou popsány zde.

Tento dokument se věnuje především syntaxi a sémantice samotného jazyka XKBT. XKBT definuje čtyři základní typy pravidel – vztah 1:1, dekompozice, agregace a situaci mrtvého konce. Každé pravidlo identifikuje vstupní a výstupní sestavu znalostních bloků a popisuje způsob transformace. Praktická využití pravidel při transformaci dokumentu probíhá následujícím způsobem. Nejprve jsou ve zdrojovém dokumentu vybrány všechny zdrojové znalostní bloky (vstupní sestava), které chceme transformovat. U vstupní sestavy se předpokládá určitá celistvost tzn. že po znalostní stránce mezi sebou jednotlivé blok úzce souvisí. Na základě vstupní sestavy jsou  vybrána všechna vhodná pravidla. Podle zvoleného pravidla je pak vytvořena výstupní sestava v cílovém dokumentu a případně je i doplněna její vnitřní struktura sub-elementů.

2.  Obecný zápis XKBT dokumentu

Následující příklad definuje kořenový uzel XKBT dokumentu.

<!ELEMENT xkbt (comment?, (one-to-one | decomposition |
                           aggregation | death-end)*)> 
<!ATTLIST xkbt author CDATA #IMPLIED >
<!ATTLIST xkbt date CDATA #IMPLIED >

Elementy:

xkbt – kořenový uzel, obsahuje volitelně element comment (komentář k celému souboru) a dále neomezený počet elementů pro jednotlivé typy pravidel (viz. dále)

Atributy:

author – volitelný atribut pro jméno autora

date – volitelný atribut pro datum

3.  Identifikace znalostních bloků/elementů a jejich sestav

Obecně pro každý typ pravidla je nutné identifikovat všechny zdrojové znalostní bloky, které mají být transformovány do cílových znalostních bloků. K těmto účelům je zapotřebí definovat způsob identifikace těchto bloků/elementů v příslušných souborech DTD.

Definice elementárních znalostních bloků:

<!ELEMENT source (cond*, exception*, applyXSLT?) >
<!ATTLIST source element CDATA #REQUIRED >

<!ELEMENT dest (applyXSLT?) >
<!ATTLIST dest element CDATA #REQUIRED >

Elementy:

source – tento element identifikuje zdrojový element.

dest – tento element identifikuje cílový element.

Atributy:

element – příslušný název elementu v DTD souboru

Pozn – Všechny definované sub-elementy budou objasněny průběžně v dalších kapitolách.

Některé typy pravidel pracují na jedné straně transformace (zdrojové nebo cílové) se sestavou více znalostních bloků. Tato sestava vznikne skládáním elementárních znalostních bloků identifikovaných v elementech source a dest.

Definice sestav znalostních bloků:

<!ELEMENT compound-source (source | compound-source)*>
<!ATTLIST compound-source type (iteration | selection | sequence)
"selection">
<!ATTLIST compound-source minOccures CDATA #IMPLIED>
<!ATTLIST compound-source maxOccures CDATA #IMPLIED>
<!ATTLIST compound-source occurs CDATA #IMPLIED>
<!ATTLIST compound-source order (fixed | free) "fixed">
<!ATTLIST compound-source conditions (all | any | none) "all">

<!ELEMENT compound-dest (dest | compound-dest)*>
<!ATTLIST compound-dest type (iteration | selection | sequence)
"selection">
<!ATTLIST compound-dest minOccures CDATA #IMPLIED>
<!ATTLIST compound-dest maxOccures CDATA #IMPLIED>
<!ATTLIST compound-dest occurs CDATA #IMPLIED>
<!ATTLIST compound-dest order (fixed | free) "fixed">

Elementy:

compound-source – zdrojová sestava znalostních bloků, skládá se z elementárních znalostních bloků a dalších sestav bloků.

compound-dest – cílová sestava znalostních bloků, obdoba compound-source.

Atributy:

type – tři typy – iterace, selekce a sekvence

minOccures – používá se pouze v případě iterace, zdola omezuje počet opakování skládaného znalostního bloku

maxOccures – používá se pouze v případě iterace, shora omezuje počet opakování skládaného znalostního bloku

occures – používá se pouze v případě iterace, udává přesný počet opakování skládaného znalostního bloku

order – používá se pouze v případě sekvence.Hodnota fixed znamená, že musí být dodrženo pořadí znalostních bloků přesně tak, jak jsou v rámci pravidla zapsány. Naopak hodnota free umožňuje volné pořadí.

conditions – hodnota tohoto atributu bude vysvětlena v kapitole o podmíněných transformačních pravidlech

4.  Typy pravidel

4.1.  Pravidla typu 1:1

Tento typ pravidla je určen pro transformaci jednoho znalostního bloku do právě jednoho znalostního bloku. Používá se především v situacích, kdy dochází k úpravám vnitřní struktury znalostního bloku.

Definice pravidla 1:1:

<!ELEMENT one-to-one (comment?, source, dest*)>
<!ATTLIST one-to-one name CDATA #REQUIRED >
<!ATTLIST one-to-one type (direct | selection) "direct">

Elementy:

one-to-one – toto pravidlo transformuje znalostní zdrojový blok/element, identifikovaný v elementu source, do cílového znalostního bloku/elementu identifikovaného v elementu dest.

Atributy:

name – název (identifikátor) pravidla

type – podtyp pravidla – závisí na počtu elementů dest. V případě jednoho elementu dest nabývá hodnoty direct, v případě většího počtu pak hodnoty selection. Hodnota selection znamená, že během aplikace pravidla se vybírá jeden z nabídnutých cílových elementů (přesto zůstává zachován vztah 1:1 – cílový element může být vybrán pouze jeden).

Příklady 1 a 2 znázorňují pravidlo typu 1:1 v obou variantách.

Příklad 1 – Vztah 1:1 – přímý vztah
<one-to-one name="example_1" type="direct">
      <source element="hypothesis" />
      <dest element="hypothesis" />
</one-to-one>
Příklad 2 – Vztah 1:1 – výběr cílového elementu
<one-to-one name="example_2" type="selection">
      <source element="diagnose" />
      <dest element="treatment" />
      <dest element="disease" />
      <dest element="other" />
</one-to-one>

4.2.  Dekompoziční pravidla

Dekompoziční pravidla, jak už sám název napovídá, definují možnosti rozkladu elementu během transformace. To znamená, že na cílové straně pravidla musí být definována sestava znalostních bloků. K zápisu tohoto typu pravidla slouží element decomposition.

Definice dekompozičního pravidla:

<!ELEMENT decomposition (comment?, source, compoud-dest) >
<!ATTLIST decomposition name CDATA #REQUIRED >

Elementy:

decomposition – toto pravidlo transformuje zdrojový znalostní blok/element, identifikovaný v elementu source, do cílové sestavy znalostních bloků/elementů definovaných sestavou compound-dest.

Atributy:

name – název (identifikátor) pravidla

Rozhodující je předpis dekomponované sestavy znalostních bloků. V následujícím příkladě je naznačeno pravidlo, které využívá při skládání sestavy všechny tři definované operace (selekce/sekvence/iterace)

Příklad 3 - Dekompoziční pravidlo - výstupní sestava

<decomposition name="example_3 - simple decomposition">
      <source element="drug treatment" />
      <compound-dest type="iteration" minOccures="1" maxOccures="5">
            <dest element="drug class" />
            <compound-dest type="sequence" order="fixed">
                  <dest element="treatment_start" />
                  <dest element="treatment_duration" />
            </compound-dest >
            <compound-dest type="selection">
                  <dest element="comment" />
            </compound-dest >
      </compound-dest >
</decomposition>

4.3.  Agregační pravidla

Další skupinu tvoří takzvaná agregační pravidla. Ty se aplikují na skupinu zdrojových elementů, které jsou během agregace spojeny v jeden agregát. V praxi se taková pravidla uplatní především ve chvíli, kdy je již hotová detailní sémantická strukturu a jednotlivé znalostní fragmenty chceme agregovat do větších objektů. Zavedení těchto objektů je někdy dokonce i nutným předpokladem pro přechod do jiného formátu než je XML.

Agregační pravidla lze rozdělit do třech skupin, a to na pravidla pro seskupování elementů, pro integraci elementů a pro převod prostého textu do znalostního bloku.

Definice agregačního pravidla:

<!ELEMENT aggregation (comment?, compound-source?, dest) >
<!ATTLIST aggregation name CDATA #REQUIRED >
<!ATTLIST aggregation type (cluster | integration | text) "cluster" >

Elementy:

aggregation – toto pravidlo transformuje zdrojovou sestavu znalostních bloků/elementů, definovaných elementem compound-source, do cílového znalostního bloku identifikovaného elementem dest.

Atributy:

name – název (identifikátor) pravidla

type – označuje typ agregačního pravidla (cluster – seskupení bloků, integration – integrace bloků, text – tvorba primárního znalostního bloku z volného textu).

První varianta agregace (cluster) slouží ke seskupování elementů. Tento způsob předpokládá určité zastřešení skupiny elementů do jednoho většího celku, ve kterém si každý z agregovaných elementů zachovává svou individuální sémantickou strukturu a není nijak rozkládán či slučován s některými dalšími elementy ze stejného celku.

Příklad 4 - Agregační pravidla - Seskupování elementů

<aggregation name="example_4" type="cluster">
      <compound-source type="sequence" order="free">
            <source element="diagnose" />
	    <source element="treatment" />
	    <compound-source type="iteration" minOccures="0">
	          <source element="other" />
            </compound-source>
      </compound-source>
      <dest element="conclusion" />
</aggregation>

Další varianta agregačního pravidla (integration) slouží ke skutečnému sloučení dvou či více elementů do jednoho elementu s vlastní sémantickou strukturou.

Alternativní využití agregačních pravidel slouží k převedení volného textu (formát XHTML) do znalostního bloku (element XML). Tímto způsobem vznikají primární znalostní bloky v první úrovni formalizace. V tomto případě se nepoužívá sub-element compound-source.

Příklad 5 – Agregační pravidla – Vyznačení znalostního bloku
<agregation name="example 5 – knowledge block goal" type="text">
      <dest element="goal" />
</agregation>

4.4.  Pravidlo mrtvého konce

Pravidlo mrtvého konce se aplikuje na znalostní bloky, které se nezdají být dále využitelné, a proto je výslovně nechceme dále rozvíjet a ani je v následující úrovni zahrnut.

Definice pravidla mrtvého konce:

<!ELEMENT death-end (comment?, (source | compound-source)) >
<!ATTLIST death-end name CDATA #REQUIRED >

Zápis tohoto pravidla je obdobný jako v předešlých případech, a proto ho není nutné blíže vysvětlovat.

Příklad 6
<death-end name="example 6 – death-end ">
      <source element="other" />
</death-end>

5.  Kopírování obsahu znalostních bloků

Pro kopírování obsahu znalostních bloků při přechodu ze zdrojového do cílového dokumentu je v XKBT zaveden element exception. Exception je vždy sub-elementem elementu source a informace o kopírování obsahu se vztahují pouze na tento zdrojový znalostní blok.

<!ELEMENT exception (attrException*) >
<!ATTLIST exception contendCopy (true | false) "true" >
<!ATTLIST exception allAttrCopy (true | false) "true" >

<!ELEMENT attrException EMPTY >
<!ATTLIST attrException attribute CDATA #REQUIRED >
<!ATTLIST attrException copy (true | false) "false" >
<!ATTLIST attrException copyTo CDATA #IMPLIED >

Elementy:

exception – atributy tohoto elementu upřesňují způsob kopírování obsahu

attrException – sub-element elementu exception; upravuje kopírování jednoho konkrétního atributu elementu identifikovaného v source

Atributy:

contendCopy – kopírování substruktury elementů; pokud je roven true, veškerý obsah zdrojového znalostního bloku, který je kompatibilní (vyhovuje DTD předpisu) s cílovým blokem je zkopírován

allAttrCopy – kopírování všech atributů; pokud je roven true, všechny atributy zdrojového znalostního bloku, které jsou kompatibilní (vyhovují DTD předpisu) s cílovým blokem jsou zkopírovány

attribute – identifikuje jeden atribut elementu source

copy – pokud je roven true hodnota atributu je zkopírována do cílového znalostního bloku

copyTo – používá se v případech, kdy se má hodnota atributu zkopírovat do atributu s jiným názvem (copyTo je roven názvu cílového atributu)

Příklad 7 ukazuje způsob úpravy kopírování atributů. Příklad lze interpretovat ta, že všechny atributy elementu diagnose budou zkopírovány, přičemž atribut name se zkopíruje do atributu ID (ostatní do atributů se stejným jménem). Výjimku tvoří atribut reference, který zůstane nepovšimnut.

Příklad 7 – Kopírování obsahu znalostních bloků

<source element="diagnose">
      <exception allAttrCopy="true">
            <attrException attribute="name" copyTo="ID" />
	    <attrException attribute="reference" copy="false" />
      </exception>
</source>

6.  Podmíněná transformační pravidla

Každé pravidlo může být doplněno o podmínky aplikovatelnosti. Tyto podmínky se vždy vztahují na vstupní sestavu znalostních bloků a testují její strukturu elementů a hodnoty atributů. Pomocí podmínek lze docílit zúžení okruhu použitelných pravidel pro danou vstupní sestavu a dále omezení případů, kdy je použito logicky nesprávné pravidlo.

Podmínky se zapisují v rámci sub-elementu source a platí vůči elementu, který je v něm identifikován. Jednotlivé podmínky se zapisují do elementu cond.

<!ELEMENT cond (comment?)>
<!ATTLIST cond attribute CDATA #IMPLIED>
<!ATTLIST cond child_element CDATA #IMPLIED>
<!ATTLIST cond parent_element CDATA #IMPLIED>
<!ATTLIST cond previous_element CDATA #IMPLIED>
<!ATTLIST cond next_element CDATA #IMPLIED>
<!ATTLIST cond exist (yes | no) "yes">
<!ATTLIST cond empty (yes | no) "yes">
<!ATTLIST cond operator (equal | not_equal) "equal">
<!ATTLIST cond value CDATA #IMPLIED>

Atributy elementu cond se používají v různých kombinacích v závislosti na typu podmínky. Existuje 8 základních typů podmínek a jejich podrobný popis se nachází v tabulce 4.I.

Tabulka 4.I
Typ podmínky Použité atributy Popis podmínky
Existence atributu attribute="název atributu"
exist="yes / no"
Podmínka platí podle toho, zda je daný atribut u elementu uveden či nikoli
Hodnota atributu attribute="název atributu"
operator="equal / not_equal"
value="požadovaná hodnota"
Zkoumá se, zda atribut nabývá požadovanou hodnotu. Atribut operator se používá pouze v případě nerovnosti – "not equal". Jinak se automaticky doplní default hodnota "equal".
Textový element empty="yes / no" Zjišťuje, zda je daný element prázdný tzn. neobsahuje žádný text
Existence sub-elementu child_element="název sub-elementu"
exist="yes / no"
Stejné jako u existence atributu
Počet sub-elementů child_element="název sub-elementu"
operator="equal / not_equal / higher_than / lower_than"
value="počet"
Porovnává se skutečný počet sub-elementů uvedeného názvu s požadovaným počtem, na základě operátoru.
Pokud je child_element roven "&ALL", jsou započítány všechny sub-elementy.
Rodičovský element parent_element="název rodiče" Porovnává se skutečný rodičovský element s požadovaným elementem
Předešlý element previous_element="název předešlého elementu" Obdobné jako u rodičovského elementu. Pokud je za previous_element dosazeno klíčové slovo "&ANY" resp. "&NONE", zjišťuje se pouze, jestli předešlý element existuje
Následující element next_element="název následujícího elementu" Obdobné jako u rodičovského elementu Pokud je za next_element dosazeno klíčové slovo "&ANY" resp. "&NONE", zjišťuje se pouze, jestli předešlý element existuje

V případě použití podmínek je nutné uvést atribut conditions u elementu source. Jeho hodnota určuje způsob vyhodnocování více podmínek zároveň. Pro tento atribut jsou definovány dvě standardní hodnoty all (splnění všech podmínek) a any (postačuje jedna podmínka). Příklad 8 demonstruje způsob zápisu podmínek.

Příklad 8 - Vyhodnocování podmínek

<one-to-one name="example_8 - conditions" type="direct">
      <source element="diagnose" conditions="any">
            <cond attribute="is_disease" operator="equal" value="yes" />
      </source>
      <dest element="disease" />
</one-to-one>

7.  Automatické generování vnitřní struktury pomocí XSLT

Již v úvodu této sekce bylo řečeno, že se některé části transformačních pravidel bez XSLT neobejdou. Především se jedná o export do výstupního formátu, kdy opouštíme zápis v XML (s touto situací XKBT nepočítá). Jelikož export se provádí automaticky postačuje místo XKBT souboru použít běžný XSLT soubor, který je pak aplikován obvyklým způsobem.

Může se stát, že chceme integrovat XSLT transformaci jako součást některého XKBT pravidla. V tom případě je v těle transformačního pravidla uveden odkaz na externí soubor s XSLT pravidlem pomocí atributu externalLocation, tak jak je to naznačeno na příkladě 9.

Příklad 9 - Zavedení XSLT pravidal - odkaz na externí soubor

<one-to-one name="example_10" type="direct">
<source element="hypothesis" />
<dest element="hypothesis">
      <applyXSLT externalLocation="\step2\xslt_rules\hypothesis.xsl" />
</dest>
</one-to-one>

Datum: 21. 11. 2017

URL: