ngôn ngữ lập trình dựa trên xml


8

Tôi đã xem wikipedia - Thể loại: Ngôn ngữ lập trình dựa trên XML .

Tại sao ai đó sẽ sử dụng phương pháp này để thiết kế một ngôn ngữ?
Những lợi thế của nó là gì?

Tôi chỉ có thể nghĩ về những bất lợi.

  • khó duy trì
  • khó để đọc
  • khó viết

2
Một người thường có một số chương trình khác (giao diện trực quan hoặc tương tự) mà một người không lập trình sử dụng để làm một cái gì đó, sau đó được lưu trữ dưới dạng XML và được xử lý dưới dạng XML.

2
Tôi đồng ý với nhược điểm của bạn. Sử dụng Coldfusion và các đối số bạn đưa ra chống lại nó rất rõ ràng.
Giàn khoan

@Rig: Mặc dù Coldfusion không thực sự nằm trong danh sách mà OP liên kết đến.
Thất vọngWithFormsDesigner

Tôi cho rằng một lợi thế có thể là một hệ thống như vậy có thể sử dụng các truy vấn và biểu thức XQuery và XPath để làm cho việc viết mã tự sửa đổi dễ dàng hơn. Liệu mã tự sửa đổi có hoạt động thông qua XPath / XQuery hay không thực sự là một điều tốt có thể được tranh luận ...
Thất vọngWithFormsDesigner

1
@ Mhd.Tahawi: Nếu mã chương trình của bạn được viết dưới dạng XML hợp lệ, chương trình của bạn có thể sử dụng XPath / XQuery để tự thực hiện phản chiếu. Được sử dụng với XSLT, có thể thiết kế ngôn ngữ lập trình dựa trên XML sử dụng XSLT để viết các chương trình có thể tự sửa đổi. Tôi không chắc chắn tôi muốn phải đối phó với một chương trình như vậy nhưng nó có thể tuyệt vời từ quan điểm mới lạ.
Thất vọngWithFormsDesigner

Câu trả lời:


4

một trong những lợi thế lớn nhất của ngôn ngữ dựa trên XML là nó có vẻ dễ thực hiện

thực sự không có, có rất nhiều trình phân tích cú pháp xác thực có sẵn để chẩn đoán các lỗi biên dịch liên quan đến cú pháp và cung cấp cho bạn AST miễn phí

việc thực thi cũng chỉ đơn giản là lặp đi lặp lại qua AST đã nói và giữ một bản đồ về các hàm và biến


3
"Dường như" là từ khóa ở đây. Sự thật là, những lợi thế đó là khá nhỏ hoặc không tồn tại, nhưng chắc chắn là như vậy khi bạn chưa bao giờ tạo ra một triển khai ngôn ngữ. Phân tích cú pháp là tốn kém về mặt tính toán nhưng thực sự là một trong những phần đơn giản hơn để thực hiện (trình tạo trình phân tích cú pháp hoặc viết tay) và thiết kế (cú pháp là giá rẻ). Và một khi bạn có AST, cách bạn tiến hành không bị ảnh hưởng bởi cách bạn phân tích cú pháp - có nghĩa là nếu việc thực thi đơn giản, nó vẫn đơn giản nếu bạn chọn cú pháp khác nhau (rõ ràng, chỉ khi bạn giữ ngữ nghĩa).

@del Nam Chính xác. Điều duy nhất XML dường như cung cấp cho bạn miễn phí là phần dễ dàng. Tôi nói "dường như" bởi vì nó không thực sự mang lại cho bạn bất cứ thứ gì, nó chỉ là đẩy nó lên người dùng hoặc một loại GUI tùy chỉnh (có thể phức tạp).
Evicatos

10

Mã là dữ liệu.

Hay đúng hơn, các chương trình là dữ liệu. Một tập tin nguồn chỉ là một tuần tự cụ thể của chương trình này. Ý tưởng này là ví dụ phổ biến trong các ngôn ngữ đồng âm như Lisp. Một ngôn ngữ như vậy phá bỏ các rào cản giữa mã chương trình và dữ liệu mà nó đang hoạt động. Điều này có thể cực kỳ mạnh mẽ và biểu cảm, mặc dù tôi sẽ không gọi sự xuất hiện của mã Lisp là Đẹp đẹp hay hay dễ đọc.

