diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-03-28 23:28:46 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-03-28 23:28:46 (GMT) |
commit | 2317f2bf8beb03c60463a9482dbef23540f5c1e0 (patch) | |
tree | 9983553e5289cf622e782d0132bb1810276364d2 /test/samples/w3c/confXPath.xsl | |
parent | 7279ab2caf72b68126bf0c1d7e62c7d89024f9a0 (diff) | |
download | uscxml-2317f2bf8beb03c60463a9482dbef23540f5c1e0.zip uscxml-2317f2bf8beb03c60463a9482dbef23540f5c1e0.tar.gz uscxml-2317f2bf8beb03c60463a9482dbef23540f5c1e0.tar.bz2 |
Refactoring and W3C tests
- Moved core of interpreter to support various versions
- Added experimental setConfiguration()
- There can be more than one initial state
Diffstat (limited to 'test/samples/w3c/confXPath.xsl')
-rw-r--r-- | test/samples/w3c/confXPath.xsl | 630 |
1 files changed, 630 insertions, 0 deletions
diff --git a/test/samples/w3c/confXPath.xsl b/test/samples/w3c/confXPath.xsl new file mode 100644 index 0000000..514752a --- /dev/null +++ b/test/samples/w3c/confXPath.xsl @@ -0,0 +1,630 @@ +<?xml version="1.0"?> +<!-- Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. --> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" + version="2.0"> + + + + +<!-- Copy everything that doesn't match other rules --> +<xsl:template match="/ | @* | node()"> + <xsl:copy> + <xsl:apply-templates select="@* | node()"/> + </xsl:copy> +</xsl:template> + +<!-- Success criteria --> + +<xsl:template match="//@conf:targetpass"> + <xsl:attribute name="target">pass</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:pass"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"> + <onentry> + <log label="Outcome" expr="'pass'"/> + </onentry> + </final> +</xsl:template> + +<!-- Failure criteria --> + +<xsl:template match="//@conf:targetfail"> + <xsl:attribute name="target">fail</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:fail"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"> + <onentry> + <log label="Outcome" expr="'fail'"/> + </onentry> +</final> +</xsl:template> + +<!-- datamodel --> +<xsl:template match="//@conf:datamodel"> + <xsl:attribute name="datamodel">xpath</xsl:attribute> +</xsl:template> + + +<!-- creates id for <data> element, etc. --> +<xsl:template match="//@conf:id"> + <xsl:attribute name="id">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates name for <param>, etc. --> +<xsl:template match="//@conf:name"> + <xsl:attribute name="name">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates location for <assign>, etc. --> +<xsl:template match="//@conf:location"> + <xsl:attribute name="location">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- uses system var as location for <assign>, etc. --> +<xsl:template match="//@conf:systemVarLocation"> + <xsl:attribute name="location">$<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:expr"> + <xsl:attribute name="expr"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- expr is quoted --> +<xsl:template match="//@conf:quoteExpr"> + <xsl:attribute name="expr">'<xsl:value-of select="." />'</xsl:attribute> +</xsl:template> + +<!-- targetexpr is the corresponding ID --> +<xsl:template match="//@conf:targetVar"> + <xsl:attribute name="targetexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- an expr that yields the text child of a variable --> +<xsl:template match="//@conf:varExpr"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + + + +<!-- an expr that yields the children of a variable --> +<xsl:template match="//@conf:varChildExpr"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />/*</xsl:attribute> +</xsl:template> + +<!-- an expr that is the value of a system variable --> +<xsl:template match="//@conf:systemVarExpr"> + <xsl:attribute name="expr">$<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- an expr that is the value of a non-existent substructure of a variable --> +<xsl:template match="//@conf:varNonexistentStruct"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />.bar</xsl:attribute> +</xsl:template> + + +<!-- this should return a value that cannot be assigned to a var. --> +<xsl:template match="//@conf:illegalExpr"> + <xsl:attribute name="expr">!1</xsl:attribute> +</xsl:template> + +<!-- this should return a simple scxml script that exits as soon as it's invoked. +We assume that this script won't undergo schema validation, so we keep it concise --> +<xsl:template match="//@conf:scxmlExpr"> + <xsl:attribute name="expr">string('<scxml><final/></scxml>')</xsl:attribute> +</xsl:template> + + +<!-- this should add 1 to the value of the specified variable --> +<xsl:template match="conf:incrementID"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">$Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">$Var<xsl:value-of select="@id"/> + 1</xsl:attribute> + </assign> + </xsl:template> + + <!-- this should concatenate the value of the id2 to id1 and assign the result to id1 --> +<xsl:template match="conf:concatVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">$Var<xsl:value-of select="@id1"/></xsl:attribute> + <xsl:attribute name="expr">concat($Var<xsl:value-of select="@id1"/>, $Var<xsl:value-of select="@id2"/>)</xsl:attribute> + </assign> + </xsl:template> + +<!-- assigns the sum of the values of two vars to thefirst var--> +<xsl:template match="//conf:sumVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> +<xsl:attribute name="location">$Var<xsl:value-of select="@id1"/></xsl:attribute> +<xsl:attribute name="expr">$Var<xsl:value-of select="@id1"/>/text() + $Var<xsl:value-of select="@id2"/>/text()</xsl:attribute> + </assign> + </xsl:template> + +<!-- foreach --> +<!-- this should produce literal representation of an array containing 1 2 3 in that order --> +<xsl:template match="//conf:array123"> +<node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> +</xsl:template> + +<!-- this uses the children of the indicated variable as the 'array' attribute --> +<xsl:template match="//@conf:arrayVar"> + <xsl:attribute name="array">$Var<xsl:value-of select="."/>/*</xsl:attribute> +</xsl:template> + +<!-- this uses the text child of the indicated variable as the 'array' attribute --> +<xsl:template match="//@conf:arrayTextVar"> + <xsl:attribute name="array">$Var<xsl:value-of select="."/>/text()</xsl:attribute> +</xsl:template> + +<!-- this should yield an expr that evaluates to something that is not a valid array --> +<xsl:template match="//@conf:illegalArray"> + <xsl:attribute name="expr">(</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:item"> + <xsl:attribute name="item">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should return something that cannot be an variable name --> +<xsl:template match="//@conf:illegalItem"> + <xsl:attribute name="item">..</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:index"> + <xsl:attribute name="index">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should add items onto the end of the specified array, which +is of the same type as array123 --> +<xsl:template match="conf:extendArray"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="type">lastchild</xsl:attribute> + <xsl:attribute name="location">$Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">$Var<xsl:value-of select="@id"/>/*</xsl:attribute> + </assign> +</xsl:template> + +<xsl:template match="//conf:illegalContent"> + <content xmlns="http://www.w3.org/2005/07/scxml"> xyz </content> +</xsl:template> + +<!-- a content element whose value is the string 'foo' --> +<xsl:template match="//conf:contentFoo"> + <content xmlns="http://www.w3.org/2005/07/scxml">foo</content> +</xsl:template> + + + +<!-- this returns something that is guaranteed not to be the ID of the current session --> +<xsl:template match="//@conf:invalidSessionID"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- this returns something that is guaranteed not to be a valid event I/O processor --> +<xsl:template match="//@conf:invalidSendType"> + <xsl:attribute name="type">27</xsl:attribute> +</xsl:template> + +<!-- same value in an expr --> +<xsl:template match="//@conf:invalidSendTypeExpr"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- templates for the expr versions of the send attributes --> + +<!-- eventexpr takes the value of the specified variable --> +<xsl:template match="//@conf:eventExpr"> + <xsl:attribute name="eventexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- targetexpr takes the value of the specified variable --> +<xsl:template match="//@conf:targetExpr"> + <xsl:attribute name="targetexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- typeexpr takes the value of the specified variable --> +<xsl:template match="//@conf:typeExpr"> + <xsl:attribute name="typeexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- delayexpr takes the value of the specified variable --> +<xsl:template match="//@conf:delayExpr"> + <xsl:attribute name="delayexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as idlocation --> +<xsl:template match="//@conf:idlocation"> + <xsl:attribute name="idlocation">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as sendidexpr --> +<xsl:template match="//@conf:sendIDExpr"> + <xsl:attribute name="sendidexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as srcexpr --> +<xsl:template match="//@conf:srcExpr"> + <xsl:attribute name="srcexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as namelist --> +<xsl:template match="//@conf:namelist"> + <xsl:attribute name="namelist">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- exprs that return the value of the event fields --> + +<xsl:template match="//@conf:eventName"> + <xsl:attribute name="expr">$_event/name/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventType"> + <xsl:attribute name="expr">$_event/type/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventSendid"> + <xsl:attribute name="expr">$_event/sendid/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventField"> + <xsl:attribute name="expr">$_event/<xsl:value-of select="."/>/text()</xsl:attribute> +</xsl:template> + +<!-- returns the raw message structure as a string --> +<xsl:template match="//@conf:eventRaw"> + <xsl:attribute name="expr">$_event/raw/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of the specified item in _event.data --> +<xsl:template match="//@conf:eventDataFieldValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of a KVP specified by <param> from _event.data --> +<xsl:template match="//@conf:eventDataParamValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of a KVP specified by Namelist from _event.data --> +<xsl:template match="//@conf:eventDataNamelistValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/data/text()</xsl:attribute> +</xsl:template> + +<!-- returns the location of the scxml event i/o processor --> +<xsl:template match="//@conf:scxmlEventIOLocation"> + <xsl:attribute name="expr">$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#SCXMLProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- to test the BasicHTTP Event I/O processor --> + + + +<!-- return an expression evaluating to the basic http access URI --> +<xsl:template match="//@conf:basicHTTPAccessURI"> + <xsl:attribute name="expr">_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- return a targetexpr evaluating to the basic http access URI --> +<xsl:template match="//@conf:basicHTTPAccessURITarget"> + <xsl:attribute name="targetexpr">$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- generate an cond that evaluates to true if POST was used to send the message --> +<xsl:template match="//@conf:methodIsPost"> + <xsl:attribute name="cond">contains($_event/raw, 'POST')</xsl:attribute> +</xsl:template> + +<!-- generate a namelist attribute containing all the ids listed in the attribute's value --> +<xsl:template match="//@conf:multipleNamelist"> + <xsl:attribute name="namelist"> + <xsl:analyze-string select="." regex="([0-9]+)"> +<xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/><xsl:text>
</xsl:text></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- generate a cond that evaluates to true if the event is external --> +<xsl:template match="//@conf:eventIsExternal"> + <xsl:attribute name="cond">_event.type == 'external'</xsl:attribute> +</xsl:template> + + + +<!-- the following templates produce an expr that extracts the relevant item from _event.raw --> +<!-- returns true if _event/raw contains the var with the specified value --> +<xsl:template match="//@conf:eventIdParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="([0-9]+)(\s+)(\S+)"> +<xsl:matching-substring>contains($_event/raw, 'Var<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>')</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<!-- returns true if _event/raw contains the param with the specified value --> +<xsl:template match="//@conf:eventNamedParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="([0-9]+)(\s+)(\S+)"> +<xsl:matching-substring>contains($_event/raw, '<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>')</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<!-- Should return true if the body of _event.raw equals the specified value. This is too weak because +it tests only that the specified string is in _event.raw, not that it is the whole body. I don't +know if we can make this strong in XPath 1.0 --> +<xsl:template match="//@conf:messageBodyEquals"> + <xsl:attribute name="cond">contains($_event/raw, <xsl:value-of select="."/>)</xsl:attribute> +</xsl:template> + + +<!-- the following templates produce an expr that extracts the relevant item from _event.raw --> +<xsl:template match="//@conf:getNamedParamVal"> + <xsl:attribute name="expr">re.search('<xsl:value-of select="."/>=(\S+)$', _event.raw).groups()[0]</xsl:attribute> +</xsl:template> + +<!-- if input is 1, find param Var1, etc. --> +<xsl:template match="//@conf:getIDParamVal"> + <xsl:attribute name="expr">substring-before(substring-after('Var<xsl:value-of select="."/>=', $_event/raw), '&')</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamName"> + <xsl:attribute name="expr">re.search('\n\n(.*)', txt).group(1).split('&')[<xsl:value-of select="."/>].split('=')[0]</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamVal"> + <xsl:attribute name="expr">re.search('\n\n(.*)', txt).group(1).split('&')[<xsl:value-of select="."/>].split('=')[1]</xsl:attribute> +</xsl:template> + +<!-- transition conditions --> +<!-- test that given var has specific value. The value expr is evaluated --> +<xsl:template match="//@conf:idVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- the value is quoted --> +<xsl:template match="//@conf:idQuoteVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='=='">=</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose>'<xsl:value-of select="regex-group(3)"/>'</xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- test on the value of two vars --> +<xsl:template match="//@conf:compareIDVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)([0-9+])"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose>$Var<xsl:value-of select="regex-group(3)"/><xsl:text>/text() </xsl:text> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- test that given var whose value was passed in via namelist has specific value. The value expr is evaluated --> +<xsl:template match="//@conf:namelistIdVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/data/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- return true if variable matches value of system var (var number is first arg, system var name +is the second argument --> +<xsl:template match="//@conf:idSystemVarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='=='">=</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose>$<xsl:value-of select="regex-group(3)"/></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- test that the event's name fieldhas the value specified --> +<xsl:template match="//@conf:eventNameVal"> + <xsl:attribute name="cond">$_event/name = <xsl:text>'</xsl:text><xsl:value-of select="."/><xsl:text>'</xsl:text> + </xsl:attribute> + +</xsl:template> +<!-- returns true if all the required fields of _event are bound --> +<xsl:template match="//@conf:eventFieldsAreBound"> + <xsl:attribute name="cond">$_event/name and $_event/type and $_event/sendid and $_event/origin and $_event/origintype and $_event/invokeid and $_event/data</xsl:attribute> +</xsl:template> + +<!-- returns true if machine is in the state specified --> + +<xsl:template match="//@conf:inState"> + <xsl:attribute name="cond">In('<xsl:value-of select="."/>')</xsl:attribute> +</xsl:template> + +<!-- return true if specified var has been created but has no value --> +<xsl:template match="//@conf:unboundVar"> + <xsl:attribute name="cond">$Var<xsl:value-of select="." /> and not($Var<xsl:value-of select="." />/text()) and not($Var<xsl:value-of select="." />/*)</xsl:attribute> +</xsl:template> + +<!-- return true if the specified key in event.data has the specified value --> +<xsl:template match="//@conf:eventvarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$_event/data/data[@id = 'Var<xsl:value-of select="regex-group(1)"/>']/text()<xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> + +</xsl:template> + +<!-- return true if event.data field matches the specified value --> + +<xsl:template match="//@conf:eventdataVal"> + <xsl:attribute name="cond">$_event/data = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:emptyEventData"> + <xsl:attribute name="cond">not($_event/data/*)</xsl:attribute> +</xsl:template> + +<!-- return true if the _name system var has the specified quoted value --> + +<xsl:template match="//@conf:nameVarVal"> + <xsl:attribute name="cond">$_name/text() = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<!-- returns true if _event.data contains the specified item --> +<xsl:template match="//@conf:eventDataHasField"> + <xsl:attribute name="cond">$_event/data/data[@id=<xsl:value-of select="."/>]</xsl:attribute> +</xsl:template> + +<!-- return true if first var's value is a prefix of the second var's value. Input has form "n m" where n and m are ints.--> +<xsl:template match="//@conf:varPrefix"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="(\w+)(\W)(\w+)"> + <xsl:matching-substring> +contains($Var<xsl:value-of select="regex-group(3)"/>, $Var<xsl:value-of select="regex-group(1)"/><xsl:text>)</xsl:text> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if id has a value --> +<xsl:template match="//@conf:isBound"> + <xsl:attribute name="cond">$Var<xsl:value-of select="." />/* or $Var<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + +<!-- true if id does not have an atomic value --> +<xsl:template match="//@conf:noValue"> + <xsl:attribute name="cond">not($Var<xsl:value-of select="." />/text() or $Var<xsl:value-of select="." />/*)</xsl:attribute> +</xsl:template> + +<!-- true if system var has a value --> +<xsl:template match="//@conf:systemVarIsBound"> + <xsl:attribute name="cond">$<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + +<!-- returns true if specified field of _event has no value --> +<xsl:template match="//@conf:eventFieldHasNoValue"> + <xsl:attribute name="cond">not(string($_event/<xsl:value-of select="." />))</xsl:attribute> +</xsl:template> + +<!-- returns a value that cannot be converted into a Boolean --> +<xsl:template match="//@conf:nonBoolean"> + <xsl:attribute name="cond">==!*</xsl:attribute> +</xsl:template> + +<!-- always returns true --> +<xsl:template match="//@conf:true"> + <xsl:attribute name="cond">true()</xsl:attribute> +</xsl:template> + +<!-- always returns false --> +<xsl:template match="//@conf:false"> + <xsl:attribute name="cond">0>1</xsl:attribute> +</xsl:template> + + + +<!-- this should return an illegal target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:illegalTarget"> + <xsl:attribute name="target">baz</xsl:attribute> +</xsl:template> + +<!-- this returns an legal, but unreachable, target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:unreachableTarget"> + <xsl:attribute name="target">#_scxml_foo</xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value --> +<xsl:template match="//@conf:VarEqVar"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/>/text()=$Var<xsl:value-of select="regex-group(3)"/>/text()</xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value, which is a structure, not atomic --> +<xsl:template match="//@conf:VarEqVarStruct"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/>=$Var<xsl:value-of select="regex-group(3)"/></xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if _event was delivered on the specified i/o processor --> +<xsl:template match="//@conf:originTypeEq"> + <xsl:attribute name="cond">$_event/origintype/text() = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + + +<!-- scripting is not supported in Xpath, so not sure what to put here. Implementers +should know not to bother to run these tests--> + +<xsl:template match="conf:script"> + <script xmlns="http://www.w3.org/2005/07/scxml"> + </script> +</xsl:template> + + +<xsl:template match="//@conf:scriptGoodSrc"> + <xsl:attribute name="src">D:\W3C\SCXMLTests\test300.py</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:scriptBadSrc"> + <xsl:attribute name="src">D:\foo</xsl:attribute> +</xsl:template> + +<!-- sends an event back to the sender of the current event --> +<xsl:template match="conf:sendToSender"> + <send xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="event"><xsl:value-of select="@name" /></xsl:attribute> + <xsl:attribute name="targetexpr">$_event/origin/text()</xsl:attribute> + <xsl:attribute name="typeexpr">$_event/origintype/text()</xsl:attribute> + </send> +</xsl:template> + +</xsl:stylesheet>
\ No newline at end of file |