Web Data Type ตอนที่ #1/2 XML คือ?

ก่อนที่จะขึ้นเรื่องของ XML และ JSON เราจะลงรายละเอียดของเทคโนโลยีทั้ง 2 ตัวนี้ก่อนโดยจะแบ่งเป็น 2 ตอน เพื่อเก็บรายละเอียด โดยรูปแบบข้อมูลทั้ง 2 แบบนี้ถูกใช้งานในวงกว้างทั้งเรื่องเว็บ การแลกเปลี่ยนข้อมูล และ Web Services เรามาดูตัวแรกกันก่อนครับ

XML คือ?

XML หรือ Extensible Markup Language นับเป็นภาษามาร์คอัพ (ภาษาที่ประกอบไปด้วย Tag เช่น XML, HTML, WML เป็นต้น) ถูกพัฒนามาจากภาษา SGML และ GML ที่ใช้แลกเปลี่ยนข้อมูลในหน่วนงานทหารสหรัฐ และเมื่อเกิดเทคโนโลยีเว็บ (HTTP + HTML) ซึ่งเน้นในการแสดงผลข้อมูลแต่ไม่มีประสิทธิภาพในการแลกเปลี่ยนข้อมูลและขาดความยืดหยุ่น จึงได้มีการพัฒนา XML เพื่อใช้ในการแลกเปลี่ยนข้อมูลที่มีความน่าเชื่อถือสูง และใช้งานผ่านเว็บ โดยตัวเทคโนโลยีถูกดูแลโดย W3C (World Wide Web Consortium) ตัวภาษามีคุณสมบัติหลักดังนี้

  • Extensible      สามารถนำไปต่อยอดสร้างเป็นภาษาใหม่ๆได้
  • Structured      มีโครงสร้างชัดเจน และมีการตรวจสอบโครงสร้าง (Well-form)
  • Valid                มีการตรวจสอบควมถูกต้องของเอกสาร เทียบกับตัวบังครับโครงสร้าง (Schema)

เบื้องต้น XML ถูกนำมาใช้ในการแลกเปลี่ยนข้อมูลระหว่างองค์กร ที่มีลักษณะการพัฒนาและรูปแบบการจัดเก็บข้อมูลที่แตกต่างกัน โดยใช้ XML เป็นตัวกลางในการแลกเปลี่ยนข้อมูล ระหว่าง Application ตัวอย่างเช่น

App A     จัดเก็บ firstname, lastname, phone, email
App B     จัดเก็บ firstname, surname, phone, email
เมื่อมีการแลกเปลี่ยนข้อมูลระหว่าง A กับ B จะเกิดปัญหาขึ้น เพราะข้อมูลไม่ตรงกันในส่วนของการเก็บนามสกุล (ลองนึกดูว่าถ้ามี App A-Z แล้วแต่ละ App เก็บคนละแบบกันหมด การจัดการจะยุ่งยากมาก) ดังนั้นเมื่อมีเหตุการแบบนี้ขึ้น ทุกหน่วยงานจะต้องคุยกันก่อน และสร้าง Schema ซึ่งเป็นมาตรฐานในการแลกเปลียนข้อมูล เพื่อให้การแลกเปลี่ยนสามารถทำได้โดยไม่ติดขัด (ในงานจริง ข้อมูลจะมีจำนวนมาก เช่นข้อมูลที่แลกเปลี่ยน การฝากถอนเงินข้ามธนาคาร  ข้อมูล data roaming ของผู้ให้บริการโทรศพท์ เป็นต้น)

นิยามความหมายให้ตรงกัน

Tag                  เช่น <a> เรียกว่าแท็กเปิด  </a> เรียกว่าแท็กปิด
Element         แท็กเปิดกับแท็กปิด เรียกรวมกันว่า Element
Empty Tag     บางครั้ง <a></a> สามารถเขียนลดรูปเป็น <a/>  ในกรณีที่ไม่มีข้อมูลระหว่าง แท็ก
Attribute        ส่วนขยายของแท็ก เช่น <a href=”…”>  ตัว href คือ attribute
Entity             คือการประกาศสัญลักษณ์ทดแทน เช่น เครื่องหมาย “>” สามารถแทนด้วย &gt;

 

XML Schema

