latest proposal on issues #144 and #161 - array encoding

 Hello all. 8-)
 This message is the latest proposal for how we can encode arrays
in SOAP Encoding in more XML-like way. It also seems to solve the
issue #161 on some of the former wording.

 See [1] for background information on this proposal.
 In [3] you can find the previous version of this proposal.
 Also of interest may be [2] with information on how this
proposal affects current implementations.

 Summary of the changes in this update:
 1) removed the term "sparse array" because of its clear
mathematical connotations that are inappropriate here
 2) clarified that member element names needn't be the same for
all the members of one array, pointed to section 4.1 rule #2
 3) updated second paragraph of 4.4.2 to show a better pair of
examples of subtyping enc:Array.
 4) added a paragraph to 4.4.2.1 stating that the meaning of
untransmitted members in partially transmitted arrays is
application and implementation specific.

 This proposal also addresses issue 161 by removing and
rephrasing the problematic text whose misunderstanding resulted
in this issue.


 ------------------------------ the proposal begin
 4.1 rule #8
 Arrays are compound values. SOAP Encoding arrays are defined as
having a type of "enc:Array" or a type derived there from. See
subsection 4.4.2 for specific rules on array serialization.


 4.4.2 Arrays
 SOAP Encoding arrays have one or more dimensions. An array value
is represented as a series of elements reflecting the array.
There is no specific constraint on the names of the member
elements, the member element names needn't even be equal (see
also section 4.1 rule #2). The members MUST appear in ascending
ordinal sequence; for multi-dimensional arrays the dimension on
the right side varies most rapidly.
 Array types derived from enc:Array MUST be restrictions of the
enc:Array type and can be used to represent, for example, arrays
limited to integers or arrays of a fixed size.
 SOAP Encoding arrays can be single-reference or multi-reference
values, and consequently may be represented as the content of
either an embedded or independent element. The elements which
make up the array can themselves can be of any type, including
nested arrays.
 A SOAP Encoding array MAY contain an enc:arraySize attribute of
the type "List of (positiveInteger or '*')" whose items mean the
sizes in each of the array's dimensions (unspecified size in case
of the asterisk). The number of the sizes representes the number
of dimensions of this array. The default value of this attribute
is "*". For example, enc:arraySize="3 5" attribute signifies a
two-dimensional array with three rows and five columns.
enc:arraySize="* 5" signifies a two-dimensional array with an
unspecified number of rows and five columns.
 In case there is an asterisk on other than the first position,
all the members in the array MUST specify their position.
 A SOAP Encoding array MAY contain an enc:itemType attribute of
the type QName. This type specifies the base type for the type of
every member of the array. The default value of this attribute is
anyType. Each member's type MUST be a subtype of itemType or it
must be the itemType itself.
 A SOAP Encoding array MAY contain an enc:offset attribute
indicating that there is no member in this array on position
below the value of this attribute. This can be used to indicate
the offset position of a partially represented array (see 4.4.2.1
Partially Transmitted Arrays).
 Likewise, members of an array MAY contain an enc:position
attribute indicating the position of that individual member in
the enclosing array (see 4.4.2.1 Partially Transmitted Arrays).
The position attribute MUST NOT indicate a position below the
offset (if present) or below the position of the previous member
in the array.
 The value of the enc:offset and the enc:position attribute is of
type "List of nonNegativeInteger" with offsets and positions
based at 0.
 In the presence of both offset and position the position
attribute is absolute, it is not relative to the offset value.
 The highest position of a member in an array must not be greater
than the size of the array. No two members in an array may
specify the same position.
 The position of a member is computed assording to the following:

If the member has an explicit position attribute,
    that position attribute indicates the position exactly
Else
    If there was a prior element in the encoding,
        the member has the position following the prior element's
        position in the array,
    Else
        If there is an offset attribute, position is given by
            the value of the offset,
        Else position is zero in all dimensions.



 [stripped examples and schemata updated according to the rules above]

 4.4.2.1 Partially Transmitted Arrays
 SOAP Encoding provides support for partially transmitted arrays
- arrays in which some members are not transmitted. SOAP Encoding
provides two options of skipping some members:
 1) skipping the beginning and the ending of an array,
 2) specifying the exact positions of members in an array.
 The first option uses the attribute enc:offset to specify how
much of the beginning of the array is skipped. Skipping the
ending of an array is done by simply not transmitting the members
at the end. For example:

<enc:Array enc:offset="2 2" enc:arraySize="4 3">
   <x>3rd row, 3rd col</x>
   <x>4th row, 1st col</x>
   <x>4th row, 2nd col</x>
</enc:Array>

 The second option uses the attribute enc:position on the
members, following rules set above.
 The semantics and handling of the members of the array that are
not transferred is application and implementation specific.

 ------------------------------ the proposal end



                            Jacek Kopecky

                            Systinet, Inc.
                            http://www.systinet.com/



[1] http://lists.w3.org/Archives/Public/xml-dist-app/2001Oct/0295.html
[2] http://lists.w3.org/Archives/Public/xml-dist-app/2001Nov/0087.html
[3] http://lists.w3.org/Archives/Public/xml-dist-app/2001Nov/0022.html

Received on Monday, 19 November 2001 22:03:58 UTC