XML ( Extensible Markup Language ) เป็นภาษาที่ถูกออกแบบมาเพื่อรองรับการ แลกเปลี่ยนข้อมูลภายใต้มาตรฐานที่แตกต่างของ ภาษาต่าง ๆ ในปัจจุบัน ดังนั้น ภาษา XML เป็น ภาษาหนึ่งที่ออกแบบมาเพื่อให้เป็นภาษากลางใน การติดต่อสื่อสารระหว่างแพลตฟอร์ม ภาษา XML ไม่ได้เน้นที่การแสดงผล หรือ ควบคุมการทำงาน แต่เน้นที่การรองรับการแลก เปลี่ยนข้อมูลระหว่างกัน
การใช้บริการโฮมเพจหรือเว็บนั้นถูกเรียกว่า solutions โดยการเข้าไปจัดการนั้นทำได้ 2 แบบ - ฐานะผู้ใช้บริการ - ฐานะผู้ให้บริการเว็บเซอร์วิส การแลกเปลี่ยนข้อมูลกันภายในเว็บเซอร์วิสนั้น อาศัยภาษา XML เป็นตัวกลาง
ข้อแตกต่างระหว่าง HTML และ XML ภาษา XML ไม่ใช่ HTML และไม่ใช่ส่วนขยาย ของ HTML แต่ XML เป็นภาษาที่ถูกออกแบบมา เพื่อช่วยเพิ่มความสามารถให้กับ HTML ภาษา HTML ถูกออกแบบมาให้เน้นการแสดง ผลข้อมูลเพียงอย่างเดียว โดยไม่เข้าใจข้อมูล เช่น ตัวหนา ตัวเอียง ภาษา XML สามารถอธิบายข้อมูลส่วนต่าง ๆได้
โครงสร้างของภาษา XML ประกอบด้วย Tag ต่าง ๆ เช่นเดียวกับ HTML โดยมีทั้ง tag ปิด และ tag เปิด ปัญหาของ tag ใน HTML คือ tag นั้นจะต้องถูก ประกาศรับรองจากองค์กรวางมาตรฐาน W3C จึงจะสามารถนำมาใช้ในการสร้างโฮมเพจได้ แต่สำหรับ XML tag ที่สร้างขึ้นมาเองก็จะเป็น มาตรฐานได้ ซึ่งผู้ใช้เป็นผู้กำหนด และภาษาอื่น ก็จะยอมรับ พร้อมเรียกใช้งานได้
การใช้งาน XML คือการนิยามข้อมูลขึ้นมา โดยใช้ tag ระบุว่า ข้อมูลนั้นคืออะไร เป็นการมอง XML ในลักษณะ เป็นแหล่งข้อมูลที่สามารถเรียกใช้งานจาก ภาษาใดก็ได้ ส่งผลให้เราสามารถแลกเปลี่ยน ข้อมูลกับภาษาใดก็ได้ที่รู้จักกับ XML
การใช้งาน XML (ต่อ) XML จะอาศัยโปรโตคอล SOAP (Simple Object Access Protocol) ซึ่งเป็นข้อตกลงใน การสื่อสารระหว่างเครือข่ายอินเทอร์เน็ต
ความหมายของ tag กับ element เช่น ถ้าเราต้องการใช้ element ของ body เรา ต้องใช้ tag เปิด <body> เมื่อเริ่มต้นใช้งาน และเมื่อสิ้นสุดการใช้งาน element body จะต้อง ใช้ tag ปิด </body> นั่นคือ tag ทำหน้าที่เรียก object ของเอกสาร เว็บออกมาใช้งาน สำหรับ element นั้นแทน คำว่า object นั่นเอง
<?xml version=“1.0” encoding “windows-874”?> <persondata> <id>001</id> <first-name>นายประสพโชค</first-name> <last-name>ปัญจพันธ์<last-name> <address>กรุงเทพ</address> <e-mail>tan@yahoo.com</e-mail> </persondata>
รายละเอียด เริ่มต้นเป็นการประกาศส่วนที่เรียกว่า prolog หรือเรียกอีกอย่างว่า XML declaration หมายถึง ส่วนหัวของเอกสาร XML ที่เราต้องการใช้งาน และมีการเข้ารหัสภาษาไทยคือ windows-874 จากนั้นจะเข้าสู่พื้นที่แหล่งข้อมูลของเอกสาร XML ที่เรียกว่า Document Elements ซึ่ง ประกอบด้วย tag เปิดและ tag ปิด
รายละเอียด (ต่อ) ในการสร้าง tag จะต้องสร้าง tag ที่เรียกว่า Root Tag เพื่อทำหน้าที่บรรจุ tag อื่น ๆ ซึ่ง tag ที่ซ้อนอยู่ใน root tag นี้จะเรียกว่า Childs Tag ซึ่งซ้อนกันเป็นวงเป็นลำดับชั้น โดยที่ภาษา XML จะมองโครงสร้างนี้เป็นแบบโครงสร้างต้นไม้ การเขียนชื่อ tag ของ XML นั้นเป็น Case-Sensitive จึงต้องเขียนตัวพิมพ์ใหญ่หรือ ตัวพิมพ์เล็กให้ตรงกัน
การใช้ประโยชน์จากแหล่งข้อมูล XML ร่วมกับ HTML ใช้วิธี binding โดยใช้มุมมองของ HTML ใน รูปแบบของ DSO (Data Source Object) มองไป ยังข้อมูลที่อยู่ในแหล่งของ XML และจะมอง XML เป็นกลุ่มของข้อมูล หรือที่เรียกว่า Data Island การอ่านผลหรือประมวลผลข้อมูล XML ต้องอาศัย หน่วยความจำของเครื่องผู้ใช้ หรือ เครื่องลูกซึ่งจะ แปรผันตามปริมาณข้อมูลใน XML
การใช้ประโยชน์จากแหล่งข้อมูล XML ร่วมกับ HTML ทำได้ 2 วิธีคือ - ใช้ร่วมกับ tag <xml>….</xml> เป็นการ เรียกดูข้อมูล Data Island โดยใช้ element ของ HTML ที่ชื่อว่า xml - ใช้ร่วมกับ tag <table>….</table> เป็นการ ใช้งาน element table ของ HTML เพื่อสร้างตาราง ขึ้นมาแล้วนำข้อมูลที่อยู่ในแหล่งข้อมูล XML มาแสดง ผ่านตารางของ HTML
วิธีการที่จะทำให้ HTML ติดต่อกับ XML ทำได้ 2 ลักษณะคือ แบบฝัง Data Island ทั้งหมดเข้าไปในไฟล์ HTML (ผลการรัน) 2. แบบอ้างอิงชื่อไฟล์ XML ใน HTML(*.XML) (ผลการรัน)
ผลการรันแบบ Data Island
ผลการรันแบบอ้างอิง XML
การแสดงข้อมูลโดยใช้งาน tag ของ HTML การใช้งานข้อมูล XML โดยใช้ tag <xml> ร่วมกับ tag เป็นการนำข้อมูลในรูปแบบ xml มาใช้ร่วมกับ tag table และ xml ของ HTML เพื่อแสดงข้อมูลออกมา ซึ่งทำได้ 3 ลักษณะคือ - แสดงข้อมูลครั้งละ 1 record - แสดงข้อมูลตามจำนวน record ที่เรากำหนด - แสดงข้อมูลครบทุก record
การแสดงข้อมูลครั้งละ 1 record การแสดงข้อมูลนี้จะอาศัย tag <table> .... </table> และ tag <xml>....</xml> ของ HTML ครั้งละ 1 record จากตัวอย่าง จะสร้าง ปุ่ม 4 ปุ่มสำหรับการเปลี่ยน record ไปยัง record ถัดไป (แสดงผล)
ตัวอย่างการแสดงข้อมูลทีละ record
การแสดงข้อมูลตามจำนวน record ที่กำหนด การแสดงข้อมูลนี้จะอาศัย tag <table> เป็น การแบ่งข้อมูลออกเป็นหน้าที่เรียกว่า Paging Control โดยสามารถกำหนดจำนวน record ที่จะแสดงในแต่ละหน้า โดยใช้ attribute datapagesize ของ tag <table> เพื่อระบุ จำนวน record ที่ต้องการแสดงในแต่ละครั้ง (ตัวอย่าง และ การแสดงผล)
ตัวอย่างการแสดงข้อมูลตามจำนวน record ที่กำหนด
การแสดงข้อมูลครบทุก record เป็นการแสดงแบบง่ายที่สุด เนื่องจากไม่มีเงื่อนไข ใด ๆ จากตัวอย่างให้กำหนด ตัวอย่างของไฟล์ การแสดงผล
ตัวอย่างการแสดงข้อมูลครบทุก record
การใช้งาน XML ร่วมกับ CSS ภาษา CSS (Cascading Style Sheets) หรือ อาจเรียกอีกชื่อหนึ่งว่า DHTML (Dynamic HTML) เป็นการกำหนดรูปแบบอักษร หรือข้อความและรูปภาพ ให้มีลักษณะสวยงาม รวมทั้งจัดวางตำแหน่งของรูปภาพหรือข้อความ ได้ตามที่เราต้องการที่เรียกว่า Cascading Style Sheets Positioning (CSS-P)
การแสดงผลข้อมูล XML ด้วยภาษา CSS สามารถทำได้ 2 ลักษณะคือ - แบบฝัง CSS เข้าไปในแหล่งข้อมูล XML แสดงผล - แบบอ้างอิงชื่อไฟล์ *.CSS ประกอบด้วย ไฟล์ .CSS และ ไฟล์ .xml (แสดงผล)
ผลการแสดงข้อมูลการฝัง CSS
ผลการแสดงข้อมูลแบบอ้างอิง .css ผ่าน .xml
ตัวอย่างการใช้ CSS-P เพื่อจัดตำแหน่งของข้อความให้ชัดเจนมากขึ้น โดยจะมีส่วนของไฟล์ css_positioning.css ทำหน้าที่จัดรูปแบบข้อความแทน โดยกำหนด attribute href= “css_positioning.css” บนไฟล์ .xml (แสดงผล)
การใช้งาน XML ร่วมกับ XSL(T) เบื้องต้น โดยใช้ XSL จึงมีความสามารถมากกว่าภาษา HTML และ CSS เพราะสามารถสร้างเงื่อนไขการแสดงผล ได้มากกว่า
XSL (eXtensible Stylesheet Language) เป็นภาษาที่ทำหน้าที่แสดงผล XML และสามารถ ใช้ร่วมกับ HTML และ CSS ได้เป็นอย่างดี จุดประสงค์ของการใช้ XSL ร่วมกับ XML - ใช้จัดรูปแบบข้อมูล (Format Data) จากแหล่ง ข้อมูล XML แล้วนำไปแสดงผล - แปลงรูปแบบ (Transformation Data) แหล่ง ข้อมูล XML ตามเงื่อนไขที่ต้องการ แล้วนำไป แสดงผล
การแสดงผล XML ด้วย XSL แบบไม่มีเงื่อนไข จะต้องมีการใช้ element href=“******.xsl” ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงการใช้ xsl ร่วมกับ xml แบบไม่มีเงื่อนไข
การแสดงผล XML ด้วย XSL แบบมี attribute ใน แหล่งข้อมูล จะมีการระบุ attribute ให้ element ต่าง ๆ ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงการใช้ xsl ร่วมกับ xml แบบมี attribute
การแสดงผล XSL ร่วมกับ CSS ปรากฏขึ้นมา ทั้งลักษณะข้อความและการจัดวาง ตำแหน่ง ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงการใช้ xsl ร่วมกับ CSS
พื้นฐานการแสดงผล XML ด้วยภาษา XSL แบบมีเงื่อนไข เราสามารถใส่เงื่อนไขในการแสดงผลไว้ใน xsl ได้ เพื่อที่จะเลือกเฉพาะข้อมูลบางส่วนที่ ต้องการ ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงแสดงผล XML ด้วยภาษา XSL แบบมีเงื่อนไข
พื้นฐานการแสดงผล XML ด้วยภาษา XSL แบบเงื่อนไข if-then ตัวอย่างนี้จะแสดงรายการ record แบบมีพื้นสี หลังสลับไปมาระหว่างแถวคู่และแถวคี่ ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงแสดงผล XML ด้วยภาษา XSL แบบเงื่อนไข if-then
พื้นฐานการแสดงผล XML ด้วยภาษา XSL แบบเงื่อนไข choose-when เงื่อนไขนี้เป็นการตรวจสอบว่า เมื่อข้อมูลตรง กับเงื่อนไขที่ระบุไว้แล้ว จะให้ทำคำสั่งใด ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงผล XML ด้วยภาษา XSL แบบเงื่อนไข choose-when
การสร้าง Hyperlink และ E-mail Link ด้วย XSL การทำลิงค์มี 2 ลักษณะคือ - ลิงค์ระหว่างเอกสาร (Hyperlink) - ลิงค์แบบ E-mail ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ xsl การแสดงผล
ผลการแสดงผล Hyperlink และ E-mail
XML Data Schema มีลักษณะของตัวภาษาคล้ายกับ XML และ XSL โดยทำหน้าที่เป็นภาษาสำหรับกำหนดความถูกต้อง ของข้อมูล วิธีการกำหนดความถูกต้องโดยใช้ DTD ทำได้ 2 ลักษณะคือ - ฝังส่วนของภาษา DTD ไว้ใน XML - แบบอ้างอิงชื่อไฟล์ .dtd
การใช้ DTD และ XML Data Schema DTD ย่อมาจาก Document Type Definition เป็นภาษาที่ทำหน้าที่กำหนดกฎ กติกาให้กับ element, attribute และ entity ที่อยู่ในแหล่ง ข้อมูล XML การตรวจสอบความถูกต้องของข้อมูลใน XML ทำได้ 2 วิธีคือ 1. DTD (Document Type Definition) 2. XML Data Schema
การฝังข้อมูล DTD ไว้ใน XML ถ้าฝัง DTD ไว้กับ XML เมื่อ run โปรแกรมบน IE จะไม่ปรากฎส่วนของ DTD ให้เห็น ต้องทำการ View source code จึงจะเห็นส่วนของ DTD ตัวอย่างของไฟล์ XML ส่วนของ DTD
จาก DTD เป็นการระบุโครงสร้างของ element ในที่นี้ root element คือ book ซึ่งมี child element คือ bookdata และภายใต้ bookdata ก็จะมี child element คือ isbn, bookname, author, publisher, price และ homepage
เมื่อประกาศโครงสร้างให้กับแหล่งข้อมูล XML แล้ว ก็จะต้องกำหนดวิธีการประมวลผลข้อมูลใน แหล่งข้อมูล XML ให้กับตัวแปรภาษา XML Parser โดยสามารถแบ่งออกได้เป็น 3 กรณีคือ แบบที่ 1 แสดงข้อความหรือข้อมูลที่อยู่ระหว่าง element ที่สร้างขึ้นมาเรียกว่า PCDATA มาจาก Parsed Character Data เป็นข้อความที่ต้อง ตีความด้วยตัวแปรภาษา XML Parser ก่อน จากนั้นจึงแสดงข้อความออกมา
ข้อความที่จะถูกตัวแปรภาษา XML Parser ตีความได้นั้น ต้องอยู่ระหว่าง tag ที่สร้างขึ้นมา หรือถูก tag ดังกล่าวทำ Markup อยู่ เพื่อระบุจุด เริ่มต้นและจุดสิ้นสุดของข้อมูล เช่น <publisher>Infopress</publisher> ดังนั้นเมื่อใส่ข้อความเข้าไประหว่าง element ที่ สร้างขึ้นมา ตัวแปรภาษาจะแสดงเฉพาะข้อความ โดยไม่แสดง element ขึ้นมา
แบบที่ 2 เป็นข้อความหรือข้อมูลที่ไม่ต้องตีความ ไม่ต้องแสดงผลออกมา เรียกว่า CDATA มาจาก คำว่า Character Data เป็นการกำหนดค่าให้กับ attribute ส่วนใหญ่จะใช้ในการกำหนดกฎกติกา ให้กับ attribute ต่าง ๆ ที่สร้างขึ้นมาในแหล่ง ข้อมูล XML
แบบที่ 3 ไม่ใช่ข้อมูล ไม่ใช่ข้อความ แต่เป็น entity แบบไม่ต้องตีความ (Unparsed Entity) ที่สร้างขึ้นมาเองเรียกว่า NDATA มีลักษณะเช่น เดียวกับ CDATA แต่ทำหน้าที่กำหนดกฎ กติกาที่เกี่ยวกับไฟล์รูปภาพที่สามารถแสดงได้บนเว็บ เช่น GIF หรือ JPEG ให้กับ attribute ของ element ที่เกี่ยวข้องกับรูปภาพ เช่น <img src=“logo.gif”> ในที่นี้ XML Parser ไม่ต้องตีความค่าที่ระบุให้ src แต่ต้องค้นหารูปภาพตามที่ระบุว่ามีหรือไม่ ถ้า ไม่ได้จะแสดงข้อความ logo.gif ออกมาที่หน้าเว็บ
จากตัวอย่างที่ผ่านมา เป็น element ที่ต้อง ตีความก่อน จึงกำหนดให้เป็น PCDATA โดย ใช้คำสั่ง ELEMENT ของภาษา DTD การกำหนดความถูกต้องด้วยการอ้างอิงไฟล์ *.dtd การตรวจสอบความถูกต้องของข้อมูลใน XML ด้วยภาษา DTD แบบอ้างอิงชื่อไฟล์ .dtd สามารถ ระบุไว้ใน tag ดังนี้ <! DOCTYPE ชื่อ root tag SYSTEM “ไฟล์.dtd”> ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ dtd
entity ในภาษา XML คือค่าคงที่ต่าง ๆ ที่สร้าง ขึ้นมา ตัวอย่างของ entity รูปแบบการใช้ ความหมาย it &it Less than gt > Greater than amp & Ampersand apos &apos Apostrophe or quote quot " Double quote nbsp   Space 1 space ตัวอย่าง Standard Entity
การสร้าง entity แบบฝังในแหล่งข้อมูล XML จากตัวอย่าง ส่วนแรกเป็นการประกาศความ ถูกต้องของข้อมูลโดยใช้ DTD จากนั้นเป็นการสร้าง entity ขึ้นมาใช้เอง โดยใช้ คำสั่ง ENTITY ของภาษา DTD เช่น <!ENTITY psh “สำนักพิมพ์.......> <!ENTITY dst “จัดจำหน่ายโดย.......>
การเรียกใช้ entity ที่ฝังในแหล่งข้อมูล XML จะใช้เครื่องหมาย & นำหน้า และปิดท้ายด้วย เครื่องหมาย ; ตัวอย่างที่ใช้ &psh; &dst;
การสร้าง entity แบบแยกไฟล์อิสระ ตัวอย่างไฟล์ xml ตัวอย่างไฟล์ dtd ข้อดีของการแยกการตรวจสอบออกเป็นไฟล์ ต่างหาก คือกรณีที่มีแหล่งข้อมูล XML ที่มี โครงสร้างเหมือนกัน เราสามารถใช้ชื่อไฟล์ dtd เดียวกันได้ นอกจากนั้นเราสามารถแยกเก็บ ไฟล์ dtd ไว้ใน host ที่ต่างกันได้ โดยเวลา อ้างอิงก็ระบุ path ที่ไฟล์ได้ถูกเก็บไว้
การใช้งาน XML ร่วมกับ JavaScript บราวเซอร์ Netscape สามารถแสดงผลข้อมูลได้ DOM มาจาก Document Object Model เป็นคำที่ ใช้เรียกแบบจำลองของเอกสารบนเว็บ
ตัวอย่างของ DOM ในภาษา HTML <head> <title>New Page 1</title> </head> <body> </body> </html>
ภาษา JavaScript จะมองโครงสร้างของแหล่ง ข้อมูล XML เป็นโหนด (node) เช่น Root Node หรืออาจจะเรียกว่า Root Element เช่นเดียวกับ ภาษา XML ก็ได้ ขณะที่โหนดลูก (Child Node) ก็เทียบได้กับ element ลูก
การอ่านข้อมูล XML โดยใช้ JavaScript ร่วมกับ HTML จะเป็นการใช้ความสามารถของภาษา JavaScript เพื่ออ่านข้อมูลมาจาก XML และนำ ข้อมูลไปแสดงผลโดยอาศัยภาษา HTML โดยมี 2 ลักษณะคือ - การอ่านข้อมูลแบบเป็นกลุ่ม - การอ่านข้อมูลทีละ element
การอ่านข้อมูล XML แบบเป็นกลุ่ม จากนั้นสร้างโค้ด html โดยใช้ JavaScript ในการอ่านข้อมูล ภายใต้คำสั่ง <Script Language=“JavaScript” For=“window” Event=“onload”>
จากนั้นต้องทำการสร้างตัวแปรออบเจ็กต์ของ แบบจำลอง DOM ของภาษา XML โดยผ่าน เทคโนโลยีของ ActiveX เพื่อนำตัวแปรมาใช้ ในการอ้างอิงถึงข้อมูลต่อไป var xmlDocs = new ActiveXObject(“Microsoft.XMLDOM”)
แล้วกำหนดคุณสมบัติเพื่อให้บราวเซอร์ ทำการโหลดข้อมูลทุกอย่างให้เสร็จสมบูรณ์ก่อน แล้วค่อยแสดงผลที่หน้าจอ xmlDocs.async=“false” โดยกำหนดคุณสมบัติ async ให้มีค่าเป็น false
จากนั้นใช้เมธอด load เพื่ออ่านข้อมูล XML ที่ต้องการจากไฟล์ bookdata.xml xmlDocs.load(“bookdata.xml”) และใช้ตัวแปรออบเจ็กต์ xChild เพื่อเก็บข้อมูล ทุกโหนดที่อยู่ใน bookdata.xml ผ่านทาง คุณสมบัติ childNodes xChild=xmlDocs.documentElement.childNodes
โดยการอ่านข้อมูลที่อยู่ในแต่ละโหนดออกมานั้น จะทำการอ้างอิงแบบอาร์เรย์ โดยลำดับแรกเริ่ม จาก 0 ผ่านทางคุณสมบัติ childNodes โดยใช้ ตัวแปร Data1 ถึง Data6 ร่วมกับคุณสมบัติ innerText Data1.innerText = xChild(0).text Data2.innerText = xChild(1).text Data3.innerText = xChild(2).text Data4.innerText = xChild(3).text Data5.innerText = xChild(4).text Data6.innerText = xChild(5).text
การแสดงผลทำโดยใช้ tag <table> และใช้ tag <span> ร่วมกับ attribute id อ้างอิงชื่อ ตัวแปรที่เก็บข้อมูลในแต่และโหนด ตัวอย่าง การแสดงข้อมูลโหนดแรก <tr> <td width=“10%><font face=“MS Sans Serif” Size=“2”> ข้อมูลชุดที่ 1</font></td> </tr> ตัวอย่างไฟล์ .html
การอ่านข้อมูล XML ทีละ element ยืดหยุ่นกว่า เพราะสามารถเลือกโหนดใดก็ได้ ที่อยู่ระดับใดก็ได้เพื่อนำมาแสดงผล ในการอ้างอิงนี้ยังคงต้องมีการระบุการใช้ Script Language และสร้างตัวแปรออบเจ็กต์คือ xmlDocs ผ่านเทคโนโลยี ActiveX
จากโครงสร้างของลำดับข้อมูล
ถ้าต้องการข้อมูลชื่อหนังสือ และชื่อผู้แต่งของ ข้อมูลตัวแรก จะใช้เมธอด getElementsByTagName พร้อมกับระบุชื่อ โหนดที่อยู่ในระดับสูงกว่า 1 ระดับ ในที่นี้คือ <bookname> ตัวอย่างข้อมูลชุดแรก <book> <bookdata> <isbn>974-61901-7-2>/isbn> <bookname>คู่มือการสร้างเว็บ</bookname> <author>กฤษณะ สถิตย์</author> <publisher>infopress</publisher> <price>299</price> <homepage>http://www.infor.com</homepage> </bookdata>
จากนั้นใช้คุณสมบัติ item เพื่ออ่านลำดับของ โหนดลูกที่อยู่ในโหนด <bookname> ถ้าต้องการชื่อหนังสือ <bookname> และ ชื่อผู้แต่ง <author> ของหนังสือจากข้อมูลชุด แรก ต้องใส่ item(0) และแสดงข้อมูลทั้งสอง โดยใช้คุณสมบัติ text (ตัวอย่างไฟล์) document.write(“<b>ชื่อหนังสือ</b>”) document.write(xmlDocs.getElementsByTagName (“bookname”).item(0).text) document.write(“<br>”) document.write(“<b>ผู้แต่ง</b>”) (“author”).item(0).text)
การใช้งาน XML ร่วมกับ XSL ด้วย JavaScript ภาษา JavaScript สามารถใช้ร่วมกับ XSL เพื่ออ่านข้อมูลออกจากแหล่งข้อมูล XML ออกมา พร้อม ๆ กับการใช้ความสามารถของ XSL ใน การกำหนดรูปแบบการแสดงผล ตัวอย่างไฟล์ xml ที่จะใช้เป็นแหล่งข้อมูล มีชื่อ ไฟล์คือ xmlDataSource.xml ตัวอย่างไฟล์ xsl
จากไฟล์ .html จะมีการสร้างตัวแปรออบเจ็กต์ XMLDOM ขึ้นมา 2 ตัวเพื่อเก็บแหล่งข้อมูล XML และ XSL โดยที่ - ตัวแปรออบเจ็กต์ xmlDocs เก็บข้อมูล XML - ตัวแปรออบเจ็กต xslDocs เก็บไฟล์ XSL ซึ่งประกาศได้ดังนี้ var xmlDocs=new ActiveXObject(“Microsoft.XMLDOM”) var xslDocs=new ActiveXObject(“Microsoft.XMLDOM”)
จากนั้นกำหนดให้คุณสมบัติ async เป็น false และใช้เมธอด load อ่านข้อมูลจาก xml เก็บไว้ ในตัวแปรออบเจ็กต์ xmlDocs xmlDocs.aysnc = false xmlDocs.load(“xmlDataSource.xml”) และดึงชุดคำสั่ง xsl มาเก็บไว้ในตัวแปรออบเจ็กต์ xslDocs โดยใช้เมธอด load xslDocs.async = false xslDocs.load(“xsl_For_xmlDataSource.xsl”)
สุดท้ายทำการส่งค่าตัวแปรออบเจ็กต์ xslDocs ให้กับเมธอด transformNode ของตัวแปร ออบเจ็กต์ xmlDocs เพื่อกำหนดส่วนแสดงผลให้ กับแหล่งข้อมูล xml และแสดงผลในบราวเซอร์ ผ่านทางเมธอด write document.write(xmlDocs.transformNode(xslDocs)) ตัวอย่างของไฟล์ html
การใช้งาน XML ร่วมกับ ASP ข้อมูล Access ซึ่งการใช้ลักษณะเช่นนี้จะทำให้ สามารถใช้งาน XML กับบราวเซอร์ที่ไม่ สนับสนุนภาษา XML ได้อย่างสมบูรณ์
พื้นฐานการใช้ XML ร่วมกับ XSL โดยใช้ ASP
จากนั้นสร้างไฟล์ ASP ทำหน้าที่เรียกใช้แหล่ง ข้อมูล xmlDataSource.xml และ xslFile.xsl โดยมีข้อมูลตามไฟล์ตัวอย่าง แสดงผลการรัน จากไฟล์ ASP เริ่มจากการประกาศตัวแปร 4 ตัว โดยตัวแปรออบเจ็กต์ xmlDocs ทำหน้าที่เก็บ แบบจำลองของเอกสารต้นฉบับแบบ XML DOM และตัวแปรออบเจ็กต์ xslDocs เก็บโครงสร้าง ของ xsl
ผลการรัน ASP
เมื่อกำหนดตัวแปรแล้ว จึงสร้างออบเจ็กต์ XML DOM สำหรับเก็บไว้ในตัวแปรออบเจ็กต์ xmlDocs และ xslDocs จากนั้นกำหนดการคุณสมบัติการทำงาน async เป็น false โดยกำหนดให้กับ แหล่งข้อมูล XML เพื่อที่จะให้ฝั่ง server ทำ การประมวลผล XML และ XSL ให้เสร็จสมบูรณ์ ก่อนจึงแสดงผลลัพธ์บนบราวเซอร์ แล้วเก็บพาธของข้อมูล XML ไว้ที่ตัวแปร xmlPath โดยใช้คำสั่ง xmlPath=Server.MapPath(“xmlDataSource.xml”)
ต่อมาจึงทำการอ่านข้อมูล XML โดยใช้ เมธอด load เก็บไว้ที่ตัวแปรออบเจ็กต์ xmlDocs ผ่านทางตัวแปร xmlPath xmlDocs.load(xmlPath) เมื่อถึงจุดนี้แสดงว่า server เก็บโครงสร้างข้อมูล XML สมบูรณ์แล้ว ต่อไปจึงทำการอ่านชุดคำสั่ง XSL เพื่อนำมาประมวลผลโดยกำหนดคุณสมบัติ และทำการ load ไฟล์ xslDocs.async=False xslPath=Serve.MapPath(“xslFile.xsl”) xslDocs.load(xslPath)
ก่อนแสดงผลลัพธ์ เราสามารถตรวจสอบว่า ไฟล์ XSL ไม่มีข้อผิดพลาดโดยใช้เมธอด parseError ร่วมกับเมธอด reason เพื่อแสดง สาเหตุหากพบข้อผิดพลาด If xslDocs.parseError.errorCode <> 0 Then Response.Write “ไม่สามารถแสดงแหล่งข้อมูล XML เนื่องจาก” Response.Write xslDocs.parseError.reason Else Response.Write(xmlDocs.transformNode (xslDocs))
สุดท้ายทำการคือทรัพยากรสู่ระบบของ ตัวแปรออบเจ็กต์ xmlDocs และตัวแปรออบเจ็กต์ xslDocs SET xmlDocs = Nothing SET xslDocs = Nothing
การเก็บข้อมูลในรูปแบบ XML จากฐานข้อมูล เป็นการแปลงข้อมูลจากฐานข้อมูลให้จัดเก็บ อยู่ในลักษณะของแหล่งข้อมูล XML โดยจะใช้ ออบเจ็กต์ Recordset ร่วมกับออบเจ็กต์ Stream ของ ADO 2.5 ขึ้นไป ซึ่งสามารถทำได้ 4 วิธีคือ 1. ใช้ออบเจ็กต์ Stream ของ ADO แล้วจัดเก็บ ข้อมูลดังกล่าวให้อยู่ในรูปแบบโครงสร้างของ XML
2. ใช้ออบเจ็กต์ Response ของภาษา ASP 3. เขียนโค้ดโดยตรงเพื่ออ่านโครงสร้างของ ฐานข้อมูล แล้วจัดเก็บในรูปแบบของ XML 4. ใช้แบบจำลอง Microsoft XMLDOM โดยตรง ซึ่งเป็นการเรียกใช้งานกลุ่ม ออบเจ็กต์ XML โดยตรง
การดึงข้อมูลจากฐานข้อมูลแบบอาศัยออบเจ็กต์ Stream จากโครงสร้างฐานข้อมูล Microsoft Access ซึ่งมีโครงร่างและรายละเอียดดังนี้
รายละเอียด
ตัวอย่างไฟล์ ASP (XMLStream.asp) สร้างขึ้นได้โดยไปที่เมนู view->source จะได้ไฟล์ตามตัวอย่าง โครงสร้างข้อมูล XML นี้ได้จากออบเจ็กต์ Recordset ของ ADO เก็บรายการ record ต่าง ๆ ที่ได้จากการ query แล้วส่งต่อมายัง ออบเจ็กต์ Stream เพื่อนำข้อมูลมาสู่ฝั่ง ไคลเอนต์ แต่ข้อมูลดังกล่าวจะไม่ปรากฎที่ หน้าบราวเซอร์ จะต้อง view -> source
เหตุที่ไม่ปรากฏรูปแบบของข้อมูล XML ที่ บราวเซอร์ เนื่องจากไม่ได้มีการสร้างไฟล์ xsl เพื่อทำหน้าที่แสดงผล ส่วนที่ใช้ในการ query ข้อมูลจากตาราง detail ของ Access คือคำสั่ง sqlMain=“SELECT * FROM Detail ORDER BY ID”
จากนั้นจะสร้างออบเจ็กต์ Recordset ที่ชื่อว่า reMain โดยใช้เมธอด Execute ของ ออบเจ็กต์ Connection SET rsMain=Conn.Execute(sqlMain) ต่อมาจะสร้างออบเจ็กต์ Stream เพื่อทำ หน้าที่ลำเลียงข้อมูล SET stmMain=Server.CreateObject(“ADODB.Stream”)
ที่สำคัญที่สุดคือการถ่ายข้อมูลจากออบเจ็กต์ Recordset ไปสู่ออบเจ็กต์ Stream โดยใช้ เมธอด Save ของออบเจ็กต์ Recordset และ ระบุให้จัดโครงสร้างของข้อมูลให้อยู่ในรูป XML โดยการส่งค่าอาร์กิวเมนต์ adPersistXML rsMain.Save stmMain,adPersistXML
หลังจากที่ออบเจ็กต์ Stream ได้รับข้อมูลแล้ว จะทำหน้าที่ส่งข้อมูลไปยังไคลเอนต์ โดยระบุให้ ฝั่งไคลเอนต์ทราบว่าข้อมูลที่จะส่งเป็นชนิด Text ที่มีโครงสร้างเป็น XML โดยการใช้งานออบเจ็กต์ Response ร่วมกับคุณสมบัติ ContentType Response.ContentType=“text/xml”
จากนั้นกำหนดให้แสดงข้อมูล โดยการใช้งาน ออบเจ็กต์ Response ร่วมกับเมธอด Write ข้อมูลที่ส่งมาจะอยู่ในออบเจ็กต์ stream ให้ใช้ เมธอด Readtext ของออบเจ็กต์ Stream อ่าน ออกมา Response.Write stmMain.Readtext ท้ายที่สุดคือ การคืนทรัพยากรของออบเจ็กต์ Stream สู่ระบบ stmMain.Close SET stmMain=Nothing
การดึงข้อมูลจากฐานข้อมูลแบบอาศัยออบเจ็กต์ Response วิธีนี้จะดึงข้อมูลจากฐานข้อมูลออกมาแล้ว เก็บข้อมูลในรูปแบบ XML โดยอาศัยออบเจ็กต์ Response ของ ASP ตัวอย่างของไฟล์ (XMLResponse.asp) ผลของการรัน (link file.txt)
การดึงข้อมูลจากฐานข้อมูลแบบอาศัยออบเจ็กต์ Response วิธีนี้จะดึงข้อมูลจากฐานข้อมูลออกมาแล้ว เก็บข้อมูลในรูปแบบ XML โดยอาศัยออบเจ็กต์ Response ของ ASP ตัวอย่างของไฟล์ (XMLResponse.asp) ผลของการรัน
ข้อมูลที่ปรากฏขึ้นมาเป็นโครงสร้างของข้อมูล ที่อยู่ในฐานข้อมูลที่ query ขึ้นมา ไมโครซอฟท์ กำหนดให้ใช้ XML Data-Schema ทำหน้าที่ ตรวจสอบความถูกต้องของข้อมูลแทนที่จะใช้ ภาษา DTD โดยสามารถแยกข้อมูลที่ได้เป็น 2 ส่วน คือ ส่วนที่ 1 ส่วนของ XML Data-Schema ส่วนที่ 2 ข้อมูลจากฐานข้อมูลที่แปลงเป็น XML
โครงสร้างของ XML Data-Schema XML Data-Scehma คือภาษาที่ทำหน้าที่ ตรวจสอบความถูกต้องให้กับข้อมูลที่จัดเก็บอยู่ใน รูปแบบของ XML เหมือนกับภาษา DTD จะใช้ร่วม กับข้อมูลที่ถูก query ออกมา ความหมายของ XML Data-Schema เพื่อให้สามารถเข้าใจความหมายและ ความสำคัญของคำสั่งที่แสดงขึ้นมา
ส่วนแรกเรียกว่า ส่วนประกาศเนมสเปซของ XML Data-Schema เพื่อให้รับรู้ว่าจะใช้คำนำหน้า (prefix) เพื่อระบุความหมายอะไร คำนำหน้า หน้าที่ s ระบุโครงสร้างของข้อมูล ชนิดของข้อมูล เงื่อนไขในการจัดเก็บข้อมูล ขอบเขตข้อมูล dt ระบุประเภทข้อมูลปลีกย่อยจากคำนำหน้าตัว s อีกชั้นหนึ่งให้ละเอียดยิ่งขึ้น เช่น เป็น string, int rs หมายถึง 2 ส่วนคือขอบเขตของข้อมูล และส่วนของข้อมูล ซึ่งเป็นรายละเอียดปลีกย่อยจาก s เช่น เป็นค่า null ได้หรือไม่ z ข้อมูลที่ใช้งาน หรือ record ในฐานข้อมูล
ตัวอย่าง คำนำหน้า ตัวอย่าง s <xml xmlns:s=‘uuid:BDC6EF0-6DA3-11d1-A2A3-00AA00C14882’ dt xmlns:dt=‘uuid:C2F41010-65?B3-11d1-A29F-00AA00C14882’ rs xmlns:rs=‘urn:schemas-microsoft-com:rowset’ z Xmlns:z=‘#RowsetSchema’> <s:Schema id=‘RowsetSchema’>
เมื่อประกาศส่วนเนมสเปซแล้ว จะเป็นขั้นตอนการ ระบุรายละเอียด เพื่อให้เก็บข้อมูลได้ตามเงื่อนไข ที่ต้องการ โดยเริ่มต้นในแต่ละแถวจะกำหนดว่า ให้ root element เก็บได้แต่เฉพาะ element ลูก เท่านั้น ไม่สามารถเก็บข้อความโดด ๆ ได้ ต้องอยู่ ในสถานะ element เพียงอย่างเดียว เช่น <s:ElementType name=‘row’ content=‘eltOnly’>
ค่า attribute content อื่น ๆ มีรายละเอียดดังนี้ empty ไม่สามารถบรรจุ element ต่าง ๆ ได้ นั่นหมายถึงค่าว่าง textOnly เก็บได้แต่เฉพาะข้อความโดด ๆ เพียง อย่างเดียว ไม่สามารถบรรจุ element eltOnly เก็บได้แต่เฉพาะ element เพียงอย่าง เดียว ไม่สามารถเก็บข้อความโดด ๆ ได้ mixed เก็บได้ทั้ง element และข้อความโดด ๆ
ต่อจากนั้นเป็นการระบุเงื่อนไขในการจัดเก็บ ข้อมูลแต่ละแถวมาจากที่กำหนดให้กับ Access ในขณะออกแบบตาราง ในกรณีนี้เริ่มต้นที่ฟิลด์ ID (name=‘ID’) โดยที่สามารถเป็นค่า Null ได้หรือไม่ (rs:nullable=‘true’) เป็นข้อมูลชนิดใด (dt:type=‘int’) กำหนดพื้นที่จัดเก็บข้อมูลตายตัวหรือไม่ (rs:fixedlength=‘true’)
ตัวอย่าง ส่วนฟิลด์อื่น ๆ เช่น <s:AttributeType name=‘ID’ rs:number=‘1’ rs:nullable=‘true’ rs:maydefer =‘true’ rs:writeunknown=‘true’> <s:datatype dt:type=‘int’ dt:maxLength=‘4’ rs:precision=‘10’ rs:fixedlength=‘true’/> </s:AttributeType> ส่วนฟิลด์อื่น ๆ เช่น <s:AttributeType name=‘Title’ rs:number=‘2’ <s:datatype dt:type=‘string’ dt:maxLength=‘200’/>
เมื่อกำหนดเงื่อนไขต่าง ๆ แล้ะวก็จะเข้าสู่ส่วน ของข้อมูล ซึ่งจะใช้คำนำหน้าว่า z:row ข้อมูลต่าง ๆ ที่จัดเก็บใน record จะถูกแปลง ให้อยู่ในสถานะเป็น attribute ของ element z:row ทุกฟิลด์ ส่วนแรกนี้เป็นของ record แรก ประกอบด้วย 3 ฟิลด์คือ ID, Title และ Description <z:row ID='1' Title='Visual Studio 98 Service Pack 5' URL='msdn.microsoft.com/vstudio/sp/vs6sp5/ dnldoverview.asp’ Description=‘ ไฟล์ Service Pack 5 ของ Visual Studio 98 มีให้เลือก 2 แบบคือ เฉพาะ Visual Basic 6.0 กับ Visual Studio 98 ทั้งชุด'/>
การจัดส่วนแสดงผลให้กับ XML ที่เกิดจาก ADO Recordset สำหรับการใช้ XSL ร่วมกับ XML ที่เกิดจาก การทำ query จะมีโครงสร้างของ XML Data-Schema ติดมาด้วย เพื่อกำหนดส่วนแสดงผล ให้กับแหล่งข้อมูล XML โดยวิธีการนี้ข้อมูลจะถูก จัดเก็บให้อยู่ในสถานะเป็น attribute ของ element z:row ส่งผลให้เวลาที่ต้องการข้อมูล ออกมาต้องใช้เครื่องหมาย @ กำกับไว้หน้าชื่อ tag ด้วยเสมอ ตัวอย่าง
จากไฟล์ asp ได้ผลดังนี้ ตัวอย่างไฟล์ .xsl ที่ใช้ และไฟล์ xml ที่ได้
ข้อแตกต่าง ในไฟล์ XML_With_XSL.asp คือ ทำ query ในที่นี้คือไฟล์ xslFile1.xsl Response.Write(“?xml-stylesheet type=‘text/xsl’ href=‘xslFile1.xsl’?>”) ในส่วนของไฟล์ XSL จะมีการสั่งวนลูปเพื่อให้อ่านข้อมูลที่เก็บอยู่ใน element z:row โดยจะ ต้องระบุลำดับชั้นให้ถูกต้อง <xsl:for-each select=“xml/rs:data/z:row”>
เนื่องจากข้อมูลถูกจัดเก็บอยู่ในสถานะ attribute ต้องใช้เครื่องหมาย @ นำหน้าชื่อ tag เสมอ เช่น <td width=“3%”> <font name =“MS Sans Serif” Size=“2”> <xsl:value-of select=“@ID”/></font> </td>
การดึงข้อมูลจากฐานข้อมูลแบบเขียนโค้ดโดยตรง เป็นวิธีการที่ค่อนข้างยุ่งยากเมื่อเทียบกับ 2 วิธี แรก แต่ทำให้เราสามารถกำหนดโครงสร้างของ แหล่งข้อมูล XML ได้อย่างอิสระ โดยจะอาศัยงาน กลุ่มออบเจ็กต์ที่เกี่ยวกับระบบไฟล์ข้อความที่ชื่อ ว่า FileSystemObject ซึ่งเป็นคอมโพเนนท์ พิเศษที่ช่วยให้ ASP รู้จักกับระบบไฟล์ข้อความ
แนวคิด คือจะสร้างไฟล์ xml ขึ้นมาโดยอาศัย คอมโพเนนท์ FileSystemObject โครงสร้างของ แหล่งข้อมูลที่ได้จะเป็นไปตามชุดคำสั่ง SQL ที่ query เข้าไปในฐานข้อมูล และจะใช้ชื่อของแต่ ละคอลัมน์เป็นตัวกำหนดชื่อ tag ต่าง ๆ ซึ่งแหล่ง ข้อมูล XML ส่งผลให้ได้ชื่อ tag XML เช่นเดียวกับชื่อฟิลด์ที่ตั้งในตาราง จากการใช้ฐานข้อมูล main.mdb จะได้ ไฟล์ในพาธ c:\ ชื่อว่า XMLFileResult.xml ซึ่งสร้างโดยอัตโนมัติ
ตัวอย่างไฟล์ ADORecordsetToXML.asp ตัวอย่างการรัน ตัวอย่างตาราง Detail ในไฟล์ main.mdb แสดงดังรูป
ตัวอย่างไฟล์ XMLFileResult.xml
จากไฟล์ เริ่มต้นด้วยการสร้างการเชื่อมต่อกับ ฐานข้อมูล โดยใช้ออบเจ็กต์ Connection ของ ADO strConn=“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & Server.MapPath(“main.mdb”) SET Conn =Server.CreateObject(“ADODB.Connection”) Conn.ConnectionString=strConn Conn.Open
ต่อจากนั้นจะสร้างชุดคำสั่ง SQL เพื่อเลือกฟิลด์ที่ ต้องการนำมาแปลงเป็น XML เช่น sqlMain=“SELECT * FROM Detail ORDER BY ID” SET rsMain=Conn.Execute(sqlMain) เมื่อได้ออบเจ็กต์ Recordset แล้ว เราจะเก็บ จำนวนฟิลด์ไว้ในตัวแปร reFieldcount ก่อนไปทำ การอ่านข้อมูล rsFieldCount=rsMain.Fields.Count
ต่อมาจะสร้างออบเจ็กต์ FileSystemObject ที่ชื่อ ว่า fsoADOToXML ขึ้นมา SET fsoADOToXML=Server.CreateObject (“Scripting.FileSystemObject”) สั่งสร้างไฟล์ fsoXMLFile ขึ้นใหม่ โดยใช้เมธอด CreateTextFile SET fsoXMLFile=fsoADOToXML.CreateTextFile (“C:\XMLFileResult.xml”)
จากนั้นจะเขียนข้อความลงในไฟล์ โดยใช้คำสั่ง WriteLine fsoXMLFile.WriteLine(“<?xml version=‘1.0’ encoding=‘windows-874’?>”) และสร้าง tag เปิดของรากขึ้นมาก่อน fsoXMLFile.WriteLine(“<DatabaseDetail>”) และเข้าสู่ส่วนของเนื้อหา โดยจะวนลูปจนหมดทุก record Do While rsMain.EOF=False
จากนั้นส่งให้วนลูปจนครบทุกคอลัมน์ และสร้าง tag ลูก fsoXMLFile.WriteLine(“<RecordDetail>”) จากนั้นส่งให้วนลูปจนครบทุกคอลัมน์ For i=0 To (rsFieldCount-1) และเก็บชื่อฟิลด์ไว้ใน FieldDBName โดยการอ่าน จากคุณสมบัติ Name ของออบเจ็กต์ Fields กรณี นี้รอบแรกตัวแปร FieldDBName จะเก็บค่า ID FieldDBName=rsMain.Fields(i).Name จากนั้นสร้าง tag เปิด สำหรับแต่ละฟิลด์ fsoXMLFile.WriteLine(“<” & FieldDBName & “>”)
จากนั้นตรวจสอบความถูกต้องว่าในฟิลด์นั้น ๆ มี ข้อมูลเก็บอยู่หรือไม่ If IsNull(rsMain.Fields(FieldDBName).Value) OR Trim(rsMain.Fields(FieldDBName).Value)= “” Then xmlTagData=“ไม่มีข้อมูล” Else xmlTagData= rsMain.Fields(FieldDBName).Value End IF จากนั้นจะเข้าสู่ข้อมูล tag ย่อย fsoXMLFile.WriteLine(xmlTagData)
หลังจากวนลูปจนครบทุกฟิลด์แล้วก็จะปิด tag ลูก fsoXMLFile.WriteLine(“</” & FieldDBName & “>”) Next หลังจากวนลูปจนครบทุกฟิลด์แล้วก็จะปิด tag ลูก ด้วย </RecordDetail> fsoXMLFile.WriteLine(“</RecordDetail>”) rsMain.MoveNext Loop
และแสดงผลการทำงานเพื่อแจ้งให้ผู้ใช้ทราบ จากนั้นปิด tag ราก fsoXMLFile.WriteLine(“</DatabaseDetail>”) และแสดงผลการทำงานเพื่อแจ้งให้ผู้ใช้ทราบ Response.Write(“<meta http-equiv=‘Content-Type’ content=‘text/html; charset=windows-874’>”) Response.Write(“<font name=‘MS Sans Serif’ size=‘2’ color=‘red’>”) Response.Write(“แปลงข้อมูล เรียบร้อยแล้ว”) Response.Write(“</font>”)