XML Tutorial

XML หน้าแรก บทนำ XML XML วิธีใช้งาน XML Tree ไวยากรณ์ XML องค์ประกอบ XML คุณสมบัติ XML XML เนมสเปซ จอแสดงผล XML XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLink เครื่องมือตรวจสอบ XML XML DTD XML Schema XML Server ตัวอย่าง XML แบบทดสอบ XML ใบรับรอง XML

XML AJAX

บทนำ AJAX AJAX XMLHttp คำขอ AJAX การตอบสนอง AJAX ไฟล์ AJAX XML AJAX PHP AJAX ASP ฐานข้อมูล AJAX แอปพลิเคชัน AJAX ตัวอย่าง AJAX

XML DOM

บทนำ DOM โหนด DOM การเข้าถึง DOM ข้อมูลโหนด DOM รายการโหนด DOM DOM Traversing การนำทาง DOM DOM รับค่า DOM เปลี่ยนโหนด DOM ลบโหนด DOM แทนที่โหนด DOM สร้างโหนด DOM เพิ่มโหนด DOM โคลนโหนด ตัวอย่าง DOM

บทช่วย สอนXPath

บทนำ XPath โหนด XPath ไวยากรณ์ XPath แกน XPath ตัวดำเนินการ XPath ตัวอย่าง XPath

กวดวิชาXSLT

บทนำ XSLT ภาษา XSL การแปลง XSLT XSLT <แม่แบบ> XSLT <ค่าของ> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <เลือก> ใช้ XSLT XSLT บนไคลเอนต์ XSLT บนเซิร์ฟเวอร์ XSLT แก้ไข XML ตัวอย่าง XSLT

กวดวิชาXQuery

บทนำ XQuery ตัวอย่าง XQuery XQuery FLWOR XQuery HTML ข้อกำหนด XQuery ไวยากรณ์ XQuery XQuery เพิ่ม XQuery Select ฟังก์ชัน XQuery

XML DTD

บทนำ DTD บล็อกตัวต่อ DTD องค์ประกอบ DTD คุณสมบัติ DTD องค์ประกอบ DTD เทียบกับ Attr หน่วยงาน DTD ตัวอย่าง DTD

ส คีมา XSD

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

XSD Complex

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

ข้อมูลXSD

XSD สตริง วันที่ XSD XSD ตัวเลข XSD เบ็ดเตล็ด ข้อมูลอ้างอิง XSD

บริการเว็บ

XML Services XML WSDL XML SOAP XML RDF XML RSS

อ้างอิง

ประเภทโหนด DOM โหนด DOM DOM NodeList DOM NamedNodeMap เอกสาร DOM องค์ประกอบ DOM แอตทริบิวต์ DOM ข้อความ DOM DOM CDATA ความคิดเห็นของ DOM DOM XMLHttpRequest DOM Parser องค์ประกอบ XSLT ฟังก์ชัน XSLT/XPath

XML Soap


  • SOAP ย่อมาจากS imple O bject A access P rotocol
  • SOAP เป็นโปรโตคอลการสื่อสารแอปพลิเคชัน
  • SOAP เป็นรูปแบบการส่งและรับข้อความ
  • SOAP เป็นแพลตฟอร์มที่เป็นอิสระ
  • SOAP ขึ้นอยู่กับ XML
  • SOAP เป็นคำแนะนำของ W3C

ทำไมต้องสบู่?

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

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

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


บล็อกตัวต่อ SOAP

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

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

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

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

และเนมสเปซเริ่มต้นสำหรับการเข้ารหัส SOAP และประเภทข้อมูลคือ:

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


กฎไวยากรณ์

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

  • ข้อความ SOAP ต้องเข้ารหัสโดยใช้ XML
  • ข้อความ SOAP ต้องใช้เนมสเปซ SOAP Envelope
  • ข้อความ 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 Envelope ที่จำเป็นคือองค์ประกอบรูทของข้อความ 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">
  ...
  Message information goes here
  ...
</soap:Envelope>

xmlns:soap เนมสเปซ

สังเกต xmlns:soap เนมสเปซในตัวอย่างด้านบน ควรมีค่าเป็น: "http://www.w3.org/2003/05/soap-envelope/" เสมอ

เนมสเปซกำหนดซองจดหมายเป็นซอง SOAP

