หน้าเว็บ

วันเสาร์ที่ 27 ตุลาคม พ.ศ. 2561

Web Service, SOAP, WSDL

Web Service



    Web Service เป็นบริการบนเครือข่ายเว็บไซต์ที่ถูกออกแบบมาใช้เป็นช่องทางการติดต่อระหว่างอุปกรณ์ เปรียบเสมือนเป็น API ตัวนึง นิยมรับส่งข้อมูลกันในรูปแบบ XML กับ JSON โดยที่ถึงแม้ว่าแต่ละระบบจะถูกพัฒนาขึ้นจากภาษาโปรแกรมใดก็ตาม ก็จะสามารถอ่านข้อมูลและส่งกลับถึงกันได้ ซึ่งจะมีไฟล์ WSDL เป็นตัวอธิบายรายละเอียดของ Web Service เพื่อให้ระบบที่เรียกใช้สามารถรู้ถึงรายละเอียดและวิธีการเรียกใช้งานของบริการที่มีอยู่ได้ รูปแบบโมเดลหรือโปรโตคอลการสื่อสารของ Web Service ที่นิยมใช้กันจะมี REST(REpresentational State Transfer), SOAP(Simple Object Access Pprotocol) และ XML-RPC โดยในที่นี้ก็จะพูดถึงแค่ตัว SOAP เท่านั้น


SOAP (Simple Object Access Protocol)


รูปภาพที่เกี่ยวข้อง

    อย่างที่ได้กล่าวไปว่า SOAP เป็น 1 ในโปรโตคอลที่ใช้ติดต่อสื่อสารกันระหว่างอุปกรณ์ใน Web Service โดยจะมีการรับส่งข้อมูลในรูปแบบของ XML เท่านั้น สามารถที่จะทำงานอยู่บนโปรโตคอลอะไรก็ได้ เช่น http smtp มีการสนับสนุนเรื่อง security ต่างๆ และจำเป็นต้องมี WSDL เพื่อใช้สำหรับเรียกใช้งาน Web Service


WSDL (Web Service Description Language)


ผลการค้นหารูปภาพสำหรับ WSDL

    WSDL เป็นเอกสารในรูปแบบ XML ที่เป็นตัวอธิบายรายละเอียดต่างๆของ Web Service เช่น ชื่อของ Service, ประเภท Input Output message ที่ต้องส่งให้หรือได้รับมา โดยจะมีรูปแบบการรับส่งข้อมูลอยู่ 4 แบบ ได้แก่
  • One-way : operation จะได้รับ request เข้ามาแต่จะไม่มีการรอการตอบกลับไป
  • Request/Response : operation จะได้รับ request เข้ามา และทำการ response กลับไป
  • Solicit/Response : operation จะทำการส่ง request ออกไปแล้วรอ response กลับเข้ามา
  • Notification : operation จะทำการส่ง request ออกไป แต่จะไม่รอ response กลับเข้ามา

วันเสาร์ที่ 20 ตุลาคม พ.ศ. 2561

Data Transfer by using Ruby

    ทดลองส่งข้อมูลจาก โปรแกรมหนึ่งไปยังอีกโปรแกรมหนึ่ง ภายในเครื่อเดียวกัน โดยโปรแกรมหนึ่งทำหน้าที่เป็น client และอีกโปรแกรมหนึ่งทำหน้าที่เป็น server :ซึ่งทำการส่งแบบ TCP Socket

ตัวอย่างไฟล์ XML ที่เก็บข้อมูลเกี่ยวกับหนัง


โค้ดฝั่ง Server



    ในฝั่ง Server นั้นจะมีการสร้างตัวแปร server = TCPServer.open(hostname,port) เพื่อทำการกำหนด host และ port ที่จะใช้สำหรับเป็น server หากไม่ใส่ hostname ไม่ก็จะ default เป็น localhost ครับ
    ส่วนภายใน loop ก็จะประกาศตัวแปรสำหรับ client = server.accept เพื่อทำการรอทางฝั่ง client เชื่อมต่อเข้ามาก่อน หากมีการเชื่อมต่อเข้ามาแล้วจึงค่อยทำคำสั่งถัดไป


