Tại sao XML được gọi chính xác là ngôn ngữ của người Viking?


105

Tôi đã tự hỏi tại sao XML có chữ L trong tên của nó.

Chính nó, XML không "làm" bất cứ điều gì. Nó chỉ là một định dạng lưu trữ dữ liệu, không phải là một ngôn ngữ! Ngôn ngữ "làm" mọi thứ.

Cách bạn lấy XML để "làm" công cụ, để biến nó thành ngôn ngữ phù hợp, là thêm xmlnscác thuộc tính cho phần tử gốc của nó. Chỉ sau đó nó mới nói với môi trường của nó những gì về nó.
Một ví dụ là XHTML. Nó hoạt động, nó có các liên kết, siêu văn bản, kiểu vv, tất cả được kích hoạt bởi xmlns. Không có điều đó, một tệp XHTML chỉ là một bó dữ liệu trong các nút đánh dấu.

Vậy tại sao XML được gọi là ngôn ngữ? Nó không mô tả bất cứ điều gì, nó không giải thích, nó chỉ là.

Chỉnh sửa: Có lẽ câu hỏi của tôi nên được mở rộng hơn. Vì câu trả lời hiện tại là "vì XML được đặt tên theo SGML, được đặt tên theo GML, v.v." nên câu hỏi nên có, tại sao các ngôn ngữ đánh dấu (như XML) được gọi là ngôn ngữ?

Ồ, và WRT số phiếu gần: không, tôi không hỏi về X. Tôi đang hỏi về L!


128
Bạn dựa vào yêu cầu của mình rằng một ngôn ngữ phải "làm" điều gì? Tôi không thấy điều đó trong bất kỳ định nghĩa nào tại dictionary.com .
kdgregory

10
Giống như tiếng Sw chỉ được hiểu nếu cả hai đều hiểu nó. Hoặc một bài báo tạp chí y tế được hiểu nếu người đọc hiểu phần đó của ngôn ngữ. Nó không khác. Và mọi người tạo nên các định nghĩa.
Sami Kuhmonen

42
Ngôn ngữ đánh dấu là một thuật ngữ phổ biến en.wikipedia.org/wiki/Markup_lingu
paparazzo

37
@MrLister: "Đó là ngôn ngữ của con người, không phải ngôn ngữ máy tính" Ngôn ngữ là ngôn ngữ. Ở cực điểm của nó, ngay cả tiếng Anh cũng yêu cầu thông tin theo ngữ cảnh (phương ngữ đang được sử dụng) để hiểu rõ ràng. Không ngăn nó trở thành một ngôn ngữ. Câu hỏi của bạn chỉ đơn giản là có một tiền đề sai.
Các cuộc đua nhẹ nhàng trong quỹ đạo

68
Ngôn ngữ không làm mọi thứ, chúng diễn đạtgiao tiếp mọi thứ
Hagen von Eitzen

Câu trả lời:


238

Câu trả lời thực sự là XML có chữ L trong tên vì một chàng trai tên Raymond L orie là một trong những nhà thiết kế của "ngôn ngữ đánh dấu" đầu tiên tại IBM vào những năm 1970. Các nhà phát triển phải tìm tên cho ngôn ngữ nên họ đã chọn GML vì đó là tên viết tắt của ba nhà phát triển (Goldfarb, Mosher và Lorie). Sau đó, họ đã tạo ra backronym Generalized Markup Language .

Điều này sau đó đã được chuẩn hóa thành SGML ( Ngôn ngữ đánh dấu chung được chuẩn hóa ) và khi XML được tạo, các nhà phát triển muốn giữ lại hậu tố ML để chỉ ra mối quan hệ gia đình với SGML và họ đã thêm X ở phía trước vì họ nghĩ nó trông rất tuyệt. (Mặc dù nó không thực sự có ý nghĩa - XML ​​là ngôn ngữ meta cho phép bạn xác định các ngôn ngữ có thể mở rộng, nhưng XML không thực sự có thể mở rộng được.)

Đối với câu hỏi thứ hai của bạn nếu XML có thể được gọi là ngôn ngữ một cách hợp pháp:

