OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

wsbpel message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [wsbpel] Fixing up extensiblity syntax in BPEL by using <annotation>pattern



Hi,

Yes, the syntax are very similar but not identical.
There is a minor difference: I do not make use of the <appinfo> wrapper.

XSD syntax:
<annotation>
 <documentation> anything goes </documentation>*
 <appinfo source="URI"?> xsd:any </appinfo>*
</annotation>

BPEL syntax:
<annotation>
 <documentation> anything goes </documentation>*
  xsd:any*
</annotation>

If people have strong opinion of having similar to <appinfo>, I don't 
mind adding it.
As of now, I don't see a big need of it.


Regards,
Alex Yiu


Assaf Arkin wrote:

> If I remember correctly, the XSD syntax is:
>
> <annotation>
>  <documentation> anything goes </documentation>
>  <appinfo> anything goes </appinfo>?
> </annotation>
>
> All application extensions are placed in the appinfo element of the 
> annotation element.
>
> Assaf
>
> Alex Yiu wrote:
>
>>
>> Hi, all,
>>
>> I would like to discuss the following issue in upcoming BPEL F2F: 
>> either as a standalone issue or as a sub-issue Issue 111 or Issue 11.
>>
>> =============================================
>>
>>
>>       Fixing up extensiblity syntax in BPEL by using <annotation> 
>> pattern
>>
>>
>> _*Issue Description:*_
>>
>> Currently, we have a number of places which make uses of <xsd:any> 
>> (aka extensibility or xml-data placeholder) in our BPEL language:
>>
>>    1. xsd:any to any BPEL activity and bpws:tExtensible construct:
>>       e.g. <empty>, <sequence> or <flow>)
>>    2. literal form of from-spec
>>    3. query and expression language as a result of Issue 13
>>    4. extended assign operation as a result of Issue 11.1
>>    5. Other extensibilities: e.g. extension actvity if we pass Issue 111
>>
>>
>> Mix and matching all these extension points and xsd:any produces a 
>> bunch of syntax and semantic ambiguities. Given our current extension 
>> syntax, we find it very difficult to come-up a very clear and 
>> easy-to-use syntax grammar.
>>
>> Since not all the people on this email list are XSD experts here, I 
>> am going to illustrate those ambiguities by some samples and EBNF:
>>
>>     * _Semantic ambiguity in from-spec:_
>>       E.g.:
>>       <from>
>>          <foo:extensionToFromSpec />
>>          <bar:literalFromData />
>>       </from>
>>
>>       Here we have two elements of other namespace. One is the
>>       extension of from-spec. One is the literal data for the
>>       from-spec. By just looking into the syntax / parse-tree, without
>>       looking into its semantics, we CANNOT tell which elements fits
>>       which role!!!
>>
>>       Paul Brown from FiveSight reported in a similar problem before:
>>       [ See:
>>       http://lists.oasis-open.org/archives/wsbpel/200410/msg00077.html
>>       - item (3) ]
>>
>>     * _Syntax ambiguity in <assign>_
>>       E.g.:
>>       <assign>
>>           <foo:transactionEnabled />
>>           <foo:xmlDataOp />
>>           <copy>
>>              <from>...</from>
>>              <to>...</to>
>>           </copy>
>>       </assign>
>>
>>       Informal EBNF for assign
>>       assign ::= <assign> <documentation>* *any** <targets>? <sources>?
>>                          ( *any* | <copy> )+ </assign>
>>
>>       As a result of Issue 11.1, under <assign>, we have both an
>>       extension to <assign> (i.e. <foo:transactionEnabled />) and an
>>       extended xml manipulation operation (i.e. <foo:xmlDataOp />).
>>       Again, by just looking into the syntax / parse-tree, we CANNOT
>>       tell which elements fits which role (*xsd:any*)!!!
>>
>>       [ One additional caveat is: when the above syntax is mixed with
>>       source or target control links. Those source and target elements
>>       will be inserted between <foo:xmlDataOp> and <copy>. This caveat
>>       was discovered by Yaron.  ]
>>
>>
>> These ambiguities are definitely undesirable. They are sometimes even 
>> illegal or creates misleading syntax. The illegal case is known as: 
>> ambiguous grammar problem. As long as we are using context-free 
>> grammar (e.g. EBNF) to construct parse tree, it seems to us that we 
>> cannot escape this clasical ambiguous grammar problem with our 
>> current extension syntax. In the XSD world, this ambigous grammar  
>> problem is known as "indeterministic content model", which is illegal 
>> in XSD.
>>
>> *_Submitter's Proposal: _*
>>
>> Some of us have banged our heads to the table to try to resolve this 
>> problem while keeping  the same level of BPEL extensibility. Finally, 
>> we think we find the solution: _to apply a syntax pattern similar to 
>> <xsd:annotation> to BPEL_.
>>
>> We suggest to have a <annotation> wrapper element to clearly separate 
>> the element-based extension to any Extensible BPEL Construct 
>> (bpws:tExtensible). After applying <annotation> pattern, the 
>> previously ambigous examples would become like the following:
>>
>> <from>
>>    *<annotation> *
>>      <foo:extensionToFromSpec />
>>    *</annotation>*
>>    *<literal>*
>>       <bar:literalFromData />
>>    *</literal>*
>> </from>
>>
>> (We also add <literal> as a separator per Paul Brown's suggestion and 
>> that will allow use to use any namespace inside the <literal> element.)
>>
>> <assign>
>>     *<annotation>*
>>         <foo:transactionEnabled />
>>     *</annotation>*
>>     <foo:xmlDataOp />
>>     <copy>
>>        <from>...</from>
>>        <to>...</to>
>>     </copy>
>> </assign>
>>
>> Now those ambigous extension entries are nicely seperated.
>>
>> Informal EBNF for assign will become:
>> annotation ::= *<annotation>* <documentation>* *any* <annotation> *
>> assign ::= <assign> *<annotation>?* <targets>? <sources>?
>>                    ( *any* | <copy> )+ </assign>
>>
>>
>> This will solve Issue 111 grammar as well. E.g.:
>>
>> <sequence>
>>     *<annotation>*
>>         <foo:extensionToSeq />
>>     *</annotation>*
>>     <foo:barExtendedActivity />
>>     <invoke ... />
>>     ...
>> </sequence>
>>
>>
>> Please note that this <bpel:annotation> is VERY similarly to 
>> <xsd:annotation> design pattern. Existing XSD users should have no 
>> problem in learning this pattern.
>>
>>
>>
>> _*Details XSD Changes:*_
>>
>> -----------------------------
>> *    <element name="annotation">
>>         <complexType>
>>             <sequence>
>>                 <element ref="bpws:documentation" minOccurs="0" 
>> maxOccurs="unbounded" />
>>                 <any namespace="##other" processContents="lax" 
>> minOccurs="0" maxOccurs="unbounded"/>
>>             </sequence>
>>         </complexType>
>>     </element>*
>>     <complexType name="tExtensibleElements">
>>         <annotation>
>>             <documentation>
>>         This type is extended by other component types
>>         to allow elements and attributes from
>>         other namespaces to be added.
>>        </documentation>
>>         </annotation>
>>         <sequence>
>>             *<element ref="bpws:annotation" minOccurs="0"/>*
>>         </sequence>
>>         <anyAttribute namespace="##other" processContents="lax"/>
>>     </complexType>
>> -----------------------------
>>
>> -----------------------------
>>     <group name="activity">
>>         ...
>>         <choice>
>>             <element name="empty" type="bpws:tEmpty"/>
>>             <element name="invoke" type="bpws:tInvoke"/>
>>             <element name="receive" type="bpws:tReceive"/>
>>             <element name="reply" type="bpws:tReply"/>
>>             <element name="assign" type="bpws:tAssign"/>
>>             <element name="wait" type="bpws:tWait"/>
>>             <element name="throw" type="bpws:tThrow"/>
>>             <element name="rethrow" type="bpws:tRethrow"/>
>>             <element name="exit" type="bpws:tTerminate"/>
>>             <element name="flow" type="bpws:tFlow"/>
>>             <element name="switch" type="bpws:tSwitch"/>
>>             <element name="while" type="bpws:tWhile"/>
>>             <element name="sequence" type="bpws:tSequence"/>
>>             <element name="pick" type="bpws:tPick"/>
>>             <element name="scope" type="bpws:tScope"/>
>>             <element name="compensate" type="bpws:tCompensate"/>
>> *            <!-- this xsd:any is for Issue 111, if we pass it -->
>>             <any namespace="##other" processContents="lax" />
>> *        </choice>
>>     </group>
>> -----------------------------
>>
>> -----------------------------
>>     <complexType name="tAssign">
>>         <complexContent>
>>             <extension base="bpws:tActivity">
>> *                <!-- for Issue 11.1 -->
>>                 <choice maxOccurs="unbounded">
>>                     <element name="copy" type="bpws:tCopy" />
>>                     <any namespace="##other" processContents="lax" />
>>                 </choice>
>> *            </extension>
>>         </complexContent>
>>     </complexType>
>>
>> *    <element name="literal">
>>         <complexType mixed="true">
>>             <sequence>
>>                 <any processContents="lax" minOccurs="0" 
>> maxOccurs="unbounded"/>
>>             </sequence>
>>         </complexType>
>>     </element>*
>> -----------------------------
>>
>>
>> -----------------------------
>>     *<!-- pre 103 --> *
>>     <complexType name="tFrom">
>>         <complexContent>
>>             <extension base="bpws:tExtensibleElements">
>>                 <sequence>
>>                     <choice minOccurs="0">
>> *                        <any namespace="##other" 
>> processContents="lax" />*
>>                         <element ref="bpws:query"/>
>>                         <element ref="bpws:expression"/>
>>                         <element ref="bpws:service-ref"/>
>>                         *<element ref="bpws:literal" />*
>>                     </choice>
>>                 </sequence>
>>                 <attribute name="variable" type="NCName"/>
>>                 <attribute name="part" type="NCName"/>
>>                 <attribute name="property" type="QName"/>
>>                 <attribute name="partnerLink" type="NCName"/>
>>                 <attribute name="endpointReference" type="bpws:tRoles"/>
>>                 <attribute name="opaque" type="bpws:tBoolean"/>
>>             </extension>
>>         </complexContent>
>>     </complexType>
>>     <element name="to">
>>         <complexType>
>>             <complexContent>
>>                 <restriction base="bpws:tFrom">
>>                     <sequence>
>> *                        <element ref="bpws:annotation" 
>> minOccurs="0"/> *
>>                         <choice minOccurs="0">
>>                             <element ref="bpws:query"/>
>>                         </choice>
>>                     </sequence>
>>                     <attribute name="opaque" type="bpws:tBoolean" 
>> use="prohibited"/>
>>                     <attribute name="endpointReference" 
>> type="bpws:tRoles" use="prohibited"/>
>>                 </restriction>
>>             </complexContent>
>>         </complexType>
>>     </element>
>> -----------------------------
>>
>>
>> -----------------------------      *<!-- post 103 -->*
>>     <complexType name="tFrom" mixed="true">
>>         <sequence>
>>             *<element ref="bpws:annotation" minOccurs="0"/>*
>>             <choice minOccurs="0">
>>                 *<any namespace="##other" processContents="lax" />
>>                 <element ref="bpws:literal" />
>> *                <element ref="bpws:service-ref"/>
>>             </choice>
>>         </sequence>
>>         <attribute name="expressionLanguage" type="anyURI"/>
>>         <attribute name="variable" type="NCName"/>
>>         <attribute name="property" type="QName"/>
>>         <attribute name="partnerLink" type="NCName"/>
>>         <attribute name="endpointReference" type="bpws:tRoles"/>
>>         <attribute name="opaque" type="bpws:tBoolean"/>
>>         <anyAttribute namespace="##other" processContents="lax"/>
>>     </complexType>
>>
>>     <element name="to">
>>         <complexType mixed="true">
>>             <sequence>
>> *                <element ref="bpws:annotation" minOccurs="0"/>
>>                 <any namespace="##other" processContents="lax" 
>> minOccurs="0" />*
>>             </sequence>
>>             <attribute name="queryLanguage" type="anyURI"/>
>>             <attribute name="variable" type="NCName"/>
>>             <attribute name="property" type="QName"/>
>>             <attribute name="partnerLink" type="NCName"/>
>>             <anyAttribute namespace="##other" processContents="lax"/>
>>         </complexType>
>>     </element>
>> ----------------------------- 
>> =============================================
>>
>>
>>
>> Thanks!
>>
>>
>> Regards,
>> Alex Yiu
>>
>>
>>
>




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]