มีเหตุผลที่ดีที่จะใช้เรียนรู้หรือแนะนำ XSLT หรือไม่ [ปิด]


28

ฉันเป็นนักพัฒนาซอฟต์แวร์ในช่วง 8 ปีที่ผ่านมา เราใช้ XSLT เป็นหลักในการแปลง XML เป็น HTML เรายังใช้มันสำหรับการแปลง XML เป็น XML

แต่ตอนนี้เรามีการแทนที่ทุกอย่างแล้ว HTML สามารถสร้างได้อย่างสะดวกสบายผ่านภาษาการเขียนโปรแกรมเช่น ASP.Net XML สามารถอ่านและจัดทำในภาษาระดับสูงมาตรฐานใด ๆ เนื่องจากการเขียนโปรแกรมใน XSLT มีความซับซ้อนเล็กน้อยจึงไม่มีใครอยากทำงานกับภาษาโปรแกรมล่าสุด

ตอนนี้คำถามของฉัน: XSLT จะเป็นตัวเลือกที่สำคัญในอนาคตหรือไม่โดยไม่คำนึงถึงข้อเท็จจริงของการพัฒนา XSLT ไว้แล้ว? ฉันสามารถแนะนำโปรแกรมเมอร์ใหม่เพื่อศึกษา XSLT ได้ไหม?



12
สำหรับฉัน XSLT เป็นภาษาการเขียนโปรแกรมที่มีความลับอย่างน่ากลัวในการปฏิเสธการเป็นภาษาการเขียนโปรแกรม มันเกี่ยวข้องกับภาษาการเขียนโปรแกรมฟังก์ชั่นที่บริสุทธิ์ แต่ทำให้อ่านง่ายน้อยลงบำรุงรักษาได้น้อยลงและใช้งานได้จริงน้อยลง เนื่องจากเป็นภาษาโปรแกรมในการปฏิเสธผู้ใช้เช่น DocBook (ซอฟต์แวร์ที่ซับซ้อนที่เขียนในภาษา XSLT) มีปัญหาในการรวมล่ามต่าง ๆ ตัวตรวจสอบห้องสมุดและอื่น ๆ เพื่อให้งาน <expletive ถูกลบ>
Steve314

8
คุณไม่หมายถึง<expletive deleted="true" />เหรอ
MSalters

6
@ Steve314 ฉันรัก XSLT คุณสามารถทำสิ่งสนุก ๆ เช่น SQL แบบไดนามิก -> ไดนามิก XML -> ไดนามิก XSLT -> ไดนามิก html + JavaScript: P
Darknight

5
@MSalters - คุณพลาดการประกาศ xml องค์ประกอบรูทเนมสเปซ DTD ไม่ว่าจะเป็นสกีมา XML Schema หรือ Relax NG schema (หรือทั้งสองอย่าง) นิพจน์ XMLPath ซึ่งถูกลบออกจากการเติมคำ .. .
Steve314

คำตอบ:


29

มีบางกรณีที่สำคัญที่ XSLT สามารถเป็นตัวเลือกที่ดีได้:

  • ในบางกรณีซอฟต์แวร์ETL ( แยก, แปลง, โหลด ) สามารถใช้ XSLT ได้ ตัวอย่างเช่นอาจเป็นทางเลือกที่ดีเมื่อทั้งข้อมูลที่แยกและข้อมูลที่ต้องการโหลดอยู่ในรูปแบบ XML และการแปลงที่อาจมีการเปลี่ยนแปลงโดยไม่จำเป็นต้องคอมไพล์แอปพลิเคชันซ้ำ

  • แอปพลิเคชั่นบางตัวที่เก็บข้อมูลใน XML ใช้ XSLT เพื่อนำเสนอข้อมูลนี้ในรูปแบบที่มนุษย์สามารถอ่านได้ ตัวอย่างเช่น Windows Live Messenger เก็บการติดตามข้อความเป็น XML แต่เมื่อคุณเปิดประวัติใน WLM ตัวเองจะแสดงตารางสวยซึ่งอันที่จริงคือ HTML ที่สร้างขึ้นผ่าน XSLT

  • บางเว็บไซต์ที่มุ่งเน้นนักพัฒนาหรือเว็บไซต์ที่มุ่งเน้นข้อมูลอาจต้องการให้การเข้าถึง XML หากเจตนาคือการใช้หน้าของเว็บไซต์โดยทางโปรแกรม² เป็นเรื่องที่ดีกว่าการใช้ตัวแยกวิเคราะห์ HTML โดยเฉพาะอย่างยิ่งเนื่องจากโค้ด HTML สามารถเปลี่ยนแปลงได้ตลอดเวลา

  • XSLT เมื่อใช้ในเว็บไซต์อนุญาตการแยกอย่างเข้มงวดระหว่าง HTML และการซ่อนรหัสซึ่งทำให้สามารถจ้างผู้พัฒนาสำหรับการใช้รหัสและผู้พัฒนาอื่นสำหรับเนื้อหา HTML / CSS เห็นจุด 1 ในคำตอบของฉันคำถามอื่น

XSLT จะเป็นตัวเลือกที่สำคัญในอนาคตหรือไม่ นี่ไม่ใช่ตัวเลือกที่สำคัญในวันนี้และฉันสงสัยว่าการใช้ XSLT จะเพิ่มขึ้นเมื่อเวลาผ่านไป ฉันไม่สนใจเหตุผลนั้น แต่นักพัฒนาซอฟต์แวร์จำนวนมากไม่ชอบ XML และเกลียด XSLT

คุณช่วยแนะนำโปรแกรมเมอร์ใหม่ให้ศึกษา XSLT ได้ไหม? แน่นอน! XSLT ไม่เพียง แต่สามารถใช้ได้ในบางสถานการณ์เมื่อแนวทางอื่นยากกว่า แต่ XSLT มีวิธีการเฉพาะที่ภาษาอื่นไม่มี


¹ด้วยวิธีนี้ฉันหมายความว่า XML นั้นไม่สามารถอ่านได้โดยมนุษย์จริงๆ: ถ้าคุณถามคนที่ไม่ได้ทำงานกับไอทีเพื่ออ่าน XML เขาจะตกใจมาก
²ฉันรู้ว่ามีบริการเว็บ แต่บางครั้งมันง่ายและตรงไปตรงมามากขึ้นในทุก ๆ หน้าเพื่อสร้างวัตถุแบบไดนามิกจากนั้นทำการซีเรียลมันเป็น XML จากนั้นแปลงเป็น HTML ผ่าน XSLT หรือให้บอทเข้าถึง XML โดยตรง


รูปแบบ XML ที่น้อยที่สุดนั้นง่ายต่อการทำวิศวกรรมย้อนกลับมากกว่าไฟล์ไบนารีทั่วไป หากคุณต้องการแยกเอกสาร XML ออกก่อนให้ปล่อยความยุ่งเหยิงให้มากที่สุดเท่าที่จะทำได้โดยเริ่มจาก DTD
Steve314

3
สำหรับผู้อ่านอื่น ๆ : ETL = แยก, แปลง, โหลด
Peter Krauss

12

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

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

ไม่ว่าจะด้วยวิธีใดคุณสามารถเรียนรู้ XSLT ในเวลาไม่กี่วันหรือหลายสัปดาห์ มันจะไม่ทำร้ายคุณที่จะทำให้ประสบการณ์มือแรก เพียงแค่ให้มันยิง อย่างน้อยก็คุ้มค่าที่จะเก็บรูปแบบนี้ (การแปลงตามกฎ) ไว้ในหัวของคุณเพื่อใช้ในภายหลัง สิ่งนี้แสดงให้เห็นถึงการเรียนรู้ XSLT เพียงอย่างเดียว


8

อืมฉันสงสัยว่า API ระดับสูงที่สร้าง HTML จากรหัสใช้ XSLT ใด ๆ "ภายใต้ประทุน" หรือไม่

XSLT ใช้อย่างกว้างขวางในที่ที่ฉันทำงานเพื่อแปลง XML จากรูปแบบแหล่งที่มาหนึ่งไปเป็นรูปแบบอื่น ๆ ที่หลากหลาย นอกจากนี้ยังสามารถใช้ในการแปลง XML เป็นเอาต์พุตที่ไม่ใช่ XML ฉันไม่ได้ทำอะไรมากมาย แต่ฉันได้ยินมาว่ามันทำเพื่อกำหนดเป้าหมาย PDF และ PostScript และอื่น ๆ


3
นั่นคือ XSL / FO ซึ่งเป็นแฝดสยาม XSL / T พวกเขาแยกกันตั้งแต่แรกเกิด

8

ใช่.

ลองมาเป็นตัวอย่างที่ดี: รายงานการทดสอบหน่วยในการรวมอย่างต่อเนื่อง การทดสอบหน่วยและโปรแกรมครอบคลุมโค้ดส่วนใหญ่สามารถส่งออก XML ที่อ่านไม่ได้จำนวนมาก แต่ด้วย XSLT แบบง่าย ๆ คุณสามารถสร้างรายงานที่มีประโยชน์หลายสิบรายการจากข้อมูลเดียวกัน และคนอื่น ๆ สามารถนำรายงานเหล่านั้นกลับมาใช้ซ้ำได้

ตอนนี้คุณสามารถเขียนสิ่งเหล่านี้ในภาษาใดก็ตามที่เครื่องมือ CI ใช้สำหรับปลั๊กอิน แต่ถ้าคุณไม่รู้ภาษานั้น (พูดว่าคุณเป็นผู้พัฒนา. NET โดยใช้เจนกินส์) ดังนั้นคุณไม่จำเป็นต้องเรียนรู้ เพียงใช้ปลั๊กอินที่ใช้ XSLT กับไฟล์ XML แล้วเขียน XSLT ที่มีประโยชน์


6

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

สำหรับงานหลายอย่างที่ฉันเห็น XSLT ถูกใช้สำหรับ (และงานที่ฉันใช้เพื่อตัวเอง) การเขียนโค้ด Java หรือ ASP เพื่อทำงานนั้นจะเป็นการเสียงบประมาณของนายจ้างของคุณ แต่อาจจะไม่ใช่ถ้าคุณเก่งภาษาจาวาและเขียน XSLT ไม่ดี


6

XSLT ไม่สามารถอ่านได้โดยมนุษย์ ข้อมูลเมตา (แท็ก) เกิดขึ้นมากกว่าข้อมูลจริง (ข้อความ, คำขอ xpath) รหัสที่ดีควรดูเหมือนเอกสารประกอบและนี่ไม่ใช่กรณีของ XSLT มันเป็นรูปแบบการติดตาที่ดีสำหรับเครื่องมือการแมป

ภาษาการแปลงที่ดีควรอนุญาตให้แสดงตัวอย่างผลลัพธ์การเปลี่ยนแปลงและดูโฟลว์การแปลง (IF, ELSE, FOR, WHILE) พร้อมกัน นี่เป็นสิ่งสำคัญสำหรับการบำรุงรักษา เกี่ยวกับแง่มุมนี้ความเร็วหรือGenearateXYดีกว่า XSLT GenerateXY นั้นดียิ่งขึ้นอีกเล็กน้อยเนื่องจากแยกการแสดงตัวอย่างและการไหลในขณะที่ใช้ Velocity คุณจะต้องแยกการเยื้องของการแสดงตัวอย่างออกเพื่อให้การไหลสามารถอ่านได้

จุดที่ดีเพียงอย่างเดียวใน XSLT ก็คือมันใส่ใจเกี่ยวกับความเป็นโมดูลโดยการใช้และแม้แต่การใช้องค์ประกอบ "xsl: template" ในทางที่ผิด ปัญหานี้คือมันเป็นสิ่งที่ดีสำหรับภาษาการประมวลผลข้อมูล (Java, C, ... ) แต่รองมากสำหรับภาษาที่นำเสนอ


4

จริง

บางสิ่งอาจจะเข้ามาแทนที่ XSLT ในวันหนึ่งเนื่องจากมันค่อนข้างยุ่งยากในการเรียนรู้และใช้งาน อย่างไรก็ตามในขณะนี้ยังไม่มีภาษาแม่แบบ / การแปลงภาษาที่มีความยืดหยุ่นและมีความ "บริสุทธิ์" ในการติดตั้ง

XSL-T สามารถใช้เพื่อวัตถุประสงค์ที่ต่างกัน:

  • คุณสามารถ "สร้าง" เนื้อหาในรูปแบบ HTML จากข้อมูลโดยใช้เทมเพลต
  • คุณสามารถแปลงจากรูปแบบ xml หนึ่งไปยังอีกรูปแบบหนึ่ง
  • คุณสามารถจัดการ xml ในรูปแบบอื่นอาจแสดงชุดย่อย

โดยทั่วไปสิ่งเหล่านี้ล้วนเป็นสิ่งเดียวกันอย่างไรก็ตามการแปลงไฟล์ข้อมูล XML หนึ่งไปยังอีกไฟล์หนึ่ง ตอนนี้เรามาดูเครื่องมือต่าง ๆ ที่เราสามารถใช้แทน XSLT

หากเราต้องการจัดการกับเนื้อหาของหน้าพูด XHTML เราสามารถใช้ regexp แต่ regexp นั้นยุ่งกับเนื้อหาเชิงโครงสร้าง มันส่องแสงสำหรับจัดการสตริง แต่ฉันจะไม่ใช้มันเพื่อสร้างสารบัญสำหรับบางสิ่งหรือนำเสนอในรูปแบบที่แตกต่างกัน