Bất kỳ định dạng văn bản có cấu trúc (hoặc thậm chí nhị phân) có thể được xử lý tính toán đều có thể được gọi là ngôn ngữ. Một ngôn ngữ không "làm" bất cứ điều gì như vậy, nhưng một số phần mềm có thể xử lý đầu vào bằng ngôn ngữ và "làm" một cái gì đó dựa trên ngôn ngữ đó.

Bạn lưu ý rằng XML là "định dạng lưu trữ" là đúng, nhưng định dạng lưu trữ văn bản có thể được gọi là ngôn ngữ, các thuật ngữ này không loại trừ lẫn nhau.

Ngôn ngữ lập trình là một tập hợp con của các ngôn ngữ. Ví dụ: HTML và CSS là ngôn ngữ nhưng không phải ngôn ngữ lập trình , trong khi JavaScript là ngôn ngữ lập trình thực sự. Điều đó nói rằng, cũng không có định nghĩa chính thức về ngôn ngữ lập trình , và có một vùng ngôn ngữ màu xám lớn có thể được gọi là định dạng dữ liệu hoặc ngôn ngữ lập trình tùy theo quan điểm của bạn.

Với điều này, XML rõ ràng là một ngôn ngữ. không phải là ngôn ngữ lập trình - mặc dù nó có thể được sử dụng để định nghĩa các ngôn ngữ lập trình như XSLT.

Quan điểm của bạn về không gian tên là không liên quan. Không gian tên là một tính năng tùy chọn của XML và không thay đổi ngữ nghĩa của từ vựng XML. Chỉ cần định nghĩa các tên thành phần nếu định dạng có thể chứa nhiều từ vựng.


Chỉnh sửa: rebierpost chỉ ra rằng bạn có thể có ý nghĩa khác với câu hỏi so với những gì tôi hiểu. Có thể bạn muốn nói rằng các từ vựng cụ thể như XHTML, RSS, XSLT, v.v. là ngôn ngữ vì chúng liên kết các yếu tố và thuộc tính với ngữ nghĩa cụ thể, nhưng bản thân tiêu chuẩn XML không định nghĩa bất kỳ ngữ nghĩa nào cho các thành phần và thuộc tính cụ thể, vì vậy nó không có cảm giác như một " ngôn ngữ thực ".

Câu trả lời của tôi cho điều này là XML không định nghĩa cả cú pháp và ngữ nghĩa, nó chỉ định nghĩa nó ở một mức độ khác nhau. Ví dụ, nó xác định cú pháp của các thành phần và thuộc tính và quy tắc về cách xử lý chúng. XML là một "ngôn ngữ kim loại" vẫn là một loại ngôn ngữ (giống như siêu dữ liệu vẫn là dữ liệu!). Ví dụ, EBNF cũng là một ngôn ngữ, nhưng mục đích của nó là xác định cú pháp của các ngôn ngữ khác, vì vậy nó cũng là một ngôn ngữ kim loại.



19
@Snowman: "Ngôn ngữ chính thức" không nhất thiết phải tương ứng với ngôn ngữ thường được gọi là ngôn ngữ trong điện toán. Ví dụ: "ngôn ngữ chính thức" không cần phải là văn bản - mã máy là ngôn ngữ chính thức như hầu hết các định dạng và giao thức nhị phân. Vì vậy, tôi sẽ không nói thuật ngữ "ngôn ngữ chính thức" bao hàm ý nghĩa tương tự như "ngôn ngữ" trong điện toán.
JacquesB

15
Tôi không nhận thức được bất kỳ yêu cầu nào mà một ngôn ngữ cần phải là văn bản hoặc không phải là văn bản. Ý tưởng xây dựng một câu từ các thiết bị đầu cuối không liên quan gì đến việc diễn giải các bit trong các thiết bị đầu cuối đó, hoặc loại máy tính nào (dựa trên silicon hoặc carbon) có khả năng đọc chúng.