XML là các cấu trúc định dạng dữ liệu tuần tự để các lập trình viên doanh nghiệp hiện nay ngày. Có các bộ công cụ lớn được thiết lập xung quanh xử lý XML.

  • Việc xác định một ngôn ngữ có nghĩa là hoạt động trên XML trong XML có thể thú vị vì tính đồng nhất này. Một ví dụ là XSLT. Về lý thuyết, điều này cho phép lập trình siêu dữ liệu, nhưng không có người tỉnh táo nào làm được điều này, phải không?
  • Ngôn ngữ khuôn mẫu quan tâm đến việc có ít sự tách biệt giữa dữ liệu và mã. Sử dụng một tài liệu XML làm mẫu / chương trình rất thú vị khi đầu ra là XML hoặc HTML.
  • Lưu trữ mã của một ngôn ngữ có mục đích chung trong XML vẫn có thể thú vị. Việc lưu trữ Cây cú pháp trừu tượng được tuần tự hóa thành XML thay vì mã nguồn là khả thi khi mã này được thao tác thông qua IDE, trong đó nó được trình bày dưới dạng dễ đọc hơn, ví dụ như để lập trình trực quan . Điều này không giống với các môi trường Smalltalk, trong đó mã nguồn của Cameron là một đại diện cho hình ảnh mã byte thực tế.

Điều thú vị là, các tài liệu XML đôi khi được sử dụng để tạo khuôn mẫu * shudder * (nội xạ phụ thuộc). Tôi gán điều này cho tính phổ biến của XML trong một số bộ công cụ / XML mindshare có định dạng dữ liệu có cấu trúc.


1
Mã kết hợp với dữ liệu không phải là một lợi thế; đó là một lỗ hổng bảo mật ở cấp độ ngôn ngữ. Ví dụ kinh điển là SQL SQL: mỗi khi một số trang web bị tấn công và thiệt hại hàng triệu đô la được thực hiện và hàng chục ngàn người dùng phải đặt mua thẻ tín dụng mới do khai thác SQL SQL, lý do cơ bản là do một số nhà phát triển đặt ở đâu đó theo một cách nào đó mà không tách biệt dữ liệu khỏi mã. Ném xung quanh những từ ưa thích như "đồng âm" không thay đổi thực tế cơ bản này.
Mason Wheeler

5
@MasonWheeler Tôi không đồng ý rằng việc thoát đúng là không cần thiết từ góc độ bảo mật cho mọi hệ thống tạo khuôn mẫu, nhưng điều này không liên quan gì đến câu hỏi, câu trả lời của tôi hoặc tách mã dữ liệu. Tôi không hiểu về những rwxtập lệnh mà tôi có, đó là dữ liệu cho trình soạn thảo của tôi, nhưng mã thực thi cho trình bao của tôi.
amon

1
Thực tế là bạn cố gắng đáp ứng điều này theo cách thoát ở vị trí đầu tiên - đó là và luôn luôn là cách sai để ngăn chặn SQL SQL - và không phải là về cách tách mã khỏi dữ liệu thông qua Tham số - đó là cách chính xác duy nhất để làm điều đó - cho thấy rằng bạn thực sự không hiểu vấn đề. Và đó là lý do tại sao các cuộc tấn công SQL SQL tiếp tục xảy ra: mọi người không hiểu tại sao những điều này lại quan trọng và làm thế nào để thực hiện chúng đúng.
Mason Wheeler

7
@MasonWheeler: những lời chỉ trích của bạn về "mã kết hợp với dữ liệu" là chính xác khi lấy dữ liệu từ các nguồn bên ngoài và tạo mã từ đó (theo cách này, không có gì đặc biệt đối với XML). Nhưng câu trả lời này có một trọng tâm hoàn toàn khác, đó là về khía cạnh siêu lập trình.
Doc Brown