ถัดไปคือ ASP.Net เราวางโครงร่างของเราในหน้า asp ของเราและใส่โค้ดบางส่วนไว้สำหรับส่วนแบบไดนามิก อีกทางเลือกหนึ่งคือ foregoe ส่วนเค้าโครงและสร้างทุกอย่างจากพูดฐานข้อมูลและใช้ C # สร้างผลลัพธ์ที่ต้องการของเรา

ปัญหาเกี่ยวกับวิธีแรกคือมันซุ่มซ่ามที่จะไปจากข้อมูลที่อธิบายไปที่เนื้อหาจริง หากคุณมีไฟล์ข้อมูลบางอย่างที่มีหมายเลขโทรศัพท์ที่คุณต้องการนำเสนอด้วยส่วนหัวสำหรับจดหมายแต่ละฉบับให้แสดงจำนวนรายการทั้งหมด ฯลฯ คุณจะต้องมีรูปแบบบางส่วนในไฟล์เลย์เอาต์และบางส่วนในรหัสที่คุณสร้าง . อีกทางเลือกหนึ่งคือการใช้ web-grid บางรูปแบบฉันพบว่ามันค่อนข้างยุ่งและในทันใดคุณต้องเรียนรู้ว่า grid frigging ทำงานอย่างไรเมื่อสิ่งที่คุณต้องการทำคือการส่ง html เฉพาะที่กำหนดให้กับข้อมูล

การมีพลวัตโดยสิ้นเชิงนั้นเป็นตัวเลือก แต่ก็ค่อนข้างงุ่มง่ามเช่นกัน แม้ในกรณีที่ดีที่สุดที่คุณใช้งานอะไรบางอย่างเช่น LINQ คุณจะต้องใช้การเขียนโปรแกรมโค้ดร่วมกับเอาต์พุตในทางที่ค่อนข้างน่าเกลียด นอกจากนี้ยังไม่มีวิธีที่ดีในการจัดการเนื้อหาสไตล์เอกสารแบบเรียกซ้ำที่ไม่เหมาะสมซึ่ง html มักจะเป็น

ด้วย XSLT คุณสามารถสร้างเทมเพลตสำหรับแท็กหนึ่ง ๆ ได้ไม่ว่าจะเป็นหรือในบริบทของพาเรนต์ดังนั้นมันจึงมีการแสดงผลที่แตกต่างกันหากอินสแตนซ์นั้นเป็นชุดของอย่างอื่น

คำตอบที่ค่อนข้างยาว แต่ใช่ฉันคิดว่ามันมีคุณค่าอย่างยิ่งในภาษาเทมเพลตที่มีคำอธิบายและ XSLT นั้นดีที่สุดและได้มาตรฐานที่สุดที่เราได้รับมาจนถึงตอนนี้


4

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

ใช่ในแง่ของภาษามันแปลก แต่ก็เป็นเพียงอุปสรรคในการเข้า ถ้าคุณรู้จัก XSLT มักจะง่ายกว่าตัวเลือกอื่น - แต่ถ้าคุณจะมีเอกสารขนาดใหญ่ (หรือเอกสารจำนวนมากที่ถูกประมวลผลพร้อมกัน) ผลกระทบของหน่วยความจำของ XSLT มักจะบังคับให้คนอื่นใช้เวลามากขึ้น


3

ตามความเป็นจริงฉันคิดว่าการใช้ XSL มีประสิทธิภาพกว่าภาษาอื่นในการนำเสนอข้อมูล ตัวอย่างเช่นคุณสามารถนำเสนอ XML เป็น PDF โดยใช้ XSL-FO และคุณสามารถควบคุมได้ทุก ๆ นิ้ว แต่ถ้าคุณทำงานกับ RDLC (.NET) คุณจะเห็นว่าเป็นเรื่องยากมากที่จะนำเสนอสิ่งที่คุณต้องการ

แม้แต่วิวัฒนาการ / การแก้ไขก็ค่อนข้างง่ายเหมือนใน XSL แต่ละองค์ประกอบมีเทมเพลตของตัวเอง ฉันคิดว่าส่วนขยายของ XSL มีความสำคัญมากกว่าเช่น XSLT และ XSL-FO นี่เป็นเหตุผลว่าทำไมภาษานี้จะยังคงถูกใช้ในอนาคต (แต่ฉันหวังว่ามันจะมีเสถียรภาพและซับซ้อนน้อยกว่า)


2

ฉันทำงานให้กับ บริษัท Data Integration และเราใช้ XSLT กับเครื่องมือที่เป็นกรรมสิทธิ์ของเราเป็นโซลูชั่นที่ยอดเยี่ยมที่เกี่ยวข้องกับ XML เป็น HTML / XML / Ascii

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.