หากใช้เนมสเปซอื่น แอปพลิเคชันจะสร้างข้อผิดพลาดและยกเลิกข้อความ


encodingStyle Attribute

แอตทริบิวต์ 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

องค์ประกอบส่วนหัว SOAP ที่เป็นตัวเลือกมีข้อมูลเฉพาะแอปพลิเคชัน (เช่น การตรวจสอบสิทธิ์ การชำระเงิน ฯลฯ) เกี่ยวกับข้อความ 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>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

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

SOAP กำหนดสามแอตทริบิวต์ในเนมสเปซเริ่มต้น คุณลักษณะเหล่านี้ ได้แก่ mustUnderstand นักแสดง และ encodingStyle

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


คุณลักษณะที่ต้องเข้าใจ

สามารถใช้แอตทริบิวต์ 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="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

คุณสมบัตินักแสดง

ข้อความ 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="https://www.w3schools.com/transaction/"
  soap:actor="https://www.w3schools.com/code/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

encodingStyle Attribute

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

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

ไวยากรณ์

soap:encodingStyle="URI"

สบู่องค์ประกอบร่างกาย

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

องค์ประกอบลูกทันทีขององค์ประกอบ SOAP Body อาจผ่านการรับรองเนมสเปซ

ตัวอย่าง

<?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="https://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

ตัวอย่างข้างต้นขอราคาของแอปเปิ้ล โปรดทราบว่าองค์ประกอบ m:GetPrice และ Item ด้านบนเป็นองค์ประกอบเฉพาะแอปพลิเคชัน สิ่งเหล่านี้ไม่ได้เป็นส่วนหนึ่งของเนมสเปซ SOAP

การตอบสนอง 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="https://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


SOAP Fault Element

องค์ประกอบ SOAP Fault ที่เป็นตัวเลือกใช้เพื่อระบุข้อความแสดงข้อผิดพลาด

อิลิเมนต์ SOAP Fault เก็บข้อมูลข้อผิดพลาดและสถานะสำหรับข้อความ SOAP

หากมีองค์ประกอบ Fault จะต้องปรากฏเป็นองค์ประกอบย่อยขององค์ประกอบ Body องค์ประกอบ Fault สามารถปรากฏได้เพียงครั้งเดียวในข้อความ SOAP

องค์ประกอบ SOAP Fault มีองค์ประกอบย่อยต่อไปนี้:

Sub Element Description
<faultcode> A code for identifying the fault
<faultstring> A human readable explanation of the fault
<faultactor> Information about who caused the fault to happen
<detail>

Holds application specific error information related to the Body element

รหัสความผิดปกติ SOAP

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

Error Description
VersionMismatch Found an invalid namespace for the SOAP Envelope element
MustUnderstand An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood
Client The message was incorrectly formed or contained incorrect information
Server There was a problem with the server so the message could not proceed

โปรโตคอล 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 Binding

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

การใช้งาน SOAP ส่วนใหญ่จัดให้มีการเชื่อมโยงสำหรับโปรโตคอลการขนส่งทั่วไป เช่น HTTP หรือ SMTP

HTTP เป็นแบบซิงโครนัสและใช้กันอย่างแพร่หลาย คำขอ SOAP HTTP ระบุส่วนหัว HTTP อย่างน้อยสองส่วนหัว: Content-Type และ Content-Length

SMTP เป็นแบบอะซิงโครนัสและใช้ในทางเลือกสุดท้ายหรือบางกรณี

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


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

ส่วนหัว Content-Type สำหรับคำขอ SOAP และการตอบสนองกำหนดประเภท MIME สำหรับข้อความและการเข้ารหัสอักขระ (ทางเลือก) ที่ใช้สำหรับเนื้อหา XML ของคำขอหรือการตอบกลับ

ไวยากรณ์

Content-Type: MIMEType; charset=character-encoding

ตัวอย่าง

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

เนื้อหา-ความยาว

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

ไวยากรณ์

Content-Length: bytes

ตัวอย่าง

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

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

ในตัวอย่างด้านล่าง คำขอ GetStockPrice จะถูกส่งไปยังเซิร์ฟเวอร์ คำขอมีพารามิเตอร์ StockName และพารามิเตอร์ราคาที่จะถูกส่งกลับในการตอบกลับ เนมสเปซสำหรับฟังก์ชันถูกกำหนดใน "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>