6
@MasonWheeler, tiêm đang thực thi dữ liệu không nên thực thi. Homoiconicity có nghĩa là mã và dữ liệu giống nhau nhiều, ở dạng nghĩa đen và trong thao tác lập trình. Một ngôn ngữ homoiconic có thể thao tác và thực thi một cách an toàn (mã được tạo từ) dữ liệu đáng tin cậy, có thể được mã hóa cứng trong mã nguồn của bạn hoặc nếu không. Trong ví dụ Common Lisp, bạn có thể bao gồm dữ liệu trong mã được tạo mà không được thực thi, chẳng hạn như (eval `(foo (quote ,data))). Đối số của bạn về các tham số so với thoát có thể đúng, nhưng bạn đã bỏ lỡ điểm.
acelent

2

Tôi sẽ tập trung vào XSLT thay vì các ngôn ngữ dựa trên XML nói chung.

Có một lịch sử ở đây, tất nhiên. XSLT được hình thành như một sự kế thừa cho DSSSL, ngôn ngữ tạo kiểu cho SGML và đã cố gắng hiểu đúng những gì DSSSL đã sai. Một trong những vấn đề lớn với DSSSL được coi là cú pháp (giống như lược đồ) của nó và có một cảm giác rộng rãi rằng giải pháp nằm trong việc sử dụng cùng một cú pháp cho biểu định kiểu và dữ liệu; xét cho cùng, ý tưởng là một bản định kiểu nên bao gồm phần lớn dữ liệu có cấu trúc chứ không phải logic chương trình và phần lớn dữ liệu đó sẽ bao gồm dữ liệu proforma ("mẫu") để thêm vào cây kết quả, với một số tham số hóa.

XSLT thường được coi là quá dài dòng. Đối với XSLT 1.0, điều mà nhiều người không may vẫn sử dụng, điều đó có thể đúng, nhưng vấn đề đã được giải quyết phần lớn với XSLT 2.0, điều này thường ngắn gọn hơn rất nhiều so với các cách giải quyết vấn đề tương tự khác.

Chắc chắn có nhược điểm. Bạn khá bắt buộc phải sử dụng một trình soạn thảo được thiết kế có mục đích (nhưng sau đó, hầu hết các lập trình viên sử dụng các trình soạn thảo hướng cú pháp cho mọi ngôn ngữ, phải không?). Ngôn ngữ không hoàn toàn có thể ghép được như có thể (mặc dù một lần nữa, XSLT 2.0 phần lớn sửa lỗi đó). Nhưng cũng có những lợi thế đáng kể:

  1. XSLT được sử dụng rộng rãi bởi những người không phải là lập trình viên và đối với họ, đó là một điểm cộng rất lớn khi họ chỉ phải học một cú pháp chứ không phải hai. Hãy nhớ rằng, đó là tất cả các chi tiết nhỏ như cách xử lý mã hóa ký tự và thoát các ký tự đặc biệt.

  2. Khả năng xử lý mã XSLT bằng XSLT hữu ích hơn nhiều so với bạn tưởng tượng. Gần như tất cả các dự án XSLT lớn đều tận dụng khả năng này và nó có thể mang lại lợi ích rất lớn. Ví dụ: tôi thấy một hệ thống ngân hàng trực tuyến có vài trăm biểu mẫu trong giao diện người dùng, mỗi biểu mẫu được tạo bởi biểu định kiểu riêng của nó, nhưng các biểu định kiểu được tạo từ một thư viện mã chung mang lại khả năng sử dụng lại và tính nhất quán của giao diện.

  3. Có một lợi ích mà tôi không thể ngờ tới, đó là việc sử dụng khung cú pháp bị ràng buộc như XML buộc các nhà thiết kế ngôn ngữ phải duy trì mức độ nhất quán từ vựng khi ngôn ngữ phát triển và đồng thời mang lại khả năng mở rộng tuyệt vời. XQuery WG luôn tranh luận về cách mở rộng ngôn ngữ mà không phá vỡ tính tương thích hoặc giới thiệu các quirks; XSLT không có vấn đề như vậy, vì về cơ bản, đây là câu hỏi xác định các yếu tố và thuộc tính mới.


0

Tôi có thể thấy một cái gì đó giống như tiện dụng trong môi trường nặng XML (nghĩ là XSLT), nơi bạn có lẽ đã có các trình soạn thảo XML phong nha và có thể hữu ích khi có thể tạo mã bằng cùng một bộ công cụ. Nó cũng có thể giúp viết các trình xác minh tính chính xác hoặc các công cụ khác dễ dàng hơn để đảm bảo mã tuân theo các tiêu chuẩn hoặc quy tắc nhất định (ví dụ: lược đồ xác định nơi logic nghiệp vụ phải đi và / hoặc đảm bảo rằng tất cả các biến được khởi tạo theo kiểu nhất quán ).


0

XSLT là ngôn ngữ lập trình XML duy nhất mà tôi đã sử dụng, tôi chưa có cơ hội / cơ hội để tiếp cận với những ngôn ngữ khác.

chúng tôi có một Ứng dụng chính bắn ra một tệp XML vào Cơ sở dữ liệu và một số Ứng dụng khác có thể lấy tệp đó và áp dụng tệp XSLT cho nó để trích xuất dữ liệu mà các ứng dụng khác cần, điều này làm giảm nhu cầu xuất một bộ mới Dữ liệu cho mỗi ứng dụng mới đi kèm. Tôi nghĩ rằng đó là một điểm cộng lớn. bạn chỉ phải mã một tệp XSLT cho ứng dụng mới để giải mã thông tin đã được tạo chứ không phải tạo thông tin mới cho ứng dụng mới.

Tôi nhận ra rằng tôi đã không đụng đến bất kỳ ngôn ngữ nào khác mà bạn đã liệt kê, nhưng tôi đã cho bạn ý tưởng về một nơi tốt để sử dụng ngôn ngữ đó. vẫn không chắc chắn nếu tôi hoàn toàn trả lời hoặc thậm chí trả lời một phần câu hỏi của bạn. nhưng hy vọng tôi đã đưa ra một số hiểu biết.


2
Không, các câu hỏi hỏi tại sao XSLT phải là chính XML. Chuỗi công cụ mà bạn đã mô tả có thể đã được triển khai giống như với tập lệnh Perl hoặc Python phân tích cú pháp XML đầu ra và tạo ra một số đầu ra từ đó. Quyết định thiết kế thú vị về XSLT không phải là nó có thể chuyển đổi XML, nhưng đúng hơn là nó không sử dụng xoăn braces⸮
amon

hoặc bán đại tràng? Tôi thấy những gì bạn đang nói. bất kỳ ngôn ngữ nào thực sự có thể phân tích thông tin đó ra khỏi Tài liệu XML, vì vậy câu hỏi sẽ là "tại sao họ cần một ngôn ngữ Chuyển đổi XML", phải không?
Malachi

Không, một ngôn ngữ chuyển đổi XML có ý nghĩa (nếu bạn đang thực hiện nhiều chuyển đổi XML). Có rất nhiều điều XSLT làm để hỗ trợ xử lý XML (chẳng hạn như khả năng dễ dàng truy cập và truy vấn cây DOM), nhưng bản thân XML không nằm trong số những điều đó.

Tôi đã cố gắng làm rõ câu hỏi với nhận xét cuối cùng của mình @delnan Tôi hiểu và đồng ý rằng XSLT là một công cụ tốt để có.
Malachi

-3

XML làm cho hầu như không có ý nghĩa vắng mặt bối cảnh lịch sử và chính trị. SGML thậm chí còn khó hơn để viết, đọc và duy trì, nhưng nó đã được đóng dấu phê duyệt ISO vào năm 1986, điều này có lẽ là ngôn ngữ khai báo dữ liệu đầu tiên có sự thiếu chính xác như vậy.

Nó đủ hữu ích và được ghi lại để truyền cảm hứng cho Tim Berners-Lee sử dụng nó làm nền tảng của HTML vào đầu những năm 1990. Hãy nhớ rằng, anh ta đang có ý định tạo ra một trang web trên toàn thế giới và dựa trên tiêu chuẩn ISO còn tồn tại sẽ giúp ích đáng kể hơn nữa.

Sau đó, vào cuối những năm 1990 với web cố thủ khá tốt, World Wide Web Consortium đã bắt đầu một sáng kiến ​​về đánh dấu cấu trúc tiêu chuẩn để trao đổi dữ liệu. Yếu tố cường điệu xung quanh XML đạt đến mức độ chưa từng thấy "chúng tôi không chắc phải làm gì với điều này, nhưng tôi cá là nó sẽ rất tuyệt".

Như hiện tại, những gì XML chủ yếu là tốt cho việc trao đổi dữ liệu có cấu trúc giữa các hệ thống khác nhau. Như amon đã lưu ý, có một số miền cụ thể nơi nó có tiện ích rộng hơn. Tôi chỉ vui mừng vì giờ đây có thể mã hóa graffiti trong một đánh dấu được tiêu chuẩn hóa để trong tương lai, trẻ em sẽ không phải mạo hiểm cuộc sống và truy tố mà thay vào đó hãy gắn thẻ với máy bay không người lái điều khiển từ xa bằng sơn.

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.