SOAP - Mã hóa

SOAP bao gồm một tập hợp các quy tắc cài sẵn để mã hóa các kiểu dữ liệu. Nó cho phép thông báo SOAP chỉ ra các kiểu dữ liệu cụ thể, chẳng hạn như số nguyên, số nổi, số đôi hoặc mảng.

  • Các kiểu dữ liệu SOAP được chia thành hai loại lớn - kiểu vô hướng và kiểu phức hợp.

  • Loại vô hướng chứa chính xác một giá trị như họ, giá hoặc mô tả sản phẩm.

  • Loại kết hợp chứa nhiều giá trị như đơn đặt hàng hoặc danh sách báo giá chứng khoán.

  • Các kiểu kết hợp được chia nhỏ hơn nữa thành mảng và cấu trúc.

  • Kiểu mã hóa cho thông báo SOAP được đặt thông qua thuộc tính SOAP-ENV: encodingStyle .

  • Để sử dụng mã hóa SOAP 1.1, hãy sử dụng giá trị http://schemas.xmlsoap.org/soap/encoding/

  • Để sử dụng mã hóa SOAP 1.2, hãy sử dụng giá trị http://www.w3.org/2001/12/soap-encoding

  • Đặc tả SOAP mới nhất thông qua tất cả các kiểu tích hợp được định nghĩa bởi Lược đồ XML. Tuy nhiên, SOAP vẫn duy trì quy ước riêng của nó để xác định các cấu trúc không được chuẩn hóa bởi Lược đồ XML, chẳng hạn như mảng và tham chiếu.

Các loại vô hướng

Đối với các kiểu vô hướng, SOAP sử dụng tất cả các kiểu đơn giản có sẵn được chỉ định bởi đặc tả Lược đồ XML. Điều này bao gồm chuỗi, float, double và số nguyên.

Bảng sau liệt kê các kiểu đơn giản chính, được trích từ Lược đồ XML Phần 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Các kiểu đơn giản được tích hợp vào lược đồ XML
Loại đơn giản Ví dụ
chuỗi Xác nhận đây là điện.
boolean đúng, sai, 1, 0.
Phao nổi -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
gấp đôi -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
thập phân -1,23, 0, 123,4, 1000,00.
nhị phân 100010
số nguyên -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
số nguyên âm -126789, -1.
Dài -1, 12678967543233
int -1, 126789675
ngắn -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
sô nguyên dương 1, 126789.
ngày 1999-05-31, --- 05.
thời gian 13: 20: 00.000, 13: 20: 00.000-05: 00

Ví dụ: đây là một phản hồi SOAP với kiểu dữ liệu kép -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Các loại hợp chất

Mảng SOAP có một bộ quy tắc rất cụ thể, yêu cầu bạn chỉ định cả kiểu phần tử và kích thước mảng. SOAP cũng hỗ trợ mảng đa chiều, nhưng không phải tất cả các triển khai SOAP đều hỗ trợ chức năng đa chiều.

Để tạo một mảng, bạn phải chỉ định nó dưới dạng xsi: type of array. Mảng cũng phải bao gồm một thuộc tính arrayType . Thuộc tính này là bắt buộc để chỉ định kiểu dữ liệu cho các phần tử được chứa và (các) thứ nguyên của mảng.

Ví dụ: thuộc tính sau chỉ định một mảng gồm 10 giá trị kép:

arrayType = "xsd:double[10]"

Ngược lại, thuộc tính sau chỉ định một mảng chuỗi hai chiều:

arrayType = "xsd:string[5,5]"

Đây là một phản hồi SOAP mẫu với một mảng các giá trị kép -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/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>

Cấu trúc chứa nhiều giá trị, nhưng mỗi phần tử được chỉ định bằng một phần tử truy cập duy nhất. Ví dụ, hãy xem xét một mục trong danh mục sản phẩm. Trong trường hợp này, cấu trúc có thể chứa SKU sản phẩm, tên sản phẩm, mô tả và giá. Đây là cách một cấu trúc như vậy sẽ được biểu diễn trong một thông báo SOAP -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/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>
</SOAP-ENV:Envelope>

NOTE- Hãy chú ý đến việc thụt lề thích hợp trong khi bạn viết mã SOAP của mình. Mỗi phần tử trong một cấu trúc được chỉ định bằng một tên trình truy cập duy nhất. Ví dụ: thông báo ở trên bao gồm bốn yếu tố truy cập - tên, giá, mô tả và SKU. Mỗi phần tử có thể có kiểu dữ liệu riêng. Ví dụ: tên được chỉ định là một chuỗi, trong khi giá được chỉ định là gấp đôi.