blob: 9dcc9ad20587102ff56d76952c218f7f0fcb2501 [file] [log] [blame]
<?xml version="1.0"?>
<!--
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<!-- A fictitious state machine used by test cases. Meant to illustrate
prefixed XPath expressions in the Commons SCXML Data() function.
Used by org.apache.commons.scxml2.NamespacePrefixedPathsTest.
Also serves as testing the underlying functionality of the
underlying parsing technology -->
<scxml xmlns="http://www.w3.org/2005/07/scxml"
xmlns:cs="http://commons.apache.org/scxml"
version="1.0"
datamodel="jexl"
initial="ten">
<!-- Root data model -->
<datamodel>
<!-- We'll use this for XPaths -->
<data id="rootdata"
xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3">
<ns1:root>
<ns2:foo>
<ns3:bar>1</ns3:bar>
</ns2:foo>
</ns1:root>
</data>
<!-- We'll use this for the JUnit test
NamespacePrefixedPathsTest.java (scxml package) -->
<data id="retval" />
</datamodel>
<!-- State data model -->
<state id="ten">
<datamodel>
<data id="data10" xmlns:ns4="scheme://namespace.test.domain/1">
<root xmlns="">
<ns4:foo>
<bar>10</bar>
</ns4:foo>
</root>
</data>
</datamodel>
<onentry>
<cs:var xmlns:pre1="scheme://namespace.test.domain/1"
xmlns:pre2="scheme://namespace.test.domain/2"
xmlns:pre3="scheme://namespace.test.domain/3"
name="tentest"
expr="Data('number($rootdata/pre1:root/pre2:foo/pre3:bar)') + Data('number($data10/root/pre1:foo/bar)')" />
</onentry>
<transition event="done.state.ten" cond="tentest eq 11" target="twenty" />
<onexit>
<assign location="retval" expr="tentest" />
</onexit>
</state>
<!-- Already defined (and different) prefixes -->
<state id="twenty" xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3">
<datamodel>
<data id="data20">
<ns1:root>
<ns2:foo>20</ns2:foo>
</ns1:root>
</data>
</datamodel>
<onentry>
<assign location="Location('$rootdata/ns1:root/ns2:foo/ns3:bar')" expr="2" />
</onentry>
<!-- Redefine namespace prefixes -->
<transition event="done.state.twenty"
xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
cond="Data('string($data20/ns1:root/ns2:foo)') eq 20 and Data('string($rootdata/ns1:root/ns2:foo/ns3:bar)') eq 2"
target="thirty" />
<onexit>
<!-- Redefine different prefixes bound to above namespaces -->
<if xmlns:pre1="scheme://namespace.test.domain/1"
xmlns:pre2="scheme://namespace.test.domain/2"
cond="Data('number($data20/pre1:root/pre2:foo)') lt 20">
<assign location="retval" expr="'Less than 20'" />
<elseif cond="Data('number($data20/pre1:root/pre2:foo)') eq 20" />
<assign location="retval" expr="'Equal to 20'" />
<else/>
<assign location="retval" expr="'Greater than 20'" />
</if>
</onexit>
</state>
<!-- XPath looking at attribute -->
<state id="thirty">
<datamodel>
<data id="data30">
<root xmlns="scheme://namespace.test.domain/1">
<foo xmlns="scheme://namespace.test.domain/2"
xmlns:ns1="scheme://namespace.test.domain/3"
ns1:attfoo="30" attbar="300"/>
</root>
</data>
</datamodel>
<transition event="done.state.thirty"
xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3"
cond="Data('number($data30/ns1:root/ns2:foo/@ns3:attfoo)') + Data('number($data30/ns1:root/ns2:foo/@attbar)') eq 330"
target="forty" />
</state>
<!-- Multiple data, already defined prefixes -->
<state id="forty" xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3"
xmlns:ns4="scheme://namespace.test.domain/4">
<datamodel>
<data id="data40">
<root xmlns="">
<ns1:foo ns2:attfoo="40"/>
</root>
</data>
<data id="data41">
<ns3:root>
<ns4:foo>41</ns4:foo>
</ns3:root>
</data>
</datamodel>
<transition event="done.state.forty"
cond="Data('number($data40/root/ns1:foo/@ns2:attfoo)') + Data('number($data41/ns3:root/ns4:foo)') eq 81"
target="fifty" />
</state>
<!-- Multiple data, prefixes on elements -->
<state id="fifty">
<datamodel>
<data id="data50" xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3">
<ns1:root>
<ns2:foo ns3:attfoo="50"/>
</ns1:root>
</data>
<data id="data51" xmlns:ns3="scheme://namespace.test.domain/3"
xmlns:ns4="scheme://namespace.test.domain/4">
<ns3:root>
<ns4:foo attfoo="51"/>
</ns3:root>
</data>
</datamodel>
<transition event="done.state.fifty"
xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3"
xmlns:ns4="scheme://namespace.test.domain/4"
cond="Data('number($data50/ns1:root/ns2:foo/@ns3:attfoo)') + Data('number($rootdata/ns1:root/ns2:foo/ns3:bar)') eq 52"
target="sixty" />
</state>
<!-- Multiple data, prefixes on datamodel and transition elements -->
<state id="sixty">
<datamodel xmlns:ns1="scheme://namespace.test.domain/1"
xmlns:ns2="scheme://namespace.test.domain/2"
xmlns:ns3="scheme://namespace.test.domain/3"
xmlns:ns4="scheme://namespace.test.domain/4">
<data id="data60">
<root xmlns="">
<ns1:foo ns2:attfoo="60"/>
</root>
</data>
<data id="data61">
<ns3:root>
<ns4:foo attfoo="61"/>
</ns3:root>
</data>
</datamodel>
<transition event="done.state.sixty"
xmlns:pre1="scheme://namespace.test.domain/1"
xmlns:pre2="scheme://namespace.test.domain/2"
xmlns:pre3="scheme://namespace.test.domain/3"
xmlns:pre4="scheme://namespace.test.domain/4"
cond="Data('number($data60/root/pre1:foo/@pre2:attfoo)') + Data('number($data61/pre3:root/pre4:foo/@attfoo)') eq 121"
target="seventy">
<!-- should be 121 -->
<log expr="Data('number($data60/root/pre1:foo/@pre2:attfoo)') + Data('number($data61/pre3:root/pre4:foo/@attfoo)')"/>
</transition>
</state>
<final id="seventy"/>
</scxml>