Az SCXML nyelv

Külső kommunikációs modul

A Külső kommunikációs modul biztosítja a lehetőséget a küldésre és események fogadására külső egyedektől, valamint külső szolgáltatások igénybevételére.
A Külső kommunikációs modult használó profiloknak kötelező:

Elemei


<send>

Események és adatok küldése külső rendszereknek, beleértve külső SCXML interpreterek, vagy egy folyamatban lévő SCXML munkamenetben esemény kiváltására. A célpontja a <send>-nek a "target" és "type" attribútumokkal határozható meg. Ezek az attribútumok szabályozzák, hogy a platform hogy küldje az eseményt a célpontnak.

Attribútumai

Neve Kötelező Megszorítás Típus Alapértelmezett érték Leírás
event Nem Nem szerepelhet 'eventexpr'-el. Ha a 'type' scxml, akkor ennek vagy az 'eventexpr'-nek szerepelnie kell. string Nincs A karakterlánc jelzi az üzenet típusát amelyet generál. A szöveg tartalmazhat alfanumerikus karaktereket és a "." (pont) karaktert. Az első karakter nem lehet pont vagy szám. Az üzenet típus nevek case-insensitive-ek. Ha sem 'event, sem 'eventexpr' vagy in-line tartalom nincs megadva, akkor egy error.fetch esemény dobódik. In-line tartalommal együtt használva error.fetch dobódik.
eventexpr Nem Nem szerepelhet 'event'-el. Ha a 'type' scxml, akkor ennek vagy az 'event'-nek szerepelnie kell. Érték kifejezés Nincs Dinamikus alternatívája az 'event'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'event' értéke lenne.
target Nem Nem szerepelhet 'targetexpr'-el. URI Nincs Egyedi azonosítója az üzenet célpontja, aminek az esemény küldi.
targetexpr Nem Nem szerepelhet 'target'-el. Érték kifejezés Nincs Dinamikus alternatívája az 'target'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'target' értéke lenne.
type Nem Nem szerepelhet 'typeexpr'-el. string Nincs Egy token, ami meghatározza a szállítási mechanizmusát az üzenetnek.
typeexpr Nem Nem szerepelhet 'type'-al. Érték kifejezés Nincs Dinamikus alternatívája az 'type'-nak, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'type' értéke lenne.
id Nem Nem szerepelhet 'idlocation'-el. ID Nincs Egy karakterlánc, amely azonosítja a <send> példányát.
idlocation Nem Nem szerepelhet 'id'-val. Hely kifejezés Nincs Bármely hely kifejezés kiértékelődik egy adatmodell hellyé. Ha az 'id' attribútum nincs meghatározva, akkor a platform azt az id tárolja amit automatikusan generál ezen a helyen.
delay Nem Nem szerepelhet 'delayexpr'-el, vagy ha a 'target' értéke "_internal". string Nincs Karaktersorozat, ami időintervallumot jelképez. A <send> azonnal visszatér, de az üzenet nem kerül elküldésre, ami az időintervallum el nem telik. Ebben az esetben a <send> összes attribútuma kiértékelődik, amikor a <send> végrehajtódik, és nem az üzenet elküldésekor.
delayexpr Nem Nem szerepelhet 'delay'-el, vagy ha a 'target' értéke "_internal". Érték kifejezés Nincs Dinamikus alternatívája az 'delay'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'delay' értéke lenne.
namelist Nem Ez az attribútum csak azokban a profilokban támogatott, amelyek tartalmazzák a Data Module-t és Script Module-t. Hely kifejezés listája Nincs Szóközzel elválasztott adatmodell helyek listája csatolva az üzenethez.
hints Nem Nem szerepelhet 'hintsexpr'-el. string Nincs Olyan információkat tartalmaz, amelyeket felhasznál az implementáló platform optimalizálásra az üzenetek átviteléhez. A jelentése platform-specifikus.
hintsexpr Nem Nem szerepelhet 'hints'-el. Érték kifejezés Nincs Dinamikus alternatívája az 'hints'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'hints' értéke lenne.

