Saturday, February 12, 2011

XML Tree

XML TREE

XML คือ

              หรือที่เรียกว่า Extensible Markup Language คือกฎที่ใช้ในการเข้ารหัสเอกสารที่เครื่องอ่านได้ โดยที่มันถูกกำหนดอยู่ใน XML 1.0 Specification ที่ถูกจัดทำโดย W3C

              โดยมีจุดมุ่งหมายในการออกแบบอยู่ที่ความเรียบง่ายในการใช้งานบนอินเตอร์เน็ทถึงแม้ว่า XML จะเน้นในด้านเอกสารแต่มันก็ถูกนำไปใช้อย่างกว้างขวางเช่นถูกใช้บน Web services ต่างๆ โดยส่วนของภาษาจะแบ่งเป็นส่วนต่างๆต่อไปนี้


Character
             โดยจากที่นิยาม เอกสาร XML นั้นคือ สายของข้อความ หรือเรียกว่า String of Characters โดยตัวอักษรประเภท Unicode ที่ถูกต้องทั้งหมดจะสามารถปรากฎอยู่ใน XML ได้ 


Tag
             เป็นตัว Markup ที่ขึ้นต้นด้วย "<" และปิดท้ายด้วย ">" Tags มีปรากฎในสามรูปแบบคือ Tags เริ่มเช่น <tagname> และ Tags ปิดเช่น </tagname> และยังมี Tags ว่างเช่น <line-break />


Element
             ส่วนประกอบของเอกสารโดยที่จะขึ้นต้นด้วย Tags เปิด และสิ้นสุดที่ Tags ปิดหรือแม้กระทั้งอยู่ใน Tags ว่างก็ย่อมได้เช่นกัน ตัวอักษร (Character) ที่อยู่ระหว่างนั้นจะเรียกว่า เนื้อหา (Content) ของ Element นั้นๆ สามารถมี Element อื่นๆอยู่ภายในนั้นได้เช่นกันโดยจะเรียกว่าเป็น Child Element ของ Element ที่ครอบอยู่นั้น


Attribute
             เอกสารนั้นจะประกอบไปด้วยคือของชื่อและค่าของตัวแปรอาศัยอยู่ภายใน Tag เริ่มต้นเช่นตัวอย่าง
<bookstore name="Kinokuniya"/> จะเห็นได้ว่ามีตัวแปรที่ชื่อว่า name และมีค่าคือ Kinokuniya นั้นเอง


XML Declaration
             โดยจะเป็นข้อความที่อยู่บนส่วนหัวของเอกสารเป็นการประกาศถึงข้อมูลของเอกสารต่างๆ โดยจะมีหรือไม่ก็ได้เช่น <?xml version="1.0" encoding="UTF-8" ?>




XML Tree



                เอกสารไฟล์แบบ XML จะสามารถสร้างหรือจัดให้อยู่ในรูปของโครงสร้างข้อมูลที่เป็นโครงสร้างข้อมูลแบบประเภทต้นไม้ได้เผื่อความสะดวกในการนำข้อมูลเหล่านั้นไปใช้งาน
แต่ XML Tree จะไม่สามารถแบ่งแยกเป็นให้เป็นแค่รากหรือใบได้เหมือนกับโครงสร้างข้อมูลแบบต้นไม้ทั่วๆไป ถึงแม้ว่าจะไม่มีข้อกำหนดที่แน่ชัดของกฎที่จะใช้ใน XML Tree แต่ก็สามารถพูดได้คราวๆว่ามีอยู่ 2 ลักษณะ คือ
-XPath Data Model
-XML Information Set

ตัวอย่าง XML Code:

<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>

</bookstore>

จะได้ออกมาเป็น  XML Tree ดังนี้


จะเห็นได้ว่าตัวอย่างข้างต้นนี้มี Root คือ <bookstore> และมี Element กิ่ง ของ tag นั้นๆซึ่งถูกครอบอยู่ใน tag ของ root คือ <book> โดยที่แต่ละ tag ก็จะมีส่วนประกอบย่อยๆ เช่น Attribute เป็นตัวกำหนดลักษณะหรือข้อมูลของ tag นั้นๆ และ element หรือเปรียบเสมือน โดยในตัวอย่างนี้จะเป็น title author year price ซึ่งภายใน Element เหล่านี้จะมี Text ซึ่งก็จะคือข้อมูลของ Tag นั้นๆ เป็นตัวบอกข้อมูลอยู่

