Re: Syntactic Convention for Attributes

Icing for icing, I'd like to rename @elementReference to @element.

In (1), the "enumeration" type should be given a more descriptive name,
e.g. "AccessPattern".

Also, for completeness in (2) we should show that @style is optional, i.e.

<ws:attribute
     element="xs:QName"
     access="read|write|read-write"
     style="xs:anyURI"? />*

Finally, I think that @style can actually be removed. Any additional
information to processors should be specified using extensibility. The
idea of providing an extensibility point in a syntactic sugar construct
that is already extensible seems suspect.

Thanks,
Roberto


Jean-Jacques Moreau wrote:
> 
> I don't eat much sugar in general, but I'll definitely go for the icing 
> this time!
> 
> I'd go as far as suggesting changing the "attributes" prefix to the 
> standard "ws".
> 
> Jean-Jacques.
> 
> Without syntactic sugar:
> 
>   <ws:operation
>        name="get_XXX"
>        style="http://www.w3.org/@@@@/@@/wsdl/style/get-attribute"
>        pattern="http://www.w3.org/@@@@/@@/wsdl/in-out">
>     <ws:input name="in" body="wrappers:get_XXX"/>
>     <ws:output name="out" body="wrappers:get_XXXResponse"/>
>   </ws:operation>
> 
> With syntactic sugar:
> 
>   <attributes:attribute elementReference="tns:foo"
>                         access="read-write"/>*
> 
> 
> Umit Yalcinalp wrote:
> 
>> Folks,
>>
>> As I promised on Monday's concall, I have crafted a syntactic 
>> convention for WSDL. It is not perfect (not done much proof reading), 
>> but just to give you an idea what I am thinking. This *is* a syntactic 
>> sugar, not a proposal to change the component model. It is 
>> complementary to the rules that are defined in [1].
>>
>> This is basically reverse engineering of what we have with one added 
>> rule, (4) and clarifications with  (5) and (6). Rule (4) allows the 
>> capability for bulk set/get that needs to be defined later, elsewhere.
>>
>> Let me know what you think about this proposal. Again, I would like to 
>> discuss this proposal within the context of  [1].
>> This is NOT to create another discussion about why some people don't 
>> like attributes. ;-)  So I will appreciate if you could send comments 
>> with this goal in mind.
>>
>> Thanks.
>>
>> --umit
>>
>> [1] 
>> http://lists.w3.org/Archives/Public/public-ws-desc-state/2003Oct/0020.html 
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> Syntactic Sugar for Defining Attributes in WSDL 2.0:
>>
>> (1) Define the schema for defining an attribute:
>>
>> <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
>>            
>> targetNamespace='http://www.w3.org/@@@@/@@/wsdl/style/attribute'
>>            
>> xmlns:attributes='http://www.w3.org/@@@@/@@/wsdl/style/attribute'
>>            elementFormDefault='qualified'>
>>
>>         <xs:element name="attribute">
>>             <xs:complexType>
>>             <xs:attribute name="elementReference"                 
>> type="xs:QName" use="required"/>
>>             <xs:attribute name="access"                 
>> type="attributes:enumeration"                 use="required"/>
>>             <xs:attribute name="style"                 type="xs:anyURI"/>
>>         </xs:complexType>
>>     </xs:element>
>>
>>     <xs:simpleType name="enumeration">
>>         <xs:restriction base="xs:string">
>>             <xs:enumeration value="read"/>
>>             <xs:enumeration value="write"/>
>>             <xs:enumeration value="read-write"/>
>>         </xs:restriction>
>>     </xs:simpleType>
>>
>> </xs:schema>
>>
>> Note that this attribute is in its own namespace, "attribute", since
>> we can not share the namespace from "get-attribute" or
>> "set-attribute".
>>
>> (2) The attribute element may appear as a child of the interface
>> definition as an extension.
>> Example:
>> <definitions>
>>   <interface>
>>     <operation
>>           name="xs:NCName"           pattern="xs:anyURI"
>>           style="xs:anyURI"? >
>>       <documentation />?
>>       [ <feature /> | <property /> |         [ <input /> | <output /> 
>> | <infault /> | <outfault /> ]+
>>       ]*
>>     </operation>
>>   <attributes:attribute elementReference="tns:foo"
>>                         access="read-write"/>*
>>   </interface>
>> </definitions>
>>
>> (3) If an attribute element appears as a child of the interface
>> definition in a WSDL document, it indicates a shortcut for defining a
>> set of operations that use the styles, "get-attribute" and
>> "set-attribute" as follows:
>>
>> 3.1 The elementReference element must be the QName of an
>> element in the document.
>>
>> 3.2 For each elementReference element specified within an
>> attribute element, the following operations are assumed.
>> 3.2.1. If the value of the access attribute is "read",
>> then, the presence of the attribute element is equivalent to the 
>> following declarations:
>>
>> Types: The following two elements must be present.
>> (a) a global empty element declaration named "get_{Y}". 
>> (b) a global element declaration named get_{Y}Response defined as a
>> complex type that contains a sequence that contains with a single
>> child element. The element must be a reference to the element 
>> designated by the QName specified in the elementReference attribute.
>>
>> Operations: One operations must be present in WSDL definition and 
>> contrained as follows:
>> (c)
>> - An interface operation must be named "get_{Y}.
>> - The interface operation must have the style attribute and its value
>> must be "http://www.w3.org/@@@@/@@/wsdl/style/get-attribute".
>>
>> - The interface operation must have a pattern attribute and its value
>> must be "http://www.w3.org/@@@@/@@/wsdl/in-out".
>> - The body attribute of the input element must contain the QName of
>> the empty element declared in (a).
>> - The body attribute of the output element must contain the QName of
>> the element declared in (b).
>> 3.2.2 If the value of the access attribute is "write", then the
>> presence of the attribute element in an interface declaration is
>> equivalent to the following declarations:
>> Types:
>> (d) a global element declaration named set_{Y} defined
>> as a complex type that contains a sequence with a single child 
>> element. The element must be a reference to the element designated by 
>> the QName specified in the elementReference attribute.
>> (e)A global empty element declaration named "set_{Y}Response".
>>
>> Operations: One operations must be present in WSDL definition and 
>> contrained as follows:
>> (c)
>> - An interface operation must be named "set_{Y}.
>> - The interface operation must have the style attribute and its value
>> must be "http://www.w3.org/@@@@/@@/wsdl/style/set-attribute".
>>
>> - The interface operation must have a pattern attribute and its value
>> must be "http://www.w3.org/@@@@/@@/wsdl/in-out".
>> - The body attribute of the input element must contain the QName of
>> the empty element declared in (d).
>> - The body attribute of the output element must contain the QName of
>> the element declared in (e).
>> 3.2.3 If the value of the access attribute is "read-write", then the
>> presence of the attribute element in an interface declaration is
>> equivalent to having both the declarations specified in 3.2.1 and
>> 3.2.2. 
>> In addition, the naming conventions for choosing a value for {Y}
>> must follow the restrictions that are specified for WSDL get/set
>> attribute style document.
>>
>> (4) Typically, the style attribute in an attribute declaration will
>> not contain a value. If this attribute has a value, it may indicate
>> additional operations that may be relevant for a WSDL processor that
>> would process these styles. For example, additional rules and
>> operations may be defined for bulk get/set operations and would be
>> indicated with an appropriate style URI that the processors may
>> utilize.
>>
>> (5) It is an error if operations/types that are named and further
>> defined in 3.2.1, 3.2.2 and 3.2.3 as a result of this convention do
>> exist in the WSDL document, but their definitions do not match the
>> requirements presented in these sections.
>> (6) This syntactic convention is a normative for declaring
>> attributes. This syntactic convention is not required to be understood
>> for WSDL processors, but recommended to be supported by those that
>> recognize get/set attribute styles as additional convenience for
>> users.

Received on Wednesday, 29 October 2003 13:23:14 UTC