โค้ดฝั่ง Client



    ในฝั่ง Client จะมีการประกาศตัวแปร s = TCPSocket.open(hostname, port) เพื่อทำการเชื่อมต่อไปที่ server จากนั้นก็ทำการวน While loop แสดงค่าที่ได้รับจากทาง Server ออกมา


ผลลัพธ์





ทดลองส่งข้อมูลข้ามเครื่อง


    ทำการเปลี่ยนจาก localhost เป็น IP Address




วันศุกร์ที่ 12 ตุลาคม พ.ศ. 2561

DTD และ XML Schema

DTD คืออะไร?
    DTD (Document Type Definition) เป็นตัวกำหนดโครงสร้างของ XML โดยสามารถที่จะเขียนภายในไฟล์ XML เลย หรือจะเขียนแยกออกมาเป็นไฟล์ .dtd ก็ได้ ซึ่งการกำหนดโครงสร้างนั้นก็จะเป็นการกำหนดรายละเอียดของ Element อย่างเช่น ภายใน Element นั้นจะมี Element หรือ Attribute อะไรได้บ้าง

ตัวอย่าง


   จากตัวอย่างด้านบนสามารถอธิบายได้ดังนี้
1. <!ELEMENT note (to,from,heading,body)>  => เป็นการประกาศ element ที่มีชื่อว่า note โดยจะมี element ย่อยๆเป็น to, from, heading, body