4
@NicolBolas: Điểm hay, mã máy chắc chắn là một ngôn ngữ. Tôi chỉ nghĩ rằng việc gọi các ngôn ngữ nhị phân là "định dạng" là phổ biến hơn, ví dụ bạn nói định dạng GIF không phải là ngôn ngữ GIF.
JacquesB

3
@BenCottrell: Sẽ không phải là một biểu đồ, vì có thể có các vòng lặp?
JacquesB

181

Bởi vì nó là một ngôn ngữ. Một ngôn ngữ đánh dấu , không phải là ngôn ngữ lập trình.

Lưu ý rằng các ngôn ngữ tự nhiên của con người như tiếng Anh và tiếng Tây Ban Nha cũng không "làm" bất cứ điều gì. Trên thực tế, về mặt kỹ thuật C ++ và Java và những thứ tương tự không "làm" bất cứ điều gì cho đến khi chúng được đưa vào một trình biên dịch và đầu ra được thực thi. Làm công cụ và là một ngôn ngữ chủ yếu là trực giao với nhau.


43
Thay thế "thông dịch viên" cho "trình biên dịch". Được cung cấp cho trình biên dịch không làm cho họ "làm" bất cứ điều gì, nó cũng chỉ dịch chúng sang một ngôn ngữ khác, một lần nữa, không "làm" bất cứ điều gì. Tất cả thực hiện là giải thích. Đôi khi, trình thông dịch có thể cực kỳ đơn giản và được thực hiện bằng silicon, trong trường hợp đó chúng ta gọi nó là "đơn vị thực thi", nhưng nó vẫn là một trình thông dịch. </nitpick>Dù sao, câu trả lời tốt!
Jörg W Mittag

8
@ JörgWMittag Điểm tốt. Vì tôi chọn ngẫu nhiên các ngôn ngữ thường được biên dịch, thêm "và đầu ra được thực thi".
Ixrec

1
Một ngôn ngữ đánh dấu mở rộng , nếu bạn muốn.
doppelgreener

1
Tôi cho rằng ngôn ngữ của con người làm những việc "làm". Xem Lý thuyết diễn xuất bằng lời nói ...
Ray

2
Ngọt ngào, trực giao ngọt ngào. Thực hiện ngôn ngữ trong một đại số khác nhau, và một loạt các hành động mới mở ra. Theo lý thuyết, dù sao đi nữa.
Kenogu Labz

103

Đặt là một tập hợp các ký hiệu không trống, hữu hạn, được gọi là bảng chữ cái . Khi đó * là tập hợp vô hạn có thể đếm được của các từ hữu hạn có thể được hình thành bằng cách ghép 0 hoặc nhiều ký hiệu từ. Bất kỳ tập hợp con được xác định rõ L ⊆ Σ * là một ngôn ngữ .

Hãy áp dụng điều này cho XML. Bảng chữ cái của nó là Unicode ký tự U , mà không bị để trống và hữu hạn. Không phải mọi cách ghép từ 0 hoặc nhiều ký tự Unicode là một tài liệu XML được định dạng tốt, ví dụ: chuỗi

<tag> soup &; not <//good>

rõ ràng là không. Tập hợp con XML ⊂ U * tạo thành các tài liệu XML được định dạng tốt là có thể quyết định (hoặc là đệ quy hồi quy). Tồn tại một máy (thuật toán hoặc chương trình máy tính) nhận đầu vào là bất kỳ từ nào wU * và sau một khoảng thời gian hữu hạn, xuất ra 1 nếu w ∈ XML và 0 nếu không. Một thuật toán như vậy là một quy trình con của bất kỳ phần mềm xử lý XML nào. Không phải tất cả các ngôn ngữ là quyết định. Ví dụ: tập hợp các chương trình C hợp lệ chấm dứt trong một khoảng thời gian hữu hạn là không (điều này được gọi là vấn đề tạm dừng). Khi một người thiết kế một ngôn ngữ mới, một quyết định quan trọng cần đưa ra là liệu nó có nên mạnh mẽ nhất có thể hay liệu tính biểu cảm sẽ được hạn chế tốt hơn để ủng hộ tính quyết định.