XML Code to XML Tree Example
               ต่อไปจะเป็นตัวอย่างการแปลงจาก XML Code ไปสู่ XML Tree โดยจะเขียนอยู่ในรูปแบบภาษา Javaโดยจะมี Class ต่างๆดังนี้
               XMLTree เป็นคลาสหลักที่ใช้ในการจัดการ XML Tree โดยรวม ภายในคลาส XMLTree จะมีคลาสต่างๆที่อยู่ภายในดังที่จะแสดงต่อไปนี้
               Element ซึ่งคือส่วน Tags แต่ละ Tag ของ XML ที่นำมาประมวลผลโดยมีการเก็บค่าเป็นแบบในเชิงต้นไม้ โดยมีการโยงไปยัง Sibling และ Child ของแต่ละ Tag ทำให้จัดการได้ง่าย
               Attribute เป็นคลาสที่เก็บข้อมูลเกี่ยวกับ Attribute ต่างๆของ Tag นั้นโดย XMLTree นั้นจะมี Element เก็บไว้ 1 Object ซึ่งก็คือ root

public class XMLTree {
      Element root;
      private static class Element {…}
      private static class Attribute {…}
}


ต่อไปเป็น Code ของส่วน Class Element

private static class Element {
            String name;
            String text;
            Attribute attr;
            Element sibling;
            Element child;
            public Element(String data) {}       
}


               โดยเมื่อส่งข้อมูลเข้ามาใน Constructor แล้ว Element จะทำการ Parse ข้อมูลของ Tag ตัวเองเข้าไปจากนั้นจึงตรวจสอบว่ามีข้อมูลเหลือในส่วนของลูกหรือไม่ถ้ามีจะทำการสร้าง Child ขึ้นมาแล้วส่งส่วนนั้นไป จากนั้นถ้ายังมีข้อมูลส่วนท้ายอยู่จึงสร้าง Sibling แล้วจึงส่งข้อมูลที่เหลือด้านท้ายไปให้ยัง Sibling ตัวต่อไปเพื่อทำการประมวลผล
               การประมวลผลในส่วนของการรับข้อมูลต่างๆจะมีส่วนที่สกปรกมาก เนื่องจากส่วนสกปรกต่างๆของข้อมูลที่ได้รับมานั้นต้องถูกตรวจสอบทั้งหมดเพื่อไม่ให้โปรแกรมเกิดความผิดพลาด
สามารถสรุปขั้นตอนได้ดังนี้


นำข้อมูลที่ได้รับมาส่งไปให้ Element root เพื่อประมวลผล โดยการประมวลผลใน Constructor จะเป็นดังต่อไปนี้

โค้ดที่นำมาเป็นตัวอย่างคือด้านบนนี้


ค้นหน้า Tag แรกตั้งแต่ต้นจนท้ายสุดให้เจอ

นำแท็กที่ได้นั้นไปเก็บเป็นข้อมูลของ Element นั้นๆ


จากนั้นดูข้อมูลที่อยู่ในแท็กว่าเป็น text หรือว่า แท็ก อันอื่นๆ ถ้าเป็น text ให้เก็บเข้า text ของ Element นั้นๆ แต่ถ้าเป็น ข้อมูลของแท็กอื่นให้สร้าง  Child โดยทำการส่งข้อมูลภายในแท็กไปให้ และถ้ามีข้อมูลเหลืออยู่ด้านล่างให้สร้าง Sibling หรือต้นไม้ในเลเวลเดียวกันโดนส่งข้อมูลที่เหลือไปให้


ส่วนอื่นๆทั้งการค้นหา การเพิ่ม ส่วนต่างๆย่อมเหมือนกับ Tree โดยปกติซึ่งจุดมุ่งหมายของเราเป็นเพียงแค่การสร้าง XML Tree จาก XML Code เท่านั้นซึ่งการจะจัดการกับข้อมูลที่ได้มานั้นจะแบ่งแยกกันไปตามวิธีของแต่ละบุคคลโดยไม่ได้มีการนิยามวิธีการต่างๆไว้แต่อย่างใด


การสร้าง XML Tree จึงจบลงเพียงเท่านี้ขออภัยที่เนื่อหานั้นมีน้อยอาจจะไม่เพียงพอต่อความต้องการจึงขอให้รบกวนเข้าไปศึกษาหาข้อมูลเพิ่มเดิมได้ข้างล่างนี้ครับ ข้อมูลของ XML Tree นั้นไม่ค่อยมีมากเนื่องจากส่วนใหญ่จะมี Library มาให้ใช้กันอยู่แล้วและเนื่องจากผ่านยุคสมัยของ XML มานานแล้วจึงขออภัยมา ณ ที่นี้ด้วย




References

No comments:

Post a Comment