Research Article

An Improved Abstract State Machine Based Choreography Specification and Execution Algorithm for Semantic Web Services

Listing 5

Checking access mode.
(1)  check(?gOrWs,?X)  :-
(2)?X ~ if ?Y then ?Z, !,
(3)reformatToString(?Y, ?YStr),
(4)extractConcepts(?YStr, [], ?conceptsInY),
(5)extractPredicates(?YStr, [], ?termList1),
(6)filterOutPredicates(?termList1, [],  ?predicatesInY),
(7) if (+  checkAllFramesModes(?gOrWs,READ,?conceptsInY))
then
(8) (writeln([Error: Illegal access mode in -?gOrWs])@prolog,!,
(9)false),
(10)if (+  checkAllPredicatesModes(?gOrWs,READ,?predicatesInY))
then
(11) (writeln([Error: Illegal access mode in -?gOrWs])@prolog,!,
(12)false),
(13)decomposeRHS(?Z, [], ?allFsOrPs),
(14)reformatToString(?allFsOrPs, ?allFsOrPsStr),
(15)extractConcepts(?allFsOrPsStr, [], ?conceptsInZ),
(16) extractPredicates(?allFsOrPsStr, [], ?temp),
(17)filterOutPredicates(?temp, [], ?predicatesInZ),
(18)if (+  checkAllFramesModes(?gOrWs,WRITE,?conceptsInZ))
then
(19) (writeln([Error: Illegal access mode in -?gOrWs])@prolog,!,
(20)false),
(21)if (+checkAllPredicatesModes(?gOrWs,WRITE,?predicatesInZ))
then
(22) (writeln([Error: Illegal access in  -?gOrWs])@prolog,!,
(23)false).
-------------------------------------------------------------------
(24)  checkAllFramesModes(?gOrWS, ?reOrWr,[]).
(25) checkAllFramesModes(?gOrWS, ?reOrWr,[?F|?R]):-
(26) checkFrameMode(?gOrWS, ?reOrWr,?F),
(27) checkAllFramesModes(?gOrWS, ?reOrWr,?R).
-------------------------------------------------------------------
(28)  checkFrameMode(GOAL,READ,?F):-
(29) (?F:In  or ?F:Out  or ?F:Shared  or ?F:Static), !.
(30)  checkFrameMode(GOAL,WRITE,?F):-
(31) (?F:In  or ?F:Shared), !.
(32)  checkFrameMode (GOAL,READ,?F):-
(33) writeln([Illegal GOAL READ action for  ,?F])@prolog, !, false.
(34)checkFrameMode(GOAL,WRITE,?F):-
(35) writeln([Illegal GOAL WRITE action for  ,?F])@prolog, !, false.