ล่าสุดการพัฒนาเว็บบทเรียน
×

XML เกี่ยวกับการสอน

XML บ้าน XML บทนำ XML วิธีใช้ XML ต้นไม้ XML วากยสัมพันธ์ XML องค์ประกอบ XML แอตทริบิวต์ XML namespaces XML แสดง XML XSLT XML XPath XML XLink XML ตรวจสอบ XML DTD XML schema XML เซิร์ฟเวอร์ XML การประยุกต์ใช้งาน XML ตัวอย่าง XML ทดสอบ XML ใบรับรอง

XML DOM

DOM แนะนำ DOM โหนด DOM XMLHttpRequest DOM การเข้าถึง DOM ข้อมูลโหนด DOM รายการโหนด DOM ภายใน DOM การนำทาง DOM ได้รับค่า DOM Change โหนด DOM Remove โหนด DOM Replace โหนด DOM Create โหนด DOM Add โหนด DOM Clone โหนด DOM ตัวอย่าง

DOM การอ้างอิง

DOM ประเภทโหนด DOM ปม DOM NodeList DOM NamedNodeMap DOM เอกสาร DOM ธาตุ DOM คุณลักษณะ DOM ข้อความ DOM CDATA DOM คิดเห็น DOM XMLHttpRequest DOM parser

XML DTD

DTD แนะนำ DTD การก่อสร้างตึก DTD องค์ประกอบ DTD แอตทริบิวต์ DTD องค์ประกอบ VS attr DTD หน่วยงาน DTD ตัวอย่าง

XSD Schema

XSD แนะนำ XSD ทำอย่างไร XSD <schema> XSD องค์ประกอบ XSD แอตทริบิวต์ XSD ข้อ จำกัด

XSD ซับซ้อน

XSD องค์ประกอบ XSD ว่างเปล่า XSD เพียงองค์ประกอบ XSD ข้อความเท่านั้น XSD ผสม XSD ตัวชี้วัด XSD <any> XSD <anyAttribute> XSD การแทน XSD ตัวอย่าง

XSD Data

XSD เชือก XSD วันที่ XSD เป็นตัวเลข XSD อื่น ๆ XSD การอ้างอิง

Web บริการ

XML บริการ XML WSDL XML SOAP XML RDF XML RSS

 

XML Soap


  • สบู่ยืนสำหรับเข้าถึงวัตถุง่าย P rotocol
  • SOAP เป็นโปรโตคอลการสื่อสารประยุกต์ใช้
  • สบู่เป็นรูปแบบการส่งและรับข้อความ
  • สบู่แพลตฟอร์ม
  • สบู่อยู่บนพื้นฐานของ XML
  • สบู่คำแนะนำ W3C

ทำไมสบู่?

มันเป็นสิ่งสำคัญสำหรับการใช้งานเว็บเพื่อให้สามารถติดต่อสื่อสารผ่านทางอินเทอร์เน็ต

วิธีที่ดีที่สุดในการสื่อสารระหว่างการใช้งานคือผ่าน HTTP, HTTP เพราะได้รับการสนับสนุนโดยทุกเบราว์เซอร์อินเทอร์เน็ตและเซิร์ฟเวอร์ สบู่ถูกสร้างขึ้นเพื่อให้บรรลุนี้

สบู่มีวิธีการติดต่อสื่อสารระหว่างโปรแกรมที่ทำงานบนระบบปฏิบัติการที่แตกต่างกันด้วยเทคโนโลยีที่แตกต่างกันและการเขียนโปรแกรมภาษา


สบู่อาคารบล็อก

ข้อความสบู่เอกสาร XML สามัญที่มีองค์ประกอบดังต่อไปนี้:

  • องค์ประกอบซองจดหมายที่ระบุเอกสาร XML เป็นข้อความสบู่
  • องค์ประกอบส่วนหัวที่มีข้อมูลส่วนหัว
  • องค์ประกอบของร่างกายที่มีการโทรและการตอบสนองต่อข้อมูล
  • องค์ประกอบความผิดที่มีข้อผิดพลาดและข้อมูลสถานะ

