[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]