XSLT và các lựa chọn thay thế có thể [đã đóng]


14

Tôi đã xem XSLT để chuyển đổi một tệp XML thành một tệp khác (HTML, v.v.). Bây giờ trong khi tôi thấy rằng có những lợi ích cho XSLT (là một công cụ được tiêu chuẩn hóa và được sử dụng), tôi miễn cưỡng vì một vài lý do

  • Bộ xử lý XSLT dường như khá lớn / đói tài nguyên
  • XML là một ký hiệu xấu cho lập trình và đó là tất cả những gì về XSLT.

Nó không muốn troll XSLT ở đây mặc dù tôi chỉ muốn chỉ ra những gì tôi không thích về nó để cho bạn biết về những gì tôi mong đợi từ một sự thay thế.

Có một số nền Lisp tôi tự hỏi liệu có những cách tốt hơn để chuyển đổi cấu trúc cây dựa trên một số lisp. Tôi đã thấy các tài liệu tham khảo về DSSSL, đáng buồn là hầu hết các liên kết về DSSSL đều đã chết nên thật khó để xem một số mã minh họa cho nó. DSSSL vẫn còn được sử dụng? Tôi nhớ rằng tôi đã cài đặt openjade một lần khi kiểm tra các tài liệu trong sách giáo khoa.

Bài đăng trên blog của Jeff Atwood dường như gợi ý về việc sử dụng Ruby thay vì XSLT.

Có cách nào lành mạnh để thực hiện các phép biến đổi XML tương tự như XSLT trong ngôn ngữ lập trình không phải là xml không? Tôi sẽ được mở cho đầu vào

  • Các thư viện hữu ích cho các ngôn ngữ kịch bản tạo điều kiện cho các phép chuyển đổi XML
  • đặc biệt (nhưng không độc quyền) các ngôn ngữ chuyển đổi giống như lisp, hoặc Ruby, v.v.

Một vài điều tôi tìm thấy cho đến nay:


Tôi sử dụng HXT và Haskell khá thường xuyên, điều đó rất dễ chịu
Daniel Gratzer

5
Nói một cách công bằng, đó không phải là Jeff Atwood, người ủng hộ Ruby, anh ta trích dẫn Martin Fowler, người thích Ruby. Các bài bản gốc của Fowler là ở đây: martinfowler.com/bliki/MovingAwayFromXslt.html Và nó đã được viết cách đây 10 năm vào năm 2003 - tôi nghĩ XSLT 2.0 ra mắt vào năm 2007 và với nhiều cải tiến, và XPath 2.0 vào năm 2010.
FrustratedWithFormsDesigner

Câu trả lời:


17

Thật khó để đánh giá các công nghệ khi bạn không có kinh nghiệm sâu sắc về chúng, nhưng tất nhiên đó chính xác là khi bạn phải đưa ra quyết định của mình, vì vậy không có câu trả lời đơn giản nào cho vấn đề nan giải đó.

Bạn trích dẫn hai mối quan tâm: hiệu suất và khả năng sử dụng. Tôi sẽ cố gắng giải quyết cả hai bên dưới.

Thứ nhất, hiệu suất. Hiệu suất của khóa học không chỉ phụ thuộc vào ngôn ngữ mà còn phụ thuộc vào việc thực hiện và cũng phụ thuộc vào chuyên môn của người dùng. Các bộ xử lý XSLT khác nhau có thể khác nhau về hiệu năng và cùng một bộ xử lý có thể khác nhau tùy thuộc vào cách sử dụng (ví dụ với Saxon, những người gặp vấn đề về hiệu năng thường sử dụng nó với DOM, một sự kết hợp kém và hiệu suất có thể tăng gấp mười lần nếu bạn sử dụng mô hình cây bản địa của Saxon thay thế). Vì vậy, lời khuyên đầu tiên là đừng thực hiện việc nghe, hãy đo nó; và lời khuyên thứ hai là đảm bảo rằng người thực hiện phép đo có đủ kinh nghiệm để không mắc phải những sai lầm ngớ ngẩn. Nói dễ hơn làm.

Một cách thô bạo, bạn có thể tách các công việc chuyển đổi thành hai loại: đơn giản và phức tạp. Đối với các phép biến đổi đơn giản, với bộ xử lý XSLT tốt, thời gian dành cho việc phân tích cú pháp và tuần tự hóa và thời gian xử lý XSLT hầu như không xuất hiện trong ảnh. Vì bất kỳ công nghệ nào khác sẽ phải chịu cùng một chi phí phân tích và tuần tự hóa, sự lựa chọn công nghệ chuyển đổi sẽ không tạo ra sự khác biệt lớn (ngoại trừ rất có thể mã hóa ở mức độ rất thấp sử dụng phát trực tuyến, nhưng không nhiều người có thể đủ khả năng lập trình thời gian và kỹ năng cần thiết để thực hiện điều đó). Đối với các phép biến đổi phức tạp trên các tài liệu lớn, bạn bắt đầu gặp các vấn đề tương tự như với lập trình SQL: để đạt được hiệu suất tốt đòi hỏi sự tương tác tốt giữa các kỹ năng và kiến ​​thức của lập trình viên và khả năng của trình tối ưu hóa. Như với SQL, nó ' Rất dễ dàng trong một ngôn ngữ cấp cao như vậy để viết một vài câu lệnh đơn giản dẫn đến việc bộ xử lý phải thực hiện một khối lượng công việc rất lớn. Nhưng cũng như với SQL, các lập trình viên biết những gì họ đang làm sẽ làm tốt hơn nhiều so với người mới.

Thứ hai, khả năng sử dụng. Cú pháp dựa trên XML cho XSLT rất không phù hợp với nhiều người trong lần gặp gỡ đầu tiên với ngôn ngữ này. Nhưng có những lý do chính đáng và lợi ích thực sự để làm theo cách này: có đối số "khuôn mẫu", rằng rất nhiều mã bao gồm XML được ghi vào tài liệu kết quả và cách tốt nhất để viết XML là bằng XML. Và có tranh luận "phản ánh"; trong các hệ thống phức tạp lớn, rất phổ biến để tìm các bảng định kiểu tạo ra các bảng định kiểu. Sau đó là đối số "công cụ"; nếu bạn đang ở trong một cửa hàng XML, có lẽ bạn có rất nhiều công cụ XML như các trình soạn thảo hướng cú pháp và thật tốt khi có thể sử dụng cùng các công cụ để xử lý các chương trình và dữ liệu của bạn. Những nhược điểm hóa ra là khá mỹ phẩm khi so sánh: có ' là số lượng tổ hợp phím liên quan đến chỉnh sửa (dễ dàng sửa chữa bằng một công cụ chỉnh sửa tốt) và có độ dài của mã (giảm khả năng đọc của nó). Mức độ chi tiết giảm đáng kể trong XSLT 2.0 với việc giới thiệu các tính năng như biểu thức thông thường và chức năng biểu định kiểu: nhiều biểu định kiểu được giảm xuống một nửa hoặc một phần ba kích thước khi chúng tận dụng tối đa XSLT 2.0.

Việc bạn đề cập đến DSSSL để lại cho tôi một nụ cười gượng gạo. Tôi chưa bao giờ sử dụng DSSSL, nhưng những câu chuyện tôi nghe được là nó không có tác dụng vì cú pháp của nó rất phức tạp và không liên quan đến cú pháp của dữ liệu (SGML). Việc sử dụng cú pháp XML cho XSLT được thúc đẩy mạnh mẽ bởi kinh nghiệm với DSSSL.

Có những người yêu thích XSLT và có những người ghét nó. Không có gì đáng ngạc nhiên, những người sử dụng nó rất nhiều có xu hướng rơi vào loại đầu tiên. Những người không thích nó thường là những người chưa học cách "nghĩ theo cách XSLT". Bạn có thể lập luận rằng một ngôn ngữ lập trình không nên ảnh hưởng đến cách bạn nghĩ, nhưng thực tế là: viết bằng ngôn ngữ dựa trên quy tắc sẽ có suy nghĩ khác với viết bằng ngôn ngữ bắt buộc. Phản ứng đầu tiên của nhiều lập trình viên là họ cảm thấy ít kiểm soát hơn (mô tả vấn đề, thay vì nói cho máy tính biết phải làm gì từng bước một). Nó rất giống với phản ứng bạn từng thấy khi mọi người lần đầu tiên được giới thiệu về SQL. Ngày nay, mọi người học SQL sớm hơn trong sự nghiệp của họ để yêu cầu điều chỉnh tinh thần ít hơn.

Cuối cùng, bạn nên chọn một công nghệ dựa trên các tiêu chí đo lường khách quan, không dựa trên các phản ứng yêu / ghét. Thật khó để thực hiện những phép đo đó. Nhưng có rất nhiều người sử dụng XSLT rất chuyên sâu và rất thành công, vì vậy không có gì phải nghi ngờ rằng nó có thể được thực hiện.


2
Thuật ngữ phổ biến hơn cho "Ngôn ngữ dựa trên quy tắc" là ngôn ngữ khai báo.
Daniel Gratzer

@Michael Kay - Vâng. Cá nhân tôi thích XSLT và sử dụng nó với C #. Ngoài ra, tôi sử dụng nó với XSL-FO để tạo tài liệu PDF. XSLT rất mạnh mẽ, rất mạnh mẽ, cho phép tôi chuyển đổi một lượng lớn dữ liệu nhanh chóng thành HTML, XSL-FO, XML hoặc Văn bản.
PhillyNJ

3

Không có thông tin bổ sung về bối cảnh, thật khó để trả lời.

Tuy nhiên, tôi không hiểu tại sao bạn không muốn sử dụng XSLT. Đó là công cụ phù hợp cho công việc và là một công cụ mạnh mẽ. Nó được thực hiện cụ thể để chuyển đổi một XML thành một XML khác.

Bộ xử lý XSLT dường như khá lớn / đói tài nguyên

Bạn có dữ liệu cứng để hỗ trợ điều đó? Bạn đã triển khai giải pháp bằng XSLT và thấy rằng XSLT nút cổ chai khiến việc phân phối sản phẩm không thể thực hiện được trong khi đáp ứng tất cả các yêu cầu phi chức năng liên quan đến hiệu suất?

Không có dữ liệu thống kê và hồ sơ, bạn có thể khẳng định một cách hợp lý rằng một giải pháp nhất định sẽ không hoạt động. Là các yêu cầu phi chức năng đủ hợp lý? Bạn có muốn lãng phí, giả sử, mười ngày làm việc của các nhà phát triển để đạt được vài trăm mili giây bằng cách thay thế XSLT bằng một phương án khác? Có đáng không?

XML là một ký hiệu xấu cho lập trình và đó là tất cả những gì về XSLT.

Vì vậy, bạn muốn chuyển đổi một XML thành một XML khác, nhưng không muốn sử dụng XSLT vì "XML là một ký hiệu xấu"?

Nếu thực tế là bạn sử dụng XML như một loại ngôn ngữ lập trình gây khó chịu cho bạn rất nhiều, thì hãy xem nó không phải là lập trình, mà là một loạt các quy tắc chuyển đổi.

Bạn thậm chí không cần phải viết XSLT bằng tay. Có rất nhiều trình soạn thảo ETL có thể cho phép bạn ánh xạ đồ họa một XML thành đối nghịch: không cần lập trình gì. Một số người trong số họ sử dụng XSLT làm đầu ra.


Tôi đã gặp vấn đề về tài nguyên với các trang dựa trên XSLT, chúng được tạo bằng một công cụ đồ họa nhưng nó đã ngừng hoạt động với các tệp lớn hơn.
wirrbel

1
sau đó có thể có vấn đề với chính bạn XSLT filechứ không XSLT Transformationsphải
Malachi

Bây giờ tôi không lên án XML, trên thực tế tôi nghĩ rằng nó phù hợp để biểu diễn dữ liệu (đặc biệt là đánh dấu). Là một "ngôn ngữ lập trình" - và XSLT là một ngôn ngữ lập trình cụ thể theo miền - thật bất tiện. <xsl: anything> Thẻ, kim loại (như xpath, ký hiệu $, v.v.) trong các thuộc tính truy vấn, mọi thứ không được ánh xạ vào XML đều được đặt trong dấu ngoặc kép thuộc tính. Để có ấn tượng về biểu diễn biểu thức s của XML: blog.getprismatic.com/blog/2013/1/22/NH ở đó, XML và proglang có thể hoạt động
dường như vô tận

1

Nếu bạn đang sử dụng XSLT để tạo XML dựa trên XSLT thô và một số tham số mà bạn đang truyền cho công cụ XSLT, thì sử dụng cách tiếp cận XML khuôn mẫu sẽ dễ hiểu và dễ duy trì hơn nhiều.

Tôi đã từng tham gia một dự án nơi Mustache được sử dụng để thay thế XSLT và kết quả là các tệp XML cơ sở đơn giản hơn nhiều mà mọi người có thể chỉnh sửa và điều chỉnh, thay vì công việc dự án đó được truyền cho một hoặc hai linh hồn dũng cảm, người sẽ ngồi im lặng hoàn toàn với những giọt mồ hôi tuôn rơi ...

Cách tiếp cận mẫu không phù hợp để sử dụng khi XML cơ sở cũng là dữ liệu hợp lệ theo cách riêng của nó và XSLT đang được sử dụng để cung cấp một biểu diễn thay thế hoặc trích xuất từ ​​XML nguồn.


bạn có phiền giải thích thêm về những gì nó làm không và tại sao bạn lại đề nghị nó như trả lời câu hỏi được hỏi? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

1
đã xem xét câu trả lời nội tuyến với phản hồi của bạn
Michael Shaw

0

XML không phải là ngôn ngữ lập trình

XML là một cách để truyền / truyền dữ liệu.
những gì một lệnh XSLT làm là sử dụng Xpath để truy vấn Dữ liệu theo một cách cụ thể và đưa nó vào một Đối tượng / Tài liệu truyền tải dữ liệu khác.

VÀ / HOẶC

XSLT có thể chuyển đổi XML của bạn thành HTML, đây là một cách khác để hiển thị / vận chuyển Dữ liệu có trong Tài liệu XML.

nếu bạn đang tìm cách thay đổi XML hoặc Tạo tài liệu XML thì bạn có thể sử dụng bất kỳ số ngôn ngữ nào: C #, VB, Ruby, v.v.

thông thường khi bạn sử dụng tệp XSLT để chuyển đổi Tài liệu XML bạn vẫn có Tài liệu XML gốc, bạn không thực sự thay đổi Tài liệu gốc, bạn thực sự tạo một Tài liệu mới.


1
Wikipedia nói: "XSLT là ngôn ngữ hoàn chỉnh Turing, có nghĩa là nó có thể chỉ định bất kỳ tính toán nào có thể được thực hiện bởi máy tính.". Tôi chưa bao giờ nói rằng XML là ngôn ngữ lập trình.
wirrbel

bạn đã nói "XML là một ký hiệu xấu cho lập trình" trong các ngôn ngữ lập trình mà tôi đã sử dụng, bạn có thể lấy Dữ liệu từ Tệp XML khá dễ dàng. XSLT đang đạt được nhiều khả năng tính toán và đưa dữ liệu đó sang một đối tượng / tài liệu truyền dữ liệu khác. Nó giống như SQL to SQL Server, nó có thể làm rất nhiều thứ nhưng chủ yếu là back end chứ không phải front end. SQL giống như XSLT, nó truy vấn Dữ liệu theo một cách cụ thể, nhưng bạn không bao giờ muốn đưa ra kết quả của truy vấn đó dưới dạng báo cáo, bạn muốn gửi thông tin đến người xây dựng báo cáo
Malachi

2
XSLT không truy vấn dữ liệu, XPATH thực hiện truy vấn. Không phải XSLT là ngôn ngữ khai báo xác định hướng dẫn trên xml được phân tích cú pháp?
PhillyNJ

XSLT định nghĩa các quy tắc chuyển đổi dựa trên các mẫu mà nó có thể sử dụng Xpath. Tức là bạn có thể có các cấu trúc lập trình cấp cao như xsl:for-each xsl:apply-templates, xsl:if xsl:call-template xsl:value-ofđể xác định các quy tắc chuyển đổi.
wirrbel

1
@PhilVallone Tôi đồng ý. Tôi đã sai ở đó. Tuy nhiên, tôi sẽ không tranh luận với bạn về XSLT / XSL là gì và không, nếu bạn muốn chuyển đổi tài liệu XML của mình thành Tài liệu XML khác, bạn sẽ muốn sử dụng XSLT / XSL.
Malachi

0

Tôi đã làm việc trên nhiều hệ thống xử lý XML kết hợp các thư viện XSLT với Java hoặc C ++ cho các phần mà XSLT không giỏi. Có những thư viện có hiệu năng XSLT rất tốt ngay cả trên các tệp XML 20 MB, tuy nhiên XSLT có một số hạn chế với bối cảnh, biến và các mẫu chuỗi thực sự phức tạp. Mỗi hệ thống tôi đã làm việc có một vài điều được thực hiện trong Java / C ++ vì ngữ cảnh là quan trọng hoặc một số biểu thức regex phức tạp đã giúp. Điểm đáng nói của tôi là XSLT cộng với một số mã bổ sung trong ngôn ngữ bạn chọn là một cách tốt để chuyển đổi XML.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.