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 แต่ละองค์ประกอบสามารถมีชนิดข้อมูลของตัวเอง ตัวอย่างเช่นชื่อถูกระบุเป็นสตริงในขณะที่ราคาถูกระบุเป็นสองเท่า