Schema หรือตัวแบบโครงสร้างของ XML มีอยู่ 2 แบบคือ DTD (Document Type Definition: “.dtd”) และ XML Schema (“.xsd”) ซึ่งจะเป็นตัวกำหนดโครงสร้างของเอกสารที่เราใช้งาน ว่าจะสามารถใช้ Tag อะไรได้บ้าง และแต่ละ Tag มีตัวลูก หรือมี Attribute เพิ่มเติมหรือไม่ เช่นหากเราต้องการกำหนดมาตรฐานการเก็บข้อมูลของหนังสือ (Book) ประกอบไปด้วย title, author, publisher, comments, category, review, และ year สามารถเขียน เป็น DTD และ XSD ได้ดังนี้

 <!-- book.dtd : DTD -->
 <!ELEMENT books (book)+>
 <!ELEMENT book (title,author+,publisher,comments?,cover?)>
 <!ATTLIST book category (fiction|non-fiction|health|travel|music) "non-fiction">
 <!ATTLIST book review (1|2|3|4|5) "3">
 <!ATTLIST book year CDATA #IMPLIED>
 <!ELEMENT title (#PCDATA)>
 <!ELEMENT author (#PCDATA)>
 <!ELEMENT publisher (#PCDATA)>
 <!ELEMENT comments (#PCDATA)>
 <!ELEMENT cover EMPTY>
 <!ATTLIST cover image ENTITY #REQUIRED>

 

<!-- book.xsd : XML Schema-->
<xsd:complexType name=“books”>
   <xsd:element name=“book” type=“bookElement” minOccurs=“1”/>
</xsd:complexType>
<xsd:complexType name=“bookElement”>
  <xsd:sequence>
    <xsd:element name=“title” type=“string”/>
    <xsd:element name=“author” type=“string” minOccurs=“1”/>
    <xsd:element name=“publisher” type=“string”/>
    <xsd:element name=“comments” type=“string” minOccurs=“0”/>
  </xsd:sequence>
  <xsd:attribute name=“category” type=“categoryType” use=“Optional” value=“non-fiction”/>
  <xsd:attribute name=“review” type=“reviewType” use=“optional” value=“3”/>
  <xsd:attribute name=“year” type=“xsd:string” use=“optional”/>
</xsd:complexType>
<xsd:simpleType name=“categoryType”>
  <xsd:restriction baseType=“xsd:NMTOKEN”>
    <xsd:enumeration value=“non-fiction”/>
    <xsd:enumeration value=“fiction”/>
    <xsd:enumeration value=“health”/>
    <xsd:enumeration value=“travel”/>
    <xsd:enumeration value=“music”/>
  </xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name=“reviewType”>
   <xsd:restriction baseType=“xsd:int”>
   <xsd:minInclusive value=“1”/>
   <xsd:maxInclusive value=“5”/>
 </xsd:restriction>
</xsd:simpleType>

ถ้าสังเกตุให้ดีจะพบว่าการเขียน DTD สามารถใช้ notepad เขียนได้เลยเนื่องจากโค้ดไม่เยอะ ส่วน XML Schema นั้นจะค่อนข้างยาว และยุ่งยากกว่าและมีโอกาสผิดพลาดสูง แต่มีข้อดีคือการประกาศ Type ที่สามารถนำกลับมาใช้ใหม่ได้ และสามารถควบคุมรายละเอียดได้มากกว่าจึงมีผู้พัฒนาเครื่องมือเข้ามาช่วยในการสร้าง Schema ให้ง่ายขึ้น ผ่านการลากวาง เช่น XML Spy เป็นต้น

xml-1

หากคุณต้องการเชื่อมต่อกับระบบอื่นหรือแอพพลิเคชันมาตรฐานอื่นๆ XML มักเป็นทางเลือกหลักที่ผู้พัฒนาระบบได้เลือกไว้เป็นมาตรฐาน ครอบคลุมในทุกวงการเช่น วงการธุรกิจ(eCom XML)  อิเล็กทรอนิกส์(EML) วิศวกรรม(IFC-XML) การเงิน แผนที่ดาวเทียม (KML) กราฟฟิค(XAML) คณิตศาสตร์(MathML) การจัดการข้อมูล(RDF, DDML) เพลง(XSPF) ข่าว(Atom, RSS) รูปเว็กเตอร์(SVG) หากสนใจสามารถติดตามได้จาก Link1 และ Link2

โครงสร้างของ XML

เอกสาร XML ประกอบไปด้วย 3 ส่วนคือ ส่วนหัว ข้อมูล และส่วนของคอมเมนต์

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE books SYSTEM "book.dtd">
<!-- Book XML -->
<books>
   <book year="2015" review="5">
      <title>Book Name1</title>
      <author>Vittayasak</author>
      <publisher>ABC</publisher>
      <comments>No comment</comments>
   <book>
   <book year="2012" review="3">
      <title>Book Name2</title>
      <author>Vittayasak</author>
      <publisher>ABC</publisher>
      <comments>No comment</comments>
   <book>
</books>

 

DOM กับ SAX

โดยปกติเว็บบราวเซอร์จะทำการอ่านเอกสาร HTML หรือ XML แล้วสร้างเป็น Tree ของเอกสาร (ผังรูปต้นไม้ : DOM Tree) แต่ในการทำงานเราสามารถใช้ได้ทั้ง DOM และ SAX ซึ่งจะมีความแตกต่างกันนิดหน่อยดังนี้

DOM     อ่านข้อมูลแบบ Tree การเข้าถึงข้อมูลสามารถเข้าถึงจุดไหนเมื่อไหร่ก็ได้ เหมือนแผ่นดิสก์ สมารถสร้าง ลบ แก้ไข ข้อมุลในจุดต่างๆ ได้
SAX       อ่านข้อมูลแบบลำดับเหมือนการอ่านเทปมักใช้กับการอ่านอย่างเดียว

xml-dom-sax

ตัวอย่างการตีความข้อมูลแบบ DOM และ SAX

 

เทคโนโลยีที่เกี่ยวข้องกับ XML

อย่างที่ทราบกันดี XML ถูกนำไปใช้อย่างกว้างขวาง ในบทความนี้จะพูดถึงเฉพาะที่เกี่ยวกับเว็ปเท่านั้น

WSDL                     ไฟล์ที่ใช้อธิบาย Service ของ SOAP Web Service
SOAP                       Web Service ที่ใช้ XML ในการอธิบายรูปแบบของ Request และ Response
REST                        Web Service ที่ใช้ XML เป็นรูปแบบของข้อมูลที่ตอบกลับJ
XML-RPC               เป็นเว็บ Service ซึ่งเป็นยุคก่อนที่จะเกิด SOAP
XSLT                        ภาษาที่ใช้ในการแปลง XML ไปเป็นข้อมูลรูปแบบอื่นเช่น HTML, PDF เป็นต้น
XPath                       วิธีการเข้าถึง Element ใน XML โดยมองเหมือน path ข้อมูล เช่น /books/book/title
XQuery                    ภาษา Query สำหรับ M
XML Namespace    ใช้ในการประกาศ Schema มากกว่า 1 ตัวในเอกสารเดียว
JAXB                        API ของ Java ใช้แปลง Object เป็น XML และ แปลง XML เป็น Object
JAX-WS                   API ของ Java ที่ใช้ในการพัฒนา SOAP Web Services
JAX-RS                    API ของ Java ที่ใช้ในการพัฒนา REST Web Services
BPEL                       ภาษาที่ใช้สำหรับเขียน Flow ด้วย XML ในการทำ SOA (Service Oriented Architecture)

 

บทสรุป:

จะเห็นว่า XML ถูกนำไปใช้งานอย่างกว้างขวาง และที่เด่นที่สุดคือใช้ในการเป็นตัวกลางในการแลกเปลี่ยนข้อมูล ผมจะค่อยๆทะยอยเขียนพวกเทคโนโลยีที่เกี่ยวข้อง ที่จำเป็นในการเขียน Mobile Web Application ในส่วนของงานหลังบ้าน ตอนหน้าเราจะพูดถึงข้อมูลอีกชนิดหนึ่งคือ JSON ที่นิยมใช้กับงานที่เกี่ยวข้องกับ Java Script และแน่นอนเหมาะกับการเอามาเขียน Moible Web App ด้วย โปรดติดตามตอนต่อไปครับ

AjBee.Me  :  ถ้าชอบก็กด Like ถ้าใช่ก็กด Share นะครับ ^_^