Extensible Markup Language | |
Năm công bố | 1996; 28 năm trước |
---|---|
Xuất bản lần đầu | 10 tháng 2 năm 1998; 26 năm trước |
Phiên bản mới nhất | 1.1 (2nd ed.) 29 tháng 9 năm 2006; 17 năm trước |
Tổ chức | World Wide Web Consortium (W3C) |
Tiêu chuẩn cơ sở | SGML |
Tiêu chuẩn liên quan | W3C XML Schema |
Domain | Serialization |
Viết tắt | XML |
Website | www |
XML (viết tắt của eXtensible Markup Language, có nghĩa là 'Ngôn ngữ đánh dấu mở rộng') là một ngôn ngữ đánh dấu đa mục đích được W3C đề xuất để xây dựng các ngôn ngữ đánh dấu khác. XML là một tập con đơn giản của SGML, có khả năng mô tả nhiều loại dữ liệu khác nhau. Mục tiêu chính của XML là làm cho việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là những hệ thống kết nối qua Internet, trở nên dễ dàng hơn. Các ngôn ngữ dựa trên XML như RDF, RSS, MathML, XHTML, SVG, GML và cXML được định nghĩa một cách rõ ràng, cho phép các chương trình xử lý và kiểm tra tính hợp lệ mà không cần hiểu rõ cấu trúc của chúng.
Đề xuất
Vào giữa thập niên 1990, các chuyên gia SGML nhận thấy tiềm năng của SGML trong việc giải quyết các vấn đề của World Wide Web đang nổi lên. Jon Bosak đã đề xuất W3C tài trợ cho một chương trình mang tên 'SGML trên Web'. Kết quả là XML, một tập con của SGML, đã được phát triển.
Những đặc điểm chính
XML cung cấp một phương pháp sử dụng văn bản (text) để mô tả thông tin và áp dụng cấu trúc cây cho dữ liệu đó. Ở mức cơ bản, mọi thông tin đều được thể hiện dưới dạng văn bản, kết hợp với các thẻ đánh dấu (markup) để chỉ ra sự phân chia thông tin thành các cấu trúc có thứ bậc, bao gồm dữ liệu ký tự, phần tử chứa dữ liệu, và thuộc tính của các phần tử. Tương tự như biểu thức S (S-expression) trong LISP, XML mô tả cấu trúc cây với các nút có thể chứa danh sách thuộc tính riêng.
Đơn vị cơ bản của XML là các ký tự theo định nghĩa của Universal Character Set (Bộ ký tự toàn cầu). Các ký tự này được kết hợp thành các chuỗi hợp lệ để tạo thành một tài liệu XML. Tài liệu XML bao gồm một hoặc nhiều thực thể, mỗi thực thể là một phần của dữ liệu trong tài liệu, được mã hóa thành chuỗi bit và lưu trữ trong một tệp văn bản (text file).
Các tệp XML có thể chứa nhiều loại dữ liệu đa phương tiện. RFC3023 định nghĩa hai loại 'application/xml' và 'text/xml', cho thấy dữ liệu được biểu diễn bằng XML mà không đề cập đến ý nghĩa cụ thể của dữ liệu.
Sự phổ biến của các trình soạn thảo văn bản (word processor) đã giúp việc biên soạn và bảo trì tài liệu XML trở nên dễ dàng hơn. Trước khi XML xuất hiện, rất ít ngôn ngữ mô tả dữ liệu có các đặc tính linh hoạt, thân thiện với Internet, dễ học và dễ tạo. Hầu hết các định dạng trao đổi dữ liệu thời đó đều mang tính độc quyền, sử dụng định dạng nhị phân khó tương thích giữa các ứng dụng phần mềm và nền tảng khác nhau, khiến việc tạo và bảo trì trở nên phức tạp hơn.
XML cho phép xác định tên dữ liệu, cấu trúc thứ bậc và ý nghĩa của các phần tử và thuộc tính một cách mở, thông qua các giản đồ tùy biến. XML cung cấp cơ sở cú pháp để tạo ra các ngôn ngữ đánh dấu dựa trên XML theo yêu cầu. Cú pháp chung của các ngôn ngữ này là cố định — các tài liệu phải tuân theo quy tắc của XML, đảm bảo rằng phần mềm có thể đọc (phân tích cú pháp - parse) và hiểu cấu trúc thông tin trong tài liệu. Giản đồ chỉ bổ sung các ràng buộc cho cú pháp, hạn chế tên phần tử, thuộc tính và cấu trúc thứ bậc, ví dụ, một phần tử 'ngày sinh' chỉ chứa phần tử 'ngày' và 'tháng', mỗi phần tử phải chứa một ký tự. Điều này khác biệt với HTML, nơi các phần tử và thuộc tính không linh hoạt và chỉ có chức năng cố định.
XML không đặt giới hạn về cách sử dụng của nó. Dù XML cơ bản là dạng văn bản, các phần mềm đã phát triển để chuyển đổi nó thành các định dạng thông tin phong phú hơn rất nhanh. Quá trình chuyển đổi này chủ yếu được thực hiện thông qua việc sử dụng các giản đồ định hướng kiểu dữ liệu (datatype-oriented schema) và các mô hình lập trình hướng đối tượng (trong đó, mỗi tài liệu XML được xử lý như một đối tượng). Các phần mềm này coi XML như một dạng văn bản tuần tự hóa chỉ khi cần truyền dữ liệu qua mạng.
Ngoài các đặc điểm đã nêu, công nghệ này cũng cần được chú ý vì trong quá trình xử lý và truyền dữ liệu, tỷ lệ lỗi và mất mát dữ liệu được ghi nhận vào khoảng 5 - 7%. Dù con số này không lớn, nhưng vẫn cần các người sử dụng cân nhắc cẩn thận.
Tổng quan về cú pháp
Cú pháp cơ bản của một phần tử XML là
<tên thuộc_tính='giá trị'>nội dung</tên>
<?xml version='1.0' encoding='UTF-8'?> <công_thức_nấu_ăn tên='bánh mì' thời_gian_chuẩn_bị='5 phút' thời_gian_nấu='3 tiếng'> <title>Bánh mì cơ bản</title> <nguyên_liệu lượng='3' đơn_vị='ca'>Bột mì</nguyên_liệu> <nguyên_liệu lượng='7' đơn_vị='gram'>Men</nguyên_liệu> <nguyên_liệu lượng='1.5' đơn_vị='ca' trạng_thái='ấm'>Nước</nguyên_liệu> <nguyên_liệu lượng='1' đơn_vị='thìa cà phê'>Muối</nguyên_liệu> <chỉ_dẫn> <bước>Trộn tất cả các nguyên liệu với nhau và nhào kĩ</bước> <bước>Phủ một mảnh vải, ủ một tiếng đồng hồ trong phòng ấm.</bước> <bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước> </chỉ_dẫn> </công_thức_nấu_ăn>
Dòng đầu tiên là Khai báo XML (XML declaration): dòng này không bắt buộc, có chức năng thông báo phiên bản XML đang được sử dụng (thường là phiên bản 1.0), và có thể bao gồm thông tin về mã hóa ký tự cùng các phụ thuộc khác.
Phần còn lại của tài liệu chứa các phần tử lồng ghép, trong đó nhiều phần tử đi kèm với thuộc tính và nội dung. Một phần tử bao gồm hai thẻ (tag), một thẻ bắt đầu
<bước>
'; Thẻ kết thúc chứa tên đó với một dấu gạch chéo đứng trước, như '</bước>
'. Nội dung là tất cả những gì nằm giữa thẻ bắt đầu và thẻ kết thúc, bao gồm văn bản và các phần tử khác. Dưới đây là ví dụ về một phần tử XML đầy đủ với thẻ bắt đầu, nội dung văn bản và thẻ kết thúc:
<bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước>
Ngoài nội dung, một phần tử cũng có thể bao gồm các thuộc tính — các cặp tên - giá trị nằm trong thẻ bắt đầu, ngay sau tên phần tử. Giá trị thuộc tính cần được đặt trong dấu nháy đơn hoặc nháy kép, và mỗi tên thuộc tính chỉ được xuất hiện một lần trong phần tử.
<nguyên_liệu lượng='3' đơn_vị='ca'>Bột mì</nguyên_liệu>
Trong ví dụ này, phần tử nguyên_liệu bao gồm hai thuộc tính: lượng với giá trị '3', và đơn_vị với giá trị 'ca'. Cả hai giá trị này, cũng như tên và nội dung của các phần tử, chỉ là dữ liệu văn bản ở cấp độ đánh dấu — giá trị '3' và 'ca' không phải là số lượng thực và đơn vị đo lường, mà chỉ là các chuỗi ký tự dùng để biểu thị các thông tin đó.
Các phần tử không chỉ chứa văn bản mà còn có thể bao gồm các phần tử con khác:
<chỉ_dẫn> <bước>Trộn tất cả các nguyên liệu với nhau và nhào kĩ</bước> <bước>Phủ một mảnh vải, ủ một tiếng đồng hồ trong phòng ấm.</bước> <bước>Nhào lại, đổ vào khuôn, cho vào lò nướng.</bước> </chỉ_dẫn>
Trong phần tử chỉ_dẫn, có ba phần tử con bước. XML yêu cầu các phần tử phải được lồng ghép chính xác — không có phần tử nào được chồng lấn lên phần tử khác. Ví dụ, đoạn sau không phải là XML hợp lệ (well-formed XML) vì các phần tử em và strong lồng vào nhau:
<!-- LỖI! ĐỊNH DẠNG KHÔNG CHÍNH XÁC! --> <p>Normal <em>emphasized <strong>strong emphasized</em> strong</strong></p>
Mỗi tài liệu XML cần phải có một phần tử gốc duy nhất ở cấp cao nhất (còn gọi là phần tử chính), vì vậy đoạn sau cũng không phải là tài liệu XML hợp lệ:
<?xml version='1.0' encoding='UTF-8'?> <!-- LỖI! ĐỊNH DẠNG KHÔNG CHÍNH XÁC! --> <đồ vật>Đồ vật thứ nhất</đồ vật> <đồ vật>Đồ vật thứ hai</đồ vật>
XML cung cấp cú pháp đặc biệt để biểu thị một phần tử với nội dung rỗng. Thay vì sử dụng một thẻ mở và một thẻ đóng ngay sau đó, bạn có thể dùng thẻ phần tử rỗng với dấu gạch chéo ngay sau tên phần tử. Hai ví dụ dưới đây có chức năng tương đương:
<foo></foo> </div> :<syntaxhighlight lang='xml' inline style='font-size:1.2em;' > <foo />
XML hỗ trợ hai cách để biểu thị các ký tự đặc biệt: sử dụng tham chiếu thực thể (entity reference) hoặc tham chiếu ký tự số (numeric character reference).
Trong XML, một thực thể (entity) là một đoạn dữ liệu có tên, thường là văn bản, như các ký tự đặc biệt ví dụ.
Một tham chiếu thực thể là ký hiệu đại diện cho thực thể đó. Nó bao gồm tên thực thể với dấu '&
' trước và dấu chấm phẩy ';
' sau. XML định nghĩa sẵn năm thực thể:
- & (&)
- < (<)
- > (>)
- ' (')
- " (')
Dưới đây là ví dụ về việc sử dụng một thực thể XML đã được khai báo trước để biểu diễn ký tự &
trong tên 'AT&T':
<tên-công-ty>AT&T</tên-công-ty>
Nếu bạn cần khai báo thêm các thực thể, điều này có thể được thực hiện trong DTD của tài liệu. Ví dụ dưới đây minh họa cách khai báo thực thể trong một DTD nội bộ cơ bản. Các thực thể có thể đại diện cho ký tự đơn hoặc đoạn văn bản và có thể tham chiếu lẫn nhau.
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE example [ <!ENTITY copy '©'> <!ENTITY copyright-notice 'Copyright © 2006, XYZ Enterprises'> ]> <root> ©right-notice; </root>
Khi tài liệu XML này được mở bằng trình duyệt hỗ trợ, nó sẽ được hiển thị như sau:
<root> Bản quyền © 2006, XYZ Enterprises </root>
Các tham chiếu ký tự số tương tự như thực thể, nhưng thay vì tên, chúng bắt đầu bằng ký tự '#
' và theo sau là một số. Con số này (có thể là hệ thập phân hoặc hệ cơ số 16 với tiền tố 'x
') biểu thị mã Unicode (Unicode code point), thường dùng để đại diện cho các ký tự khó gõ trên máy tính, chẳng hạn như chữ cái Ả-rập trong tài liệu viết trên máy tính châu Âu. Ví dụ, dấu &
trong 'AT&T' có thể được biểu diễn như sau (số 38 thập phân và 26 hệ cơ số 16 đều đại diện cho mã Unicode của dấu &
):
<tên-công-ty>AT&T</tên-công-ty> <tên-công-ty>AT&T</tên-công-ty>
Có nhiều quy tắc khác để đảm bảo tài liệu XML được định dạng đúng, ví dụ như các ký tự hợp lệ trong tên XML. Tuy nhiên, hướng dẫn ngắn này chỉ cung cấp những kiến thức cơ bản để bạn có thể đọc và hiểu các tài liệu XML một cách dễ dàng.
Liên kết bên ngoài
Tài liệu tiếng Việt
- 10 điều quan trọng về XML
Tiếng Anh
Thông số kỹ thuật
- Trang chính về XML trên W3C
- Thông số kỹ thuật XML 1.0
- Thông số kỹ thuật XML 1.1
Tài liệu cơ bản
- Câu hỏi thường gặp về XML
- XML.com - Trang web thương mại với nhiều bài viết về công nghệ XML.
- Thông số kỹ thuật XML có chú thích
- Hướng dẫn XML cho người mới bắt đầu Lưu trữ ngày 2006-10-15 trên Wayback Machine
- Hướng dẫn XML cho người mới
- W3 Schools - Học XML
- Giới thiệu về XML Lưu trữ ngày 2006-10-05 trên Wayback Machine
- XML: Một số liên kết mà không phải là quảng cáo bởi Philip Wadler
- Xml và công cụ cho Xml hoặc trong Xml
Trình soạn thảo XML
- Danh sách trình soạn thảo Lưu trữ ngày 2006-07-18 trên Wayback Machine
- Danh sách trình soạn thảo Lưu trữ ngày 2006-04-12 trên Wayback Machine tại xml.com
Chứng nhận XML
- Diễn đàn thảo luận chứng nhận XML JavaRanch Lưu trữ ngày 2006-08-28 trên Wayback Machine
Công cụ phân tích cú pháp XML
- Thông số kỹ thuật Microsoft XML Parser (MSXML)
- Expat XML Parser bằng C trên SourceForge.net
- Apache Xerces
- dom4j Thư viện mã nguồn mở để làm việc với XML, XPath và XSLT trên nền tảng Java
- CookXml Trình phân tích cú pháp XML cho Java
- Liquid XML Parser
- TinyXml Trình phân tích cú pháp cho lập trình viên C++ Lưu trữ ngày 2006-08-26 trên Wayback Machine
- VTD-XML của XimpleWare Trình phân tích cú pháp XML cho cả C và Java
- Trình phân tích cú pháp XML miễn phí của Stefan Heymann cho Delphi
- Thư viện XML của Microsoft cho nền tảng.NET
- XeML.net Lưu trữ ngày 2018-03-16 trên Wayback Machine
Danh sách các thư viện XML
- Danh sách thư XML-DEV Lưu trữ ngày 2006-02-18 trên Wayback Machine
Ngôn ngữ lập trình |
---|
Mạng ngữ nghĩa |
---|