SOAP - การเข้ารหัส

SOAP มีชุดกฎในตัวสำหรับการเข้ารหัสชนิดข้อมูล เปิดใช้งานข้อความ SOAP เพื่อระบุชนิดข้อมูลที่เฉพาะเจาะจงเช่นจำนวนเต็มลอยคู่หรืออาร์เรย์

  • ประเภทข้อมูล SOAP แบ่งออกเป็นสองประเภทกว้าง ๆ - ประเภทสเกลาร์และประเภทสารประกอบ

  • ประเภทสเกลาร์มีค่าเดียวเช่นนามสกุลราคาหรือรายละเอียดผลิตภัณฑ์

  • ประเภทสารประกอบประกอบด้วยหลายค่าเช่นใบสั่งซื้อหรือรายการราคาหุ้น

  • ประเภทของสารประกอบจะแบ่งย่อยออกเป็นอาร์เรย์และโครงสร้าง

  • รูปแบบการเข้ารหัสสำหรับข้อความ SOAP ถูกตั้งค่าผ่านแอ็ตทริบิวต์SOAP-ENV: encodingStyle

  • ในการใช้การเข้ารหัส SOAP 1.1 ให้ใช้ค่า http://schemas.xmlsoap.org/soap/encoding/

  • ในการใช้การเข้ารหัส SOAP 1.2 ให้ใช้ค่า http://www.w3.org/2001/12/soap-encoding

  • ข้อกำหนด SOAP ล่าสุดใช้ชนิดในตัวทั้งหมดที่กำหนดโดย XML Schema ถึงกระนั้น SOAP ยังคงรักษาแบบแผนของตนเองสำหรับการกำหนดโครงสร้างที่ไม่ได้มาตรฐานโดย XML Schema เช่นอาร์เรย์และการอ้างอิง

ประเภทสเกลาร์

สำหรับประเภทสเกลาร์ SOAP จะใช้ประเภทอย่างง่ายในตัวทั้งหมดที่ระบุโดยข้อกำหนด XML Schema ซึ่งรวมถึงสตริงโฟลทคู่และจำนวนเต็ม

ตารางต่อไปนี้แสดงรายการประเภทพื้นฐานหลัก ๆ ซึ่งคัดลอกมาจาก XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

สคีมา XML ในตัวประเภทแบบง่าย
ประเภทธรรมดา ตัวอย่าง)
สตริง ยืนยันว่าเป็นไฟฟ้า
บูลีน จริงเท็จ 1, 0
ลอย -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
สองเท่า -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
ทศนิยม -1.23, 0, 123.4, 1,000.00
ไบนารี่ 100010
จำนวนเต็ม -126789, -1, 0, 1, 126789
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
ยาว -1, 12678967543233
int -1, 126789675
สั้น -1, 12678
ไบต์ -1, 126
nonNegativeInteger 0, 1, 126789
ไม่ได้ลงนาม 0, 12678967543233
unsignedInt 0, 1267896754
ไม่ได้ลงนาม 0, 12678
unsignedByte 0, 126
จำนวนเต็มบวก 1, 126789
วันที่ 2542-05-31, --- 05.
เวลา 13: 20: 00.000, 13: 20: 00.000-05: 00 น

ตัวอย่างเช่นนี่คือการตอบสนอง 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: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>

ประเภทสารประกอบ

อาร์เรย์ SOAP มีชุดกฎที่เฉพาะเจาะจงมากซึ่งกำหนดให้คุณต้องระบุทั้งประเภทองค์ประกอบและขนาดอาร์เรย์ SOAP ยังรองรับอาร์เรย์หลายมิติ แต่การใช้งาน SOAP ทั้งหมดไม่สนับสนุนการทำงานหลายมิติ

ในการสร้างอาร์เรย์คุณต้องระบุเป็นxsi: ประเภทของอาร์เรย์ อาร์เรย์ต้องมีแอตทริบิวต์arrayTypeด้วย แอ็ตทริบิวต์นี้จำเป็นเพื่อระบุชนิดข้อมูลสำหรับองค์ประกอบที่มีและมิติข้อมูลของอาร์เรย์

ตัวอย่างเช่นแอตทริบิวต์ต่อไปนี้ระบุอาร์เรย์ 10 ค่าคู่ -

arrayType = "xsd:double[10]"

ในทางตรงกันข้ามแอตทริบิวต์ต่อไปนี้ระบุอาร์เรย์ของสตริงสองมิติ -

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

นี่คือตัวอย่างการตอบสนอง 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: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>

โครงสร้างมีหลายค่า แต่แต่ละองค์ประกอบจะถูกระบุด้วยองค์ประกอบการเข้าถึงที่ไม่ซ้ำกัน ตัวอย่างเช่นพิจารณาสินค้าภายในแค็ตตาล็อกผลิตภัณฑ์ ในกรณีนี้โครงสร้างอาจมี SKU ของผลิตภัณฑ์ชื่อผลิตภัณฑ์คำอธิบายและราคา โครงสร้างดังกล่าวจะแสดงในข้อความ 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- โปรดดูแลการเยื้องที่เหมาะสมในขณะที่คุณเขียนรหัส SOAP ของคุณ แต่ละองค์ประกอบในโครงสร้างถูกระบุด้วยชื่อผู้เข้าถึงเฉพาะ ตัวอย่างเช่นข้อความด้านบนมีองค์ประกอบของ Accessor 4 องค์ประกอบ ได้แก่ ชื่อราคาคำอธิบายและ SKU แต่ละองค์ประกอบสามารถมีชนิดข้อมูลของตัวเอง ตัวอย่างเช่นชื่อถูกระบุเป็นสตริงในขณะที่ราคาถูกระบุเป็นสองเท่า