Đặ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 w ∈ U * 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.
- Các literals của ngữ pháp là các chữ số
1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
, và 0
.
- Các biến là những biểu tượng S và D .
- S là ký hiệu bắt đầu.
- Bất kỳ sự xuất hiện của biến S có thể được thay thế
- với nghĩa đen
0
hoặc
- bởi bất kỳ literals khác hơn là
0
tiếp theo là biến D .
- 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.