A fő modul tartalmazza az elemeket amik leírják a Harel automatát. A fő modul saját magában is használható de nem képes kommunikállni külső elmekkel és nem tartalmazhat belső adat modellt sem.
Az alábbi rész tartalmazza az SCXML fő moduljának elemeit.
A legfelső szintű elem. A többi elem ennek a gyermeke kell legyen.
Neve | Helyes értéke | Leírás |
---|---|---|
initial | Állapot vagy párhuzamos állapot azonosítója | A dokumentum kezdő állapotának azonosítója. Kiváltható egy <initial> gyermek elemmel |
name | Akármely helyes NMTOKEN | Az automata neve |
xmlns | "http://www.w3.org/2005/07/scxml" | XML dokumentum definíciós fájlja |
exmode | lax, strict | Kiértékelés módja. Szigorú vagy lusta. |
Az automata egy állapotát reprezentállja.
Neve | Helyes értéke | Leírás |
---|---|---|
id | Helyes ID | A dokumentum azonosítója |
initial | Állapot vagy párhuzamos állapot azonosítója | Kezdő állapot azonosítója. Kiváltható egy <initial> gyermek elemmel |
Gyermekei lehetnek:
Egy átmenetet reprezentál két állapot között. Kiválthatja egy esemény és rendelkezhet őrfeltétellel.
Neve | Helyes értéke | Leírás |
---|---|---|
event | Bármely event neve, a joker karakter('*') használata engedélyezett | Az esemény hatására jön létre az átmenet. |
cond | Bármely logikai kifejezés | Őr feltétel az átmenethez. |
target | Szóközzel elválasztott listája állapotok azonosítójának. | Az automata átkerül ezekbe az állapotokba az átmenet után. Ha több állapot van felsorolva, mindegyiknek ugyanazon paralell csúcs leszármazottja kell legyen. |
Gyermekei lehetnek:
Csak futattható tartalmak lehetnek a gyermekei, amelyek az átmenet <onexit> állapota után futnak le a cél <onentry> állapota előtt.
Olyan állapot ami egységbe zár több állapotot. A parallel elem tartalmazhat <onentry> <onexit> <transition>
elemeket melyek működése teljesen analóg a <state>-nél látottakal. A plusz működése az hogy összekapcsol valahány állapotot
és azokat párhuzamos futtatja, melyek az <onexit>-nél újra összekapcsolódnak. Mikor az összes állapot final-be jut akkor generálódik egy done.state.id esemény.
Amikor egy automata <parallel> állapotba jut, szimultán belép az összes gyermek állapotba is.
Az állapot kezdőállapota. Tegyük fel hogy van egy S1 állapotunk melynek gyermek állapotai S1,S2,S3.
Ekkor az initial értéke csak az egyik azonosítója lehet, de a többi állapot is elérhető kívülről.
Az egyetlen különbség az initial atribútum és az <initial> elem között az hogy az utóbbi tartalmazhat <transition>
elemet amely még az előtt lefut mielőtt az automata a megfelelő kezdőállapotba jutna.
Gyermekei lehetnek:
Egy öszetett állapot végső állapotát reprezentállja. Akkor jut ide az automata amikor az állapot működését befejezte. Ekkor generálódik egy done.state.parentID esemény is.
Burkoló elem amely olyan adatokat tartalmaz mely akkor lesz beemelve amikor az állapot final státuszba ér.
A <history> álállapot lehetővé teszi hogy elmentsük egy automata állapotát. Amikor egy összetett állapot kilép akkor a <history> hatására annak állpot konfigurációja elmentődik. Így ha kívülről meghívjuk az <history> célállapotként akkor abba az állapotba kerülünk ami elmentésre került. Ha <parallel> állapotba kerülünk akkor az összes állapotának konfigurációja lementődik ekkor.
A végrehatható tartalom akciókat tartalmaz melyek végrehajtódnak amikor a végrehajtás belép egy állapotba vagy kilép onnan. Ilyen elemek blokkokban fordulnak elő, ami azt jelenti amikor egy bekövetkezik, tetszőleges számú elem lehet jelen. A blokk elemei olyan sorrendben futnak le amilyen sorrendben azok a dokumentumban definiállva vannak.
Ez az elem arra használható hogy különböző eseményeket váltsunk ki vele. Amikor le fut akkor az esemény bekerül a munkamenet belső várakozási sorában. Csak akkor hajtódik végre az esemény miután az összes végrehajtó elem véget ért, addig azokat eltárolja a sorban.
Gyermekei:
<if> egy tároló elem amely egy elágazást definiál. Ezen belül lehet <else> illetve <elseif> elem. Az <if> és az <elseif> elemeknek tartalmazniuk kell egy cond attribútumot amely egy feltétel definiál.
Az elágazás szerkezetéről, illetve a működéséről nézzünk egy közérthető példát:
Lehetővé teszi hogy az alkalmazás generáljon naplózó vagy hibakeresési információkat. Működése platform függő.
Attribútmai:
Mivel a specifikációja az SCXML-nek rugalmas és mégis erős kifejező eszköz ezért lehetőség van hogy a különböző platformok plusz végrehatható elemeket definiálljanak maguk.
Ezek viszont nem változtathatják meg az automata állapotát, csak eseményeket válthatnak ki. Mivel a végrehatható utasítások atomiak a modellben így figyelni kell arra hogy blokkolódik az egész gép amíg kiértékelődik a végrehatható elem.
A platform specifikus hivások egy másik névtérben kell hogy legyenek definiállva.
Egy példa külső CCXML hívására SCXML-ből: