Định dạng XML
Biến một khối XML dày đặc thành thứ đọc được, hoặc nén nó gọn lại. Comment, phần CDATA và namespace được giữ nguyên vẹn. Không lưu trữ gì cả.
- Không bao giờ lưu trữ
- Không xếp hàng, không phải chờ
- Không cần đăng ký, không watermark
XML đã định dạng sẽ hiện ở đây.
Cách hoạt động
Dán XML
Hoặc thả vào một file .xml, .svg, .rss hay .xsd. File không bao giờ bị lưu trữ.
Chọn kiểu thụt lề
Hai dấu cách, bốn dấu cách, tab, hoặc nén gọn thành một dòng.
Sao chép hoặc tải xuống
Nếu XML bị lỗi, bạn sẽ nhận được dòng và cột gây lỗi thay vì kết quả.
Vì sao thụt lề lại XML rủi ro hơn bạn tưởng
Khoảng trắng trong XML mặc định là có ý nghĩa, và đây là điều khiến nhiều người vấp phải. Không như JSON, nơi định dạng chẳng ảnh hưởng gì, một trình phân tích XML buộc phải báo các dấu cách và ký tự xuống dòng giữa các phần tử là nội dung văn bản — chính schema, nếu có, mới là thứ cho biết chúng có thể bị bỏ qua. Vì vậy, thụt lề lại một tài liệu thực sự làm thay đổi nó; với phần lớn file cấu hình và file dữ liệu thì chẳng có gì bị ảnh hưởng, còn với tài liệu có nội dung hỗn hợp — văn bản và phần tử nằm cạnh nhau, như trong XHTML hay DocBook — nó có thể làm thay đổi điều tài liệu muốn nói.
Do đó, việc định dạng ở đây không động đến những gì phải giữ nguyên. Một phần tử mang xml:space="preserve" giữ nguyên nội dung đúng như đã viết, vì thuộc tính này tồn tại chính là để nói điều đó. Các phần CDATA được giữ nguyên, không động chạm; chúng tồn tại để chứa văn bản không được diễn giải, và định dạng lại bên trong sẽ làm hỏng chúng. Tham chiếu entity vẫn giữ dạng tham chiếu thay vì bị mở rộng thành các ký tự mà chúng đại diện.
Namespace được giữ nguyên đúng như đã viết — tiền tố, phần khai báo và các phần tử gắn với chúng. Nghe có vẻ hiển nhiên nhưng không phải vậy: một công cụ định dạng chuẩn hóa tiền tố, hoặc chuyển phần khai báo đến chỗ nó cho là đúng, sẽ tạo ra một tài liệu tương đương về mặt kỹ thuật nhưng lại lỗi với những công cụ so khớp theo đúng chữ của tiền tố. Thứ tự thuộc tính cũng được giữ, dù XML coi nó là vô nghĩa, vì cùng một lý do — so sánh khác biệt với phiên bản trước đáng giá hơn sự gọn gàng.
Thứ được kiểm tra trong lúc định dạng là cú pháp (well-formedness): mọi thẻ đều được đóng, lồng nhau đúng, có một phần tử gốc, ký tự hợp lệ, dấu & và dấu ngoặc nhọn được thoát đúng cách. Đó là mức thấp hơn trong hai mức yêu cầu của XML. Một tài liệu có thể đúng cú pháp hoàn toàn mà vẫn không hợp lệ theo DTD hay schema quy định nó, và định dạng bao nhiêu cũng không cho thấy điều đó.
Khi bạn cần công cụ khác
xmllint --format in.xml làm cùng việc này trên dòng lệnh và đã được cài sẵn trên hầu hết hệ thống Unix; xmlstarlet fo --indent-tab cho bạn kiểm soát nhiều hơn với chính kiểu thụt lề. Cả hai đều xử lý được những file lớn hơn nhiều so với mức một trang web có thể giữ trong bộ nhớ.
Khi tài liệu cần được so sánh, ký số hoặc lưu trữ ở dạng chuẩn tắc, định dạng hoàn toàn là thao tác sai. Canonical XML — xmllint --c14n — tạo ra đúng một dạng chuẩn hóa mà hai tài liệu tương đương đều quy về, và đó là thứ chữ ký số trên XML dựa vào. Định dạng lại một tài liệu đã ký sẽ làm hỏng chữ ký của nó, và đó là cách học bài học này đắt giá nhất.
Câu hỏi thường gặp
XML của tôi có bị lưu ở đâu không?
Không. Không có lệnh gọi máy chủ, không ghi log và không lưu trữ gì cả. Bạn có thể ngắt kết nối internet sau khi trang tải xong và nó vẫn hoạt động. Điều này quan trọng hơn bạn nghĩ: thứ người ta dán vào một công cụ định dạng online là phản hồi API, file cấu hình và nội dung lỗi, và chúng thường xuyên chứa token, dữ liệu khách hàng và tên máy chủ nội bộ.
Những gì được giữ nguyên khi định dạng?
Comment, phần CDATA, chỉ thị xử lý (processing instruction), phần khai báo XML và mọi tiền tố namespace. Thứ tự thuộc tính được giữ đúng như đã viết. Một phần tử chỉ chứa văn bản vẫn nằm trên một dòng, vì tách <title>Hello</title> thành ba dòng không làm nó đẹp hơn — và trong một tài liệu có nội dung hỗn hợp, việc đó sẽ làm thay đổi chính nội dung văn bản.
Thụt lề có làm thay đổi ý nghĩa XML của tôi không?
Với một phần tử chỉ chứa các phần tử khác thì không. Nhưng XML không có quy tắc chung nào nói rằng khoảng trắng là vô nghĩa — trong nội dung hỗn hợp, nơi văn bản và phần tử nằm cạnh nhau, khoảng trắng thêm vào CHÍNH LÀ một phần của văn bản. Đó là lý do các phần tử chỉ chứa văn bản được giữ trên một dòng thay vì bị tách ra. Nếu tài liệu của bạn thực sự có nội dung hỗn hợp và khoảng trắng quan trọng với nó, nén gọn là thao tác an toàn hơn.
Công cụ có dùng được với HTML không?
Chỉ khi HTML đó là XML đúng cú pháp — điều mà phần lớn HTML thực tế không đáp ứng. Thẻ <br>, <img> và <li> không đóng, thuộc tính không có dấu ngoặc kép và dấu & đứng trần đều hợp lệ trong HTML nhưng không hợp lệ trong XML. Trình phân tích ở đây là trình phân tích XML nghiêm ngặt, nên nó sẽ báo những chỗ đó là lỗi thay vì đoán. XHTML và SVG định dạng hoàn hảo.
Còn SVG thì sao?
Được — SVG là XML, và đây là cách hay để đọc một file SVG đã bị nén gọn. Path, gradient và style nhúng đều được giữ nguyên; chỉ có khoảng trắng giữa các phần tử thay đổi.
Có giới hạn dung lượng không?
Giới hạn là bộ nhớ khả dụng, chứ không phải mức trần do chúng tôi đặt ra. Tài liệu vài megabyte được định dạng tức thì; tài liệu rất lớn bị giới hạn bởi lượng dữ liệu có thể giữ cùng lúc, chứ không bởi bất cứ thứ gì từ phía chúng tôi.
Nên biết: Chỉ kiểm tra cú pháp. Tài liệu được kiểm tra thẻ đóng mở cân đối, lồng nhau đúng và ký tự hợp lệ, rồi được thụt lề lại — nhưng DTD hay XSD không được tải về hay áp dụng, nên một file có thể định dạng gọn gàng mà vẫn không hợp lệ theo schema của nó. Namespace được giữ nguyên đúng như đã viết.
Đặt công cụ này lên website của bạn
Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.