XSLT และทางเลือกที่เป็นไปได้ [ปิด]


15

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

  • โปรเซสเซอร์ XSLT ดูเหมือนจะค่อนข้างหิวโหย / ทรัพยากร
  • XML เป็นสัญกรณ์ที่ไม่ดีสำหรับการเขียนโปรแกรมและนั่นคือสิ่งที่ XSLT เกี่ยวข้อง

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

มีพื้นหลังเสียงกระเพื่อมบางฉันสงสัยว่ามีวิธีที่ดีกว่าสำหรับการเปลี่ยนแปลงโครงสร้างต้นไม้ตามเสียงกระเพื่อมบาง ฉันได้เห็นการอ้างอิงถึง DSSSL น่าเศร้าที่ลิงก์ส่วนใหญ่เกี่ยวกับ DSSSL นั้นตายแล้วดังนั้นจึงเป็นเรื่องยากที่จะเห็นรหัสที่แสดงให้เห็น DSSSL ยังคงใช้งานอยู่หรือไม่ ฉันจำได้ว่าฉันได้ติดตั้ง openjade ครั้งเดียวเมื่อตรวจสอบสิ่งที่ docbook

โพสต์บล็อกของ Jeff Atwoodดูเหมือนจะบอกใบ้ให้ใช้ Ruby แทน XSLT

มีวิธีใดบ้างที่ทำให้การแปลง XML คล้ายกับ XSLT ในภาษาการเขียนโปรแกรมที่ไม่ใช่ xml หรือไม่? ฉันจะเปิดให้ป้อนข้อมูล

  • ไลบรารีที่มีประโยชน์สำหรับภาษาสคริปต์ที่อำนวยความสะดวกในการแปลง XML
  • โดยเฉพาะอย่างยิ่งภาษาการแปลงเสียงกระเพื่อมคล้ายหรือทับทิมเป็นต้น

บางสิ่งที่ฉันพบ:

  • สถานที่สองแห่งบนเว็บชี้ให้เห็นว่า Linq เป็นทางเลือกที่เป็นไปได้ โดยทั่วไปแล้วฉันค่อนข้างจะจัดประเภทใด ๆ จากผู้ที่มีประสบการณ์ XSLT ที่ดีที่สุด
  • สำหรับรูปแบบhttp://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/และhttp://www.okmij.org/ftp/Scheme/xml.html

ฉันใช้ HXT และ Haskell ค่อนข้างบ่อยมันดีมาก
Daniel Gratzer

5
ในความเป็นธรรมไม่ใช่ Jeff Atwood ผู้สนับสนุน Ruby เขาอ้าง Martin Fowler ผู้ที่ชอบ Ruby โพสต์ต้นฉบับโดย Fowler อยู่ที่นี่: martinfowler.com/bliki/MovingAwayFromXslt.htmlและเขียนเมื่อ 10 ปีก่อนในปี 2546 - ฉันคิดว่า XSLT 2.0 ออกมาในปี 2550 และมีการปรับปรุงมากมายและ XPath 2.0 ในปี 2010
FrustratedWithFormsDesigner

คำตอบ:


18

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

คุณอ้างถึงสองข้อกังวล: ประสิทธิภาพและการใช้งาน ฉันจะพยายามระบุที่อยู่ทั้งสองด้านล่าง

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

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

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

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

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

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


2
คำทั่วไปสำหรับ "ภาษาตามกฎ" เป็นภาษาที่ประกาศ
Daniel Gratzer

@Michael Kay - ใส่ดี ฉันชอบ XSLT และใช้กับ C # นอกจากนี้ฉันใช้กับ XSL-FO กับเอกสาร PDF ของผลิตภัณฑ์ XSLT นั้นทรงพลังและทรงพลังมากทำให้ฉันสามารถแปลงข้อมูลจำนวนมากได้อย่างรวดเร็วเป็น HTML, XSL-FO, XML หรือ Text
PhillyNJ

3

หากไม่มีข้อมูลเพิ่มเติมเกี่ยวกับบริบทจึงเป็นเรื่องยากที่จะตอบ

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

โปรเซสเซอร์ XSLT ดูเหมือนจะค่อนข้างหิวโหย / ทรัพยากร

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

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

XML เป็นสัญกรณ์ที่ไม่ดีสำหรับการเขียนโปรแกรมและนั่นคือสิ่งที่ XSLT เกี่ยวข้อง

ดังนั้นคุณต้องการที่จะแปลง XML หนึ่งไปเป็นอีกอันหนึ่ง แต่ไม่ต้องการใช้ XSLT เพราะ "XML เป็นสัญกรณ์ที่ไม่ดี"?

หากความจริงที่ว่าคุณใช้ XML เป็นภาษาการเขียนโปรแกรมที่รบกวนคุณมากดูว่าไม่ใช่การเขียนโปรแกรม แต่เป็นกฎการแปลง

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


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

1
อาจมีปัญหากับตัวคุณเองXSLT fileไม่ได้XSLT Transformations
มาลาคี

ตอนนี้ฉันไม่ได้กล่าวโทษ XML อันที่จริงฉันคิดว่ามันเหมาะสมสำหรับการแสดงข้อมูล (โดยเฉพาะอย่างยิ่งสำหรับมาร์กอัป) ในฐานะ "ภาษาการเขียนโปรแกรม" - และ XSLT เป็นภาษาการเขียนโปรแกรมเฉพาะโดเมน - มันไม่สะดวก <xsl: อะไรก็ตาม> แท็ก, ภาษาโลหะ (เช่น xpath, $ notation, ฯลฯ ) ในแอตทริบิวต์การสืบค้นทุกอย่างที่ไม่ได้ถูกแมปลงใน XML จะถูกใส่ไว้ในเครื่องหมายคำพูดของแอตทริบิวต์ สำหรับการแสดงผลของการเป็นตัวแทนของการแสดงออกของ XML นี้: blog.getprismatic.com/blog/2013/1/22/...ใน XML ออกไปสามารถและการทำงานและ seemless proglang
wirrbel

1

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

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

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


คุณจะอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่มันทำและทำไมคุณถึงแนะนำว่าเป็นการตอบคำถามที่ถาม "คำตอบสำหรับลิงก์เท่านั้น"ไม่ได้รับการต้อนรับอย่างล้นหลามที่กองแลกเปลี่ยน
ริ้น

1
ดูคำตอบที่สอดคล้องกับความคิดเห็นของคุณ
Michael Shaw

0

XML ไม่ใช่ภาษาโปรแกรม

XML เป็นวิธีการถ่ายโอนข้อมูลการขนส่ง
สิ่งที่คำสั่ง XSLT ทำคือใช้ Xpath เพื่อสืบค้นข้อมูลในวิธีเฉพาะและวางลงในวัตถุ / เอกสารการขนส่งข้อมูลอื่น

และ / หรือ

XSLT สามารถแปลง XML ของคุณเป็น HTML ซึ่งเป็นอีกวิธีหนึ่งในการแสดง / ขนส่งข้อมูลที่อยู่ในเอกสาร XML

หากคุณต้องการเปลี่ยน XML หรือสร้างเอกสาร XML จากนั้นคุณสามารถใช้ภาษาจำนวนเท่าใดก็ได้: C #, VB, Ruby, Etc

โดยปกติเมื่อคุณใช้ไฟล์ XSLT ในการแปลงเอกสาร XML คุณยังคงมีเอกสาร XML ดั้งเดิมคุณจะไม่เปลี่ยนเอกสารต้นฉบับจริงๆคุณสร้างเอกสารใหม่จริงๆ


1
Wikipedia กล่าวว่า: "XSLT เป็นภาษาทัวริงที่สมบูรณ์ซึ่งหมายความว่าสามารถระบุการคำนวณใด ๆ ที่คอมพิวเตอร์สามารถทำได้" ฉันไม่เคยบอกว่า XML เป็นภาษาการเขียนโปรแกรมต่อ se
wirrbel

คุณบอกว่า "XML เป็นสัญลักษณ์ที่ไม่ดีสำหรับการเขียนโปรแกรม" ในภาษาการเขียนโปรแกรมที่ฉันใช้คุณสามารถดึงข้อมูลจากไฟล์ XML ได้อย่างง่ายดาย XSLT กำลังได้รับความสามารถในการคำนวณจำนวนมากและกระจายข้อมูลนั้นไปยังวัตถุ / เอกสารการส่งผ่านข้อมูลอื่น มันเหมือนกับ SQL ไปยัง SQL Server มันสามารถทำอะไรได้มากมาย แต่ส่วนใหญ่จะเป็น back end ไม่ใช่ front end SQL อย่าง XSLT จะทำการสืบค้นข้อมูลในลักษณะเฉพาะ แต่คุณไม่ต้องการให้ผลลัพธ์ของการสืบค้นนั้นเป็นรายงานคุณต้องการส่งข้อมูลไปยังตัวสร้างรายงาน
Malachi

2
XSLT ไม่ได้สอบถามข้อมูลส่วน XPATH ทำการสืบค้น XSLT ไม่ใช่ภาษาที่ประกาศซึ่งกำหนดคำแนะนำเกี่ยวกับการแยกวิเคราะห์ XML หรือไม่
PhillyNJ

XSLT กำหนดกฎการแปลงตามรูปแบบที่สามารถใช้ Xpath คือคุณสามารถมีโครงสร้างการเขียนโปรแกรมระดับสูงเช่นxsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofการกำหนดกฎการเปลี่ยนแปลง
wirrbel

1
@PhilVallone ฉันเห็นด้วย ฉันผิดที่นั่น สวัสดี, ฉันจะไม่เถียงกับคุณเกี่ยวกับสิ่ง XSLT / XSL คืออะไรและไม่ถ้าคุณต้องการแปลงเอกสาร XML ของคุณเป็นเอกสาร XML อื่นคุณจะต้องการใช้ XSLT / XSL
มาลาคี

0

ฉันทำงานกับระบบประมวลผล XML หลายระบบที่รวมไลบรารี XSLT กับ Java หรือ C ++ สำหรับชิ้นส่วนที่ XSLT ทำได้ไม่ดีเท่าที่ควร มีไลบรารีที่ได้รับประสิทธิภาพ XSLT ที่ดีมากแม้ในไฟล์ XML ขนาด 20 MB แต่ XSLT มีข้อ จำกัด เกี่ยวกับบริบทตัวแปรและรูปแบบสตริงที่ซับซ้อนจริงๆ แต่ละระบบที่ฉันทำงานมีทำอยู่สองสามอย่างใน Java / C ++ เนื่องจากบริบทมีความสำคัญหรือนิพจน์ regex ที่ซับซ้อนช่วยได้บ้าง Takeaway ของฉันคือ XSLT บวกรหัสเพิ่มเติมในภาษาที่คุณเลือกเป็นวิธีที่ดีในการแปลง XML

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