องค์ประกอบทั้งหมดข้างต้นมีการประกาศใน namespace เริ่มต้นสำหรับซองจดหมาย SOAP นี้:

http://www.w3.org/2003/05/soap-envelope/

และ namespace เริ่มต้นสำหรับการเข้ารหัสและสบู่ชนิดข้อมูลคือ

http://www.w3.org/2003/05/soap-encoding


กฎไวยากรณ์

นี่คือบางส่วนกฎไวยากรณ์ที่สำคัญ ได้แก่ :

  • ข้อความ SOAP ต้องมีการเข้ารหัสโดยใช้ XML
  • ข้อความ SOAP ต้องใช้ namespace SOAP ซองจดหมาย
  • ข้อความ SOAP ต้องใช้ namespace SOAP เข้ารหัส
  • ข้อความ SOAP ไม่ต้องมีการอ้างอิง DTD
  • ข้อความ SOAP ไม่ต้องมีคำแนะนำในการประมวลผล XML

โครงกระดูกข้อความ SOAP

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

สบู่ซองจดหมายธาตุ

ที่จำเป็นต้องใช้องค์ประกอบ SOAP ซองจดหมายเป็นองค์ประกอบรากของข้อความสบู่ องค์ประกอบนี้กำหนดเอกสาร XML เป็นข้อความสบู่

ตัวอย่าง

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns: สบู่ Namespace

ขอให้สังเกต xmlns นี้: namespace สบู่ในตัวอย่างข้างต้น มันก็ควรจะมีค่าของ: "http://www.w3.org/2003/05/soap-envelope/"

namespace ที่กำหนดซองจดหมายซองจดหมายเป็นสบู่

ถ้า namespace ที่แตกต่างกันมีการใช้แอพลิเคชันสร้างข้อผิดพลาดและทิ้งข้อความ


encodingStyle แอตทริบิวต์

encodingStyle แอตทริบิวต์ที่ถูกใช้ในการกำหนดชนิดข้อมูลที่ใช้ในเอกสาร คุณลักษณะนี้อาจปรากฏในองค์ประกอบ SOAP ใด ๆ และนำไปใช้กับเนื้อหาองค์ประกอบและองค์ประกอบของเด็กทั้งหมด

ข้อความ SOAP มีการเข้ารหัสเริ่มต้นไม่มี

วากยสัมพันธ์

soap:encodingStyle="URI"

ตัวอย่าง

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

สบู่หัวธาตุ

ตัวเลือกองค์ประกอบส่วนหัว SOAP มีข้อมูลเฉพาะของโปรแกรมประยุกต์ (like authentication, payment, etc) เกี่ยวกับข้อความสบู่

ถ้าองค์ประกอบส่วนหัวเป็นปัจจุบันก็จะต้องมีองค์ประกอบที่ลูกคนแรกขององค์ประกอบซองจดหมาย

Note: ทุกองค์ประกอบของเด็กทันทีขององค์ประกอบส่วนหัวจะต้อง namespace ที่ผ่านการคัดเลือก

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

ตัวอย่างข้างต้นมีส่วนหัวที่มี "Trans" องค์ประกอบเป็น "mustUnderstand" แอตทริบิวต์ที่มีค่า 1 และค่าของ 234

สบู่กำหนดคุณลักษณะที่สามใน namespace เริ่มต้น คุณลักษณะเหล่านี้คือ: mustUnderstand นักแสดงและ encodingStyle

แอตทริบิวต์ที่กำหนดไว้ในส่วนหัว SOAP กำหนดวิธีผู้รับควรประมวลผลข้อความสบู่


mustUnderstand แอตทริบิวต์

แอตทริบิวต์ SOAP mustUnderstand สามารถนำมาใช้เพื่อบ่งชี้ว่ารายการส่วนหัวมีผลบังคับใช้หรือไม่จำเป็นสำหรับผู้รับในการประมวลผล