Một số ngôn ngữ có thể được định nghĩa bằng một ngữ pháp được cho là tạo ra ngôn ngữ. Một ngữ pháp bao gồm

  • một tập hợp hữu hạn của chữ (còn được gọi là ký hiệu đầu cuối ),
  • một tập hợp hữu hạn các biến của ngữ pháp (còn được gọi là các ký hiệu không đầu cuối ),
  • một biểu tượng bắt đầu phân biệt , được lấy từ tập hợp các biến và
  • một bộ quy tắc hữu hạn (được gọi là sản phẩm ) cho phép một số loại thay thế nhất định.

Bất kỳ từ nào chỉ bao gồm các chữ và có thể được bắt nguồn bằng cách bắt đầu bằng ký hiệu bắt đầu và sau đó áp dụng các quy tắc đã cho thuộc về ngôn ngữ do ngữ pháp tạo ra.

Ví dụ, ngữ pháp sau (theo ký hiệu khá không chính thức) cho phép bạn rút ra chính xác các số nguyên trong ký hiệu thập phân.

  1. Các literals của ngữ pháp là các chữ số 1, 2, 3, 4, 5, 6, 7, 8, 9, và 0.
  2. Các biến là những biểu tượng SD .
  3. S là ký hiệu bắt đầu.
  4. Bất kỳ sự xuất hiện của biến S có thể được thay thế
    • với nghĩa đen 0hoặc
    • bởi bất kỳ literals khác hơn là 0tiếp theo là biến D .
  5. Bất kỳ sự xuất hiện của biến D có thể được thay thế
    • bởi bất kỳ chữ nào theo sau bởi một thể hiện khác của biến D hoặc
    • bởi chuỗi rỗng.

Đây là cách chúng tôi rút ra 42:

S - (áp dụng quy tắc 4, biến thể thứ 2 ) → 4 D - (áp dụng quy tắc 5, biến thể thứ 1 ) → 42 D - (áp dụng quy tắc 5, biến thể thứ 2 ) → 42.

Tùy thuộc vào mức độ phức tạp mà bạn cho phép trong ngữ pháp của mình, các máy tinh vi khác nhau được yêu cầu để chứng minh rằng một từ nhất định có thể thực sự được tạo ra bởi ngữ pháp. Ví dụ đưa ra ở trên là một ngữ pháp thông thường , là đơn giản nhất và ít mạnh mẽ nhất. Lớp ngữ pháp mạnh mẽ tiếp theo được gọi là không ngữ cảnh . Những ngữ pháp này cũng rất đơn giản để xác minh. XML (trừ khi tôi đang xem một số tính năng tối nghĩa mà tôi không biết) có thể được mô tả bằng ngữ pháp không ngữ cảnh. Việc phân loại ngữ pháp tạo thành Hệ thống phân cấp ngữ pháp Chomsky (và do đó là ngôn ngữ). Mỗi ngôn ngữ có thể được mô tả bằng một ngữ pháp ít nhất là có thể bán được(hay còn gọi là đệ quy liệt kê). Đó là, tồn tại một cỗ máy, đưa ra một từ thực sự thuộc về ngôn ngữ, đưa ra một bằng chứng rằng nó có thể được tạo ra bởi ngữ pháp trong thời gian hữu hạn và sẽ không bao giờ đưa ra một bằng chứng sai. Một máy như vậy được gọi là một xác minh . Lưu ý rằng máy có thể không bao giờ dừng lại khi được cung cấp một từ không thực sự thuộc về ngôn ngữ. Rõ ràng, chúng tôi muốn các ngôn ngữ lập trình của chúng tôi được mô tả bằng các ngữ pháp ít mạnh hơn vì lợi ích của việc có thể từ chối các chương trình không hợp lệ trong thời gian hữu hạn.

Schemata là một bổ sung cho XML cho phép tinh chỉnh bộ tài liệu được định dạng tốt. Một tài liệu được hình thành theo một lược đồ nhất định được gọi là hợp lệ theo lược đồ đó. Ví dụ: chuỗi

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