Gyermekei: "namelist" és <content> nem használható együtt. A fejlesztő az üzenet tartalmát az alábbi négyféle módon adhatja meg:

A <send> célpontja

A célpontja <send> műveletnek a célállomás, amelynek az eseményt küldeni kell. Megadható a 'target' vagy a 'targetexpr' attribútumban. Ezek határozzák meg az egyedi azonosítóját a célpontnak. Általában ez egy másik SCXML munkamenet. Más esetekben ez az érték a célpont típusától fog függeni. A következő speciális értékek definiáltak:

Ha sem a 'target', sem a 'targetexpr' attribútum nincs megadva, akkor az esemény a küldő folyamat külső esemény sorához adódik hozzá. Ha a 'target' vagy 'targetexpr' attribútum értéke nem támogatott, hibás vagy elérhetetlen a platform által, akkor a rendszer kivált egy error.send.targetunavailable eseményt.

A <send> típusa

A <send> művelet típusa meghatározza a módszert, amit használni kell, hogy az üzenet eljusson a célpontjához. A típust a 'type' vagy a 'typeexpr' attribútum határozza meg. A típust a célponttal együtt használják, hogy meghatározzák azt, hogy hogy kapcsolódjon a célállomáshoz. Ha egyik sincs megadva a 'type' vagy a 'typeexpr' közül, akkor az alapértelmezett értéket 'scxml' feltételezi. Ha a megadott típus nem támogatott, akkor a rendszer kiváltja az error.send.typeinvalid hibaeseményt.

Minden rendszer támogatja a következő típust:

Érték Leírás
"scxml" A célpont egy SCXML folyamat. A szállítási mechanizmus platform-specifikus.

A HTTP POST támogatása opcionális, de amelyik támogatja annak a következő értéket kel használnia:

Érték Leírás
"basichttp" A célpont egy URL. Az adatot HTTP POST áltál küldve.

<cancel>


A <cancel> elem egy késleltetett <send> esemény törlésére használható. A rendszer megpróbálja törölni a függőben lévő eseményt és kivált egy cancel.succesful eseményt ha sikeres. Különben egy error.notallowed eseményt vált ki. A <cancel> csak az ugyanabban a dokumentumban előforduló <send> által kiváltott eseményt képes törölni.

Attribútumai

Neve Kötelező Megszorítás Típus Alapértelmezett érték Leírás
sendid Nem Nem szerepelhet 'sendidexpr'-el, de egyiknek szerepelnie kell. IDREF Nincs Törlendő esemény ID-ja.
sendidexpr Nem Nem szerepelhet 'sendid'-el, de egyiknek szerepelnie kell. Érték kifejezés Nincs Dinamikus alternatívája az 'sendid'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'sendid' értéke lenne.

<invoke>


Az <invoke> és gyereke a <finalize> hasznosak külső szolgáltatások viselkedését modellező állapotokban. Az <invoke> elem az állapot <onentry> eleme után hajtódik végre egy külső szolgáltatás létrehozását okozza. A <param> elemmel lehet adatot átadni a szolgáltatásnak. Minden olyan eseményt, amit az állapot gép kap a meghívott komponensből a meghívás alatt, azt a feldolgozza a <finalize> kezelő, mielőtt az átmenet kiválasztódik. A <finalize> kód segítségével normalizálja a visszatérő adatokat és frissíti adatmodellt mielőtt kiértékeli a következő állapotot.

Amikor az <invoke> elem végrehajtódik, a rendszernek egy új logika példányt kell kezdenie a "type"-ban megadott külső szolgáltatásról és átadni neki az "src", <content> vagy <parallel>-ban meghatározott adatokat. A szolgáltatás példánya lehet helyi vagy távoli. Az explicit argumentumokon kívül a rendszernek nyomon kell követnie az egyedi hivatkozási azonosítót (invoke id) és biztosítania kell, hogy szerepel az összes eseményben, amikkel a szolgáltatás visszatér a meghívó géphez.

Attribútumai