ถ้าคุณเพิ่ม mustUnderstand = "1" ไปยังองค์ประกอบลูกขององค์ประกอบส่วนหัวก็แสดงว่ารับการประมวลผลส่วนหัวจะต้องรับรู้องค์ประกอบ ถ้ารับไม่รู้จักองค์ประกอบมันจะล้มเหลวเมื่อการประมวลผลส่วนหัว

วากยสัมพันธ์

soap:mustUnderstand="0|1"

ตัวอย่าง

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

actor แอตทริบิวต์

ข้อความ SOAP อาจเดินทางจากผู้ส่งไปยังผู้รับปลายทางโดยผ่านที่แตกต่างกันไปตามเส้นทางข้อความ แต่ไม่ทุกส่วนของข้อความ SOAP อาจจะมีไว้สำหรับปลายทางที่ดีที่สุด แต่มันอาจจะมีไว้สำหรับหนึ่งหรือมากกว่าหนึ่งของปลายทางบนเส้นทางข้อความ

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

วากยสัมพันธ์

soap:actor="URI"

ตัวอย่าง

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:actor="http://www.w3ii.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

encodingStyle แอตทริบิวต์

encodingStyle แอตทริบิวต์ที่ถูกใช้ในการกำหนดชนิดข้อมูลที่ใช้ในเอกสาร คุณลักษณะนี้อาจปรากฏในองค์ประกอบ SOAP ใด ๆ และมันจะนำไปใช้กับเนื้อหาขององค์ประกอบที่และองค์ประกอบของเด็กทั้งหมด

ข้อความ SOAP มีการเข้ารหัสเริ่มต้นไม่มี

วากยสัมพันธ์

soap:encodingStyle="URI"

สบู่ร่างกายธาตุ

ที่จำเป็นต้องใช้องค์ประกอบ Body Soap สบู่ประกอบด้วยข้อความที่เกิดขึ้นจริงมีไว้สำหรับปลายทางที่ดีที่สุดของข้อความ

องค์ประกอบของเด็กทันทีขององค์ประกอบสบู่อาจจะ namespace ที่ผ่านการคัดเลือก

ตัวอย่าง

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3ii.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

ตัวอย่างข้างต้นขอราคาของแอปเปิ้ล โปรดทราบว่า M: GetPrice และองค์ประกอบรายการดังกล่าวข้างต้นเป็นองค์ประกอบเฉพาะของโปรแกรมประยุกต์ พวกเขาจะไม่เป็นส่วนหนึ่งของ namespace สบู่

การตอบสนอง SOAP จะมีลักษณะบางอย่างเช่นนี้

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


สบู่ Fault ธาตุ

องค์ประกอบความผิด SOAP จำเป็นจะใช้เพื่อระบุข้อความผิดพลาด

องค์ประกอบความผิด SOAP ถือข้อผิดพลาดและข้อมูลสถานะข้อความสบู่

หากเป็นองค์ประกอบความผิดพลาดที่มีอยู่นั้นจะต้องปรากฏเป็นองค์ประกอบลูกขององค์ประกอบของร่างกาย องค์ประกอบความผิดพลาดเพียงครั้งเดียวสามารถปรากฏในข้อความสบู่

องค์ประกอบความผิด SOAP มีองค์ประกอบย่อยต่อไปนี้:

ตำบลธาตุ ลักษณะ
<faultcode> รหัสสำหรับการระบุความผิดต่อ A
<faultstring> คำอธิบายการอ่านของมนุษย์ของความผิด
<faultactor> ข้อมูลเกี่ยวกับผู้ที่ก่อให้เกิดความผิดพลาดที่จะเกิดขึ้น
<detail>

เก็บข้อมูลผิดพลาดโปรแกรมเฉพาะที่เกี่ยวข้องกับองค์ประกอบของร่างกาย

รหัส SOAP Fault

ค่า faultcode ระบุไว้ด้านล่างจะต้องใช้ในองค์ประกอบ faultcode เมื่ออธิบายความผิดพลาด:

ความผิดพลาด ลักษณะ
VersionMismatch พบ namespace ที่ไม่ถูกต้องสำหรับองค์ประกอบ SOAP ซองจดหมาย
MustUnderstand องค์ประกอบเด็กทันทีขององค์ประกอบส่วนหัวกับ mustUnderstand ตั้งค่าแอตทริบิวต์ "1" ก็ไม่เข้าใจ
Client ข้อความที่ถูกสร้างขึ้นไม่ถูกต้องหรือมีข้อมูลไม่ถูกต้อง
Server มีปัญหากับเซิร์ฟเวอร์ได้ดังนั้นข้อความไม่สามารถดำเนินการต่อไป

โปรโตคอล HTTP

HTTP สื่อสารผ่าน TCP / IP ไคลเอนต์ HTTP เชื่อมต่อกับเซิร์ฟเวอร์ HTTP ใช้ TCP หลังจากการสร้างการเชื่อมต่อให้ลูกค้าสามารถส่งข้อความร้องขอ HTTP ไปยังเซิร์ฟเวอร์:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

เซิร์ฟเวอร์แล้วประมวลผลการร้องขอและส่งการตอบสนอง HTTP กลับไปยังลูกค้า การตอบสนองที่มีรหัสสถานะที่บ่งบอกถึงสถานะของคำขอ:

200 OK
Content-Type: text/plain
Content-Length: 200

ในตัวอย่างข้างต้น, เซิร์ฟเวอร์ส่งคืนรหัสสถานะของ 200 นี้เป็นรหัสความสำเร็จมาตรฐานสำหรับ HTTP

ถ้าเซิร์ฟเวอร์ไม่สามารถถอดรหัสคำขอก็อาจมีบางสิ่งบางอย่างกลับมาเช่นนี้

400 Bad Request
Content-Length: 0

สบู่เข้าเล่ม

สเป SOAP กำหนดโครงสร้างของข้อความ SOAP ไม่ว่าพวกเขาจะมีการแลกเปลี่ยน ช่องว่างนี้จะเต็มไปด้วยสิ่งที่เรียกว่า "SOAP Bindings" ผูก SOAP กลไกที่ช่วยให้ข้อความ SOAP ที่จะแลกเปลี่ยนได้อย่างมีประสิทธิภาพโดยใช้โปรโตคอลการขนส่ง

ส่วนใหญ่การใช้สบู่ให้ผูกสำหรับโปรโตคอลการขนส่งทั่วไปเช่น HTTP หรือ SMTP

HTTP เป็นซิงโครและใช้กันอย่างแพร่หลาย ขอ SOAP HTTP ระบุอย่างน้อยสองหัว http: ประเภทเนื้อหาและความยาวของเนื้อหา

SMTP ไม่ตรงกันและใช้ในรีสอร์ทสุดท้ายหรือกรณีเฉพาะ

การใช้งาน Java ของสบู่มักจะให้เฉพาะผูกพันสำหรับ JMS (Java Messaging System) โปรโตคอล


ชนิดของเนื้อหา

ส่วนหัวของเนื้อหาชนิดสำหรับคำขอสบู่และการตอบสนองกำหนดชนิดไมม์สำหรับข้อความและการเข้ารหัสอักขระ (optional) ใช้สำหรับร่างกาย XML ของการร้องขอหรือการตอบสนอง

วากยสัมพันธ์

Content-Type: MIMEType; charset=character-encoding

ตัวอย่าง

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

ความยาวของเนื้อหา

ส่วนหัวของความยาวเนื้อหาสำหรับคำขอสบู่และการตอบสนองระบุจำนวนไบต์ในร่างกายของการร้องขอหรือการตอบสนอง

วากยสัมพันธ์

Content-Length: bytes

ตัวอย่าง

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

ตัวอย่างสบู่

ในตัวอย่างด้านล่างขอ GetStockPrice จะถูกส่งไปยังเซิร์ฟเวอร์ การร้องขอมีพารามิเตอร์ StockName และพารามิเตอร์ราคาที่จะถูกส่งกลับในการตอบสนอง namespace ของฟังก์ชั่นที่มีการกำหนดไว้ใน "http://www.example.org/stock"

ขอ SOAP:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

การตอบสนอง SOAP:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>