là một tài liệu XML được định dạng tốt nhưng không phải là tài liệu XHTML hợp lệ. Có tồn tại schemata cho XHTML , SVG , XSLT và những thứ khác. Xác thực lược đồ cũng có thể được thực hiện bằng một thuật toán được đảm bảo tạm dừng sau số bước hữu hạn cho mỗi đầu vào. Một chương trình như vậy được gọi là trình xác nhận hợp lệ hoặc trình phân tích cú pháp xác thực. Schemata được định nghĩa bởi cái gọi là ngôn ngữ định nghĩa scema , đây là một cách để định nghĩa chính thức ngữ pháp. XSD là ngôn ngữ định nghĩa lược đồ chính thức cho XML và, chính nó, dựa trên XML. THƯ GIÃN NG là một sự thay thế thanh lịch hơn, đơn giản hơn nhiều và hơi kém mạnh mẽ hơn so với XSD.

Bởi vì bạn có thể định nghĩa lược đồ của riêng mình, XML được gọi là ngôn ngữ có thể mở rộng , là nguồn gốc của bản X X trong trong XML XML.

Bạn có thể định nghĩa một tập hợp các quy tắc cung cấp cho các tài liệu XML một cách diễn giải như các mô tả về các chương trình máy tính. XSLT, được đề cập trước đó, là một ví dụ về ngôn ngữ lập trình như vậy được xây dựng bằng XML. Tổng quát hơn, bạn có thể tuần tự hóa cây cú pháp trừu tượng của hầu hết mọi ngôn ngữ lập trình hoàn toàn tự nhiên thành XML, nếu đây là điều bạn muốn.


7
@Giorgio: Trong toán học, "được xác định rõ" phần lớn chỉ là một bộ tăng cường: mọi thứ tồn tại về mặt toán học đều đã được xác định rõ.
Kevin

9
@Giorgio Với những người được định nghĩa rõ ràng, ý tôi là có một vị từ chính thức cho biết liệu một mục có thuộc về tập hợp hay không. Vị ngữ này nói chung sẽ không thể tính toán được nhưng nó phải được chỉ định rõ ràng mà không có mâu thuẫn. Nếu không, những điều xấu có thể xảy ra . Các cặp dây ( w , M ) trong đó M là mô tả nhỏ nhất của máy Turing tạo ra w và sau đó dừng lại là một biến vị ngữ được xác định rõ nhưng không tính toán được (xem độ phức tạp Kolmogorov ). ...
5gon12eder

2
@ 5gon12eder: Tập hợp đó không tồn tại trong ZFC (vì lược đồ phân tách tiên đề không đủ mạnh để mô tả nó); nếu bạn đang sử dụng một số lý thuyết tập hợp khác, bạn nên chỉ định nó.
Kevin

5
@ 5gon12eder: Tập hợp Bộ chứa tất cả các chuỗi không có trong tập hợp Không tồn tại. Thuật ngữ "được xác định rõ" thật trớ trêu không được xác định rõ.
Kevin

3
Các thuộc tính hoặc xác nhận hợp lệ được thực hiện bởi một ngữ pháp . Câu trả lời này là hoàn hảo nếu bạn đã đề cập đến điều đó.
Thibault D.

31

Trong khoa học máy tính, ngôn ngữ chính thức chỉ là một tập hợp các chuỗi, thường là vô hạn và thường được mô tả bằng các quy tắc (hai phiên bản phổ biến của các quy tắc đó là biểu thức chính quyngữ pháp chính thức ).

Lưu ý rằng điều này có nghĩa là tất cả các ngôn ngữ cần là cú pháp , ngôn ngữ không cần mô tả ý nghĩa của từng chuỗi hợp lệ (đó gọi là ngữ nghĩa ).

Bây giờ, điều này có nghĩa là ngôn ngữ lập trình là ngôn ngữ chính thức cũng có ngữ nghĩa, mô tả một số tính toán. Và ví dụ XHTML là một ngôn ngữ chính thức, có ngữ nghĩa mô tả (đại khái và không chính thức) cách một tài liệu siêu văn bản trông và hành xử.