Neve Kötelező Megszorítás Típus Érvényes értékei Leírás
type Nem Nem szerepelhet 'typeexpr'-el. NMTOKEN 'scxml', 'vxml2', 'vxml3', 'ccxml' és egyéb platform-specifikus értékek Karaktersorozat, ami meghatározza a külső szolgáltatást. A rendszernek kötelező támogatnia az 'scxml' értéket.
typeexpr Nem Nem szerepelhet 'type'-al. Érték kifejezés Bármilyen érték kifejezés, ami érvényes típus értékű karakterláncra értékelődik ki. Dinamikus alternatívája az 'type'-nak, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'type' értéke lenne.
src Nem Nem szerepelhet 'srcexpr'-el vagy a <content> elemmel. URI Bármilyen URI Egyedi azonosítója az üzenet célpontja, aminek az esemény küldi.
srcexpr Nem Nem szerepelhet 'target'-el. Érték kifejezés Bármilyen kifejezés ami érvényes URI-re értékelődik ki. Dinamikus alternatívája az 'src'-nek, ami egy statikus string, amíg ez futási időben értékelődik ki, és úgy kezeli, mintha az 'src' értéke lenne.
id Nem Nem szerepelhet 'idlocation'-el. ID Bármely érvényes token Egy karakterlánc, amely azonosítja az <invoke> ezen példányát.
idlocation Nem Nem szerepelhet 'id'-val. Hely kifejezés Érvényes hely kifejezés Bármely hely kifejezés kiértékelődik egy adatmodell hellyé. Ha az 'id' attribútum nincs meghatározva, akkor a platform azt az id tárolja amit automatikusan generál ezen a helyen.
namelist Nem Ez az attribútum csak azokban a profilokban támogatott, amelyek tartalmazzák a Data Module-t és Script Module-t. Hely kifejezés listája Adatmodell helyek listája Szóközzel elválasztott, 0 vagy több adatmodell helyek listája, ami átadandó a szolgáltatásnak.
autoforward Nem Logikai true vagy false Igaz: bármely az állapotgép által fogadott külső esemény továbbítódik a hivatkozott külső szolgáltatásnak.

Gyerekei

<finalize>


A <finalize> elem megengedi egy hivatkozó munkamenetnek hogy frissítse az adatmodelljét a hivatkozott munkamenet által visszatért eseményben tárolt adattal. A <finalize> végrehajtható tartalmat tartalmaz, ami akkor hajtódik végre, amikor a külső szolgáltatás visszaad egy eseményt az <invoke> végrehajtása után. Ezt a tartalmat alkalmazza mielőtt a rendszer az eseménnyel egyező átmenetet keres. A végrehajtható tartalomban a rendszer változó '_event' használható a folyamatban lévő esemény tartalmazott adatainak hivatkozására. Párhuzamos állapotok esetében csak a hivatkozó állapot finalize kódja hajtódik végre.

Gyerekei:

A <finalize> gyerekei tartalma 0 vagy több végrehajtható tartalom lehet. Egy megfelelő SCXML dokumentumban a végrehajtandó tartalom a <finalize>-ban nem válthat ki eseményt vagy nem hívhat külső tevékenységet. Különösen a <send> és a <raise> elemek nem fordulhatnak elő benne.

Ha nincs futtatható tartalom megadva, az SCXML Processzornak frissítenie kell az adatmodellt minden egyes alkalommal, amikor egy esemény érkezik a gyermek folyamattól, amelyet a szülő <invoke> elem hozott létre. Különösen, ha szülő <invoke> elem tartalmaz 'namelist' attribútumot, vagy egy vagy több <param> gyereke tartalmaz 'location' attribútumot, akkor minden egyes ilyen elemet a Processzornak frissítenie kell a megfelelő helyen a visszatérési értékékkel amelyeknek a neve egyezik. Így a hatása egy <invoke> üres <finalize> elemmel és 'namelist' attribútummal vagy egy 'location' attribútummal rendelkező <param> elemmel, az hogy először elküldjük az adatmodell 'namelist' vagy 'location' által meghatározott részét a hivatkozott komponensnek. Ezután frissítjük azt a részt az egyező nevű visszatérési értékekkel. Ne feledjük, hogy az automatikus frissítésre nem kerül sor, ha a <finalize> elem hiányzik, szemben az üressel.