ตัวอย่างเว็บไซต์ที่มีโครงสร้าง JSP+XML
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-02 17:11:58
XML (Extensible Markup Language) อาจดูเหมือนมาตรฐาน W3C บางชนิด ซึ่งขณะนี้มีผลกระทบในทางปฏิบัติเพียงเล็กน้อย และหากมีประโยชน์ในภายหลัง ก็คงต้องใช้เวลานาน แต่จริงๆแล้วมันก็ถูกใช้ไปแล้ว ดังนั้นอย่ารอจนกว่า XML จะถูกเพิ่มลงในโปรแกรมแก้ไข HTML ที่คุณชื่นชอบเพื่อเริ่มใช้งาน สามารถแก้ไขปัญหาภายในต่างๆ และปัญหาระบบ B2B ได้แล้ว
ที่ Sparks.com เราใช้ XML เพื่อสร้างมาตรฐานการแสดงข้อมูลในระบบที่แตกต่างกัน ตั้งแต่ออบเจ็กต์ Java ไปจนถึงการแสดงข้อมูล HTML
โดยเฉพาะอย่างยิ่ง เราพบว่าข้อมูลสามารถแบ่งปันและจัดการได้ง่ายขึ้นเมื่อได้รับมาตรฐานบนโครงสร้าง XML ขั้นพื้นฐาน ระหว่างทาง เราได้ค้นพบวิธีที่มีประสิทธิภาพมากมายในการใช้ XML ข้อมูลต่อไปนี้จะอธิบายรายละเอียดการสมัครปัจจุบันของเรา
ทำให้เป็นมาตรฐาน ก่อนที่จะใช้ XML ให้สร้างรูปแบบข้อมูล XML ที่แตกต่างจากข้อมูลที่คุณต้องการใช้
สร้าง XML แบบไดนามิก
การสร้าง HTML จากฐานข้อมูลไม่ใช่เรื่องใหม่ แต่การสร้าง XML เป็นเรื่องใหม่ ที่นี่เราจะแนะนำขั้นตอนการสร้างเฉพาะ
การใช้ XSL เป็นภาษาเทมเพลต
XSL (Extensible Stylesheet Language) เป็นวิธีที่ดีในการกำหนดรูปแบบสำหรับการแสดงข้อมูล XML และจะมีประสิทธิภาพมากกว่าหากเขียนเป็นเทมเพลตคงที่หลายรายการ
สร้าง HTML
XML บวก XSL เท่ากับ HTML อาจฟังดูไม่ถูกต้อง แต่หน้า HTML ของเราที่ผู้ใช้เห็นนั้นจริงๆ แล้วเป็นผลมาจากการผสมผสานระหว่าง XML และ XSL
1. การกำหนดมาตรฐาน
พลังของ XML มาจากความยืดหยุ่น แต่น่าเสียดายที่บางครั้งมันยืดหยุ่นมากจนคุณเหลือหน้าว่างและสงสัยว่าจะแก้ปัญหาอย่างไร
ในโครงการ XML ใดๆ ขั้นตอนแรกคือการสร้างรูปแบบข้อมูลมาตรฐาน ในการดำเนินการนี้ คุณจะต้องตัดสินใจดังต่อไปนี้:
-
ยืนยันข้อมูล:
เนื่องจากไม่มีรูปแบบ XML มาตรฐาน นักพัฒนาจึงมีอิสระในการพัฒนารูปแบบของตนเอง อย่างไรก็ตาม หากแอปพลิเคชันเดียวรู้จักรูปแบบของคุณ คุณก็สามารถเรียกใช้แอปพลิเคชันนั้นเพื่อใช้รูปแบบนั้นได้เท่านั้น จะมีประโยชน์มากกว่าอย่างเห็นได้ชัดหากมีโปรแกรมอื่นที่สามารถอ่านรูปแบบ XML ของคุณได้ หากมีการแก้ไขรูปแบบ XML ระบบที่ใช้รูปแบบดังกล่าวอาจจำเป็นต้องแก้ไขด้วย ดังนั้นคุณควรสร้างรูปแบบให้สมบูรณ์ที่สุด เนื่องจากระบบส่วนใหญ่เพิกเฉยต่อแท็กที่พวกเขาไม่รู้จัก วิธีที่ปลอดภัยที่สุดในการเปลี่ยนรูปแบบของ XML คือการเพิ่มแท็ก แทนที่จะแก้ไขแท็ก
คลิกที่นี่เพื่อดูตัวอย่างรูปแบบข้อมูล XML
ที่ Sparks.com เราได้พิจารณาข้อมูลผลิตภัณฑ์ทั้งหมดที่จำเป็นสำหรับการนำเสนอผลิตภัณฑ์ต่างๆ แม้ว่าจะไม่ใช่ทุกหน้าที่ใช้ข้อมูลทั้งหมด แต่เราก็ได้พัฒนารูปแบบข้อมูล XML ที่สมบูรณ์แบบซึ่งเหมาะสำหรับข้อมูลทั้งหมด ตัวอย่างเช่น หน้ารายละเอียดผลิตภัณฑ์ของเราจะแสดงข้อมูลมากกว่าหน้าเรียกดูผลิตภัณฑ์ของเรา อย่างไรก็ตาม เรายังคงใช้รูปแบบข้อมูลเดียวกันในทั้งสองกรณี เนื่องจากเทมเพลต XSL ของแต่ละหน้าใช้เฉพาะฟิลด์ที่ต้องการเท่านั้น
ไม่ว่าจะใช้ DTD
ที่ Sparks.com เราใช้ XML ที่มีการจัดการอย่างดี แทนที่จะใช้แค่ XML ที่ถูกต้อง เนื่องจากแบบแรกไม่จำเป็นต้องใช้ DTD DTD เพิ่มชั้นของการประมวลผลระหว่างการคลิกและการดูเพจของผู้ใช้ เราพบว่าเลเยอร์นี้ต้องการการประมวลผลมากเกินไป แน่นอนว่า การใช้ DTD เมื่อสื่อสารกับบริษัทอื่นในรูปแบบ XML ยังเป็นเรื่องดี เพราะ DTD สามารถมั่นใจได้ว่าโครงสร้างข้อมูลถูกต้องเมื่อส่งและรับ
การเลือก Parsing Engine ขณะนี้ มีเอ็นจิ้นการแยกวิเคราะห์หลายตัวที่สามารถใช้ได้ สิ่งที่คุณเลือกนั้นขึ้นอยู่กับความต้องการใช้งานของคุณเกือบทั้งหมด หากคุณตัดสินใจที่จะใช้ DTD กลไกการแยกวิเคราะห์จะต้องเปิดใช้งาน XML ของคุณเพื่อให้ได้รับการตรวจสอบโดย DTD คุณสามารถแยกการตรวจสอบออกเป็นกระบวนการแยกต่างหากได้ แต่นั่นจะส่งผลกระทบต่อประสิทธิภาพการทำงาน
SAX และ DOM เป็นโมเดลการแยกวิเคราะห์พื้นฐานสองแบบ SAX เป็นไปตามเหตุการณ์ ดังนั้นเมื่อมีการแยกวิเคราะห์ XML เหตุการณ์จะถูกส่งไปยังกลไก ถัดไป เหตุการณ์จะถูกซิงโครไนซ์กับไฟล์เอาต์พุต กลไกการแยกวิเคราะห์ DOM สร้างโครงสร้างต้นไม้แบบลำดับชั้นสำหรับข้อมูล XML แบบไดนามิกและสไตล์ชีต XSL การเข้าถึงแผนผัง DOM แบบสุ่มทำให้สามารถจัดเตรียมข้อมูล XML เสมือนว่าถูกกำหนดโดยสไตล์ชีต XSL การอภิปรายเกี่ยวกับโมเดล SAX มุ่งเน้นไปที่การลดหน่วยความจำที่มากเกินไปของโครงสร้าง DOM และการเร่งความเร็วของเวลาในการแยกวิเคราะห์สไตล์ชีต XSL
อย่างไรก็ตาม เราพบว่าหลายระบบที่ใช้ SAX ไม่ได้ใช้งานอย่างเต็มประสิทธิภาพ ระบบเหล่านี้ใช้เพื่อสร้างโครงสร้าง DOM และส่งเหตุการณ์ผ่านโครงสร้าง DOM ด้วยแนวทางนี้ DOM จะต้องถูกสร้างขึ้นจากสไตล์ชีตก่อนการประมวลผล XML ใดๆ ดังนั้นประสิทธิภาพจะลดลง
2. สร้าง XML แบบไดนามิก
เมื่อสร้างรูปแบบ XML แล้ว เราจำเป็นต้องมีวิธีพอร์ตรูปแบบดังกล่าวจากฐานข้อมูลแบบไดนามิก
การสร้างเอกสาร XML ค่อนข้างง่ายเนื่องจากต้องใช้เพียงระบบที่สามารถจัดการสตริงได้ เราสร้างระบบโดยใช้ Java Servlets, เซิร์ฟเวอร์ Enterprise JavaBean, JDBC และ RDBMS (ระบบจัดการฐานข้อมูลเชิงสัมพันธ์)
-
(สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ XSL โปรดดู XSL เป็นภาษาเทมเพลต)
ตัวอย่างการสร้าง XML โค้ดจริงสำหรับการสร้าง XML docstring ใน Java สามารถแบ่งออกเป็นหลายวิธีและคลาสต่างๆ
รหัสที่เริ่มกระบวนการสร้าง XML จะถูกวางไว้ในวิธี EJB อินสแตนซ์นี้จะสร้าง StringBuffer ทันทีเพื่อจัดเก็บสตริง XML ที่สร้างขึ้น
StringBuffer xml = ใหม่ StringBuffer();
xml.append(XmlUtils.beginDocument("/browse_find/browse.xsl", "เรียกดู", คำขอ));
xml.ผนวก(product.toXml());
xml.append(XmlUtils.endDocument("เรียกดู");
out.print(xml.toString());
ตัวแปร xml.append() สามตัวต่อไปนี้เป็นการเรียกไปยังวิธีการอื่น
การสร้างส่วนหัวของแฟ้ม วิธีการเพิ่มเติมแรกเรียกคลาส XmlUtils เพื่อสร้างส่วนหัวของแฟ้ม XML รหัสใน Java Servlet ของเราเป็นดังนี้:
สตริงคงที่สาธารณะ beginningDocument (สไตล์ชีตสตริง, หน้าสตริง)
-
StringBuffer xml = ใหม่ StringBuffer();
xml.append("<?xml version="1.0"?> ")
.append("<?xml-stylesheet href="")
.append(สไตล์ชีต).ผนวก(""")
.append(" type ="text/xsl"?> ");
xml.append("<").append(page).append("> ");
กลับ xml.toString();
-
รหัสนี้สร้างส่วนหัวของไฟล์ XML แท็ก <?xml> กำหนดไฟล์นี้เป็นไฟล์ XML ที่รองรับเวอร์ชัน 1.0 โค้ดบรรทัดที่สองชี้ไปยังตำแหน่งของสไตล์ชีตที่ถูกต้องเพื่อแสดงข้อมูล สิ่งสุดท้ายที่รวมไว้คือแท็กระดับรายการ (<browse> ในตัวอย่างนี้) ที่ส่วนท้ายของไฟล์ ต้องปิดเฉพาะแท็ก <browse> เท่านั้น
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <เรียกดู>
หลังจากกรอกข้อมูลผลิตภัณฑ์และกรอกส่วนหัวของไฟล์แล้ว วิธีการควบคุมจะเรียกออบเจ็กต์ Java เพื่อสร้าง XML ในตัวอย่างนี้ วัตถุผลิตภัณฑ์เรียกว่า ออบเจ็กต์ผลิตภัณฑ์ใช้สองวิธีในการสร้างการแสดง XML วิธีแรก toXML() สร้างโหนดผลิตภัณฑ์โดยการสร้างแท็ก <product> และ </product> จากนั้นจะเรียก InternalXML() ซึ่งจัดเตรียมเนื้อหาที่จำเป็นสำหรับ XML ผลิตภัณฑ์ InternalXML() คือชุดของการเรียก StringBuffer.append() StringBuffer จะถูกแปลงเป็นสตริงและส่งกลับไปยังวิธีการควบคุมด้วย
สตริงสาธารณะ toXml()
-
StringBuffer xml = ใหม่ StringBuffer("<product> ");
xml.ผนวก(internalXml());
xml.append("</product> ");
กลับ xml.toString();
-
สตริงสาธารณะ InternalXml()
-
StringBuffer xml = ใหม่
StringBuffer(" ")
.append(productType).append(" ");
xml.ผนวก(" ").ผนวก(idValue.trim())
.ผนวก(" ");
xml.ผนวก(" ").ผนวก(idName.trim())
.ผนวก(" ");
xml.append(" ").ผนวก(page.trim())
.ผนวก(" ");
แป้ง?
xml.append(" ").ผนวก(จำนวน).ผนวก(" ");
xml.append(" ").ผนวก(ผู้ขาย).ผนวก(" ");
xml.ผนวก(" ");
xml.ผนวก(" ").ผนวก(pubDesc).ผนวก(" ");
xml.append(" ").append(venDesc).append(" ";
แป้ง?
กลับ xml.toString();
-
สุดท้ายนี้ เมธอด XMLUtils.endDocument() จะถูกเรียกหลังจากปิดไฟล์ การเรียกนี้จะปิดแท็ก XML (ในกรณีนี้) และเสร็จสิ้นไฟล์ XML ที่มีโครงสร้างในที่สุด StringBuffer ทั้งหมดจากวิธีการควบคุมจะถูกแปลงเป็นสตริงและส่งคืนไปยังเซิร์ฟเล็ตที่จัดการคำขอ HTTP ดั้งเดิม
3. ใช้ XSL เป็นภาษาเทมเพลต
ในการรับเอาต์พุต HTML เราจะรวมไฟล์ XML ที่สร้างขึ้นเข้ากับเทมเพลต XSL ที่ควบคุมวิธีการแสดงข้อมูล XML เทมเพลต XSL ของเราประกอบด้วยแท็ก XSL และ HTML ที่จัดระเบียบอย่างระมัดระวัง
เริ่มสร้างเทมเพลต จุดเริ่มต้นของเทมเพลต XSL ของเรามีลักษณะคล้ายกับโค้ดต่อไปนี้ จำเป็นต้องมีโค้ดบรรทัดแรกและกำหนดไฟล์นี้เป็นสไตล์ชีต XSL xmlns:xsl= แอททริบิวต์อ้างอิงถึงเนมสเปซ XML ที่ใช้โดยไฟล์นี้ และแอตทริบิวต์ version= จะกำหนดหมายเลขเวอร์ชันของเนมสเปซ ในตอนท้ายของไฟล์เราจะปิดแท็ก
บรรทัดที่สองของโค้ดที่ขึ้นต้นด้วย <xsl:template> จะกำหนดรูปแบบของเทมเพลต XSL จำเป็นต้องมีแอ็ตทริบิวต์ Match และที่นี่ชี้ไปที่แท็ก XML <basketPage> ในระบบของเรา แท็ก <basketPage> มีแท็ก <product> ซึ่งช่วยให้เทมเพลต XSL เข้าถึงข้อมูลผลิตภัณฑ์ที่ฝังอยู่ในแท็ก <product> เราต้องปิดแท็ก <xsl:template> ที่ท้ายไฟล์อีกครั้ง
ต่อไปเรามาดู HTML ที่มีการจัดระเบียบอย่างดีกัน เนื่องจากจะถูกประมวลผลโดยกลไกการแยกวิเคราะห์ XML จึงจะต้องปฏิบัติตามกฎทั้งหมดของ XML ที่มีการจัดระเบียบอย่างดี โดยพื้นฐานแล้ว หมายความว่าแท็กเปิดทั้งหมดต้องมีแท็กปิดที่สอดคล้องกัน ตัวอย่างเช่น แท็ก <P> ที่ไม่ได้ปิดตามปกติจะต้องปิดด้วย </P>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
รุ่น = "1.0">
<xsl:template match="basketPage">
<html>
<หัว>
<title>ถุงช้อปปิ้ง / ปรับจำนวน</title>
</หัว>
<ตัว bgcolor="
</xsl:แม่แบบ>
</xsl:สไตล์ชีท>
ภายในเนื้อหาของเทมเพลต มีแท็ก XSL จำนวนมากที่ใช้เพื่อสร้างตรรกะสำหรับการนำเสนอข้อมูล มีคำอธิบายแท็กที่ใช้กันทั่วไปสองแท็กด้านล่าง
เลือก
แท็ก <xsl:choose> คล้ายกับจุดเริ่มต้นของโครงสร้าง if-then-else ในภาษาการเขียนโปรแกรมแบบดั้งเดิม ใน XSL แท็กเลือกจะระบุว่าในส่วนที่โค้ดเข้ามา การมอบหมายจะทริกเกอร์การดำเนินการ แท็ก <xsl:when> ที่มีแอตทริบิวต์ที่กำหนดจะตามหลังแท็กเลือก หากการกำหนดถูกต้อง เนื้อหาระหว่างแท็กเปิดและแท็กปิดของ <xsl:when> จะถูกนำมาใช้ หากการกำหนดไม่ถูกต้อง จะใช้เนื้อหาระหว่างแท็กเปิดและแท็กปิดของ <xsl:otherwise> ส่วนทั้งหมดลงท้ายด้วย </xsl:choose>
ในตัวอย่างนี้ เมื่อแท็กตรวจสอบ XML สำหรับแท็กปริมาณ หากแท็กปริมาณมีแอตทริบิวต์ข้อผิดพลาดที่มีค่าเป็นจริง แท็กปริมาณจะแสดงเซลล์ตารางตามรายการด้านล่าง หากค่าของแอตทริบิวต์ไม่เป็นความจริง XSL จะแสดงเนื้อหาระหว่างแท็ก มิฉะนั้น ในตัวอย่างด้านล่าง หากแอตทริบิวต์ข้อผิดพลาดไม่เป็นความจริง จะไม่มีอะไรแสดงขึ้นมา
<xsl:เลือก>
<xsl:when test="ปริมาณ[@error='true']">
<td bgcolor="src=""/></td>
<td valign="top" bgcolor="<font face="Verdana, Arial" size="1" color="<b>*มีสินค้าในสต็อกไม่เพียงพอ</b></font>
</td>
</xsl:เมื่อ>
<xsl:มิฉะนั้น>
</xsl:มิฉะนั้น>
</xsl:เลือก>
สำหรับแต่ละ
แท็ก <xsl:for-each> สามารถใช้เพื่อใช้สไตล์ชีตเดียวกันกับข้อมูล XML ที่คล้ายกันหลายสถานการณ์ สำหรับเรา ชุดข้อมูลผลิตภัณฑ์สามารถดึงออกจากฐานข้อมูลและจัดรูปแบบให้เหมือนกันบนเว็บเพจได้ นี่คือตัวอย่าง:
<xsl:for-each เลือก = "แพ็คเกจ">
<xsl:apply-templates select="ผลิตภัณฑ์"/>
</xsl:สำหรับแต่ละ>
for-each loop เริ่มต้นเมื่อโปรแกรมพบป้ายกำกับ การวนซ้ำนี้จะสิ้นสุดเมื่อโปรแกรมพบป้ายกำกับ เมื่อลูปนี้ทำงาน เทมเพลตนี้จะถูกนำมาใช้ทุกครั้งที่ป้ายกำกับปรากฏขึ้น
4. สร้าง HTML
ในอนาคต เบราว์เซอร์จะรวมกลไกการแยกวิเคราะห์ XML เข้าด้วยกัน ณ จุดนั้น คุณสามารถส่งไฟล์ XML และ XSL ไปยังเบราว์เซอร์ได้โดยตรง และเบราว์เซอร์จะแสดงข้อมูล XML ตามกฎที่ระบุไว้ในสไตล์ชีต อย่างไรก็ตาม จนกว่าจะถึงตอนนั้น นักพัฒนาจะต้องสร้างความสามารถในการแยกวิเคราะห์ในระบบฝั่งเซิร์ฟเวอร์ของตน
ที่ Sparks.com เราได้รวมตัวแยกวิเคราะห์ XML เข้ากับเซิร์ฟเล็ต Java ตัวแยกวิเคราะห์นี้ใช้กลไกที่เรียกว่า XSLT (การแปลง XSL) เพื่อเพิ่มข้อมูล XML ให้กับเทมเพลต XSL ตามที่ระบุโดยแท็ก XSL
เมื่อเซิร์ฟเล็ต Java ของเราจัดการคำขอ HTTP เซิร์ฟเล็ตจะดึงข้อมูล XML ที่สร้างขึ้นแบบไดนามิก ซึ่งจะถูกส่งต่อไปยังกลไกการแยกวิเคราะห์ ตามคำแนะนำในไฟล์ XML โปรแกรมแยกวิเคราะห์จะค้นหาสไตล์ชีต XSL ที่เหมาะสม ตัวแยกวิเคราะห์สร้างไฟล์ HTML จากโครงสร้าง DOM จากนั้นไฟล์นี้จะถูกส่งไปยังผู้ใช้ที่สร้างคำขอ HTTP
หากคุณเลือกใช้โมเดล SAX ตัวแยกวิเคราะห์จะอ่านแหล่ง XML และสร้างเหตุการณ์สำหรับแท็ก XML แต่ละรายการ เหตุการณ์สอดคล้องกับข้อมูล XML และในที่สุดข้อมูลก็จะถูกแทรกลงในสไตล์ชีตตามแท็ก XSL