XML vẫn là một ngôn ngữ, mặc dù nó không có ngữ nghĩa (nhưng nhiều ngôn ngữ bắt nguồn từ XML, như XHTML và XAML).

Về mặt kỹ thuật, định dạng nhị phân cũng là ngôn ngữ, nhưng chúng không được gọi theo cách đó. Thuật ngữ "ngôn ngữ" được dành riêng cho các định dạng có thể đọc được.


10
@MrLister Bởi vì chúng không thể đọc được. Thay vào đó, khi chúng không thể đọc được bằng con người, chúng ta có xu hướng gọi chúng là định dạng hoặc định dạng dữ liệu .
Mason Wheeler

3
@JamesSnell Không nên nhầm lẫn với gia đình ngôn ngữ ML khác, tất nhiên. Yay cho các từ viết tắt quá đông!
Mason Wheeler

3
Nếu một người đang sử dụng các công cụ chính thức để xây dựng trình phân tích cú pháp (hoặc đặc biệt là trình xác nhận hợp lệ) cho JFIF, v.v. thì các kỹ sư thực sự có thể gọi nó là "ngôn ngữ". Nhiều khả năng mặc dù là một "ngữ pháp".
JDługosz

3
@MrLister: Chà, chúng ngôn ngữ, nhưng vì chúng xác định cấu trúc dữ liệu có thể sử dụng lại nên chúng có một tên đặc biệt: định dạng . Nhưng, vâng, đây là những ngôn ngữ quá.
Các cuộc đua nhẹ nhàng trong quỹ đạo

4
@MrLister: Đặt tên một định dạng là một câu hỏi về tiếp thị. Người XML gọi là XML cho XML vì "* ML" biểu thị mối quan hệ gia đình với định dạng tiền thân như GML và SGML và vì họ nghĩ rằng nó trông rất tuyệt với chữ X ở phía trước. Và GML được gọi là GML vì đây là ngôn ngữ đánh dấu tổng quát, nhưng cũng vì đó là tên viết tắt của ba nhà thiết kế ngôn ngữ. Về cơ bản, chữ L trong XML là bởi vì một anh chàng tên Raymond L orie là một trong những người thiết kế ngôn ngữ đánh dấu đầu tiên.
JacquesB

12

Một ngôn ngữ là một phương pháp truyền đạt thông tin.

Một ngôn ngữ lập trình là một phương pháp truyền đạt các thuật toán.

Một ngôn ngữ đánh dấu như XML là ngôn ngữ để truyền tải dữ liệu.


... Và dữ liệu đó rất có thể là một mô tả của một thuật toán.
Luaan

@Luaan ... và một ngôn ngữ lập trình cũng có thể bị lạm dụng để truyền tải dữ liệu. Giống như với JSON chẳng hạn.
Philipp

2
Bạn thậm chí có thể tái diễn. Tôi đã thấy các tập lệnh NAnt (một ngôn ngữ dựa trên XML) có chứa mã C #, chỉ được sử dụng để lưu trữ dữ liệu. Sử dụng chuỗi ký tự có chứa XML. Vâng, đó là loại điều mà làm cho người đàn ông trưởng thành khóc: P
Luaan

2

XML là một ngôn ngữ meta. Bạn sử dụng nó để xác định ngôn ngữ cụ thể. Ngôn ngữ không bao giờ làm bất cứ điều gì, chúng chỉ cho phép chúng ta thể hiện mọi thứ. Ngoài ra, không đúng khi XML là "ngôn ngữ lưu trữ". Chỉ cần đối diện, trong thực tế. Bạn có thể lưu trữ tài liệu XML theo cách bạn muốn. XML được coi là ngôn ngữ chuyển nhượng tốt hơn. Tái bút Nếu bạn không nghĩ XML "làm" bất cứ điều gì, bạn sẽ phải giải thích làm thế nào mà nhiều hệ thống (ví dụ cầu cảng) sử dụng XML làm ngôn ngữ lập trình (xấu). Đó là một sự lạm dụng XML đáng tiếc, nhưng nó tồn tại trong tự nhiên và đó chỉ là một trong nhiều ví dụ.

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.