[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [wsbpel] Issue - 147 - Proposal For Vote
Alex, can you please submit this a proposal for vote for issue 147.4? I'd like the group to vote on this issue in general before changing any text or accepting any amendments. Thanks, Yaron Alex Yiu wrote: > > Hi Yaron and Danny, > > *Danny:* > Originally I also had a similar concern in my mind. However, XPath 1.0 is a very > weak-typed language. The round() function application here is actually > consistent with other XPath 1.0 situation. > > See: http://www.w3.org/TR/xpath#function-substring > See: substring("12345", 1.5, 2.6) returns "234" > > *Yaron: > * > +1 from me in general. :-) > > I hope my preference of having two activities on 147.4 would be accepted as a > friendly amendent. Here are the changes related to this amendment. > > ============================ > <forEach counterName="ncname" standard-attributes> > standard-elements > <iterator> > <startCounterValue expressionLanguage="anyURI"> > ... > </startCounterValue>? > <finalCounterValue expressionLanguage="anyURI"> > ... > </finalCounterValue>? > </iterator> > Scope > </foreach> > > <parallelForEach counterName="ncname" standard-attributes> > standard-elements > <iterator> > <startCounterValue expressionLanguage="anyURI"> > ... > </startCounterValue>? > <finalCounterValue expressionLanguage="anyURI"> > ... > </finalCounterValue>? > </iterator> > Scope > </parallelForEach> > ============================ > > FROM: > ----------------------------------- > If parallel="no" then this is a serial foreach where the enclosed scope activity > will be repeated N+1 times. ... > ----------------------------------- > > TO: > ----------------------------------- > <forEach> is a serial version of iteration activity where the enclosed scope > activity will be repeated N+1 times. ... > ----------------------------------- > > FROM: > ----------------------------------- > If parallel="yes" then this is a parallel foreach where the N+1 instances of the > enclosed scope activity will occur in parallel. > ----------------------------------- > > TO: > ----------------------------------- > <parallelForEach> is a parallel version of iteration activity where the N+1 > instances of the enclosed scope activity will occur in parallel. > ----------------------------------- > > > XSD Changes. > ================================ > Add the following to the 'activity' group: > > <element name="forEach" type="bpws:tGenericForEach"/> > <element name="parallelForEach" type="bpws:tGenericForEach"/> > > Then add the following into the main body of the schema: > > <complexType name="_tGenericForEach_"> > <complexContent> > <extension base="bpws:tActivity"> > <sequence> > <element name="iterator" type="bpws:tIterator"/> > <element name="scope" type="bpws:tScope"/> > </sequence> > <attribute name="counterName" type="NCName" > use="required"/> > </extension> > </complexContent> > </complexType> > > [_Note:_ the parallel attribute is now dropped.] > > <complexType name="tIterator"> > <complexContent> > <extension base="bpws:tExtensibleElements"> > <sequence _minOccurs="0"_> > <element name="startCounterValue" > type="bpws:tExpression"/> > <element name="finalCounterValue" > type="bpws:tExpression"/> > </sequence> > </extension> > </complexContent> > </complexType> > > [_Note:_ I change the location of minOccurs to better reflect Yaron's intended > syntactic requirement of these expressions.] > > ================================ > > > Thanks! > > > Regards, > Alex Yiu > > > > Danny van der Rijn wrote: > >> Looks good. One small nit/question: Why do you require a call to round() if >> it's XPath? I would think that it would be more valuable if a counter value >> of, say, 2.1, would be an error, rather than 2. >> >> Danny >> >> Yaron Y. Goland wrote: >> >>> 147 - Serial and Parallel Foreach >>> >>> Proposal: Introduce a foreach to BPEL with both serial and parallel semantics. >>> >>> Rationale: Just check the issue list for issue 147. There is a whole series >>> of mails attesting to how important this activity is. >>> >>> Introduce a section 12.6 >>> >>> 12.6 - foreach >>> >>> <forEach counterName="ncname" parallel="yes|no" standard-attributes> >>> standard-elements >>> <iterator> >>> <startCounterValue expressionLanguage="anyURI"> >>> ... >>> </startCounterValue>? >>> <finalCounterValue expressionLanguage="anyURI"> >>> ... >>> </finalCounterValue>? >>> </iterator> >>> Scope >>> </foreach> >>> >>> The foreach activity is an iterator that will repeat its contained scope >>> activity exactly N+1 times where N equals the <finalCounterValue> minus the >>> <startCounterValue>. >>> >>> When the foreach activity is started the expressions in <startCounterValue> >>> and <finalCounterValue> are evaluated for the first and only time. That is, >>> once the two values are returned they remain constant for the lifespan of the >>> activity. Both expressions MUST each return a TII (meaning they contain at >>> least one character) that can be validated as a xs:unsignedint and the >>> startCounterValue MUST be less than or equal to the finalCounterValue, if any >>> of these restrictions are violated then the bpws:forEachCounterError fault >>> MUST be thrown. If the expression language used in either element happens to >>> be urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0 then the expressions >>> contained in the two elements MUST be wrapped in implicit calls to the >>> round(number()) functions. >>> >>> The Scope activity MUST NOT have a variable explicitly declared in it with >>> the same name as contained in the counterName attribute, a violation of this >>> requirement MUST be statically enforced. >>> >>> If parallel="no" then this is a serial foreach where the enclosed scope >>> activity will be repeated N+1 times. During each repetition a variable of >>> type xs:unsignedint will be created on the enclosed scope activity with the >>> name specified in the counterName attribute. The counter variable's creation >>> and initialization MUST occur before any other variables on the enclosed >>> scope activity are declared, therefore other variables declared on the >>> enclosed scope activity MAY refer to the counter variable in their own >>> initializations. The counter variable is local to the enclosed scope and >>> although its value can be changed during an iteration that value will be lost >>> when the enclosed scope exits and will not affect the value that the next >>> iteration's counter will be set to. >>> >>> The first iteration of the scope will see the counter variable set to the >>> startCounterValue. The next iteration will cause the counter variable to be >>> set to the startCounterValue plus one. Each subsequent iteration will >>> increment the previously initialized counter value by one until the final >>> iteration where the counter will be set to the finalCounterValue. >>> >>> If parallel="yes" then this is a parallel foreach where the N+1 instances of >>> the enclosed scope activity will occur in parallel. In essence an implicit >>> flow is dynamically created with N+1 copies of the foreach's enclosed scope >>> activity as children. Each copy of the scope activity will have the same >>> counter variable defined in the same manner as specified for serial foreach >>> with the exception that each counter variable will be uniquely initialized to >>> one of the integer values starting with startCounterValue and covering all >>> integer values, incremented by one, up to and including finalCounterValue. >>> >>> Both the start and final counter values are optional in the schema but this >>> is only to allow for future use of extension elements. A non-extended version >>> of the forEach activity MUST include both the startcountervalue and the >>> finalCounterValue. >>> >>> Add to Appendix A: >>> >>> forEachCounterError - Either the startCounterValue or finalCounterValue >>> returned non-unsigned integer values or the start value was greater than the >>> final value. >>> >>> Add to Schema: >>> >>> Add the following to the 'activity' type: >>> >>> <element name="forEach" type="bpws:tForEach"/> >>> >>> Then add the following into the main body of the schema: >>> >>> <complexType name="tForEach"> >>> <complexContent> >>> <extension base="bpws:tActivity"> >>> <sequence> >>> <element name="iterator" type="bpws:tIterator"/> >>> <element name="scope" type="bpws:tScope"/> >>> </sequence> >>> <attribute name="counterName" type="NCName" >>> use="required"/> >>> <attribute name="parallel" type="bpws:tBoolean" >>> use="required"/> >>> </extension> >>> </complexContent> >>> </complexType> >>> >>> <complexType name="tIterator"> >>> <complexContent> >>> <extension base="bpws:tExtensibleElements"> >>> <sequence> >>> <element name="startCounterValue" >>> type="bpws:tExpression" minOccurs="0"/> >>> <element name="finalCounterValue" >>> type="bpws:tExpression" minOccurs="0"/> >>> </sequence> >>> </extension> >>> </complexContent> >>> </complexType> >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe from this mail list, you must leave the OASIS TC that >>> generates this mail. You may a link to this group and all your TCs in OASIS >>> at: >>> https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php >>> >> >> --------------------------------------------------------------------- >> To unsubscribe from this mail list, you must leave the OASIS TC that >> generates this mail. You may a link to this group and all your TCs in OASIS >> at: >> https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]