2.3 Thơng điệp SOAP
2.3.5.2 Kiểu phức hợp
Các mảng SOAP có một tập hợp các quy tắc rất rõ ràng, nó yêu cầu phải chỉ rõ cả kiểu phần tử và kích cỡ mảng. SOAP cũng hỗ trợ mảng nhiều chiều, nhưng không phải tất cả các triển khai SOAP hỗ trợ chức năng nhiều chiều(tùy thuộc vào công cụ triển khai SOAP ).
ðể tạo một mảng ta phải chỉ rõ thuộc tính xsi:type của mảng. Mảng cũng bao gồm thuộc tính arrayType. Thuộc tính ñược yêu cầu ñể xác ñịnh khiểu dữ liệu cho các phần tử của mảng và số chiều của mảng. ví dụ: khai báo mảng 1 chiều với kích cỡ 10, kiểu dữ liệu là double arrayType="xsd:double[10]". Hoặc khai bảo mảng hai chiều kiểu dữ liệu string và kích cỡ mỗi chiều ñều là 5 phần tử arrayType="xsd:string[5,5]" [8].
Dưới ñây là ví dụ một phản hồi SOAP với một mảng với các giá trị kiểu double <SOAP-ENV:Body> <ns1:getPriceListResponse xmlns:ns1="urn:examples:pricelistservice" SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding"> <return xmlns:ns2="http://www.w3.org/2001/09/soap-encoding" xsi:type="ns2:Array" ns2:arrayType="xsd:double[2]"> <item xsi:type="xsd:double">54.99</item> <item xsi:type="xsd:double">19.99</item> </return> </ns1:getPriceListResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Chú ý: khi arrayType đặt là xsd:double[2] thì mỗi phần tử trong mảng phải ñược chỉ rõ trong phần tử item như trên. Ngược lại với mảng, cấu trúc chứa nhiều giá trị, nhưng mỗi phần tử ñược xác ñịnh với duy nhất một phần tử truy nhập. Ví dụ, xét một mục trong bảng các sản phẩm thì cấu trúc mơ tả mục đó có thể chứa
productSKU, productName, mơ tả và giá. Dưới đây là cấu trúc biểu diễn thơng điệp SOAP[8]. <SOAP-ENV:Body> <ns1:getProductResponse xmlns:ns1="urn:examples:productservice" SOAP-ENV:encodingStyle="http://www.w3.org/2001/09/soap-encoding"> <return xmlns:ns2="urn:examples" xsi:type="ns2:product">
<name xsi:type="xsd:string">Red Hat Linux</name> <price xsi:type="xsd:double">54.99</price>
<description xsi:type="xsd:string">Red Hat Linux Operating System </description>
<SKU xsi:type="xsd:string">A358185</SKU> </return>
</ns1:getProductResponse> </SOAP-ENV:Body>
Mỗi phần tử trong cấu trúc ñược xác ñịnh với một tên truy nhập duy nhất. Ví dụ, thơng điệp trên bao gồm 4 phần tử truy nhập, name, price, description, và SKU. Mỗi phần tử có thể có một kiểu dữ liệu riêng; như name có kiểu là string, price là có kiểu là double.