2. <!ELEMENT to (#PCDATA)>  =>  เป็นการประกาศ element ที่ชื่อ to โดยเป็นแบบชนิด PCDATA หรือ Parsed Character Data หมายถึงเป็นข้อมูลที่สามารถ Parsed ได้



XML Schema คืออะไร ?
 คือ สิ่งที่ใช้ในการกำหนดโครงสร้างของเอกสาร XML โดยมีลักษณะการเขียนแบบ XML

ตัวอย่าง 


    จากโค้ดตัวอย่างด้านบนจะเป็นการใช้งาน XML Schema โดยเขียนไว้ในเอกสาร XML เลยโดยไม่ต้องเขียนแยกเป็นไฟล์ .xsd สามารถอธิบายลักษณะการทำงานได้ดังนี้

1.  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

    เป็นการกำหนด namespace ของ schema โดยในที่นี้ประกาศโดยใช้ xs

2. 
 <xs:element name="note">  => ในบรรทัดนี้จะเป็นการประกาศชื่อของ element ว่าชื่อ note

<xs:complexType>  => บ่งบอกว่า element นี้เป็นลักษณะของ complexType เนื่องจากมี element อื่นๆ                                           อยู่ด้วย
<xs:sequence>
<xs:element name="to" type="xs:string"/>     => ในส่วนนี้จะเป็นการประกาศชื่อของ element และชนิด
<xs:element name="from" type="xs:string"/>      ของ element ดังกล่าวในที่นี้จะเป็น element
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

     

    


วันจันทร์ที่ 8 ตุลาคม พ.ศ. 2561

ตัวอย่าง XML Technology

    XML Technology คือ เทคโนโลยีที่ถูกคิดค้นมาเพื่อเพิ่มประสิทธิภาพในการใช้งาน XML โดยในโพสต์นี้จะยกมา 2 ตัวอย่างเทคโนโลยีนั้นคือ XHTML กับ XSL


1. XHTML => EXtensible HyperText Markup Language

Image result for xhtml

    คือ HTML ที่อยู่ในรูปของ well-formed สาเหตุที่ใช้ XHTML นั้นก็คือ HTML ที่อยู่ในลักษณะของ bad html หรือรูปแบบของเอกสาร HTML ที่ไม่ดี Browser บนคอมพิวเตอร์นั้นสามารถอ่านได้ แต่ถ้าเราเปิดเอกสารที่เป็น bad html บน Browser ที่อยู่บนอุปกรณ์ที่เล็กลงอย่างเช่น โทรศัพท์มือถือ เนื่องจากทรัพยากรที่จำกัดของตัวอุปกรณ์อาจจะทำให้ไม่สามารถอ่านเอกสารได้


2. XSL => Style Sheet for XML 

Related image
    


    XSL เปรียบเสมือน CSS สำหรับ HTML โดยมีหน้าที่ในการกำหนดว่า XML ควรจะถูกแสดงออกมาในลักษณะแบบไหน 


   

วันเสาร์ที่ 6 ตุลาคม พ.ศ. 2561

XML Parser in C#

    ในภาษา C# หรือภาษา .NET อื่นๆนั้นจะใช้ LINQ( ออกเสียงเหมือนคำว่า 'Link' ) เป็น XML Parser โดยที่ลักษณะการใช้งานและ Keyword จะคล้ายกับคำสั่ง sql เช่น select from where เป็นต้น

    LINQ หรือ Language-Integrated Query นั้นหลักๆจะแบ่งออกเป็น



  • LINQ to Objects
  • LINQ to XML(XLINQ)
  • LINQ to ADO.NET
    • LINQ to DataSet
    • LINQ to SQL (DLINQ)
    • LINQ to Entities
    ซึ่งที่เราจะใช้ก็คือ LINQ to XML หรือ XLINQ ครับ


    ส่วนไฟล์ข้อมูล XML ที่จะนำมาใช้ก็จะเป็นข้อมูลหนังเหมือนกันกับ XML Parser in Ruby


    ในส่วนของโค้ดด้านบนนั้นจะเป็นโค้ดที่ทำการเรียกข้อมูลหนังออกมาแสดงผล โดยจะมีการเรียกใช้ System.Linq และ System.Xml.Linq เพียงใช้งาน LINQ to XML ถัดมาภายใน Main จะทำการใช้คำสั่ง XDocument.Load("movies.xml") เพื่อที่จะโหลดไฟล์ให้มาอยู่ในรูปแบบของ Document (ลักษณะการทำแบบ DOM) จากนั้นก็ประกาศตัวแปรประเภท XElement เพื่อจะเอา Element ภายใน root(ในที่นี้เป็น Movies) ไปใช้ในการ query
    สำหรับตัวแปร Tests นั้นจะเห็นว่าเป็นตัวแปรที่ใช้สำหรับเก็บผลลัพธ์ที่ได้จากการ query ในทีนี้กำหนดให้ query ข้อมูลออกมาทั้งหมด จากนั้นจึงนำไปแสดงผล โดยจะใช้ .Attribute() .Element() กำหนดว่าจะแสดงผลส่วนไหน และใช้ (string) นำหน้าเพื่อให้แสดงผลเฉพาะข้อมูลเท่านั้น
    ในกรณีที่มี Element ที่ชื่อซ้ำกัน หากใช้ .Element() มันจะแสดงผลเพียงแค่ Element ตัวแรกที่ชื่อนั้นๆเท่านั้น เราจึงต้องทำการวนลูป foreach และใช้ .Elements แทน ผลลัพธ์ที่ได้ก็จะออกมาเป็นตามนี้ครับ



    - ทดลอง Query เฉพาะหนังของ Christopher Nolan





วันศุกร์ที่ 5 ตุลาคม พ.ศ. 2561

XML Parser in Ruby

ทดลองใช้งาน XML Parser ใน ภาษา Ruby


       จากโค้ดข้างต้น จะทำการเรียก  Library  ที่ชื่อว่า REXML ด้วย คำสั่ง Include โดยที่ REXML เป็น  XML Parser ทีช่วยให้ Ruby สามารถอ่านไฟล์ XML ได้ และในส่วนที่เหลือ จะเป็นในส่วนของการแสดง
ผลจากข้อมูล ไฟล์ XML ที่อ่านได้


ตัวอย่างไฟล์ ข้อมูล XML



แสดงผลข้อมูลผ่านทาง terminal

What is XML ?

Image result for xml


XML ย่อมาจาก Extensible Markup Language

Extensible หมายถึง การเพิ่มขยายได้, การยืดออกได้

Markup Language เป็นภาษาคอมพิวเตอร์ที่แสดงข้อมูล และข้อมูลรูปแบบที่เป็นตัวอธิบายโครงสร้างหรือการแสดงผล ซึ่งส่วนนี้เรียกว่า Markup โดยจะอยู่รวมกับข้อมูลปกติ Markup Language ที่รู้จักกันมากที่สุดก็คือ HTML

    สรุปแล้ว XML ก็คือ ภาษาที่มีรูปแบบเป็น Markup Language เหมือนกับ HTML แต่สามารถที่จะกำหนด tag เพิ่มขึ้นมาเองได้ ถูกออกแบบมาเพื่อเก็บและ ติดต่อส่งข้อมูล โดยสามารถที่จะติดต่อกันในระบบที่ต่างกันได้(ระบบปฏิบัติการณ์ต่างกัน หรือคนละโปรแกรม)


    ภาษา XML นั้นเป็นภาษาสามารถอธิบายตัวเองได้ ดังตัวอย่างต่อไปนี้



    จากตัวอย่างข้างต้น จะเห็นได้ว่าเป็นข้อมูลเกียวกับการส่งโน๊ต โดยที่ tag แต่ละตัวจะมีชื่อที่สื่อความหมาย เห็นแล้วสามารถเข้าใจได้ทันทีว่าข้อมูลภายในเป็นข้อมูลอะไร เช่น ข้อมูลด้านใน Tag <to> นั้นหมายถึง ผู้รับ และด้านใน Tag <from> หมายถึงชื่อผู้ส่ง เป็นต้น


XML vs HTML

  • XML ถูกออกแบบเพื่อใช้เก็บและรับส่งข้อมูล จะเน้นเกี่ยวกับเรื่องข้อมูลแต่ละตัวคือข้อมูลอะไร
  • HTML ถูกออกแบบมาเพื่อแสดงผลข้อมูล จะเน้นเรื่องของหน้าตาการแสดงผลของข้อมูล
  • XML Tags ไม่ได้ถูกกำหนดมาตายตัวเหมือนกับ HTML Tags เราสามารถที่จะสร้าง XML Tags เพิ่มเองได้


XML Element

    XML Element คือส่วนประกอบทุกๆอย่างตั้งแต่ Start Tag ไปจนถึง End Tag ซึ่งใน Element ก็จะมี Text, Attribute หรือ Element  ต่างๆอยู่ภายใน หรืออาจจะปนๆกันไป โดยกฎการตั้งชื่อนั้นก็จะมีดังนี้

  • ชื่อของ Element เป็น Case-Sensitive ดังนั้น Tag เปิดและ Tag ปิด ต้องใช้ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ให้เหมือนกัน
  • ชื่อจะต้องขึ้นต้นด้วยตัวอักษร หรือ Underscores( _ ) เท่านั้น และต้องไม่ขึ้นต้นด้วยคำว่า XML ไม่ว่าจะตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ก็ตาม
  • ชื่อ Element สามารถประกอบไปด้วย ตัวอักษร, ตัวเลข, Hyphens( - ), Underscores( _ ), and periods( . ) แต่ต้องไม่มีการเว้นวรรค
  • จะตั้งชื่อว่าอะไรก็ได้ ไม่มีคำสงวน ยกเว้นเพียวคำว่า xml

    ถัดจากกฎการตั้งชื่อ อีกข้อบังคับนึงก็คือ XML Element จะต้องเป็น Properly Nested หรือแบบซ้อนกัน กล่าวคือ Tag ต้องมีลักษณะการซ้อนกัน ต้องปิด Tag ชั้นข้างในก่อนจึงจะปิด Tag ชั้นถัดมาข้างนอกได้ ดังรูปด้านล่าง ซึ่งต่างจาก HTML ที่จะไม่ได้เคร่งเรื่องนี้นัก ทำให้อาจพบเห็นได้บ้าง



Entity References

    ในส่วนของ Text นั้นการใช้เครื่องหมายบางตัวอาจทำให้เกิด Error ได้ จึงจำเป็นต้องมี Entity References มาใช้แทนเครื่องหมายเหล่านั้น ซึ่งหลักๆแล้วที่นิยมใช้มากจะมีอยู่ 5 ตัว ได้แก่



XML Tree

    คือโครงสร้างของ XML ในลักษณะต้นไม้ โดยจะเริ่มต้นแต่ Root Element ตามด้วย Element ภายใน Attribute ไล่ไปจนถึง Text หรือข้อมูลที่เก็บไว้ 



XML Namespaces

    เป็นการกำหนด Prefix เพื่อเอามาใช้นำหน้าของ Tag เพื่อป้องกันการเกิดการขัดแย้งหรือสับสนเมื่อมีการรวม XML หลายอันเข้าด้วยกัน โดยเมื่อกำหนด Prefix จะต้องกำหนด URI เพื่อบอกที่มาด้วย ตาม Syntax นี้

xmlns:prefix="URI"

        ซึ่งหากเทียบกับภาษา Programming ก็จะเหมือนกับเป็นการ import library เข้ามาแล้วทำการ alias เป็น prefix เพื่อนำไปใช้นั่นเอง โดยการกำหนด Namespace นั้น สามารถที่จะกำหนดได้ทั้งตรง Element ที่ต้องการ หรือจะประกาศตรง root เลยก็ได้ แต่ถ้าประกาศตรง Element จะใช้ Namespace ได้เฉพาะภายใน Element นั้นๆ




XML Display

 

    XML File สามารถเปิดดูได้บนเว็บเบราว์เซอร์แทบทุกตัว โดยที่เว็บเบราว์เซอร์บางตัวสามารถที่จะแจ้ง error ได้ในกรณีที่ข้อมูลใน XML File ข้อผิดพลาด
    ส่วนการแสดงผล XML File นั้นจะเป็นดังรูปด้านบน ซึ่งจะไม่แสดงผลเหมือนกับ HTML Page แต่เราก็ยังสามารถใช้ CSS มาช่วยในการตกแต่งการแสดงผลได้

  


XML Parser

XML parsers
    XML Parser เป็นเหมือน API หรือ ตัวช่วยที่ใช้ในการเข้าถึงข้อมูลที่อยู่ภายใน XML File โดยจะมีหน้าที่หลักๆก็คือ read(อ่าน) create(สร้าง) update(แก้ไข) และ manipulate(เข้าถึง) โดยจะทำการ Parse จาก Text String ให้กลายเป็น XML DOM object ก่อนที่จะนำไปใช้งาน
    ซึ่งวิธีการ Parse นั้นมีอยู่หลายวิธี โดย 2 วิธีที่จะแนะนำก็คือ DOM (Document Object Model) และ SAX (Simple API for XML)

DOM(Document Object Model) Parser

    DOM จะทำโหลดไฟล์ XML ทั้งไฟล์ใน memory จากนั้นจึงประมวลผลโครงสร้างออกมาในลักษณะต้นไม้ เพื่อให้แอปพลิเคชันสามารถเข้าถึงข้อมูลภายในได้
    ข้อดีคือ หลังจากที่มีการเรียกใช้ครั้งแรกแล้ว การเข้าถึงต่างๆจะถูกเก็บไว้ใน memory ทำให้เรียกใช้ได้เร็ว (แต่การเรียกใช้จะค่อนข้างช้า ขึ้นอยู่กับขนาดไฟล์)
    ข้อสียคือ ไม่เหมาะกับไฟล์ที่มีขนาดใหญ่ เนื่องจากต้องโหลดทั้งไฟล์ลง memory ทำให้มีข้อจำกัดของหน่อยความจำ

SAX (Simple API for XML) Parser

    SAX จะทำงานแบบ Event Driven คือจะไล่อ่านข้อมูลตั้งแต่จุดเริ่มต้นและสิ้นสุดของ elements ต่าง ๆ ไปให้แอพพลิเคชั่น โดยไม่จำเป็นต้องโหลดข้อมูลทั้งหมดลงใน memory
    ข้อดีคือ ใช้ memory น้อย เปิดไฟล์ขนาดใหญ่ที่มากกว่า memory ได้
    ข้อเสียคือ ไม่สามารถที่จะ random access หรือเปลี่ยนแปลงแก้ไขข้อมูลได้